|
@@ -57,11 +57,11 @@ from mytool.RabbitMq_helper import async_communication as rabitmq
|
|
|
|
|
|
|
|
|
# ===============================================================================
|
|
|
-# test 12_19_10_27
|
|
|
+
|
|
|
|
|
|
class MainWindow(QMainWindow):
|
|
|
"""docstring for Mainwindow"""
|
|
|
- djks_map_ = mp.MapManager()
|
|
|
+ mapManager = mp.MapManager()
|
|
|
ui_nodes = {}
|
|
|
ui_nodes["street_nodes"] = []
|
|
|
ui_nodes["space_nodes"] = []
|
|
@@ -70,7 +70,7 @@ class MainWindow(QMainWindow):
|
|
|
super(MainWindow, self).__init__(parent)
|
|
|
self.basic()
|
|
|
self.count_frame_ = ControllWidget.CountFrame()
|
|
|
- self.LoadMap()
|
|
|
+ self.loadJsonMap("./map.json")
|
|
|
self.isLocalTest = False
|
|
|
self.isAutoDispatchOnline = True
|
|
|
|
|
@@ -132,6 +132,7 @@ class MainWindow(QMainWindow):
|
|
|
|
|
|
def recv_park_request(self, msg):
|
|
|
print("Recv_park_request------------------\n", msg)
|
|
|
+
|
|
|
park_table = message.park_table()
|
|
|
try:
|
|
|
tf.Parse(msg, park_table)
|
|
@@ -151,57 +152,135 @@ class MainWindow(QMainWindow):
|
|
|
if self.isAutoDispatchOnline:
|
|
|
self.AutoPickTask(pick_table)
|
|
|
|
|
|
- def updateMap_park(self, entrance_id, pose, type): # 0:前车轨迹,1:后车轨迹,2:添加整车轨迹
|
|
|
- self.djks_map_.Reset() # 重置地图
|
|
|
+ def ReLoadMap(self, mapName, file):
|
|
|
+ self.mapManager.Reset(mapName)
|
|
|
+ map = self.readJson(file)
|
|
|
+ flag = "C_"
|
|
|
+ if mapName == "Front":
|
|
|
+ flag = "F_"
|
|
|
+ elif mapName == "Back":
|
|
|
+ flag = "B_"
|
|
|
+ elif mapName == "Main":
|
|
|
+ flag = "C_"
|
|
|
+ else:
|
|
|
+ print(" map name is error:%s" % (mapName))
|
|
|
+ return
|
|
|
|
|
|
- trans_x, trans_y, trans_a = pose
|
|
|
- self.djks_map_.AddVertex_t(mp.SpaceNode(entrance_id, trans_x, trans_y, trans_a)) # 更新库位点
|
|
|
+ for node in map['street_nodes'].items():
|
|
|
+ [id, point] = node
|
|
|
+ street_node = mp.StreetNode(id, point[0], point[1])
|
|
|
+ if street_node.id_.find(flag) >= 0:
|
|
|
+ if street_node.id_.find("OutLink")>=0:
|
|
|
+ continue
|
|
|
+ self.mapManager.AddVertex(mapName, street_node)
|
|
|
|
|
|
- entrance_street_nodes = self.ComputeStreetNode(entrance_id, trans_x, trans_y, trans_a)
|
|
|
- print("entrance_space pose: ", self.djks_map_.map_t.graph_.points[entrance_id])
|
|
|
- if type == 0:
|
|
|
- self.djks_map_.AddVertex_t(mp.StreetNode("FInput_R1101", entrance_street_nodes[0][0],
|
|
|
- entrance_street_nodes[0][1])) # 更新库位点对应马路点
|
|
|
- self.djks_map_.AddEdge_t(entrance_id, "FInput_R1101")
|
|
|
+ for node in map['space_nodes'].items():
|
|
|
+ [id, point] = node
|
|
|
+ [x, y, yaw] = point
|
|
|
+ space_node = mp.SpaceNode(id, point[0], point[1], yaw)
|
|
|
+ self.mapManager.AddVertex(mapName, space_node)
|
|
|
|
|
|
- # 加临时边
|
|
|
- for node_id, value in self.djks_map_.VertexDict().items():
|
|
|
- if node_id.find("FInput") >= 0:
|
|
|
- self.djks_map_.AddEdge_t("FInput_R1101", node_id)
|
|
|
+ for road in map['roads'].items():
|
|
|
+ [roadName, points] = road
|
|
|
+ for pt1 in points:
|
|
|
+ for pt2 in points:
|
|
|
+ if not pt1 == pt2:
|
|
|
+ if roadName.find(flag) >= 0:
|
|
|
+ self.mapManager.AddEdge(mapName, pt1, pt2)
|
|
|
|
|
|
- print("F entrance_street pose ", self.djks_map_.map_t.graph_.points["FInput_R1101"])
|
|
|
- elif type == 1:
|
|
|
- self.djks_map_.AddVertex_t(mp.StreetNode("BInput_R1101", entrance_street_nodes[2][0],
|
|
|
- entrance_street_nodes[2][1])) # 更新库位点对应马路点
|
|
|
- self.djks_map_.AddEdge_t(entrance_id, "BInput_R1101")
|
|
|
- # 加临时边
|
|
|
- for node_id, value in self.djks_map_.VertexDict().items():
|
|
|
- if node_id.find("BInput") >= 0:
|
|
|
- self.djks_map_.AddEdge_t("BInput_R1101", node_id)
|
|
|
+ def loadJsonMap(self, file):
|
|
|
+ self.gl = MapGLWidget() # 将opengl例子嵌入GUI
|
|
|
+ map = self.readJson(file)
|
|
|
|
|
|
- else:
|
|
|
- self.djks_map_.AddVertex_t(mp.StreetNode("CInput_R1101", entrance_street_nodes[1][0],
|
|
|
- entrance_street_nodes[1][1])) # 更新库位点对应马路点
|
|
|
- self.djks_map_.AddEdge_t(entrance_id, "CInput_R1101")
|
|
|
- for node_id, value in self.djks_map_.VertexDict().items():
|
|
|
- if node_id.find("CInput") >= 0:
|
|
|
- self.djks_map_.AddEdge_t("CInput_R1101", node_id)
|
|
|
- print("C entrance_street pose ", self.djks_map_.map_t.graph_.points["CInput_R1101"])
|
|
|
+ for node in map['street_nodes'].items():
|
|
|
+ [id, point] = node
|
|
|
+ street_node = mp.StreetNode(id, point[0], point[1])
|
|
|
+ self.mapManager.AddVertex("Base", street_node)
|
|
|
+ if street_node.id_.find("F_") >= 0:
|
|
|
+ self.mapManager.AddVertex("Front", street_node)
|
|
|
+ if street_node.id_.find("B_") >= 0:
|
|
|
+ self.mapManager.AddVertex("Back", street_node)
|
|
|
+ if street_node.id_.find("C_") >= 0:
|
|
|
+ self.mapManager.AddVertex("Main", street_node)
|
|
|
+
|
|
|
+ self.ui_nodes["street_nodes"].append(id)
|
|
|
+ for node in map['space_nodes'].items():
|
|
|
+ [id, point] = node
|
|
|
+ [x, y, yaw] = point
|
|
|
+ space_node = mp.SpaceNode(id, point[0], point[1], yaw)
|
|
|
+ self.mapManager.AddVertex("Base", space_node)
|
|
|
+ self.mapManager.AddVertex("Front", space_node)
|
|
|
+ self.mapManager.AddVertex("Back", space_node)
|
|
|
+ self.mapManager.AddVertex("Main", space_node)
|
|
|
+
|
|
|
+ self.ui_nodes["space_nodes"].append(id)
|
|
|
+
|
|
|
+ for road in map['roads'].items():
|
|
|
+ [roadName, points] = road
|
|
|
+ for pt1 in points:
|
|
|
+ for pt2 in points:
|
|
|
+ if not pt1 == pt2:
|
|
|
+ self.mapManager.AddEdge("Base", pt1, pt2)
|
|
|
+ if pt1.find("OutLink")>=0 or pt2.find("OutLink")>=0:
|
|
|
+ continue
|
|
|
+ if roadName.find("F_") >= 0:
|
|
|
+ self.mapManager.AddEdge("Front", pt1, pt2)
|
|
|
+ if roadName.find("B_") >= 0:
|
|
|
+ self.mapManager.AddEdge("Back", pt1, pt2)
|
|
|
+ if roadName.find("C_") >= 0:
|
|
|
+ self.mapManager.AddEdge("Main", pt1, pt2)
|
|
|
+ self.gl.SetMaps(self.mapManager.maps)
|
|
|
+
|
|
|
+ def updateMap_park(self, entrance_id, pose, mapName): # 0:前车轨迹,1:后车轨迹,2:添加整车轨迹
|
|
|
+ self.ReLoadMap(mapName, "./map.json")
|
|
|
+ trans_x, trans_y, trans_a = pose
|
|
|
+
|
|
|
+ # 加车位点
|
|
|
+ self.mapManager.maps[mapName].AddVertex(mp.SpaceNode("S1101", trans_x, trans_y,trans_a))
|
|
|
+
|
|
|
+ entrance_street_nodes = self.ComputeStreetNode(entrance_id, trans_x, trans_y, trans_a)
|
|
|
+ print("entrance_space pose: ", self.mapManager.maps[mapName].graph_.points[entrance_id])
|
|
|
+
|
|
|
+ street_name = "F_InputLink"
|
|
|
+ if mapName == "Front":
|
|
|
+ street_name = "F_InputLink"
|
|
|
+ self.mapManager.maps[mapName].AddVertex(mp.StreetNode(street_name, entrance_street_nodes[0][0],
|
|
|
+ entrance_street_nodes[0][1])) # 更新库位点对应马路点
|
|
|
+ if mapName == "Main":
|
|
|
+ street_name = "C_InputLink"
|
|
|
+ self.mapManager.maps[mapName].AddVertex(mp.StreetNode(street_name, entrance_street_nodes[1][0],
|
|
|
+ entrance_street_nodes[1][1])) # 更新库位点对应马路点
|
|
|
+ if mapName == "Back":
|
|
|
+ street_name = "B_InputLink"
|
|
|
+ self.mapManager.maps[mapName].AddVertex(mp.StreetNode(street_name, entrance_street_nodes[2][0],
|
|
|
+ entrance_street_nodes[2][1])) # 更新库位点对应马路点
|
|
|
+
|
|
|
+ # 加临时边
|
|
|
+ for node_id, value in self.mapManager.VertexDict(mapName).items():
|
|
|
+ if node_id.find("Input") >= 0:
|
|
|
+ self.mapManager.maps[mapName].AddEdge(street_name, node_id)
|
|
|
+
|
|
|
+ self.mapManager.AddVertex(mapName, mp.SpaceNode(entrance_id, trans_x, trans_y, trans_a)) # 更新库位点
|
|
|
+ self.mapManager.maps[mapName].AddEdge(entrance_id, street_name)
|
|
|
+
|
|
|
+ print(mapName + " Map entrance_street pose ", self.mapManager.maps[mapName].graph_.points[street_name])
|
|
|
+ self.gl.SetMap(mapName, self.mapManager.maps[mapName])
|
|
|
|
|
|
def GenerateSpecifiedMap(self, map_type): # 0:前车地图,1:后车地图,2:整车地图
|
|
|
+ pass
|
|
|
'''map = self.load_map("./map.json")
|
|
|
{
|
|
|
for node in map['street_nodes'].items():
|
|
|
[id, point] = node
|
|
|
street_node = mp.StreetNode(id, point[0], point[1])
|
|
|
- self.djks_map_.AddVertex(street_node)
|
|
|
+ self.mapManager.AddVertex(street_node)
|
|
|
self.gl.AddNode([id, "street_node", point])
|
|
|
self.ui_nodes["street_nodes"].append(id)
|
|
|
for node in map['space_nodes'].items():
|
|
|
[id, point] = node
|
|
|
[x, y, yaw] = point
|
|
|
space_node = mp.SpaceNode(id, point[0], point[1], yaw)
|
|
|
- self.djks_map_.AddVertex(space_node)
|
|
|
+ self.mapManager.AddVertex(space_node)
|
|
|
glNode = [id, "space_node", [x, y]]
|
|
|
self.gl.AddNode(glNode)
|
|
|
self.ui_nodes["space_nodes"].append(id)
|
|
@@ -213,7 +292,7 @@ class MainWindow(QMainWindow):
|
|
|
for pt1 in points:
|
|
|
for pt2 in points:
|
|
|
if not pt1 == pt2:
|
|
|
- self.djks_map_.AddEdge(pt1, pt2)
|
|
|
+ self.mapManager.AddEdge(pt1, pt2)
|
|
|
}
|
|
|
|
|
|
|
|
@@ -246,7 +325,7 @@ class MainWindow(QMainWindow):
|
|
|
print("AutoParkTask:---------------------\n")
|
|
|
|
|
|
[controlMain, control1, control2] = self.GetMainFrontBackAGV()
|
|
|
-
|
|
|
+ mainMap, frontMap, backMap = ["Main", "Front", "Back"]
|
|
|
entrance_id = "S" + str(park_table.terminal_id) # "S1101"
|
|
|
entrance_x, entrance_y, entrance_theta = [park_table.entrance_measure_info.measure_info_to_plc_forward.cx,
|
|
|
park_table.entrance_measure_info.measure_info_to_plc_forward.cy,
|
|
@@ -275,28 +354,30 @@ class MainWindow(QMainWindow):
|
|
|
trans_x += wheel_base / 2 * math.cos(trans_a)
|
|
|
trans_y += wheel_base / 2 * math.sin(trans_a)
|
|
|
|
|
|
- # # 双单车入库-----------------------------------------------------
|
|
|
threadPool = ThreadPoolExecutor(2)
|
|
|
threadPool.submit(control1.robot_.SwitchMoveMode, 0, wheel_base)
|
|
|
threadPool.submit(control2.robot_.SwitchMoveMode, 0, wheel_base)
|
|
|
threadPool.shutdown(wait=True)
|
|
|
|
|
|
- self.updateMap_park(entrance_id, [trans_x, trans_y, trans_a], 0)
|
|
|
-
|
|
|
+ # # 双单车入库-----------------------------------------------------
|
|
|
+ self.ReLoadMap(frontMap, "./map.json")
|
|
|
+ self.updateMap_park(entrance_id, [trans_x, trans_y, trans_a], frontMap)
|
|
|
cur_pose1 = control1.robot_.timedRobotStatu_.statu
|
|
|
- [label, pt] = mp.MapManager().findNeastNode([cur_pose1.x, cur_pose1.y])
|
|
|
- control1.robot_.GeneratePath(label, entrance_id)
|
|
|
+ [label, pt] = self.mapManager.findNeastNode(frontMap, [cur_pose1.x, cur_pose1.y])
|
|
|
+ control1.robot_.GeneratePath(label, entrance_id, frontMap)
|
|
|
print("Main: begin:%s target:%s wheelBase:%f" % (label, entrance_id, wheel_base))
|
|
|
|
|
|
# 后车 ------------------------------------------------------
|
|
|
- self.updateMap_park(entrance_id, [trans_x, trans_y, trans_a], 1)
|
|
|
-
|
|
|
+ self.ReLoadMap(backMap, "./map.json")
|
|
|
+ self.updateMap_park(entrance_id, [trans_x, trans_y, trans_a], backMap)
|
|
|
cur_pose2 = control2.robot_.timedRobotStatu_.statu
|
|
|
- [label, pt] = mp.MapManager().findNeastNode([cur_pose2.x, cur_pose2.y])
|
|
|
- control2.robot_.GeneratePath(label, entrance_id)
|
|
|
- print("Child: begin:%s target:%s wheelBase:%f" % (label, entrance_id, wheel_base))
|
|
|
+ [label, pt] = self.mapManager.findNeastNode(backMap, [cur_pose2.x, cur_pose2.y])
|
|
|
+ control2.robot_.GeneratePath(label, entrance_id, backMap)
|
|
|
+
|
|
|
+ # print("Child: begin:%s target:%s wheelBase:%f" % (label, entrance_id, wheel_base))
|
|
|
|
|
|
autoDirect = True
|
|
|
+
|
|
|
threadPool = ThreadPoolExecutor(2)
|
|
|
threadPool.submit(control1.robot_.Navigatting,
|
|
|
label, entrance_id, autoDirect, wheel_base)
|
|
@@ -314,9 +395,16 @@ class MainWindow(QMainWindow):
|
|
|
threadPool.shutdown(wait=True)
|
|
|
|
|
|
# 整车入库---------------------------------
|
|
|
- self.updateMap_park(entrance_id, [trans_x, trans_y, trans_a], 2)
|
|
|
- controlMain.robot_.GeneratePath(entrance_id, target_id)
|
|
|
+ map_name="Front"
|
|
|
+ if controlMain.robot_.timedRobotStatu_.statu.theta<0:
|
|
|
+ map_name="Back"
|
|
|
+
|
|
|
+ self.ReLoadMap(map_name, "./map.json")
|
|
|
+ self.updateMap_park(entrance_id, [trans_x, trans_y, trans_a], map_name)
|
|
|
+ controlMain.robot_.GeneratePath(entrance_id, target_id, map_name)
|
|
|
print("begin:%s target:%s wheelBase:%f" % (entrance_id, target_id, wheel_base))
|
|
|
+
|
|
|
+
|
|
|
threadPool = ThreadPoolExecutor(1)
|
|
|
threadPool.submit(controlMain.robot_.Navigatting,
|
|
|
entrance_id, target_id, autoDirect, wheel_base)
|
|
@@ -331,16 +419,18 @@ class MainWindow(QMainWindow):
|
|
|
threadPool.shutdown(wait=True)
|
|
|
|
|
|
# 双单车出库
|
|
|
+ self.ReLoadMap(frontMap, "./map.json")
|
|
|
controlMain, control1, control2 = self.GetMainFrontBackAGV()
|
|
|
- self.djks_map_.Reset() # 重置地图
|
|
|
- control1.robot_.GeneratePath(target_id, "FInput_R147")
|
|
|
- control2.robot_.GeneratePath(target_id, "BInput_R147")
|
|
|
+ control1.robot_.GeneratePath(target_id, "F_Input_R147", frontMap)
|
|
|
+
|
|
|
+ self.ReLoadMap(backMap, "./map.json")
|
|
|
+ control2.robot_.GeneratePath(target_id, "B_Input_R147", backMap)
|
|
|
|
|
|
threadPool = ThreadPoolExecutor(2)
|
|
|
threadPool.submit(control1.robot_.Navigatting,
|
|
|
- target_id, "FInput_R147", autoDirect, wheel_base)
|
|
|
+ target_id, "F_Input_R147", autoDirect, wheel_base)
|
|
|
threadPool.submit(control2.robot_.Navigatting,
|
|
|
- target_id, "BInput_R147", autoDirect, wheel_base)
|
|
|
+ target_id, "B_Input_R147", autoDirect, wheel_base)
|
|
|
|
|
|
threadPool.shutdown(wait=True)
|
|
|
|
|
@@ -350,62 +440,74 @@ class MainWindow(QMainWindow):
|
|
|
print("Publish_park_response------------------\n", park_table)
|
|
|
return True
|
|
|
|
|
|
- def updateMap_pick(self, export_id, type): # 0:前车轨迹,1:后车轨迹,2:添加整车轨迹
|
|
|
+ def updateMap_pick(self, export_id, mapName): # 0:前车轨迹,1:后车轨迹,2:添加整车轨迹
|
|
|
+ self.ReLoadMap(mapName, "./map.json")
|
|
|
|
|
|
- self.djks_map_.Reset() # 重置地图
|
|
|
- # export_id = "S1103"
|
|
|
+ # export_id = "S1101"
|
|
|
# 添加出口车位点
|
|
|
- self.djks_map_.AddVertex_t(mp.SpaceNode(export_id, self.djks_map_.map_t.graph_.points["S1100"][0],
|
|
|
- self.djks_map_.map_t.graph_.points["S1100"][1], 90)) # 更新库位点对应马路点
|
|
|
- if type == 0:
|
|
|
- self.djks_map_.AddEdge_t(export_id, "FInput_R1100")
|
|
|
- elif type == 1:
|
|
|
- self.djks_map_.AddEdge_t(export_id, "BInput_R1100")
|
|
|
- elif type == 2:
|
|
|
- export_street_node_x = self.djks_map_.map_t.graph_.points["CInput_R1100"][0]
|
|
|
- export_street_node_y = self.djks_map_.map_t.graph_.points["CInput_R1100"][1]
|
|
|
- self.djks_map_.AddVertex_t(mp.StreetNode("CInput_R1103", export_street_node_x,
|
|
|
- export_street_node_y)) # 更新库位点对应马路点
|
|
|
-
|
|
|
- self.djks_map_.AddEdge_t(export_id, "CInput_R1103")
|
|
|
-
|
|
|
- for node_id, value in self.djks_map_.VertexDict().items():
|
|
|
- if node_id.find("CInput") >= 0:
|
|
|
- self.djks_map_.AddEdge_t("CInput_R1103", node_id)
|
|
|
- print("C entrance_street pose ", self.djks_map_.map_t.graph_.points["CInput_R1103"])
|
|
|
+ export_x = self.mapManager.maps["Base"].graph_.points["S1100"][0]
|
|
|
+ export_y = self.mapManager.maps["Base"].graph_.points["S1100"][1]
|
|
|
+ self.mapManager.AddVertex(mapName, mp.SpaceNode(export_id, export_x, export_y, 90))
|
|
|
+ # 更新库位点对应马路点
|
|
|
+ flag = "F_"
|
|
|
+ if mapName == "Front":
|
|
|
+ export_y = self.mapManager.maps["Base"].graph_.points["F_OutLink"][1]
|
|
|
+ node = mp.StreetNode("F_exportLink", export_x, export_y)
|
|
|
+ elif mapName == "Back":
|
|
|
+ flag = "B_"
|
|
|
+ export_y = self.mapManager.maps["Base"].graph_.points["B_OutLink"][1]
|
|
|
+ node = mp.StreetNode("B_exportLink", export_x, export_y)
|
|
|
+ elif mapName == "Main":
|
|
|
+ flag = "C_"
|
|
|
+ export_y = self.mapManager.maps["Base"].graph_.points["C_OutLink"][1]
|
|
|
+ node = mp.StreetNode("C_exportLink", export_x, export_y)
|
|
|
+
|
|
|
+ self.mapManager.AddVertex(mapName, node) # 更新库位点对应马路点
|
|
|
+ self.mapManager.AddEdge(mapName, export_id, node.id_)
|
|
|
+
|
|
|
+ for streetID, value in self.mapManager.VertexDict(mapName).items():
|
|
|
+ if streetID.find(flag) >= 0:
|
|
|
+ self.mapManager.AddEdge(mapName, node.id_, streetID)
|
|
|
+ print("Add edge :%s-%s ", node.id_, streetID)
|
|
|
|
|
|
def AutoPickTask(self, pick_table: message.pick_table = None):
|
|
|
print("AutoPickTask:---------------------\n")
|
|
|
|
|
|
controlMain, control1, control2 = self.GetMainFrontBackAGV()
|
|
|
+ mainMap, frontMap, backMap = ["Main", "Front", "Back"]
|
|
|
|
|
|
- self.djks_map_.Reset() # 重置地图
|
|
|
space_id = "S" + str(pick_table.actually_space_info.table_id) # "S147"
|
|
|
|
|
|
- export_id = "S" + str(pick_table.terminal_id) # "S1103"
|
|
|
+ export_id = "S" + str(pick_table.terminal_id) # "S1101"
|
|
|
print(space_id, export_id)
|
|
|
# 轴距
|
|
|
wheel_base = pick_table.actually_measure_info.measure_info_to_plc_forward.wheelbase
|
|
|
control1.WheelBaseEdit.setText(str(wheel_base))
|
|
|
control2.WheelBaseEdit.setText(str(wheel_base))
|
|
|
|
|
|
+
|
|
|
# 双单车入库
|
|
|
threadPool = ThreadPoolExecutor(2)
|
|
|
threadPool.submit(control1.robot_.SwitchMoveMode, 0, wheel_base)
|
|
|
threadPool.submit(control2.robot_.SwitchMoveMode, 0, wheel_base)
|
|
|
threadPool.shutdown(wait=True)
|
|
|
|
|
|
- cur_pose1 = control1.robot_.timedRobotStatu_.statu
|
|
|
|
|
|
- [label, pt] = mp.MapManager().findNeastNode([cur_pose1.x, cur_pose1.y])
|
|
|
- control1.robot_.GeneratePath(label, space_id)
|
|
|
+ self.ReLoadMap(frontMap, "./map.json")
|
|
|
+ self.updateMap_pick(export_id, frontMap)
|
|
|
+ cur_pose1 = control1.robot_.timedRobotStatu_.statu
|
|
|
+ [label, pt] = self.mapManager.findNeastNode(frontMap, [cur_pose1.x, cur_pose1.y])
|
|
|
+ control1.robot_.GeneratePath(label, space_id, frontMap)
|
|
|
print("Main: begin:%s target:%s wheelBase:%f" % (label, space_id, wheel_base))
|
|
|
|
|
|
+ self.ReLoadMap(backMap, "./map.json")
|
|
|
+ self.updateMap_pick(export_id, backMap)
|
|
|
cur_pose2 = control2.robot_.timedRobotStatu_.statu
|
|
|
- [label, pt] = mp.MapManager().findNeastNode([cur_pose2.x, cur_pose2.y])
|
|
|
- control2.robot_.GeneratePath(label, space_id)
|
|
|
+ [label, pt] = self.mapManager.findNeastNode(backMap, [cur_pose2.x, cur_pose2.y])
|
|
|
+ control2.robot_.GeneratePath(label, space_id, backMap)
|
|
|
print("Child: begin:%s target:%s wheelBase:%f" % (label, space_id, wheel_base))
|
|
|
|
|
|
+
|
|
|
autoDirect = True
|
|
|
threadPool = ThreadPoolExecutor(2)
|
|
|
threadPool.submit(control1.robot_.Navigatting,
|
|
@@ -424,14 +526,23 @@ class MainWindow(QMainWindow):
|
|
|
threadPool.shutdown(wait=True)
|
|
|
|
|
|
# 整车到出口---------------------------------
|
|
|
- self.updateMap_pick(export_id, 2)
|
|
|
- controlMain.robot_.GeneratePath(space_id, export_id)
|
|
|
+ map_name = "Front"
|
|
|
+ if controlMain.robot_.timedRobotStatu_.statu.theta < 0:
|
|
|
+ map_name = "Back"
|
|
|
+ self.ReLoadMap(map_name, "./map.json")
|
|
|
+ self.updateMap_pick(export_id, map_name)
|
|
|
+
|
|
|
+ controlMain.robot_.GeneratePath(space_id, export_id, map_name)
|
|
|
print("Total: begin:%s target:%s wheelBase:%f" % (space_id, export_id, wheel_base))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
threadPool = ThreadPoolExecutor(1)
|
|
|
threadPool.submit(controlMain.robot_.Navigatting,
|
|
|
space_id, export_id, True, wheel_base)
|
|
|
threadPool.shutdown(wait=True)
|
|
|
|
|
|
+
|
|
|
# 整车松夹池------------------------------------
|
|
|
|
|
|
threadPool = ThreadPoolExecutor(1)
|
|
@@ -443,16 +554,20 @@ class MainWindow(QMainWindow):
|
|
|
|
|
|
# 双单车出库
|
|
|
controlMain, control1, control2 = self.GetMainFrontBackAGV()
|
|
|
- self.updateMap_pick(export_id, 0)
|
|
|
- control1.robot_.GeneratePath(export_id, "FInput_R1100")
|
|
|
- self.updateMap_pick(export_id, 1)
|
|
|
- control2.robot_.GeneratePath(export_id, "BInput_R1100")
|
|
|
+ self.ReLoadMap(frontMap, "./map.json")
|
|
|
+ self.updateMap_pick(export_id, frontMap)
|
|
|
+ control1.robot_.GeneratePath(export_id, "F_exportLink", frontMap)
|
|
|
+
|
|
|
+ self.ReLoadMap(backMap, "./map.json")
|
|
|
+ self.updateMap_pick(export_id, backMap)
|
|
|
+ control2.robot_.GeneratePath(export_id, "B_exportLink", backMap)
|
|
|
+
|
|
|
|
|
|
threadPool = ThreadPoolExecutor(2)
|
|
|
threadPool.submit(control1.robot_.Navigatting,
|
|
|
- export_id, "FInput_R1100", True, wheel_base)
|
|
|
+ export_id, "F_exportLink", True, wheel_base)
|
|
|
threadPool.submit(control2.robot_.Navigatting,
|
|
|
- export_id, "BInput_R1100", True, wheel_base)
|
|
|
+ export_id, "B_exportLink", True, wheel_base)
|
|
|
threadPool.shutdown(wait=True)
|
|
|
|
|
|
# 反馈
|
|
@@ -468,48 +583,20 @@ class MainWindow(QMainWindow):
|
|
|
"""
|
|
|
n_x, n_y = 0, 0
|
|
|
if s_id == "S1101":
|
|
|
- n_y = self.djks_map_.map_t.graph_.points["CInput_R1100"][1]
|
|
|
+ n_y = self.mapManager.maps["Base"].graph_.points["C_OutLink"][1]
|
|
|
k = math.tan(s_theta)
|
|
|
n_x = (n_y - s_y) / k + s_x # 弧度
|
|
|
|
|
|
- n_yF = self.djks_map_.map_t.graph_.points["FInput_R1100"][1]
|
|
|
+ n_yF = self.mapManager.maps["Base"].graph_.points["F_OutLink"][1]
|
|
|
n_xF = (n_yF - s_y) / k + s_x # 弧度
|
|
|
|
|
|
- n_yB = self.djks_map_.map_t.graph_.points["BInput_R1100"][1]
|
|
|
+ n_yB = self.mapManager.maps["Base"].graph_.points["B_OutLink"][1]
|
|
|
n_xB = (n_yB - s_y) / k + s_x # 弧度
|
|
|
|
|
|
# print(n_x, n_y)
|
|
|
return [[n_xF, n_yF], [n_x, n_y], [n_xB, n_yB]]
|
|
|
|
|
|
- def LoadMap(self):
|
|
|
- self.gl = MapGLWidget() # 将opengl例子嵌入GUI
|
|
|
- map = self.load_map("./map.json")
|
|
|
-
|
|
|
- for node in map['street_nodes'].items():
|
|
|
- [id, point] = node
|
|
|
- street_node = mp.StreetNode(id, point[0], point[1])
|
|
|
- self.djks_map_.AddVertex(street_node)
|
|
|
- self.gl.AddNode([id, "street_node", point])
|
|
|
- self.ui_nodes["street_nodes"].append(id)
|
|
|
- for node in map['space_nodes'].items():
|
|
|
- [id, point] = node
|
|
|
- [x, y, yaw] = point
|
|
|
- space_node = mp.SpaceNode(id, point[0], point[1], yaw)
|
|
|
- self.djks_map_.AddVertex(space_node)
|
|
|
- glNode = [id, "space_node", [x, y]]
|
|
|
- self.gl.AddNode(glNode)
|
|
|
- self.ui_nodes["space_nodes"].append(id)
|
|
|
-
|
|
|
- for road in map['roads'].items():
|
|
|
- self.gl.AddRoad(road)
|
|
|
-
|
|
|
- [_, points] = road
|
|
|
- for pt1 in points:
|
|
|
- for pt2 in points:
|
|
|
- if not pt1 == pt2:
|
|
|
- self.djks_map_.AddEdge(pt1, pt2)
|
|
|
-
|
|
|
- def load_map(self, file):
|
|
|
+ def readJson(self, file):
|
|
|
with open(file, 'r', encoding='utf-8') as fp:
|
|
|
map = json.load(fp)
|
|
|
return map
|