├── multirobot.gif ├── map ├── guangzhou6.pgm └── guangzhou6.yaml ├── model └── oal_dae.zip ├── pythons ├── Getpos.pyc ├── GoPoint.pyc ├── CtrlLift.pyc ├── InitPose.pyc ├── Getpos.py ├── CtrlLift.py ├── InitPose.py ├── robot1_run.py ├── robot3_run.py ├── robot2_run.py ├── GoPoint.py ├── goto-point-1.py └── goto-point-2.py ├── config ├── global_costmap_params.yaml ├── local_costmap_params.yaml ├── base_local_planner_params.yaml └── costmap_common_params.yaml ├── README.md ├── launch ├── view_navigation.launch ├── gazebo_multirobot.launch ├── includes │ ├── amcl.launch.xml │ └── kobuki.launch.xml ├── multirobot.launch ├── one_robot.launch └── move_base_gazebo.launch ├── param └── mux.yaml ├── package.xml ├── CMakeLists.txt └── rviz └── navigation.rviz /multirobot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cw-zero/MultiRobot_Simulation/HEAD/multirobot.gif -------------------------------------------------------------------------------- /map/guangzhou6.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cw-zero/MultiRobot_Simulation/HEAD/map/guangzhou6.pgm -------------------------------------------------------------------------------- /model/oal_dae.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cw-zero/MultiRobot_Simulation/HEAD/model/oal_dae.zip -------------------------------------------------------------------------------- /pythons/Getpos.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cw-zero/MultiRobot_Simulation/HEAD/pythons/Getpos.pyc -------------------------------------------------------------------------------- /pythons/GoPoint.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cw-zero/MultiRobot_Simulation/HEAD/pythons/GoPoint.pyc -------------------------------------------------------------------------------- /pythons/CtrlLift.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cw-zero/MultiRobot_Simulation/HEAD/pythons/CtrlLift.pyc -------------------------------------------------------------------------------- /pythons/InitPose.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cw-zero/MultiRobot_Simulation/HEAD/pythons/InitPose.pyc -------------------------------------------------------------------------------- /config/global_costmap_params.yaml: -------------------------------------------------------------------------------- 1 | global_costmap: 2 | global_frame: map 3 | robot_base_frame: base_link 4 | update_frequency: 5.0 5 | static_map: true 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MultiRobot_Simulation 2 | Multiple robots interactive simulation using ROS system 3 | 4 | ![image](https://github.com/Cw-zero/MultiRobot_Simulation/blob/master/multirobot.gif) 5 | -------------------------------------------------------------------------------- /map/guangzhou6.yaml: -------------------------------------------------------------------------------- 1 | image: /home/robot/map/guangzhou6.pgm 2 | resolution: 0.050000 3 | origin: [-32.200000, -17.600000, 0.000000] 4 | negate: 0 5 | occupied_thresh: 0.65 6 | free_thresh: 0.196 7 | 8 | -------------------------------------------------------------------------------- /launch/view_navigation.launch: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /config/local_costmap_params.yaml: -------------------------------------------------------------------------------- 1 | local_costmap: 2 | global_frame: odom 3 | robot_base_frame: base_link 4 | update_frequency: 5.0 5 | publish_frequency: 2.0 6 | static_map: false 7 | rolling_window: true 8 | width: 6.0 9 | height: 6.0 10 | resolution: 0.05 11 | -------------------------------------------------------------------------------- /config/base_local_planner_params.yaml: -------------------------------------------------------------------------------- 1 | TrajectoryPlannerROS: 2 | max_vel_x: 0.3 3 | min_vel_x: 0.1 4 | max_rotational_vel: 1.0 5 | min_in_place_rotational_vel: 0.3 6 | 7 | meter_scoring: true 8 | pdist_scale: 0.9 9 | gdist_scale: 0.6 10 | 11 | acc_lim_th: 1 12 | acc_lim_x: 1 13 | acc_lim_y: 1 14 | latch_xy_goal_tolerance: true 15 | xy_goal_tolerance: 0.30 16 | 17 | holonomic_robot: false 18 | -------------------------------------------------------------------------------- /launch/gazebo_multirobot.launch: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /config/costmap_common_params.yaml: -------------------------------------------------------------------------------- 1 | obstacle_range: 4.5 2 | raytrace_range: 5.0 3 | inflation_radius: 0.25 4 | footprint: [[0.41,0.25],[0.41,-0.25],[-0.24, -0.25],[-0.24, 0.25]] 5 | map_type: costmap 6 | #transform_tolerance: 0.2 7 | 8 | 9 | observation_sources: base_scan object_point_cloud 10 | 11 | base_scan: {sensor_frame: base_laser_link, 12 | data_type: LaserScan, 13 | topic: scan, 14 | # expected_update_rate: 0.2, 15 | # observation_persistence: 0.0, 16 | marking: true, 17 | clearing: true 18 | # min_obstacle_height: -0.10, 19 | # max_obstacle_height: 2.0 20 | } 21 | 22 | 23 | object_point_cloud: {sensor_frame: map, 24 | 25 | observation_persistence: 1.0, 26 | data_type: PointCloud, topic: /ObjPointCloud, marking: true, clearing: false 27 | } 28 | 29 | -------------------------------------------------------------------------------- /pythons/Getpos.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import rospy 3 | 4 | from tf_conversions import transformations 5 | from math import pi 6 | import tf 7 | 8 | class Robot: 9 | def __init__(self,robotID): 10 | self.map = robotID + "_tf/map" 11 | self.base_link = robotID + "_tf/base_link" 12 | self.tf_listener = tf.TransformListener() 13 | try: 14 | self.tf_listener.waitForTransform(self.map, self.base_link, rospy.Time(), rospy.Duration(1.0)) 15 | except (tf.Exception, tf.ConnectivityException, tf.LookupException): 16 | return 17 | 18 | def get_pos(self): 19 | try: 20 | (trans, rot) = self.tf_listener.lookupTransform(self.map, self.base_link, rospy.Time(0)) 21 | except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException): 22 | rospy.loginfo("tf Error") 23 | return (None, None) 24 | 25 | return (trans, rot) -------------------------------------------------------------------------------- /pythons/CtrlLift.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import rospy 3 | from std_msgs.msg import Float32 4 | 5 | class CtrlLift(): 6 | def __init__(self,floor): 7 | if(floor == 0): 8 | topicname = '/switch0/vel_cmd' 9 | elif(floor == 1): 10 | topicname = '/switch1/vel_cmd' 11 | else: 12 | print("Error Floor") 13 | 14 | self.pub = rospy.Publisher(topicname, Float32, queue_size=2) 15 | self.CtrlLift() 16 | 17 | def CtrlLift(self): 18 | # r = rospy.Rate(5) 19 | # r.sleep() 20 | vectory = -2.0 21 | self.pub.publish(vectory) 22 | rospy.sleep(0.3) 23 | self.pub.publish(vectory) 24 | rospy.sleep(0.3) 25 | self.pub.publish(vectory) 26 | rospy.sleep(0.3) 27 | self.pub.publish(-vectory) 28 | rospy.sleep(0.3) 29 | self.pub.publish(-vectory) 30 | rospy.sleep(0.3) 31 | self.pub.publish(0) 32 | rospy.sleep(0.3) 33 | self.pub.publish(0) 34 | rospy.sleep(0.3) 35 | 36 | 37 | 38 | 39 | # if __name__ == '__main__': 40 | # rospy.init_node('ctrlelevator', anonymous=False) 41 | # CtrlLift(0) -------------------------------------------------------------------------------- /param/mux.yaml: -------------------------------------------------------------------------------- 1 | # Created on: Oct 29, 2012 2 | # Author: jorge 3 | # Configuration for subscribers to multiple cmd_vel sources. 4 | # 5 | # Individual subscriber configuration: 6 | # name: Source name 7 | # topic: The topic that provides cmd_vel messages 8 | # timeout: Time in seconds without incoming messages to consider this topic inactive 9 | # priority: Priority: an UNIQUE unsigned integer from 0 (lowest) to MAX_INT 10 | # short_desc: Short description (optional) 11 | 12 | subscribers: 13 | - name: "Safe reactive controller" 14 | topic: "input/safety_controller" 15 | timeout: 0.2 16 | priority: 10 17 | - name: "Teleoperation" 18 | topic: "input/teleop" 19 | timeout: 1.0 20 | priority: 7 21 | - name: "Switch" 22 | topic: "input/switch" 23 | timeout: 1.0 24 | priority: 6 25 | - name: "Navigation" 26 | topic: "input/navi" 27 | timeout: 1.0 28 | priority: 5 29 | - name: "MoveBase" 30 | topic: "input/navi" 31 | timeout: 1.0 32 | priority: 5 33 | 34 | -------------------------------------------------------------------------------- /launch/includes/amcl.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /launch/includes/kobuki.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 15 | 16 | 17 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /pythons/InitPose.py: -------------------------------------------------------------------------------- 1 | import rospy 2 | import math 3 | from geometry_msgs.msg import PoseWithCovarianceStamped 4 | 5 | class SetInitPose(object): 6 | def __init__(self, pos, quat,robotID): 7 | # rospy.init_node('test_initalpose', anonymous=False) 8 | rospy.loginfo("start test inital pose...") 9 | self.initialpose_topic = robotID + "/initialpose" 10 | self.frame_id = robotID + "_tf/map" 11 | self.setpose_pub = rospy.Publisher(self.initialpose_topic,PoseWithCovarianceStamped,latch=True, queue_size=1) 12 | self.set_pose = pos 13 | self.set_quat = quat 14 | self.test_set_pose_flag = True 15 | self.test_set_pose_cnt = 3 16 | while self.test_set_pose_flag == True: 17 | self.set_inital_pose() 18 | self.test_set_pose_cnt -= 1 19 | if self.test_set_pose_cnt == 0: 20 | self.test_set_pose_flag = False 21 | rospy.sleep(1) 22 | 23 | def set_inital_pose(self): 24 | rospy.loginfo("start set pose...") 25 | p = PoseWithCovarianceStamped() 26 | p.header.stamp = rospy.Time.now() 27 | p.header.frame_id = self.frame_id 28 | 29 | p.pose.pose.position.x = self.set_pose[0] 30 | p.pose.pose.position.y = self.set_pose[1] 31 | p.pose.pose.position.z = self.set_pose[2] 32 | 33 | p.pose.pose.orientation.x = self.set_quat[0] 34 | p.pose.pose.orientation.y = self.set_quat[1] 35 | p.pose.pose.orientation.z = self.set_quat[2] 36 | p.pose.pose.orientation.w = self.set_quat[3] 37 | 38 | p.pose.covariance[6 * 0 + 0] = 0.5 * 0.5 39 | p.pose.covariance[6 * 1 + 1] = 0.5 * 0.5 40 | p.pose.covariance[6 * 3 + 3] = math.pi / 12.0 * math.pi / 12.0 41 | 42 | self.setpose_pub.publish(p) -------------------------------------------------------------------------------- /launch/multirobot.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | multirobot 4 | 0.0.0 5 | The multirobot package 6 | 7 | 8 | 9 | 10 | Emre Can Bulut 11 | 12 | 13 | 14 | 15 | 16 | MIT 17 | 18 | 19 | 20 | 21 | 22 | https://github.com/emrecanbulut/multirobot 23 | 24 | 25 | 26 | 27 | 28 | Emre Can Bulut 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | catkin 43 | roscpp 44 | tf 45 | actionlib 46 | rospy 47 | std_msgs 48 | move_base_msgs 49 | geometry_msgs 50 | roscpp 51 | rospy 52 | std_msgs 53 | tf 54 | actionlib 55 | move_base_msgs 56 | geometry_msgs 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /pythons/robot1_run.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import rospy 4 | from InitPose import SetInitPose 5 | from GoPoint import GoToPose 6 | from Getpos import Robot 7 | from CtrlLift import CtrlLift 8 | 9 | A = {"name":"1st_elevator_front","pose":(-7.809, -9.057, 0.0),"orientation":(0.0, 0.0, 0.999, -0.05)} 10 | B = {"name":"1st_elevator_in","pose":(-9.39, -9.05, 0.0),"orientation":(0.0, 0.0, 0.001, 0.999)} 11 | C = {"name":"2nd_elevator_in","pose":(-9.04, 25.485, 0.0),"orientation":(0.0, 0.0, -0.139, 0.990)} 12 | D = {"name":"2nd_elevator_front","pose":(-7.809, 25.3, 0.0),"orientation":(0.0, 0.0, 0.999, -0.05)} 13 | Locations = [A,B,C,D] 14 | 15 | Robot1_Init = {"pose":(-11.007, 6.646, 0.0),"orientation":(0.0, 0.0, 1, -0.023)} 16 | Robot2_Init = {"pose":(-1.43, 2.13, 0.0),"orientation":(0.0, 0.0, -0.694, -0.720)} 17 | Robot3_Init = {"pose":(-5.32, 31.4, 0.0),"orientation":(0.0, 0.0, -0.694, -0.720)} 18 | 19 | def Init_pose(): 20 | SetInitPose(Robot1_Init["pose"],Robot1_Init["orientation"],"robot1") 21 | SetInitPose(Robot2_Init["pose"],Robot2_Init["orientation"],"robot2") 22 | SetInitPose(Robot3_Init["pose"],Robot3_Init["orientation"],"robot3") 23 | 24 | def UpStairs(classNav,classPose): 25 | Nav_state = classNav.Point_Navigation(Locations[0]) 26 | if Nav_state: 27 | CtrlLift(0) 28 | rospy.sleep(2) #wait elevator open 29 | Nav_state = classNav.Point_Navigation(Locations[1]) 30 | if Nav_state: 31 | tmp_trans = None 32 | while tmp_trans == None: 33 | tmp_trans,tmp_rot = classPose.get_pos() 34 | tmp_trans[1] = tmp_trans[1]+34.65 35 | SetInitPose(tmp_trans,tmp_rot,"robot1") 36 | rospy.sleep(2) 37 | CtrlLift(1) 38 | rospy.sleep(0.5) 39 | CtrlLift(1) 40 | rospy.sleep(2) #wait elevator open 41 | Nav_state = classNav.Point_Navigation(Locations[3]) 42 | 43 | def DownStairs(classNav,classPose): 44 | Nav_state = classNav.Point_Navigation(Locations[3]) 45 | if Nav_state: 46 | CtrlLift(1) 47 | rospy.sleep(2) #wait elevator open 48 | Nav_state = classNav.Point_Navigation(Locations[2]) #进电梯 D 49 | if Nav_state: 50 | tmp_trans = None 51 | while tmp_trans == None: 52 | tmp_trans,tmp_rot = classPose.get_pos() 53 | tmp_trans[1] = tmp_trans[1]-34.65 54 | SetInitPose(tmp_trans,tmp_rot,"robot1") #重定位 C 55 | CtrlLift(0) 56 | rospy.sleep(0.5) 57 | CtrlLift(0) 58 | rospy.sleep(2) 59 | Nav_state = classNav.Point_Navigation(Locations[0]) 60 | 61 | if __name__ == '__main__': 62 | A_1st = {"name":"A","pose":(-11.007, 6.646, 0.0),"orientation":(0.0, 0.0, 1, -0.023),"object":2} 63 | B_1st = {"name":"A","pose":(-6.68, 1.98, 0.0),"orientation":(0.0, 0.0, 1, -0.023),"object":2} 64 | A_2nd = {"name":"F","pose":(-4.86, 26, 0.0),"orientation":(0.0, 0.0, 0.997, -0.08),"object":0} 65 | rospy.init_node('robot1_display', anonymous=False) 66 | Init_pose() 67 | 68 | navigation = GoToPose("robot1") 69 | robotpose = Robot("robot1") 70 | try: 71 | while True: 72 | Nav_state = navigation.Point_Navigation(B_1st) 73 | rospy.sleep(3) 74 | UpStairs(navigation,robotpose) 75 | Nav_state = navigation.Point_Navigation(A_2nd) 76 | DownStairs(navigation,robotpose) 77 | Nav_state = navigation.Point_Navigation(A_1st) 78 | except KeyboardInterrupt: 79 | navigation.shutdown() 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /pythons/robot3_run.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import rospy 4 | from InitPose import SetInitPose 5 | from GoPoint import GoToPose 6 | from Getpos import Robot 7 | from CtrlLift import CtrlLift 8 | 9 | A = {"name":"1st_elevator_front","pose":(-7.809, -9.057, 0.0),"orientation":(0.0, 0.0, 0.999, -0.05)} 10 | B = {"name":"1st_elevator_in","pose":(-9.39, -9.05, 0.0),"orientation":(0.0, 0.0, 0.001, 0.999)} 11 | C = {"name":"2nd_elevator_in","pose":(-9.04, 25.485, 0.0),"orientation":(0.0, 0.0, -0.139, 0.990)} 12 | D = {"name":"2nd_elevator_front","pose":(-7.809, 25.3, 0.0),"orientation":(0.0, 0.0, 0.999, -0.05)} 13 | Locations = [A,B,C,D] 14 | 15 | Robot1_Init = {"pose":(-11.007, 6.646, 0.0),"orientation":(0.0, 0.0, 1, -0.023)} 16 | Robot2_Init = {"pose":(-1.43, 2.13, 0.0),"orientation":(0.0, 0.0, -0.694, -0.720)} 17 | Robot3_Init = {"pose":(-5.32, 31.4, 0.0),"orientation":(0.0, 0.0, -0.694, -0.720)} 18 | 19 | def Init_pose(): 20 | SetInitPose(Robot1_Init["pose"],Robot1_Init["orientation"],"robot1") 21 | SetInitPose(Robot2_Init["pose"],Robot2_Init["orientation"],"robot2") 22 | SetInitPose(Robot3_Init["pose"],Robot3_Init["orientation"],"robot3") 23 | 24 | def UpStairs(classNav,classPose): 25 | Nav_state = classNav.Point_Navigation(Locations[0]) 26 | if Nav_state: 27 | CtrlLift(0) 28 | rospy.sleep(2) #wait elevator open 29 | Nav_state = classNav.Point_Navigation(Locations[1]) 30 | if Nav_state: 31 | tmp_trans = None 32 | while tmp_trans == None: 33 | tmp_trans,tmp_rot = classPose.get_pos() 34 | tmp_trans[1] = tmp_trans[1]+34.65 35 | SetInitPose(tmp_trans,tmp_rot,"robot3") 36 | rospy.sleep(2) 37 | CtrlLift(1) 38 | rospy.sleep(0.5) 39 | CtrlLift(1) 40 | rospy.sleep(2) #wait elevator open 41 | Nav_state = classNav.Point_Navigation(Locations[3]) 42 | 43 | def DownStairs(classNav,classPose): 44 | Nav_state = classNav.Point_Navigation(Locations[3]) 45 | if Nav_state: 46 | CtrlLift(1) 47 | rospy.sleep(2) #wait elevator open 48 | Nav_state = classNav.Point_Navigation(Locations[2]) #进电梯 D 49 | if Nav_state: 50 | tmp_trans = None 51 | while tmp_trans == None: 52 | tmp_trans,tmp_rot = classPose.get_pos() 53 | tmp_trans[1] = tmp_trans[1]-34.65 54 | SetInitPose(tmp_trans,tmp_rot,"robot3") #重定位 C 55 | CtrlLift(0) 56 | rospy.sleep(0.5) 57 | CtrlLift(0) 58 | rospy.sleep(2) 59 | Nav_state = classNav.Point_Navigation(Locations[0]) 60 | 61 | if __name__ == '__main__': 62 | A_1st = {"name":"A","pose":(-11.007, 6.646, 0.0),"orientation":(0.0, 0.0, 1, -0.023),"object":2} 63 | B_1st = {"name":"A","pose":(-5.52, -6.58, 0.0),"orientation":(0.0, 0.0, 1, -0.023),"object":2} 64 | A_2nd = {"name":"F","pose":(-5.32, 31.4, 0.0),"orientation":(0.0, 0.0, -0.694, -0.720),"object":0} 65 | rospy.init_node('robot3_display', anonymous=False) 66 | # Init_pose() 67 | 68 | navigation = GoToPose("robot3") 69 | robotpose = Robot("robot3") 70 | try: 71 | while True: 72 | DownStairs(navigation,robotpose) 73 | Nav_state = navigation.Point_Navigation(B_1st) 74 | Nav_state = navigation.Point_Navigation(A_1st) 75 | rospy.sleep(5) 76 | UpStairs(navigation,robotpose) 77 | Nav_state = navigation.Point_Navigation(A_2nd) 78 | except KeyboardInterrupt: 79 | navigation.shutdown() 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /pythons/robot2_run.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import rospy 4 | from InitPose import SetInitPose 5 | from GoPoint import GoToPose 6 | from Getpos import Robot 7 | from CtrlLift import CtrlLift 8 | 9 | A = {"name":"1st_elevator_front","pose":(-7.809, -9.057, 0.0),"orientation":(0.0, 0.0, 0.999, -0.05)} 10 | B = {"name":"1st_elevator_in","pose":(-9.39, -9.05, 0.0),"orientation":(0.0, 0.0, 0.001, 0.999)} 11 | C = {"name":"2nd_elevator_in","pose":(-9.04, 25.485, 0.0),"orientation":(0.0, 0.0, -0.139, 0.990)} 12 | D = {"name":"2nd_elevator_front","pose":(-7.809, 25.3, 0.0),"orientation":(0.0, 0.0, 0.999, -0.05)} 13 | Locations = [A,B,C,D] 14 | 15 | Robot1_Init = {"pose":(-11.007, 6.646, 0.0),"orientation":(0.0, 0.0, 1, -0.023)} 16 | Robot2_Init = {"pose":(-1.43, 2.13, 0.0),"orientation":(0.0, 0.0, -0.694, -0.720)} 17 | Robot3_Init = {"pose":(-5.32, 31.4, 0.0),"orientation":(0.0, 0.0, -0.694, -0.720)} 18 | 19 | def Init_pose(): 20 | SetInitPose(Robot1_Init["pose"],Robot1_Init["orientation"],"robot1") 21 | SetInitPose(Robot2_Init["pose"],Robot2_Init["orientation"],"robot2") 22 | SetInitPose(Robot3_Init["pose"],Robot3_Init["orientation"],"robot3") 23 | 24 | def UpStairs(classNav,classPose): 25 | Nav_state = classNav.Point_Navigation(Locations[0]) 26 | if Nav_state: 27 | CtrlLift(0) 28 | rospy.sleep(2) #wait elevator open 29 | Nav_state = classNav.Point_Navigation(Locations[1]) 30 | if Nav_state: 31 | tmp_trans = None 32 | while tmp_trans == None: 33 | tmp_trans,tmp_rot = classPose.get_pos() 34 | tmp_trans[1] = tmp_trans[1]+34.65 35 | SetInitPose(tmp_trans,tmp_rot,"robot2") 36 | rospy.sleep(2) 37 | CtrlLift(1) 38 | rospy.sleep(0.5) 39 | CtrlLift(1) 40 | rospy.sleep(2) #wait elevator open 41 | Nav_state = classNav.Point_Navigation(Locations[3]) 42 | 43 | def DownStairs(classNav,classPose): 44 | Nav_state = classNav.Point_Navigation(Locations[3]) 45 | if Nav_state: 46 | CtrlLift(1) 47 | rospy.sleep(2) #wait elevator open 48 | Nav_state = classNav.Point_Navigation(Locations[2]) #进电梯 D 49 | if Nav_state: 50 | tmp_trans = None 51 | while tmp_trans == None: 52 | tmp_trans,tmp_rot = classPose.get_pos() 53 | tmp_trans[1] = tmp_trans[1]-34.65 54 | SetInitPose(tmp_trans,tmp_rot,"robot2") #重定位 C 55 | CtrlLift(0) 56 | rospy.sleep(0.5) 57 | CtrlLift(0) 58 | rospy.sleep(2) 59 | Nav_state = classNav.Point_Navigation(Locations[0]) 60 | 61 | if __name__ == '__main__': 62 | A_1st = {"name":"A","pose":(-1.43, 2.13, 0.0),"orientation":(0.0, 0.0, -0.694, -0.720),"object":2} #init pose 63 | B_1st = {"name":"A","pose":(-11.007, 6.646, 0.0),"orientation":(0.0, 0.0, 1, -0.023),"object":2} 64 | A_2nd = {"name":"F","pose":(-4.86, 26, 0.0),"orientation":(0.0, 0.0, 0.997, -0.08),"object":0} 65 | rospy.init_node('robot2_display', anonymous=False) 66 | # Init_pose() 67 | 68 | navigation = GoToPose("robot2") 69 | robotpose = Robot("robot2") 70 | try: 71 | while True: 72 | Nav_state = navigation.Point_Navigation(B_1st) 73 | rospy.sleep(5) 74 | UpStairs(navigation,robotpose) 75 | Nav_state = navigation.Point_Navigation(A_2nd) 76 | DownStairs(navigation,robotpose) 77 | Nav_state = navigation.Point_Navigation(A_1st) 78 | except KeyboardInterrupt: 79 | navigation.shutdown() 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /launch/one_robot.launch: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /launch/move_base_gazebo.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 50 | 53 | 56 | 57 | 58 | 61 | 64 | 67 | 68 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /pythons/GoPoint.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | Copyright (c) 2015, Mark Silliman 6 | All rights reserved. 7 | 8 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 9 | 10 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 13 | 14 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 17 | ''' 18 | 19 | # TurtleBot must have minimal.launch & amcl_demo.launch 20 | # running prior to starting this script 21 | # For simulation: launch gazebo world & amcl_demo prior to run this script 22 | 23 | import rospy 24 | from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal 25 | import actionlib 26 | from actionlib_msgs.msg import * 27 | from geometry_msgs.msg import Pose, Point, Quaternion 28 | 29 | class GoToPose(): 30 | def __init__(self,robot_id): 31 | # rospy.init_node('nav_test', anonymous=False) 32 | self.move_base = robot_id + "/move_base" 33 | self.map = robot_id + "_tf/map" 34 | self.goal_sent = False 35 | # What to do if shut down (e.g. Ctrl-C or failure) 36 | rospy.on_shutdown(self.shutdown) 37 | 38 | # Tell the action client that we want to spin a thread by default 39 | self.move_base = actionlib.SimpleActionClient(self.move_base, MoveBaseAction) 40 | rospy.loginfo("Wait for the action server to come up") 41 | 42 | # Allow up to 5 seconds for the action server to come up 43 | self.move_base.wait_for_server(rospy.Duration(5)) 44 | 45 | def goto(self, pos, quat): 46 | self.goal_sent = True 47 | goal = MoveBaseGoal() 48 | goal.target_pose.header.frame_id = self.map 49 | goal.target_pose.header.stamp = rospy.Time.now() 50 | goal.target_pose.pose = Pose(Point(pos['x'], pos['y'], pos['z']), 51 | Quaternion(quat['r1'], quat['r2'], quat['r3'], quat['r4'])) 52 | 53 | # Start moving 54 | self.move_base.send_goal(goal) 55 | 56 | # Allow TurtleBot up to 300 seconds to complete task 57 | success = self.move_base.wait_for_result(rospy.Duration(300)) 58 | 59 | state = self.move_base.get_state() 60 | result = False 61 | 62 | if success and state == GoalStatus.SUCCEEDED: 63 | # We made it! 64 | result = True 65 | else: 66 | self.move_base.cancel_goal() 67 | 68 | self.goal_sent = False 69 | return result 70 | 71 | def shutdown(self): 72 | if self.goal_sent: 73 | self.move_base.cancel_goal() 74 | rospy.loginfo("Stop") 75 | rospy.sleep(1) 76 | 77 | def Point_Navigation(self,a_dict): 78 | # try: 79 | success = False 80 | # coordinate = tuple_x[1:3] 81 | tmp_pos = a_dict["pose"] 82 | tmp_ori = a_dict["orientation"] 83 | 84 | # Customize the following values so they are appropriate for your location 85 | position = {'x': tmp_pos[0], 'y' : tmp_pos[1], 'z' : tmp_pos[2]} 86 | quaternion = {'r1' : tmp_ori[0], 'r2' : tmp_ori[1], 'r3' : tmp_ori[2], 'r4' : tmp_ori[3]} 87 | 88 | # rospy.loginfo("Go to (%s, %s) pose", position['x'], position['y']) 89 | success = self.goto(position, quaternion) 90 | 91 | if success: 92 | rospy.loginfo("Hooray, reached the desired pose") 93 | else: 94 | rospy.loginfo("The base failed to reach the desired pose") 95 | 96 | # Sleep to give the last log messages time to be sent 97 | rospy.sleep(1) 98 | return success 99 | 100 | # except rospy.ROSInterruptException: 101 | # rospy.loginfo("Ctrl-C caught. Quitting") 102 | 103 | 104 | -------------------------------------------------------------------------------- /pythons/goto-point-1.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | ''' 4 | Copyright (c) 2015, Mark Silliman 5 | All rights reserved. 6 | 7 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 12 | 13 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 16 | ''' 17 | 18 | # TurtleBot must have minimal.launch & amcl_demo.launch 19 | # running prior to starting this script 20 | # For simulation: launch gazebo world & amcl_demo prior to run this script 21 | 22 | import rospy 23 | from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal 24 | import actionlib 25 | from actionlib_msgs.msg import * 26 | from geometry_msgs.msg import Pose, Point, Quaternion 27 | 28 | def InitLoc(): 29 | list_A = ["First meeting room",-8.75,-0.1] 30 | list_B = ["The driver's room",7.8,6.051] 31 | list_C = ["FanRen room",5.309,14.812] 32 | list_D = ["Second meeting room",1.256,11.393] 33 | # list_E = ["Cheng room",-7.8,1.62] 34 | # list_F = ["VIP meeting room",-5.4,-8.9] 35 | # list_G = ["Function Room",-4.06,-4.81] 36 | 37 | locations = {"A":list_A, "B":list_B, "C":list_C, "D":list_D} 38 | 39 | print("Please input destination:") 40 | destination = raw_input() 41 | tmp = locations[destination][0] 42 | print("The destination is: %s"%(tmp)) 43 | return locations[destination][1],locations[destination][2] 44 | 45 | class GoToPose(): 46 | def __init__(self): 47 | self.goal_sent = False 48 | 49 | # What to do if shut down (e.g. Ctrl-C or failure) 50 | rospy.on_shutdown(self.shutdown) 51 | 52 | # Tell the action client that we want to spin a thread by default 53 | self.move_base = actionlib.SimpleActionClient("/robot1/move_base", MoveBaseAction) 54 | rospy.loginfo("Wait for the action server to come up") 55 | 56 | # Allow up to 5 seconds for the action server to come up 57 | self.move_base.wait_for_server(rospy.Duration(5)) 58 | 59 | def goto(self, pos, quat): 60 | self.goal_sent = True 61 | goal = MoveBaseGoal() 62 | goal.target_pose.header.frame_id = 'robot1_tf/map' 63 | goal.target_pose.header.stamp = rospy.Time.now() 64 | goal.target_pose.pose = Pose(Point(pos['x'], pos['y'], 0.000), Quaternion(quat['r1'], quat['r2'], quat['r3'], quat['r4'])) 65 | 66 | # Start moving 67 | self.move_base.send_goal(goal) 68 | 69 | # Allow TurtleBot up to 300 seconds to complete task 70 | success = self.move_base.wait_for_result(rospy.Duration(300)) 71 | 72 | state = self.move_base.get_state() 73 | result = False 74 | 75 | if success and state == GoalStatus.SUCCEEDED: 76 | # We made it! 77 | result = True 78 | else: 79 | self.move_base.cancel_goal() 80 | 81 | self.goal_sent = False 82 | return result 83 | 84 | def shutdown(self): 85 | if self.goal_sent: 86 | self.move_base.cancel_goal() 87 | rospy.loginfo("Stop") 88 | rospy.sleep(1) 89 | 90 | if __name__ == '__main__': 91 | try: 92 | rospy.init_node('nav_test1', anonymous=False) 93 | navigator = GoToPose() 94 | coordinate_x,coordinate_y = InitLoc() 95 | 96 | # Customize the following values so they are appropriate for your location 97 | position = {'x': coordinate_x, 'y' : coordinate_y} 98 | quaternion = {'r1' : 0.000, 'r2' : 0.000, 'r3' : 0.000, 'r4' : 1.000} 99 | 100 | rospy.loginfo("Go to (%s, %s) pose", position['x'], position['y']) 101 | success = navigator.goto(position, quaternion) 102 | 103 | if success: 104 | rospy.loginfo("Hooray, reached the desired pose") 105 | else: 106 | rospy.loginfo("The base failed to reach the desired pose") 107 | 108 | # Sleep to give the last log messages time to be sent 109 | rospy.sleep(1) 110 | 111 | except rospy.ROSInterruptException: 112 | rospy.loginfo("Ctrl-C caught. Quitting") 113 | 114 | 115 | -------------------------------------------------------------------------------- /pythons/goto-point-2.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | ''' 4 | Copyright (c) 2015, Mark Silliman 5 | All rights reserved. 6 | 7 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 12 | 13 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 16 | ''' 17 | 18 | # TurtleBot must have minimal.launch & amcl_demo.launch 19 | # running prior to starting this script 20 | # For simulation: launch gazebo world & amcl_demo prior to run this script 21 | 22 | import rospy 23 | from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal 24 | import actionlib 25 | from actionlib_msgs.msg import * 26 | from geometry_msgs.msg import Pose, Point, Quaternion 27 | 28 | def InitLoc(): 29 | list_A = ["First meeting room",-0,-1.1] 30 | list_B = ["The driver's room",7.8,6.051] 31 | list_C = ["FanRen room",5.309,14.812] 32 | list_D = ["Second meeting room",1.256,11.393] 33 | # list_E = ["Cheng room",-7.8,1.62] 34 | # list_F = ["VIP meeting room",-5.4,-8.9] 35 | # list_G = ["Function Room",-4.06,-4.81] 36 | 37 | locations = {"A":list_A, "B":list_B, "C":list_C, "D":list_D} 38 | 39 | print("Please input destination:") 40 | destination = raw_input() 41 | tmp = locations[destination][0] 42 | print("The destination is: %s"%(tmp)) 43 | return locations[destination][1],locations[destination][2] 44 | 45 | class GoToPose(): 46 | def __init__(self): 47 | self.goal_sent = False 48 | 49 | # What to do if shut down (e.g. Ctrl-C or failure) 50 | rospy.on_shutdown(self.shutdown) 51 | 52 | # Tell the action client that we want to spin a thread by default 53 | self.move_base = actionlib.SimpleActionClient("/robot2/move_base", MoveBaseAction) 54 | rospy.loginfo("Wait for the action server to come up") 55 | 56 | # Allow up to 5 seconds for the action server to come up 57 | self.move_base.wait_for_server(rospy.Duration(5)) 58 | 59 | def goto(self, pos, quat): 60 | self.goal_sent = True 61 | goal = MoveBaseGoal() 62 | goal.target_pose.header.frame_id = 'robot2_tf/map' 63 | goal.target_pose.header.stamp = rospy.Time.now() 64 | goal.target_pose.pose = Pose(Point(pos['x'], pos['y'], 0.000), Quaternion(quat['r1'], quat['r2'], quat['r3'], quat['r4'])) 65 | 66 | # Start moving 67 | self.move_base.send_goal(goal) 68 | 69 | # Allow TurtleBot up to 300 seconds to complete task 70 | success = self.move_base.wait_for_result(rospy.Duration(300)) 71 | 72 | state = self.move_base.get_state() 73 | result = False 74 | 75 | if success and state == GoalStatus.SUCCEEDED: 76 | # We made it! 77 | result = True 78 | else: 79 | self.move_base.cancel_goal() 80 | 81 | self.goal_sent = False 82 | return result 83 | 84 | def shutdown(self): 85 | if self.goal_sent: 86 | self.move_base.cancel_goal() 87 | rospy.loginfo("Stop") 88 | rospy.sleep(1) 89 | 90 | if __name__ == '__main__': 91 | try: 92 | rospy.init_node('nav_test2', anonymous=False) 93 | navigator = GoToPose() 94 | coordinate_x,coordinate_y = InitLoc() 95 | 96 | # Customize the following values so they are appropriate for your location 97 | position = {'x': coordinate_x, 'y' : coordinate_y} 98 | quaternion = {'r1' : 0.000, 'r2' : 0.000, 'r3' : 0.000, 'r4' : 1.000} 99 | 100 | rospy.loginfo("Go to (%s, %s) pose", position['x'], position['y']) 101 | success = navigator.goto(position, quaternion) 102 | 103 | if success: 104 | rospy.loginfo("Hooray, reached the desired pose") 105 | else: 106 | rospy.loginfo("The base failed to reach the desired pose") 107 | 108 | # Sleep to give the last log messages time to be sent 109 | rospy.sleep(1) 110 | 111 | except rospy.ROSInterruptException: 112 | rospy.loginfo("Ctrl-C caught. Quitting") 113 | 114 | 115 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(multirobot) 3 | 4 | ## Find catkin macros and libraries 5 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 6 | ## is used, also find other catkin packages 7 | find_package(catkin REQUIRED COMPONENTS 8 | move_base_msgs 9 | roscpp 10 | rospy 11 | geometry_msgs 12 | tf 13 | std_msgs 14 | ) 15 | 16 | ## System dependencies are found with CMake's conventions 17 | # find_package(Boost REQUIRED COMPONENTS system) 18 | 19 | 20 | ## Uncomment this if the package has a setup.py. This macro ensures 21 | ## modules and global scripts declared therein get installed 22 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 23 | # catkin_python_setup() 24 | 25 | ################################################ 26 | ## Declare ROS messages, services and actions ## 27 | ################################################ 28 | 29 | ## To declare and build messages, services or actions from within this 30 | ## package, follow these steps: 31 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 32 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 33 | ## * In the file package.xml: 34 | ## * add a build_depend tag for "message_generation" 35 | ## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET 36 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 37 | ## but can be declared for certainty nonetheless: 38 | ## * add a run_depend tag for "message_runtime" 39 | ## * In this file (CMakeLists.txt): 40 | ## * add "message_generation" and every package in MSG_DEP_SET to 41 | ## find_package(catkin REQUIRED COMPONENTS ...) 42 | ## * add "message_runtime" and every package in MSG_DEP_SET to 43 | ## catkin_package(CATKIN_DEPENDS ...) 44 | ## * uncomment the add_*_files sections below as needed 45 | ## and list every .msg/.srv/.action file to be processed 46 | ## * uncomment the generate_messages entry below 47 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 48 | 49 | ## Generate messages in the 'msg' folder 50 | # add_message_files( 51 | # FILES 52 | # Message1.msg 53 | # Message2.msg 54 | # ) 55 | 56 | ## Generate services in the 'srv' folder 57 | # add_service_files( 58 | # FILES 59 | # Service1.srv 60 | # Service2.srv 61 | # ) 62 | 63 | ## Generate actions in the 'action' folder 64 | # add_action_files( 65 | # FILES 66 | # Action1.action 67 | # Action2.action 68 | # ) 69 | 70 | ## Generate added messages and services with any dependencies listed here 71 | # generate_messages( 72 | # DEPENDENCIES 73 | # std_msgs 74 | # ) 75 | 76 | ################################################ 77 | ## Declare ROS dynamic reconfigure parameters ## 78 | ################################################ 79 | 80 | ## To declare and build dynamic reconfigure parameters within this 81 | ## package, follow these steps: 82 | ## * In the file package.xml: 83 | ## * add a build_depend and a run_depend tag for "dynamic_reconfigure" 84 | ## * In this file (CMakeLists.txt): 85 | ## * add "dynamic_reconfigure" to 86 | ## find_package(catkin REQUIRED COMPONENTS ...) 87 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 88 | ## and list every .cfg file to be processed 89 | 90 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 91 | # generate_dynamic_reconfigure_options( 92 | # cfg/DynReconf1.cfg 93 | # cfg/DynReconf2.cfg 94 | # ) 95 | 96 | ################################### 97 | ## catkin specific configuration ## 98 | ################################### 99 | ## The catkin_package macro generates cmake config files for your package 100 | ## Declare things to be passed to dependent projects 101 | ## INCLUDE_DIRS: uncomment this if you package contains header files 102 | ## LIBRARIES: libraries you create in this project that dependent projects also need 103 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 104 | ## DEPENDS: system dependencies of this project that dependent projects also need 105 | catkin_package( 106 | # INCLUDE_DIRS include 107 | # LIBRARIES multirobot 108 | # CATKIN_DEPENDS roscpp rospy std_msgs 109 | # DEPENDS system_lib 110 | ) 111 | 112 | ########### 113 | ## Build ## 114 | ########### 115 | 116 | ## Specify additional locations of header files 117 | ## Your package locations should be listed before other locations 118 | # include_directories(include) 119 | include_directories( 120 | ${catkin_INCLUDE_DIRS} 121 | ) 122 | #add_executable(client_robot_single src/client_robot_single.py) 123 | #add_executable(robot_organizer src/robot_organizer.py) 124 | 125 | #target_link_libraries(client_robot_single ${catkin_LIBRARIES}) 126 | #target_link_libraries(robot_organizer ${catkin_LIBRARIES}) 127 | ## Declare a C++ library 128 | # add_library(multirobot 129 | # src/${PROJECT_NAME}/multirobot.cpp 130 | # ) 131 | 132 | ## Declare a cpp executable 133 | 134 | ## Add cmake target dependencies of the executable/library 135 | ## as an example, message headers may need to be generated before nodes 136 | # add_dependencies(navigation_multi_node navigation_multi_generate_messages_cpp) 137 | 138 | ## Specify libraries to link a library or executable target against 139 | 140 | ## Add cmake target dependencies of the library 141 | ## as an example, code may need to be generated before libraries 142 | ## either from message generation or dynamic reconfigure 143 | # add_dependencies(multirobot ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 144 | 145 | ## Declare a C++ executable 146 | # add_executable(multirobot_node src/multirobot_node.cpp) 147 | 148 | ## Add cmake target dependencies of the executable 149 | ## same as for the library above 150 | # add_dependencies(multirobot_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 151 | 152 | ## Specify libraries to link a library or executable target against 153 | # target_link_libraries(multirobot_node 154 | # ${catkin_LIBRARIES} 155 | # ) 156 | 157 | ############# 158 | ## Install ## 159 | ############# 160 | 161 | # all install targets should use catkin DESTINATION variables 162 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 163 | 164 | ## Mark executable scripts (Python etc.) for installation 165 | ## in contrast to setup.py, you can choose the destination 166 | # install(PROGRAMS 167 | # scripts/my_python_script 168 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 169 | # ) 170 | 171 | ## Mark executables and/or libraries for installation 172 | # install(TARGETS multirobot multirobot_node 173 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 174 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 175 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 176 | # ) 177 | 178 | ## Mark cpp header files for installation 179 | # install(DIRECTORY include/${PROJECT_NAME}/ 180 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 181 | # FILES_MATCHING PATTERN "*.h" 182 | # PATTERN ".svn" EXCLUDE 183 | # ) 184 | 185 | ## Mark other files for installation (e.g. launch and bag files, etc.) 186 | # install(FILES 187 | # # myfile1 188 | # # myfile2 189 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 190 | # ) 191 | 192 | ############# 193 | ## Testing ## 194 | ############# 195 | 196 | ## Add gtest based cpp test target and link libraries 197 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_multirobot.cpp) 198 | # if(TARGET ${PROJECT_NAME}-test) 199 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 200 | # endif() 201 | 202 | ## Add folders to be run by python nosetests 203 | # catkin_add_nosetests(test) 204 | -------------------------------------------------------------------------------- /rviz/navigation.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /TF1/Frames1 8 | - /TF1/Tree1 9 | - /Global Map1/Planner1 10 | - /Local Map1 11 | - /Local Map1/Planner1 12 | - /Local Map1/Trajectory Cloud1 13 | Splitter Ratio: 0.5 14 | Tree Height: 766 15 | - Class: rviz/Selection 16 | Name: Selection 17 | - Class: rviz/Tool Properties 18 | Expanded: 19 | - /2D Pose Estimate1 20 | - /2D Nav Goal1 21 | - /Publish Point1 22 | Name: Tool Properties 23 | Splitter Ratio: 0.588679 24 | - Class: rviz/Views 25 | Expanded: 26 | - /Current View1 27 | Name: Views 28 | Splitter Ratio: 0.5 29 | - Class: rviz/Time 30 | Experimental: false 31 | Name: Time 32 | SyncMode: 0 33 | SyncSource: LaserScan 34 | Visualization Manager: 35 | Class: "" 36 | Displays: 37 | - Alpha: 0.5 38 | Cell Size: 1 39 | Class: rviz/Grid 40 | Color: 160; 160; 164 41 | Enabled: true 42 | Line Style: 43 | Line Width: 0.03 44 | Value: Lines 45 | Name: Grid 46 | Normal Cell Count: 0 47 | Offset: 48 | X: 0 49 | Y: 0 50 | Z: 0 51 | Plane: XY 52 | Plane Cell Count: 10 53 | Reference Frame: 54 | Value: true 55 | - Alpha: 1 56 | Class: rviz/RobotModel 57 | Collision Enabled: false 58 | Enabled: true 59 | Links: 60 | All Links Enabled: true 61 | Expand Joint Details: false 62 | Expand Link Details: false 63 | Expand Tree: false 64 | Link Tree Style: Links in Alphabetic Order 65 | base_footprint: 66 | Alpha: 1 67 | Show Axes: false 68 | Show Trail: false 69 | base_link: 70 | Alpha: 1 71 | Show Axes: false 72 | Show Trail: false 73 | Value: true 74 | camera_depth_frame: 75 | Alpha: 1 76 | Show Axes: false 77 | Show Trail: false 78 | camera_depth_optical_frame: 79 | Alpha: 1 80 | Show Axes: false 81 | Show Trail: false 82 | camera_link: 83 | Alpha: 1 84 | Show Axes: false 85 | Show Trail: false 86 | Value: true 87 | camera_rgb_frame: 88 | Alpha: 1 89 | Show Axes: false 90 | Show Trail: false 91 | camera_rgb_optical_frame: 92 | Alpha: 1 93 | Show Axes: false 94 | Show Trail: false 95 | caster_back_link: 96 | Alpha: 1 97 | Show Axes: false 98 | Show Trail: false 99 | Value: true 100 | caster_front_link: 101 | Alpha: 1 102 | Show Axes: false 103 | Show Trail: false 104 | Value: true 105 | cliff_sensor_front_link: 106 | Alpha: 1 107 | Show Axes: false 108 | Show Trail: false 109 | cliff_sensor_left_link: 110 | Alpha: 1 111 | Show Axes: false 112 | Show Trail: false 113 | cliff_sensor_right_link: 114 | Alpha: 1 115 | Show Axes: false 116 | Show Trail: false 117 | gyro_link: 118 | Alpha: 1 119 | Show Axes: false 120 | Show Trail: false 121 | plate_bottom_link: 122 | Alpha: 1 123 | Show Axes: false 124 | Show Trail: false 125 | Value: true 126 | plate_middle_link: 127 | Alpha: 1 128 | Show Axes: false 129 | Show Trail: false 130 | Value: true 131 | plate_top_link: 132 | Alpha: 1 133 | Show Axes: false 134 | Show Trail: false 135 | Value: true 136 | pole_bottom_0_link: 137 | Alpha: 1 138 | Show Axes: false 139 | Show Trail: false 140 | Value: true 141 | pole_bottom_1_link: 142 | Alpha: 1 143 | Show Axes: false 144 | Show Trail: false 145 | Value: true 146 | pole_bottom_2_link: 147 | Alpha: 1 148 | Show Axes: false 149 | Show Trail: false 150 | Value: true 151 | pole_bottom_3_link: 152 | Alpha: 1 153 | Show Axes: false 154 | Show Trail: false 155 | Value: true 156 | pole_bottom_4_link: 157 | Alpha: 1 158 | Show Axes: false 159 | Show Trail: false 160 | Value: true 161 | pole_bottom_5_link: 162 | Alpha: 1 163 | Show Axes: false 164 | Show Trail: false 165 | Value: true 166 | pole_kinect_0_link: 167 | Alpha: 1 168 | Show Axes: false 169 | Show Trail: false 170 | Value: true 171 | pole_kinect_1_link: 172 | Alpha: 1 173 | Show Axes: false 174 | Show Trail: false 175 | Value: true 176 | pole_middle_0_link: 177 | Alpha: 1 178 | Show Axes: false 179 | Show Trail: false 180 | Value: true 181 | pole_middle_1_link: 182 | Alpha: 1 183 | Show Axes: false 184 | Show Trail: false 185 | Value: true 186 | pole_middle_2_link: 187 | Alpha: 1 188 | Show Axes: false 189 | Show Trail: false 190 | Value: true 191 | pole_middle_3_link: 192 | Alpha: 1 193 | Show Axes: false 194 | Show Trail: false 195 | Value: true 196 | pole_top_0_link: 197 | Alpha: 1 198 | Show Axes: false 199 | Show Trail: false 200 | Value: true 201 | pole_top_1_link: 202 | Alpha: 1 203 | Show Axes: false 204 | Show Trail: false 205 | Value: true 206 | pole_top_2_link: 207 | Alpha: 1 208 | Show Axes: false 209 | Show Trail: false 210 | Value: true 211 | pole_top_3_link: 212 | Alpha: 1 213 | Show Axes: false 214 | Show Trail: false 215 | Value: true 216 | wheel_left_link: 217 | Alpha: 1 218 | Show Axes: false 219 | Show Trail: false 220 | Value: true 221 | wheel_right_link: 222 | Alpha: 1 223 | Show Axes: false 224 | Show Trail: false 225 | Value: true 226 | Name: RobotModel 227 | Robot Description: robot1/robot_description 228 | TF Prefix: robot1_tf 229 | Update Interval: 0 230 | Value: true 231 | Visual Enabled: true 232 | - Alpha: 1 233 | Class: rviz/RobotModel 234 | Collision Enabled: false 235 | Enabled: true 236 | Links: 237 | All Links Enabled: true 238 | Expand Joint Details: false 239 | Expand Link Details: false 240 | Expand Tree: false 241 | Link Tree Style: Links in Alphabetic Order 242 | base_footprint: 243 | Alpha: 1 244 | Show Axes: false 245 | Show Trail: false 246 | base_link: 247 | Alpha: 1 248 | Show Axes: false 249 | Show Trail: false 250 | Value: true 251 | camera_depth_frame: 252 | Alpha: 1 253 | Show Axes: false 254 | Show Trail: false 255 | camera_depth_optical_frame: 256 | Alpha: 1 257 | Show Axes: false 258 | Show Trail: false 259 | camera_link: 260 | Alpha: 1 261 | Show Axes: false 262 | Show Trail: false 263 | Value: true 264 | camera_rgb_frame: 265 | Alpha: 1 266 | Show Axes: false 267 | Show Trail: false 268 | camera_rgb_optical_frame: 269 | Alpha: 1 270 | Show Axes: false 271 | Show Trail: false 272 | caster_back_link: 273 | Alpha: 1 274 | Show Axes: false 275 | Show Trail: false 276 | Value: true 277 | caster_front_link: 278 | Alpha: 1 279 | Show Axes: false 280 | Show Trail: false 281 | Value: true 282 | cliff_sensor_front_link: 283 | Alpha: 1 284 | Show Axes: false 285 | Show Trail: false 286 | cliff_sensor_left_link: 287 | Alpha: 1 288 | Show Axes: false 289 | Show Trail: false 290 | cliff_sensor_right_link: 291 | Alpha: 1 292 | Show Axes: false 293 | Show Trail: false 294 | gyro_link: 295 | Alpha: 1 296 | Show Axes: false 297 | Show Trail: false 298 | plate_bottom_link: 299 | Alpha: 1 300 | Show Axes: false 301 | Show Trail: false 302 | Value: true 303 | plate_middle_link: 304 | Alpha: 1 305 | Show Axes: false 306 | Show Trail: false 307 | Value: true 308 | plate_top_link: 309 | Alpha: 1 310 | Show Axes: false 311 | Show Trail: false 312 | Value: true 313 | pole_bottom_0_link: 314 | Alpha: 1 315 | Show Axes: false 316 | Show Trail: false 317 | Value: true 318 | pole_bottom_1_link: 319 | Alpha: 1 320 | Show Axes: false 321 | Show Trail: false 322 | Value: true 323 | pole_bottom_2_link: 324 | Alpha: 1 325 | Show Axes: false 326 | Show Trail: false 327 | Value: true 328 | pole_bottom_3_link: 329 | Alpha: 1 330 | Show Axes: false 331 | Show Trail: false 332 | Value: true 333 | pole_bottom_4_link: 334 | Alpha: 1 335 | Show Axes: false 336 | Show Trail: false 337 | Value: true 338 | pole_bottom_5_link: 339 | Alpha: 1 340 | Show Axes: false 341 | Show Trail: false 342 | Value: true 343 | pole_kinect_0_link: 344 | Alpha: 1 345 | Show Axes: false 346 | Show Trail: false 347 | Value: true 348 | pole_kinect_1_link: 349 | Alpha: 1 350 | Show Axes: false 351 | Show Trail: false 352 | Value: true 353 | pole_middle_0_link: 354 | Alpha: 1 355 | Show Axes: false 356 | Show Trail: false 357 | Value: true 358 | pole_middle_1_link: 359 | Alpha: 1 360 | Show Axes: false 361 | Show Trail: false 362 | Value: true 363 | pole_middle_2_link: 364 | Alpha: 1 365 | Show Axes: false 366 | Show Trail: false 367 | Value: true 368 | pole_middle_3_link: 369 | Alpha: 1 370 | Show Axes: false 371 | Show Trail: false 372 | Value: true 373 | pole_top_0_link: 374 | Alpha: 1 375 | Show Axes: false 376 | Show Trail: false 377 | Value: true 378 | pole_top_1_link: 379 | Alpha: 1 380 | Show Axes: false 381 | Show Trail: false 382 | Value: true 383 | pole_top_2_link: 384 | Alpha: 1 385 | Show Axes: false 386 | Show Trail: false 387 | Value: true 388 | pole_top_3_link: 389 | Alpha: 1 390 | Show Axes: false 391 | Show Trail: false 392 | Value: true 393 | wheel_left_link: 394 | Alpha: 1 395 | Show Axes: false 396 | Show Trail: false 397 | Value: true 398 | wheel_right_link: 399 | Alpha: 1 400 | Show Axes: false 401 | Show Trail: false 402 | Value: true 403 | Name: RobotModel 404 | Robot Description: robot2/robot_description 405 | TF Prefix: robot2_tf 406 | Update Interval: 0 407 | Value: true 408 | Visual Enabled: true 409 | - Alpha: 1 410 | Class: rviz/RobotModel 411 | Collision Enabled: false 412 | Enabled: true 413 | Links: 414 | All Links Enabled: true 415 | Expand Joint Details: false 416 | Expand Link Details: false 417 | Expand Tree: false 418 | Link Tree Style: Links in Alphabetic Order 419 | base_footprint: 420 | Alpha: 1 421 | Show Axes: false 422 | Show Trail: false 423 | base_link: 424 | Alpha: 1 425 | Show Axes: false 426 | Show Trail: false 427 | Value: true 428 | camera_depth_frame: 429 | Alpha: 1 430 | Show Axes: false 431 | Show Trail: false 432 | camera_depth_optical_frame: 433 | Alpha: 1 434 | Show Axes: false 435 | Show Trail: false 436 | camera_link: 437 | Alpha: 1 438 | Show Axes: false 439 | Show Trail: false 440 | Value: true 441 | camera_rgb_frame: 442 | Alpha: 1 443 | Show Axes: false 444 | Show Trail: false 445 | camera_rgb_optical_frame: 446 | Alpha: 1 447 | Show Axes: false 448 | Show Trail: false 449 | caster_back_link: 450 | Alpha: 1 451 | Show Axes: false 452 | Show Trail: false 453 | Value: true 454 | caster_front_link: 455 | Alpha: 1 456 | Show Axes: false 457 | Show Trail: false 458 | Value: true 459 | cliff_sensor_front_link: 460 | Alpha: 1 461 | Show Axes: false 462 | Show Trail: false 463 | cliff_sensor_left_link: 464 | Alpha: 1 465 | Show Axes: false 466 | Show Trail: false 467 | cliff_sensor_right_link: 468 | Alpha: 1 469 | Show Axes: false 470 | Show Trail: false 471 | gyro_link: 472 | Alpha: 1 473 | Show Axes: false 474 | Show Trail: false 475 | plate_bottom_link: 476 | Alpha: 1 477 | Show Axes: false 478 | Show Trail: false 479 | Value: true 480 | plate_middle_link: 481 | Alpha: 1 482 | Show Axes: false 483 | Show Trail: false 484 | Value: true 485 | plate_top_link: 486 | Alpha: 1 487 | Show Axes: false 488 | Show Trail: false 489 | Value: true 490 | pole_bottom_0_link: 491 | Alpha: 1 492 | Show Axes: false 493 | Show Trail: false 494 | Value: true 495 | pole_bottom_1_link: 496 | Alpha: 1 497 | Show Axes: false 498 | Show Trail: false 499 | Value: true 500 | pole_bottom_2_link: 501 | Alpha: 1 502 | Show Axes: false 503 | Show Trail: false 504 | Value: true 505 | pole_bottom_3_link: 506 | Alpha: 1 507 | Show Axes: false 508 | Show Trail: false 509 | Value: true 510 | pole_bottom_4_link: 511 | Alpha: 1 512 | Show Axes: false 513 | Show Trail: false 514 | Value: true 515 | pole_bottom_5_link: 516 | Alpha: 1 517 | Show Axes: false 518 | Show Trail: false 519 | Value: true 520 | pole_kinect_0_link: 521 | Alpha: 1 522 | Show Axes: false 523 | Show Trail: false 524 | Value: true 525 | pole_kinect_1_link: 526 | Alpha: 1 527 | Show Axes: false 528 | Show Trail: false 529 | Value: true 530 | pole_middle_0_link: 531 | Alpha: 1 532 | Show Axes: false 533 | Show Trail: false 534 | Value: true 535 | pole_middle_1_link: 536 | Alpha: 1 537 | Show Axes: false 538 | Show Trail: false 539 | Value: true 540 | pole_middle_2_link: 541 | Alpha: 1 542 | Show Axes: false 543 | Show Trail: false 544 | Value: true 545 | pole_middle_3_link: 546 | Alpha: 1 547 | Show Axes: false 548 | Show Trail: false 549 | Value: true 550 | pole_top_0_link: 551 | Alpha: 1 552 | Show Axes: false 553 | Show Trail: false 554 | Value: true 555 | pole_top_1_link: 556 | Alpha: 1 557 | Show Axes: false 558 | Show Trail: false 559 | Value: true 560 | pole_top_2_link: 561 | Alpha: 1 562 | Show Axes: false 563 | Show Trail: false 564 | Value: true 565 | pole_top_3_link: 566 | Alpha: 1 567 | Show Axes: false 568 | Show Trail: false 569 | Value: true 570 | wheel_left_link: 571 | Alpha: 1 572 | Show Axes: false 573 | Show Trail: false 574 | Value: true 575 | wheel_right_link: 576 | Alpha: 1 577 | Show Axes: false 578 | Show Trail: false 579 | Value: true 580 | Name: RobotModel 581 | Robot Description: robot3/robot_description 582 | TF Prefix: robot3_tf 583 | Update Interval: 0 584 | Value: true 585 | Visual Enabled: true 586 | - Class: rviz/TF 587 | Enabled: false 588 | Frame Timeout: 15 589 | Frames: 590 | All Enabled: false 591 | Marker Scale: 1 592 | Name: TF 593 | Show Arrows: true 594 | Show Axes: true 595 | Show Names: false 596 | Tree: 597 | {} 598 | Update Interval: 0 599 | Value: false 600 | - Alpha: 1 601 | Autocompute Intensity Bounds: true 602 | Autocompute Value Bounds: 603 | Max Value: 10 604 | Min Value: -10 605 | Value: true 606 | Axis: Z 607 | Channel Name: z 608 | Class: rviz/LaserScan 609 | Color: 255; 255; 255 610 | Color Transformer: Intensity 611 | Decay Time: 0 612 | Enabled: true 613 | Invert Rainbow: false 614 | Max Color: 255; 255; 255 615 | Max Intensity: 4096 616 | Min Color: 0; 255; 0 617 | Min Intensity: 0 618 | Name: LaserScan 619 | Position Transformer: XYZ 620 | Queue Size: 10 621 | Selectable: true 622 | Size (Pixels): 3 623 | Size (m): 0.01 624 | Style: Points 625 | Topic: robot1/scan 626 | Use Fixed Frame: true 627 | Use rainbow: false 628 | Value: true 629 | - Alpha: 1 630 | Autocompute Intensity Bounds: true 631 | Autocompute Value Bounds: 632 | Max Value: 10 633 | Min Value: -10 634 | Value: true 635 | Axis: Z 636 | Channel Name: z 637 | Class: rviz/LaserScan 638 | Color: 255; 255; 255 639 | Color Transformer: Intensity 640 | Decay Time: 0 641 | Enabled: true 642 | Invert Rainbow: false 643 | Max Color: 255; 255; 255 644 | Max Intensity: 4096 645 | Min Color: 255; 0; 0 646 | Min Intensity: 0 647 | Name: LaserScan 648 | Position Transformer: XYZ 649 | Queue Size: 10 650 | Selectable: true 651 | Size (Pixels): 3 652 | Size (m): 0.01 653 | Style: Points 654 | Topic: robot2/scan 655 | Use Fixed Frame: true 656 | Use rainbow: false 657 | Value: true 658 | - Alpha: 1 659 | Autocompute Intensity Bounds: true 660 | Autocompute Value Bounds: 661 | Max Value: 10 662 | Min Value: -10 663 | Value: true 664 | Axis: Z 665 | Channel Name: z 666 | Class: rviz/LaserScan 667 | Color: 255; 255; 255 668 | Color Transformer: Intensity 669 | Decay Time: 0 670 | Enabled: true 671 | Invert Rainbow: false 672 | Max Color: 255; 255; 255 673 | Max Intensity: 4096 674 | Min Color: 0; 0; 255 675 | Min Intensity: 0 676 | Name: LaserScan 677 | Position Transformer: XYZ 678 | Queue Size: 10 679 | Selectable: true 680 | Size (Pixels): 3 681 | Size (m): 0.01 682 | Style: Points 683 | Topic: robot3/scan 684 | Use Fixed Frame: true 685 | Use rainbow: false 686 | Value: true 687 | - Alpha: 1 688 | Autocompute Intensity Bounds: true 689 | Autocompute Value Bounds: 690 | Max Value: 10 691 | Min Value: -10 692 | Value: true 693 | Axis: Z 694 | Channel Name: intensity 695 | Class: rviz/PointCloud2 696 | Color: 255; 0; 0 697 | Color Transformer: FlatColor 698 | Decay Time: 0 699 | Enabled: true 700 | Invert Rainbow: false 701 | Max Color: 255; 255; 255 702 | Max Intensity: 4096 703 | Min Color: 0; 0; 0 704 | Min Intensity: 0 705 | Name: Bumper Hit 706 | Position Transformer: XYZ 707 | Queue Size: 10 708 | Selectable: true 709 | Size (Pixels): 3 710 | Size (m): 0.08 711 | Style: Spheres 712 | Topic: /mobile_base/sensors/bumper_pointcloud 713 | Use Fixed Frame: true 714 | Use rainbow: true 715 | Value: true 716 | - Alpha: 0.7 717 | Class: rviz/Map 718 | Color Scheme: map 719 | Draw Behind: false 720 | Enabled: true 721 | Name: Map 722 | Topic: robot1/map 723 | Value: true 724 | - Class: rviz/Group 725 | Displays: 726 | - Alpha: 0.7 727 | Class: rviz/Map 728 | Color Scheme: costmap 729 | Draw Behind: true 730 | Enabled: false 731 | Name: Costmap 732 | Topic: robot1/move_base/global_costmap/costmap 733 | Value: true 734 | - Alpha: 1 735 | Buffer Length: 1 736 | Class: rviz/Path 737 | Color: 255; 0; 0 738 | Enabled: true 739 | Name: Planner 740 | Topic: robot1/move_base/DWAPlannerROS/global_plan 741 | Value: true 742 | Enabled: true 743 | Name: Global Map 744 | - Class: rviz/Group 745 | Displays: 746 | - Alpha: 0.7 747 | Class: rviz/Map 748 | Color Scheme: costmap 749 | Draw Behind: false 750 | Enabled: true 751 | Name: Costmap 752 | Topic: robot1/move_base/local_costmap/costmap 753 | Value: true 754 | - Alpha: 1 755 | Buffer Length: 1 756 | Class: rviz/Path 757 | Color: 0; 12; 255 758 | Enabled: true 759 | Name: Planner 760 | Topic: robot1/move_base/DWAPlannerROS/local_plan 761 | Value: true 762 | - Alpha: 0.8 763 | Autocompute Intensity Bounds: true 764 | Autocompute Value Bounds: 765 | Max Value: 10 766 | Min Value: -10 767 | Value: true 768 | Axis: Z 769 | Channel Name: total_cost 770 | Class: rviz/PointCloud2 771 | Color: 255; 255; 255 772 | Color Transformer: Intensity 773 | Decay Time: 0 774 | Enabled: true 775 | Invert Rainbow: false 776 | Max Color: 255; 255; 255 777 | Max Intensity: 785.05 778 | Min Color: 0; 0; 0 779 | Min Intensity: 29.39 780 | Name: Cost Cloud 781 | Position Transformer: XYZ 782 | Queue Size: 10 783 | Selectable: true 784 | Size (Pixels): 3 785 | Size (m): 0.04 786 | Style: Flat Squares 787 | Topic: robot1/move_base/DWAPlannerROS/cost_cloud 788 | Use Fixed Frame: true 789 | Use rainbow: true 790 | Value: true 791 | - Alpha: 1 792 | Autocompute Intensity Bounds: true 793 | Autocompute Value Bounds: 794 | Max Value: 10 795 | Min Value: -10 796 | Value: true 797 | Axis: Z 798 | Channel Name: total_cost 799 | Class: rviz/PointCloud2 800 | Color: 255; 255; 255 801 | Color Transformer: Intensity 802 | Decay Time: 0 803 | Enabled: true 804 | Invert Rainbow: false 805 | Max Color: 255; 255; 255 806 | Max Intensity: 9.621 807 | Min Color: 0; 0; 0 808 | Min Intensity: 3.621 809 | Name: Trajectory Cloud 810 | Position Transformer: XYZ 811 | Queue Size: 10 812 | Selectable: true 813 | Size (Pixels): 3 814 | Size (m): 0.04 815 | Style: Flat Squares 816 | Topic: robot1/move_base/DWAPlannerROS/trajectory_cloud 817 | Use Fixed Frame: true 818 | Use rainbow: false 819 | Value: true 820 | Enabled: true 821 | Name: Local Map 822 | - Arrow Length: 0.2 823 | Class: rviz/PoseArray 824 | Color: 0; 192; 0 825 | Enabled: true 826 | Name: Amcl Particle Swarm 827 | Topic: robot1/particlecloud 828 | Value: true 829 | - Arrow Length: 0.2 830 | Class: rviz/PoseArray 831 | Color: 192; 0; 0 832 | Enabled: true 833 | Name: Amcl Particle Swarm 834 | Topic: robot2/particlecloud 835 | Value: true 836 | - Arrow Length: 0.2 837 | Class: rviz/PoseArray 838 | Color: 0; 0; 192 839 | Enabled: true 840 | Name: Amcl Particle Swarm 841 | Topic: robot3/particlecloud 842 | Value: true 843 | - Alpha: 1 844 | Buffer Length: 1 845 | Class: rviz/Path 846 | Color: 25; 255; 0 847 | Enabled: true 848 | Name: Full Plan 849 | Topic: robot1/move_base/NavfnROS/plan 850 | Value: true 851 | - Alpha: 1 852 | Buffer Length: 1 853 | Class: rviz/Path 854 | Color: 255; 0; 25 855 | Enabled: true 856 | Name: Full Plan 857 | Topic: robot2/move_base/NavfnROS/plan 858 | Value: true 859 | - Alpha: 1 860 | Buffer Length: 1 861 | Class: rviz/Path 862 | Color: 0; 25; 255 863 | Enabled: true 864 | Name: Full Plan 865 | Topic: robot3/move_base/NavfnROS/plan 866 | Value: true 867 | Enabled: true 868 | Global Options: 869 | Background Color: 48; 48; 48 870 | Fixed Frame: world 871 | Frame Rate: 30 872 | Name: root 873 | Tools: 874 | - Class: rviz/MoveCamera 875 | - Class: rviz/Interact 876 | Hide Inactive Objects: true 877 | - Class: rviz/Select 878 | - Class: rviz/SetInitialPose 879 | Topic: robot1/initialpose 880 | - Class: rviz/SetGoal 881 | Topic: robot1/move_base_simple/goal 882 | - Class: rviz/SetGoal 883 | Topic: robot2/move_base_simple/goal 884 | - Class: rviz/SetGoal 885 | Topic: robot3/move_base_simple/goal 886 | - Class: rviz/Measure 887 | - Class: rviz/PublishPoint 888 | Single click: true 889 | Topic: /clicked_point 890 | Value: true 891 | Views: 892 | Current: 893 | Angle: -6.72003 894 | Class: rviz/TopDownOrtho 895 | Enable Stereo Rendering: 896 | Stereo Eye Separation: 0.06 897 | Stereo Focal Distance: 1 898 | Swap Stereo Eyes: false 899 | Value: false 900 | Name: Current View 901 | Near Clip Distance: 0.01 902 | Scale: 96.6482 903 | Target Frame: 904 | Value: TopDownOrtho (rviz) 905 | X: -1.35336 906 | Y: 2.04398 907 | Saved: ~ 908 | Window Geometry: 909 | Displays: 910 | collapsed: false 911 | Height: 985 912 | Hide Left Dock: false 913 | Hide Right Dock: false 914 | QMainWindow State: 000000ff00000000fd00000004000000000000015e00000389fc0200000005fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006901000005fb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003300000389000000d801000005000000010000010b00000389fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003300000389000000ab01000005fb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004a00000003efc0100000002fb0000000800540069006d00650000000000000004a00000020101000005fb0000000800540069006d006501000000000000045000000000000000000000050f0000038900000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 915 | Selection: 916 | collapsed: false 917 | Time: 918 | collapsed: false 919 | Tool Properties: 920 | collapsed: true 921 | Views: 922 | collapsed: false 923 | Width: 1918 924 | X: 0 925 | Y: 32 926 | --------------------------------------------------------------------------------