├── 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 | 
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 |
--------------------------------------------------------------------------------