├── CMakeLists.txt ├── README.md ├── env-hooks └── multi_robot.dsv.in ├── launch ├── gazebo_multi_nav2_world.launch.py ├── gazebo_multi_world.launch.py └── nav2_bringup │ ├── bringup_launch.py │ ├── localization_launch.py │ ├── navigation_launch.py │ ├── rviz_launch.py │ └── slam_launch.py ├── models ├── turtlebot3_burger │ ├── meshes │ │ ├── burger_base.dae │ │ ├── lds.dae │ │ └── tire.dae │ ├── model-1_4.sdf │ ├── model.config │ └── model.sdf └── turtlebot3_waffle │ ├── meshes │ ├── lds.dae │ ├── r200.dae │ ├── tire.dae │ └── waffle_base.dae │ ├── model-1_4.sdf │ ├── model.config │ ├── model.sdf │ └── model_nocamera.sdf ├── package.xml ├── params └── nav2_params.yaml ├── rviz ├── multi_nav2_default_view.rviz └── nav2_default_view.rviz ├── urdf ├── common_properties.urdf ├── turtlebot3_burger.urdf └── turtlebot3_waffle.urdf └── worlds ├── multi_empty_world.world └── multi_robot_world.world /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Set minimum required version of cmake, project name and compile options 3 | ################################################################################ 4 | cmake_minimum_required(VERSION 3.5) 5 | project(turtlebot3_multi_robot) 6 | 7 | 8 | ################################################################################ 9 | # Find ament packages and libraries for ament and system dependencies 10 | ################################################################################ 11 | find_package(ament_cmake REQUIRED) 12 | 13 | 14 | 15 | 16 | ################################################################################ 17 | # Install 18 | ################################################################################ 19 | install(DIRECTORY launch models rviz urdf worlds params 20 | DESTINATION share/${PROJECT_NAME}/ 21 | ) 22 | 23 | ament_environment_hooks("${CMAKE_CURRENT_SOURCE_DIR}/env-hooks/multi_robot.dsv.in") 24 | 25 | ament_package() 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Multiple Turtlebot3 robot support in Gazebo 2 | The ROS2 project scalable solution for launching multiple TurtleBot3 robots with navigation capabilities using the Navigation2 (Nav2) stack. By leveraging namespaces in ROS2, this project enables the seamless deployment of multiple TurtleBot3 robots in a simple and organized manner. Each robot instance can be differentiated by its unique namespace, ensuring independence and preventing naming conflicts. 3 | 4 | 5 | The 'master' branch includes an implementation that functions with the humble framework, while the 'foxy' branch provides support specifically for ROS2 Foxy. 6 | 7 | 'master' -> ROS2 Humble 8 | 9 | 'foxy' -> ROS2 Foxy 10 | 11 | The code in the "foxy" branch is compatible with ROS2 humble. In the master branch, there is an updated launch file for bringing up nav2 with composite nodes. However, the creation of composite nodes is currently disabled due to an issue in the ROS2 humble implementation. This issue pertains to the propagation of namespace mapping to nodes (in composite container) with sub-namespaces, such as "/global_costmap/global_costmap". 12 | 13 | ## Run without nav2 stack 14 | **Guide**: https://medium.com/@arshad.mehmood/efficient-deployment-and-operation-of-multiple-turtlebot3-robots-in-gazebos-f72f6a364620 15 | ``` 16 | ros2 launch turtlebot3_multi_robot gazebo_multi_world.launch.py enable_drive:=True 17 | ``` 18 | # turtlebot3_multi_robot 19 | 20 | ![image](https://github.com/arshadlab/turtlebot3_multi_robot/assets/85929438/fc958709-018d-48d2-b5b6-6674b53913c8) 21 | 22 | ![image](https://github.com/arshadlab/turtlebot3_multi_robot/assets/85929438/c955b964-27fe-46d4-8696-d3c0d106dbe0) 23 | 24 | ## Run with nav2 stack 25 | **Guide**: https://medium.com/@arshad.mehmood/a-guide-to-multi-robot-navigation-utilizing-turtlebot3-and-nav2-cd24f96d19c6 26 | 27 | #### Robot Configuration 28 | 29 | The arrangement of robots is configured in gazebo_multi_nav2_world.launch.py launch file. A potential future enhancement could involve retrieving the configurations from a file, such as json. 30 | 31 | Names and poses for the robots in nav2 example 32 | ``` 33 |  robots = [ 34 |  {'name': 'tb1', 'x_pose': '-1.5', 'y_pose': '-0.5', 'z_pose': 0.01}, 35 |  {'name': 'tb2', 'x_pose': '-1.5', 'y_pose': '0.5', 'z_pose': 0.01}, 36 |  {'name': 'tb3', 'x_pose': '1.5', 'y_pose': '-0.5', 'z_pose': 0.01}, 37 |  {'name': 'tb4', 'x_pose': '1.5', 'y_pose': '0.5', 'z_pose': 0.01}, 38 |  # … 39 |  # … 40 |  ] 41 | ``` 42 | ``` 43 | ros2 launch turtlebot3_multi_robot gazebo_multi_nav2_world.launch.py enable_drive:=True use_sim_time:=True 44 | ``` 45 | ![image](https://github.com/arshadlab/turtlebot3_multi_robot/assets/85929438/621f8884-1cd4-4eab-8ab4-50c1fd42d13b) 46 | 47 | 48 | Rviz2 output for first robot 49 | 50 | ![image](https://github.com/arshadlab/turtlebot3_multi_robot/assets/85929438/0c3eaae5-74f0-40e8-be80-91bcf2266a4a) 51 | 52 | Rviz2 output for all 4 robots 53 | 54 | ![image](https://github.com/arshadlab/turtlebot3_multi_robot/assets/85929438/e3ae59a2-ddae-4c80-8232-2d06d053b3e8) 55 | -------------------------------------------------------------------------------- /env-hooks/multi_robot.dsv.in: -------------------------------------------------------------------------------- 1 | prepend-non-duplicate;GAZEBO_MODEL_PATH;share/turtlebot3_multi_robot/models 2 | 3 | -------------------------------------------------------------------------------- /launch/gazebo_multi_nav2_world.launch.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # Authors: Arshad Mehmood 16 | 17 | import os 18 | 19 | from ament_index_python.packages import get_package_share_directory 20 | from launch import LaunchDescription 21 | from launch.actions import DeclareLaunchArgument, RegisterEventHandler 22 | from launch.substitutions import LaunchConfiguration 23 | from launch.actions import IncludeLaunchDescription, ExecuteProcess 24 | from launch.launch_description_sources import PythonLaunchDescriptionSource 25 | from launch_ros.actions import Node 26 | from launch.event_handlers import OnProcessExit 27 | from launch.conditions import IfCondition 28 | import launch.logging 29 | 30 | def generate_launch_description(): 31 | ld = LaunchDescription() 32 | 33 | # Names and poses of the robots 34 | robots = [ 35 | {'name': 'tb1', 'x_pose': '-1.5', 'y_pose': '-0.5', 'z_pose': 0.01}, 36 | {'name': 'tb2', 'x_pose': '-1.5', 'y_pose': '0.5', 'z_pose': 0.01}, 37 | {'name': 'tb3', 'x_pose': '1.5', 'y_pose': '-0.5', 'z_pose': 0.01}, 38 | {'name': 'tb4', 'x_pose': '1.5', 'y_pose': '0.5', 'z_pose': 0.01}, 39 | # ... 40 | # ... 41 | ] 42 | 43 | TURTLEBOT3_MODEL = 'waffle' 44 | 45 | use_sim_time = LaunchConfiguration('use_sim_time', default='true') 46 | declare_use_sim_time = DeclareLaunchArgument( 47 | name='use_sim_time', default_value=use_sim_time, description='Use simulator time' 48 | ) 49 | 50 | enable_drive = LaunchConfiguration('enable_drive', default='false') 51 | declare_enable_drive = DeclareLaunchArgument( 52 | name='enable_drive', default_value=enable_drive, description='Enable robot drive node' 53 | ) 54 | 55 | enable_rviz = LaunchConfiguration('enable_rviz', default='true') 56 | declare_enable_rviz = DeclareLaunchArgument( 57 | name='enable_rviz', default_value=enable_rviz, description='Enable rviz launch' 58 | ) 59 | 60 | 61 | turtlebot3_multi_robot = get_package_share_directory('turtlebot3_multi_robot') 62 | 63 | package_dir = get_package_share_directory('turtlebot3_multi_robot') 64 | nav_launch_dir = os.path.join(package_dir, 'launch', 'nav2_bringup') 65 | 66 | rviz_config_file = LaunchConfiguration('rviz_config_file') 67 | declare_rviz_config_file_cmd = DeclareLaunchArgument( 68 | 'rviz_config_file', 69 | default_value=os.path.join( 70 | package_dir, 'rviz', 'multi_nav2_default_view.rviz'), 71 | description='Full path to the RVIZ config file to use') 72 | 73 | urdf = os.path.join( 74 | turtlebot3_multi_robot, 'urdf', 'turtlebot3_' + TURTLEBOT3_MODEL + '.urdf' 75 | ) 76 | 77 | world = os.path.join( 78 | get_package_share_directory('turtlebot3_multi_robot'), 79 | 'worlds', 'multi_robot_world.world') 80 | 81 | gzserver_cmd = IncludeLaunchDescription( 82 | PythonLaunchDescriptionSource( 83 | os.path.join(get_package_share_directory('gazebo_ros'), 'launch', 'gzserver.launch.py') 84 | ), 85 | launch_arguments={'world': world}.items(), 86 | ) 87 | 88 | gzclient_cmd = IncludeLaunchDescription( 89 | PythonLaunchDescriptionSource( 90 | os.path.join(get_package_share_directory('gazebo_ros'), 'launch', 'gzclient.launch.py') 91 | ), 92 | ) 93 | 94 | params_file = LaunchConfiguration('nav_params_file') 95 | declare_params_file_cmd = DeclareLaunchArgument( 96 | 'nav_params_file', 97 | default_value=os.path.join(package_dir, 'params', 'nav2_params.yaml'), 98 | description='Full path to the ROS2 parameters file to use for all launched nodes') 99 | 100 | 101 | ld.add_action(declare_use_sim_time) 102 | ld.add_action(declare_enable_drive) 103 | ld.add_action(declare_enable_rviz) 104 | ld.add_action(declare_rviz_config_file_cmd) 105 | ld.add_action(declare_params_file_cmd) 106 | ld.add_action(gzserver_cmd) 107 | ld.add_action(gzclient_cmd) 108 | 109 | remappings = [('/tf', 'tf'), 110 | ('/tf_static', 'tf_static')] 111 | map_server=Node(package='nav2_map_server', 112 | executable='map_server', 113 | name='map_server', 114 | output='screen', 115 | parameters=[{'yaml_filename': os.path.join(get_package_share_directory('turtlebot3_navigation2'), 'map', 'map.yaml'), 116 | },], 117 | remappings=remappings) 118 | 119 | map_server_lifecyle=Node(package='nav2_lifecycle_manager', 120 | executable='lifecycle_manager', 121 | name='lifecycle_manager_map_server', 122 | output='screen', 123 | parameters=[{'use_sim_time': use_sim_time}, 124 | {'autostart': True}, 125 | {'node_names': ['map_server']}]) 126 | 127 | 128 | ld.add_action(map_server) 129 | ld.add_action(map_server_lifecyle) 130 | 131 | ###################### 132 | 133 | # Remapping is required for state publisher otherwise /tf and /tf_static 134 | # will get be published on root '/' namespace 135 | remappings = [('/tf', 'tf'), ('/tf_static', 'tf_static')] 136 | 137 | last_action = None 138 | # Spawn turtlebot3 instances in gazebo 139 | for robot in robots: 140 | 141 | namespace = [ '/' + robot['name'] ] 142 | 143 | # Create state publisher node for that instance 144 | turtlebot_state_publisher = Node( 145 | package='robot_state_publisher', 146 | namespace=namespace, 147 | executable='robot_state_publisher', 148 | output='screen', 149 | parameters=[{'use_sim_time': use_sim_time, 150 | 'publish_frequency': 10.0}], 151 | remappings=remappings, 152 | arguments=[urdf], 153 | ) 154 | 155 | # Create spawn call 156 | spawn_turtlebot3_burger = Node( 157 | package='gazebo_ros', 158 | executable='spawn_entity.py', 159 | arguments=[ 160 | '-file', os.path.join(turtlebot3_multi_robot,'models', 'turtlebot3_' + TURTLEBOT3_MODEL, 'model.sdf'), 161 | '-entity', robot['name'], 162 | '-robot_namespace', namespace, 163 | '-x', robot['x_pose'], '-y', robot['y_pose'], 164 | '-z', '0.01', '-Y', '0.0', 165 | '-unpause', 166 | ], 167 | output='screen', 168 | ) 169 | 170 | bringup_cmd = IncludeLaunchDescription( 171 | PythonLaunchDescriptionSource( 172 | os.path.join(nav_launch_dir, 'bringup_launch.py')), 173 | launch_arguments={ 174 | 'slam': 'False', 175 | 'namespace': namespace, 176 | 'use_namespace': 'True', 177 | 'map': '', 178 | 'map_server': 'False', 179 | 'params_file': params_file, 180 | 'default_bt_xml_filename': os.path.join( 181 | get_package_share_directory('nav2_bt_navigator'), 182 | 'behavior_trees', 'navigate_w_replanning_and_recovery.xml'), 183 | 'autostart': 'true', 184 | 'use_sim_time': use_sim_time, 'log_level': 'warn'}.items() 185 | ) 186 | 187 | if last_action is None: 188 | # Call add_action directly for the first robot to facilitate chain instantiation via RegisterEventHandler 189 | ld.add_action(turtlebot_state_publisher) 190 | ld.add_action(spawn_turtlebot3_burger) 191 | ld.add_action(bringup_cmd) 192 | 193 | else: 194 | # Use RegisterEventHandler to ensure next robot creation happens only after the previous one is completed. 195 | # Simply calling ld.add_action for spawn_entity introduces issues due to parallel run. 196 | spawn_turtlebot3_event = RegisterEventHandler( 197 | event_handler=OnProcessExit( 198 | target_action=last_action, 199 | on_exit=[spawn_turtlebot3_burger, 200 | turtlebot_state_publisher, 201 | bringup_cmd], 202 | ) 203 | ) 204 | 205 | ld.add_action(spawn_turtlebot3_event) 206 | 207 | # Save last instance for next RegisterEventHandler 208 | last_action = spawn_turtlebot3_burger 209 | ###################### 210 | 211 | ###################### 212 | # Start rviz nodes and drive nodes after the last robot is spawned 213 | for robot in robots: 214 | 215 | namespace = [ '/' + robot['name'] ] 216 | 217 | # Create a initial pose topic publish call 218 | message = '{header: {frame_id: map}, pose: {pose: {position: {x: ' + \ 219 | robot['x_pose'] + ', y: ' + robot['y_pose'] + \ 220 | ', z: 0.1}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0000000}}, }}' 221 | 222 | initial_pose_cmd = ExecuteProcess( 223 | cmd=['ros2', 'topic', 'pub', '-t', '3', '--qos-reliability', 'reliable', namespace + ['/initialpose'], 224 | 'geometry_msgs/PoseWithCovarianceStamped', message], 225 | output='screen' 226 | ) 227 | 228 | rviz_cmd = IncludeLaunchDescription( 229 | PythonLaunchDescriptionSource( 230 | os.path.join(nav_launch_dir, 'rviz_launch.py')), 231 | launch_arguments={'use_sim_time': use_sim_time, 232 | 'namespace': namespace, 233 | 'use_namespace': 'True', 234 | 'rviz_config': rviz_config_file, 'log_level': 'warn'}.items(), 235 | condition=IfCondition(enable_rviz) 236 | ) 237 | 238 | drive_turtlebot3_burger = Node( 239 | package='turtlebot3_gazebo', executable='turtlebot3_drive', 240 | namespace=namespace, output='screen', 241 | condition=IfCondition(enable_drive), 242 | ) 243 | 244 | # Use RegisterEventHandler to ensure next robot rviz launch happens 245 | # only after all robots are spawned 246 | post_spawn_event = RegisterEventHandler( 247 | event_handler=OnProcessExit( 248 | target_action=last_action, 249 | on_exit=[initial_pose_cmd, rviz_cmd, drive_turtlebot3_burger], 250 | ) 251 | ) 252 | 253 | # Perform next rviz and other node instantiation after the previous intialpose request done 254 | last_action = initial_pose_cmd 255 | 256 | ld.add_action(post_spawn_event) 257 | ld.add_action(declare_params_file_cmd) 258 | ###################### 259 | 260 | return ld 261 | -------------------------------------------------------------------------------- /launch/gazebo_multi_world.launch.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # Authors: Arshad Mehmood 16 | 17 | import os 18 | 19 | from ament_index_python.packages import get_package_share_directory 20 | from launch import LaunchDescription 21 | from launch.actions import DeclareLaunchArgument, RegisterEventHandler 22 | from launch.substitutions import LaunchConfiguration 23 | from launch.actions import IncludeLaunchDescription 24 | from launch.launch_description_sources import PythonLaunchDescriptionSource 25 | from launch_ros.actions import Node 26 | from launch.event_handlers import OnProcessExit 27 | from launch.conditions import IfCondition 28 | 29 | 30 | def generate_launch_description(): 31 | ld = LaunchDescription() 32 | 33 | TURTLEBOT3_MODEL = "burger" 34 | 35 | enable_drive = LaunchConfiguration("enable_drive", default="true") 36 | declare_enable_drive = DeclareLaunchArgument( 37 | name="enable_drive", default_value="true", description="Enable robot drive node" 38 | ) 39 | 40 | 41 | turtlebot3_multi_robot = get_package_share_directory("turtlebot3_multi_robot") 42 | launch_file_dir = os.path.join(turtlebot3_multi_robot, "launch") 43 | 44 | world = os.path.join( 45 | turtlebot3_multi_robot, "worlds", "multi_empty_world.world" 46 | ) 47 | 48 | urdf_file_name = "turtlebot3_" + TURTLEBOT3_MODEL + ".urdf" 49 | print("urdf_file_name : {}".format(urdf_file_name)) 50 | 51 | urdf = os.path.join( 52 | turtlebot3_multi_robot, "urdf", urdf_file_name 53 | ) 54 | 55 | gzserver_cmd = IncludeLaunchDescription( 56 | PythonLaunchDescriptionSource( 57 | os.path.join(get_package_share_directory("gazebo_ros"), "launch", "gzserver.launch.py") 58 | ), 59 | launch_arguments={"world": world}.items(), 60 | ) 61 | 62 | gzclient_cmd = IncludeLaunchDescription( 63 | PythonLaunchDescriptionSource( 64 | os.path.join(get_package_share_directory("gazebo_ros"), "launch", "gzclient.launch.py") 65 | ), 66 | ) 67 | 68 | ld.add_action(declare_enable_drive) 69 | ld.add_action(gzserver_cmd) 70 | ld.add_action(gzclient_cmd) 71 | 72 | ROWS = 5 73 | COLS = 5 74 | 75 | x = -ROWS 76 | y = -COLS 77 | last_action = None 78 | 79 | # Remapping is required for state publisher otherwise /tf and /tf_static will get be published on root '/' namespace 80 | remappings = [("/tf", "tf"), ("/tf_static", "tf_static")] 81 | 82 | # Spawn turtlebot3 instances in gazebo 83 | for i in range(COLS): 84 | x = -ROWS 85 | for j in range(ROWS): 86 | # Construct a unique name and namespace 87 | name = "turtlebot" + str(i) + "_" + str(j) 88 | namespace = "/tb" + str(i) + "_" + str(j) 89 | 90 | # Create state publisher node for that instance 91 | turtlebot_state_publisher = Node( 92 | package="robot_state_publisher", 93 | namespace=namespace, 94 | executable="robot_state_publisher", 95 | output="screen", 96 | parameters=[{"use_sim_time": False, 97 | "publish_frequency": 10.0}], 98 | remappings=remappings, 99 | arguments=[urdf], 100 | ) 101 | 102 | # Create spawn call 103 | spawn_turtlebot3_burger = Node( 104 | package="gazebo_ros", 105 | executable="spawn_entity.py", 106 | arguments=[ 107 | "-file", 108 | os.path.join(turtlebot3_multi_robot,'models', 'turtlebot3_' + TURTLEBOT3_MODEL, 'model.sdf'), 109 | "-entity", 110 | name, 111 | "-robot_namespace", 112 | namespace, 113 | "-x", 114 | str(x), 115 | "-y", 116 | str(y), 117 | "-z", 118 | "0.01", 119 | "-Y", 120 | "3.14159", 121 | "-unpause", 122 | ], 123 | output="screen", 124 | ) 125 | 126 | # Advance by 2 meter in x direction for next robot instantiation 127 | x += 2.0 128 | 129 | if last_action is None: 130 | # Call add_action directly for the first robot to facilitate chain instantiation via RegisterEventHandler 131 | ld.add_action(turtlebot_state_publisher) 132 | ld.add_action(spawn_turtlebot3_burger) 133 | 134 | else: 135 | # Use RegisterEventHandler to ensure next robot creation happens only after the previous one is completed. 136 | # Simply calling ld.add_action for spawn_entity introduces issues due to parallel run. 137 | spawn_turtlebot3_event = RegisterEventHandler( 138 | event_handler=OnProcessExit( 139 | target_action=last_action, 140 | on_exit=[spawn_turtlebot3_burger, 141 | turtlebot_state_publisher], 142 | ) 143 | ) 144 | ld.add_action(spawn_turtlebot3_event) 145 | 146 | # Save last instance for next RegisterEventHandler 147 | last_action = spawn_turtlebot3_burger 148 | 149 | # Advance by 2 meter in y direction for next robot instantiation 150 | y += 2.0 151 | 152 | # Start all driving nodes after the last robot is spawned 153 | for i in range(COLS): 154 | for j in range(ROWS): 155 | namespace = "/tb" + str(i) + "_" + str(j) 156 | # Create spawn call 157 | drive_turtlebot3_burger = Node( 158 | package="turtlebot3_gazebo", 159 | executable="turtlebot3_drive", 160 | namespace=namespace, 161 | output="screen", 162 | condition=IfCondition(enable_drive), 163 | ) 164 | 165 | # Use RegisterEventHandler to ensure next robot creation happens only after the previous one is completed. 166 | # Simply calling ld.add_action for spawn_entity introduces issues due to parallel run. 167 | drive_turtlebot3_event = RegisterEventHandler( 168 | event_handler=OnProcessExit( 169 | target_action=last_action, 170 | on_exit=[drive_turtlebot3_burger], 171 | ) 172 | ) 173 | 174 | ld.add_action(drive_turtlebot3_event) 175 | 176 | return ld 177 | -------------------------------------------------------------------------------- /launch/nav2_bringup/bringup_launch.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2018 Intel Corporation 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | import os 16 | 17 | from ament_index_python.packages import get_package_share_directory 18 | 19 | from launch import LaunchDescription 20 | from launch.actions import (DeclareLaunchArgument, GroupAction, 21 | IncludeLaunchDescription, SetEnvironmentVariable) 22 | from launch.conditions import IfCondition 23 | from launch.launch_description_sources import PythonLaunchDescriptionSource 24 | from launch.substitutions import LaunchConfiguration, PythonExpression 25 | from launch_ros.actions import Node 26 | from launch_ros.actions import PushRosNamespace 27 | from nav2_common.launch import RewrittenYaml 28 | 29 | 30 | def generate_launch_description(): 31 | # Get the launch directory 32 | bringup_dir = get_package_share_directory('turtlebot3_multi_robot') 33 | launch_dir = os.path.join(bringup_dir, 'launch', 'nav2_bringup') 34 | 35 | # Create the launch configuration variables 36 | namespace = LaunchConfiguration('namespace') 37 | use_namespace = LaunchConfiguration('use_namespace') 38 | slam = LaunchConfiguration('slam') 39 | map_yaml_file = LaunchConfiguration('map') 40 | map_server=LaunchConfiguration('map_server') 41 | use_sim_time = LaunchConfiguration('use_sim_time') 42 | params_file = LaunchConfiguration('params_file') 43 | autostart = LaunchConfiguration('autostart') 44 | use_composition = LaunchConfiguration('use_composition') 45 | use_respawn = LaunchConfiguration('use_respawn') 46 | log_level = LaunchConfiguration('log_level') 47 | 48 | 49 | 50 | # Map fully qualified names to relative ones so the node's namespace can be prepended. 51 | # In case of the transforms (tf), currently, there doesn't seem to be a better alternative 52 | # https://github.com/ros/geometry2/issues/32 53 | # https://github.com/ros/robot_state_publisher/pull/30 54 | # TODO(orduno) Substitute with `PushNodeRemapping` 55 | # https://github.com/ros2/launch_ros/issues/56 56 | remappings = [('/tf', 'tf'), 57 | ('/tf_static', 'tf_static')] 58 | 59 | # Create our own temporary YAML files that include substitutions 60 | param_substitutions = { 61 | 'use_sim_time': use_sim_time, 62 | 'yaml_filename': map_yaml_file} 63 | 64 | configured_params = RewrittenYaml( 65 | source_file= params_file, 66 | root_key=namespace, 67 | param_rewrites=param_substitutions, 68 | convert_types=True) 69 | 70 | stdout_linebuf_envvar = SetEnvironmentVariable( 71 | 'RCUTILS_LOGGING_BUFFERED_STREAM', '1') 72 | 73 | declare_namespace_cmd = DeclareLaunchArgument( 74 | 'namespace', 75 | default_value='', 76 | description='Top-level namespace') 77 | 78 | declare_use_namespace_cmd = DeclareLaunchArgument( 79 | 'use_namespace', 80 | default_value='false', 81 | description='Whether to apply a namespace to the navigation stack') 82 | 83 | declare_slam_cmd = DeclareLaunchArgument( 84 | 'slam', 85 | default_value='False', 86 | description='Whether run a SLAM') 87 | 88 | declare_map_yaml_cmd = DeclareLaunchArgument( 89 | 'map', 90 | description='Full path to map yaml file to load') 91 | 92 | declare_map_server_cmd = DeclareLaunchArgument( 93 | 'map_server', 94 | default_value='False', 95 | description='Whether run a map server per nav2 stack') 96 | 97 | declare_use_sim_time_cmd = DeclareLaunchArgument( 98 | 'use_sim_time', 99 | default_value='false', 100 | description='Use simulation (Gazebo) clock if true') 101 | 102 | declare_params_file_cmd = DeclareLaunchArgument( 103 | 'params_file', 104 | default_value=os.path.join(bringup_dir, 'params', 'nav2_params.yaml'), 105 | description='Full path to the ROS2 parameters file to use for all launched nodes') 106 | 107 | declare_autostart_cmd = DeclareLaunchArgument( 108 | 'autostart', default_value='true', 109 | description='Automatically startup the nav2 stack') 110 | 111 | declare_use_composition_cmd = DeclareLaunchArgument( 112 | 'use_composition', default_value='False', 113 | description='Whether to use composed bringup') 114 | 115 | declare_use_respawn_cmd = DeclareLaunchArgument( 116 | 'use_respawn', default_value='False', 117 | description='Whether to respawn if a node crashes. Applied when composition is disabled.') 118 | 119 | declare_log_level_cmd = DeclareLaunchArgument( 120 | 'log_level', default_value='info', 121 | description='log level') 122 | 123 | 124 | # Specify the actions 125 | bringup_cmd_group = GroupAction([ 126 | PushRosNamespace( 127 | condition=IfCondition(use_namespace), 128 | namespace=namespace), 129 | 130 | Node( 131 | condition=IfCondition(use_composition), 132 | name='nav2_container', 133 | package='rclcpp_components', 134 | executable='component_container_isolated', 135 | parameters=[configured_params, {'autostart': autostart}], 136 | arguments=['--ros-args', '--log-level', log_level], 137 | remappings=remappings, 138 | output='screen'), 139 | 140 | IncludeLaunchDescription( 141 | PythonLaunchDescriptionSource(os.path.join(launch_dir, 'slam_launch.py')), 142 | condition=IfCondition(slam), 143 | launch_arguments={'namespace': namespace, 144 | 'use_sim_time': use_sim_time, 145 | 'autostart': autostart, 146 | 'use_respawn': use_respawn, 147 | 'params_file': params_file}.items()), 148 | 149 | IncludeLaunchDescription( 150 | PythonLaunchDescriptionSource(os.path.join(launch_dir, 151 | 'localization_launch.py')), 152 | condition=IfCondition(PythonExpression(['not ', slam])), 153 | launch_arguments={'namespace': namespace, 154 | 'map': map_yaml_file, 155 | 'map_server': map_server, 156 | 'use_sim_time': use_sim_time, 157 | 'autostart': autostart, 158 | 'params_file': params_file, 159 | 'use_composition': use_composition, 160 | 'use_respawn': use_respawn, 161 | 'container_name': 'nav2_container'}.items()), 162 | 163 | IncludeLaunchDescription( 164 | PythonLaunchDescriptionSource(os.path.join(launch_dir, 'navigation_launch.py')), 165 | launch_arguments={'namespace': namespace, 166 | 'use_sim_time': use_sim_time, 167 | 'autostart': autostart, 168 | 'params_file': params_file, 169 | 'use_composition': use_composition, 170 | 'use_respawn': use_respawn, 171 | 'container_name': 'nav2_container'}.items()), 172 | ]) 173 | 174 | # Create the launch description and populate 175 | ld = LaunchDescription() 176 | 177 | 178 | 179 | # Set environment variables 180 | ld.add_action(stdout_linebuf_envvar) 181 | 182 | # Declare the launch options 183 | ld.add_action(declare_namespace_cmd) 184 | ld.add_action(declare_use_namespace_cmd) 185 | ld.add_action(declare_slam_cmd) 186 | ld.add_action(declare_map_yaml_cmd) 187 | ld.add_action(declare_use_sim_time_cmd) 188 | ld.add_action(declare_params_file_cmd) 189 | ld.add_action(declare_autostart_cmd) 190 | ld.add_action(declare_use_composition_cmd) 191 | ld.add_action(declare_use_respawn_cmd) 192 | ld.add_action(declare_log_level_cmd) 193 | 194 | # Add the actions to launch all of the navigation nodes 195 | ld.add_action(bringup_cmd_group) 196 | 197 | return ld 198 | -------------------------------------------------------------------------------- /launch/nav2_bringup/localization_launch.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2018 Intel Corporation 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | import os 16 | 17 | from ament_index_python.packages import get_package_share_directory 18 | 19 | from launch import LaunchDescription 20 | from launch.actions import DeclareLaunchArgument, GroupAction, SetEnvironmentVariable 21 | from launch.conditions import IfCondition 22 | from launch.substitutions import LaunchConfiguration, PythonExpression 23 | from launch_ros.actions import LoadComposableNodes 24 | from launch_ros.actions import Node 25 | from launch_ros.descriptions import ComposableNode 26 | from nav2_common.launch import RewrittenYaml 27 | 28 | 29 | def generate_launch_description(): 30 | # Get the launch directory 31 | bringup_dir = get_package_share_directory('turtlebot3_multi_robot') 32 | 33 | namespace = LaunchConfiguration('namespace') 34 | map_yaml_file = LaunchConfiguration('map') 35 | map_server = LaunchConfiguration('map_server') 36 | use_sim_time = LaunchConfiguration('use_sim_time') 37 | autostart = LaunchConfiguration('autostart') 38 | params_file = LaunchConfiguration('params_file') 39 | use_composition = LaunchConfiguration('use_composition') 40 | container_name = LaunchConfiguration('container_name') 41 | container_name_full = (namespace, '/', container_name) 42 | use_respawn = LaunchConfiguration('use_respawn') 43 | log_level = LaunchConfiguration('log_level') 44 | 45 | lifecycle_nodes = ['amcl'] 46 | 47 | # Map fully qualified names to relative ones so the node's namespace can be prepended. 48 | # In case of the transforms (tf), currently, there doesn't seem to be a better alternative 49 | # https://github.com/ros/geometry2/issues/32 50 | # https://github.com/ros/robot_state_publisher/pull/30 51 | # TODO(orduno) Substitute with `PushNodeRemapping` 52 | # https://github.com/ros2/launch_ros/issues/56 53 | remappings = [('/tf', 'tf'), 54 | ('/tf_static', 'tf_static'), 55 | ('/scan', 'scan')] 56 | 57 | # Create our own temporary YAML files that include substitutions 58 | param_substitutions = { 59 | 'use_sim_time': use_sim_time, 60 | 'yaml_filename': map_yaml_file} 61 | 62 | configured_params = RewrittenYaml( 63 | source_file=params_file, 64 | root_key=namespace, 65 | param_rewrites=param_substitutions, 66 | convert_types=True) 67 | 68 | stdout_linebuf_envvar = SetEnvironmentVariable( 69 | 'RCUTILS_LOGGING_BUFFERED_STREAM', '1') 70 | 71 | declare_namespace_cmd = DeclareLaunchArgument( 72 | 'namespace', 73 | default_value='', 74 | description='Top-level namespace') 75 | 76 | declare_map_yaml_cmd = DeclareLaunchArgument( 77 | 'map', 78 | description='Full path to map yaml file to load') 79 | 80 | declare_map_server_cmd = DeclareLaunchArgument( 81 | 'map_server', 82 | default_value='True', 83 | description='Whether run a map server per nav2 stack') 84 | 85 | declare_use_sim_time_cmd = DeclareLaunchArgument( 86 | 'use_sim_time', 87 | default_value='false', 88 | description='Use simulation (Gazebo) clock if true') 89 | 90 | declare_params_file_cmd = DeclareLaunchArgument( 91 | 'params_file', 92 | default_value=os.path.join(bringup_dir, 'params', 'nav2_params.yaml'), 93 | description='Full path to the ROS2 parameters file to use for all launched nodes') 94 | 95 | declare_autostart_cmd = DeclareLaunchArgument( 96 | 'autostart', default_value='true', 97 | description='Automatically startup the nav2 stack') 98 | 99 | declare_use_composition_cmd = DeclareLaunchArgument( 100 | 'use_composition', default_value='False', 101 | description='Use composed bringup if True') 102 | 103 | declare_container_name_cmd = DeclareLaunchArgument( 104 | 'container_name', default_value='nav2_container', 105 | description='the name of conatiner that nodes will load in if use composition') 106 | 107 | declare_use_respawn_cmd = DeclareLaunchArgument( 108 | 'use_respawn', default_value='False', 109 | description='Whether to respawn if a node crashes. Applied when composition is disabled.') 110 | 111 | declare_log_level_cmd = DeclareLaunchArgument( 112 | 'log_level', default_value='info', 113 | description='log level') 114 | 115 | load_nodes = GroupAction( 116 | condition=IfCondition(PythonExpression(['not ', use_composition])), 117 | actions=[ 118 | Node( 119 | condition=IfCondition(map_server), 120 | package='nav2_map_server', 121 | executable='map_server', 122 | name='map_server', 123 | output='screen', 124 | respawn=use_respawn, 125 | respawn_delay=2.0, 126 | parameters=[configured_params], 127 | arguments=['--ros-args', '--log-level', log_level], 128 | remappings=remappings), 129 | Node( 130 | package='nav2_amcl', 131 | executable='amcl', 132 | name='amcl', 133 | output='screen', 134 | respawn=use_respawn, 135 | respawn_delay=2.0, 136 | parameters=[configured_params], 137 | arguments=['--ros-args', '--log-level', log_level], 138 | remappings=remappings), 139 | Node( 140 | package='nav2_lifecycle_manager', 141 | executable='lifecycle_manager', 142 | name='lifecycle_manager_localization', 143 | output='screen', 144 | arguments=['--ros-args', '--log-level', log_level], 145 | parameters=[{'use_sim_time': use_sim_time}, 146 | {'autostart': autostart}, 147 | {'node_names': ['amcl']}]), 148 | Node( 149 | condition=IfCondition(map_server), 150 | package='nav2_lifecycle_manager', 151 | executable='lifecycle_manager', 152 | name='lifecycle_manager_map_server', 153 | output='screen', 154 | arguments=['--ros-args', '--log-level', log_level], 155 | parameters=[{'use_sim_time': use_sim_time}, 156 | {'autostart': autostart}, 157 | {'node_names': ['map_server']}]) 158 | ] 159 | ) 160 | 161 | load_composable_nodes = LoadComposableNodes( 162 | condition=IfCondition(use_composition), 163 | target_container=container_name_full, 164 | composable_node_descriptions=[ 165 | ComposableNode( 166 | ##condition=IfCondition(map_server), #TODO 167 | package='nav2_map_server', 168 | plugin='nav2_map_server::MapServer', 169 | name='map_server', 170 | parameters=[configured_params], 171 | remappings=remappings), 172 | ComposableNode( 173 | package='nav2_amcl', 174 | plugin='nav2_amcl::AmclNode', 175 | name='amcl', 176 | parameters=[configured_params], 177 | remappings=remappings), 178 | ComposableNode( 179 | package='nav2_lifecycle_manager', 180 | plugin='nav2_lifecycle_manager::LifecycleManager', 181 | name='lifecycle_manager_localization', 182 | parameters=[{'use_sim_time': use_sim_time, 183 | 'autostart': autostart, 184 | 'node_names': ['amcl']}]), 185 | ], 186 | ) 187 | 188 | # Create the launch description and populate 189 | ld = LaunchDescription() 190 | 191 | 192 | # Set environment variables 193 | ld.add_action(stdout_linebuf_envvar) 194 | 195 | # Declare the launch options 196 | ld.add_action(declare_namespace_cmd) 197 | ld.add_action(declare_map_yaml_cmd) 198 | ld.add_action(declare_map_server_cmd) 199 | ld.add_action(declare_use_sim_time_cmd) 200 | ld.add_action(declare_params_file_cmd) 201 | ld.add_action(declare_autostart_cmd) 202 | ld.add_action(declare_use_composition_cmd) 203 | ld.add_action(declare_container_name_cmd) 204 | ld.add_action(declare_use_respawn_cmd) 205 | ld.add_action(declare_log_level_cmd) 206 | 207 | # Add the actions to launch all of the localiztion nodes 208 | ld.add_action(load_nodes) 209 | ld.add_action(load_composable_nodes) 210 | 211 | return ld 212 | -------------------------------------------------------------------------------- /launch/nav2_bringup/navigation_launch.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2018 Intel Corporation 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | import os 16 | 17 | from ament_index_python.packages import get_package_share_directory 18 | 19 | from launch import LaunchDescription 20 | from launch.actions import DeclareLaunchArgument, GroupAction, SetEnvironmentVariable 21 | from launch.conditions import IfCondition 22 | from launch.substitutions import LaunchConfiguration, PythonExpression 23 | from launch_ros.actions import LoadComposableNodes 24 | from launch_ros.actions import Node 25 | from launch_ros.descriptions import ComposableNode 26 | from nav2_common.launch import RewrittenYaml 27 | 28 | 29 | def generate_launch_description(): 30 | # Get the launch directory 31 | bringup_dir = get_package_share_directory('turtlebot3_gazebo') 32 | 33 | namespace = LaunchConfiguration('namespace') 34 | use_sim_time = LaunchConfiguration('use_sim_time') 35 | autostart = LaunchConfiguration('autostart') 36 | params_file = LaunchConfiguration('params_file') 37 | use_composition = LaunchConfiguration('use_composition') 38 | container_name = LaunchConfiguration('container_name') 39 | container_name_full = (namespace, '/', container_name) 40 | use_respawn = LaunchConfiguration('use_respawn') 41 | log_level = LaunchConfiguration('log_level') 42 | 43 | lifecycle_nodes = ['controller_server', 44 | 'smoother_server', 45 | 'planner_server', 46 | 'behavior_server', 47 | 'bt_navigator', 48 | 'waypoint_follower', 49 | 'velocity_smoother'] 50 | 51 | lifecycle_nodes1 = ['bt_navigator', 52 | ] 53 | 54 | 55 | # Map fully qualified names to relative ones so the node's namespace can be prepended. 56 | # In case of the transforms (tf), currently, there doesn't seem to be a better alternative 57 | # https://github.com/ros/geometry2/issues/32 58 | # https://github.com/ros/robot_state_publisher/pull/30 59 | # TODO(orduno) Substitute with `PushNodeRemapping` 60 | # https://github.com/ros2/launch_ros/issues/56 61 | remappings = [('/tf', 'tf'), 62 | ('/tf_static', 'tf_static'), 63 | ('/scan', [namespace, '/scan'])] 64 | 65 | # Create our own temporary YAML files that include substitutions 66 | param_substitutions = { 67 | 'use_sim_time': use_sim_time, 68 | 'autostart': autostart} 69 | 70 | configured_params = RewrittenYaml( 71 | source_file=params_file, 72 | root_key=namespace, 73 | param_rewrites=param_substitutions, 74 | convert_types=True) 75 | 76 | stdout_linebuf_envvar = SetEnvironmentVariable( 77 | 'RCUTILS_LOGGING_BUFFERED_STREAM', '1') 78 | 79 | declare_namespace_cmd = DeclareLaunchArgument( 80 | 'namespace', 81 | default_value='', 82 | description='Top-level namespace') 83 | 84 | declare_use_sim_time_cmd = DeclareLaunchArgument( 85 | 'use_sim_time', 86 | default_value='false', 87 | description='Use simulation (Gazebo) clock if true') 88 | 89 | declare_params_file_cmd = DeclareLaunchArgument( 90 | 'params_file', 91 | default_value=os.path.join(bringup_dir, 'params', 'nav2_params.yaml'), 92 | description='Full path to the ROS2 parameters file to use for all launched nodes') 93 | 94 | declare_autostart_cmd = DeclareLaunchArgument( 95 | 'autostart', default_value='true', 96 | description='Automatically startup the nav2 stack') 97 | 98 | declare_use_composition_cmd = DeclareLaunchArgument( 99 | 'use_composition', default_value='False', 100 | description='Use composed bringup if True') 101 | 102 | declare_container_name_cmd = DeclareLaunchArgument( 103 | 'container_name', default_value='nav2_container', 104 | description='the name of conatiner that nodes will load in if use composition') 105 | 106 | declare_use_respawn_cmd = DeclareLaunchArgument( 107 | 'use_respawn', default_value='False', 108 | description='Whether to respawn if a node crashes. Applied when composition is disabled.') 109 | 110 | declare_log_level_cmd = DeclareLaunchArgument( 111 | 'log_level', default_value='info', 112 | description='log level') 113 | 114 | load_nodes = GroupAction( 115 | condition=IfCondition(PythonExpression(['not ', use_composition])), 116 | actions=[ 117 | Node( 118 | package='nav2_controller', 119 | executable='controller_server', 120 | output='screen', 121 | respawn=use_respawn, 122 | respawn_delay=2.0, 123 | parameters=[configured_params], 124 | arguments=['--ros-args', '--log-level', log_level], 125 | remappings=remappings + [('cmd_vel', 'cmd_vel_nav')]), 126 | Node( 127 | package='nav2_smoother', 128 | executable='smoother_server', 129 | name='smoother_server', 130 | output='screen', 131 | respawn=use_respawn, 132 | respawn_delay=2.0, 133 | parameters=[configured_params], 134 | arguments=['--ros-args', '--log-level', log_level], 135 | remappings=remappings), 136 | Node( 137 | package='nav2_planner', 138 | executable='planner_server', 139 | name='planner_server', 140 | output='screen', 141 | respawn=use_respawn, 142 | respawn_delay=2.0, 143 | parameters=[configured_params], 144 | arguments=['--ros-args', '--log-level', log_level], 145 | remappings=remappings), 146 | Node( 147 | package='nav2_behaviors', 148 | executable='behavior_server', 149 | name='behavior_server', 150 | output='screen', 151 | respawn=use_respawn, 152 | respawn_delay=2.0, 153 | parameters=[configured_params], 154 | arguments=['--ros-args', '--log-level', log_level], 155 | remappings=remappings), 156 | Node( 157 | package='nav2_bt_navigator', 158 | executable='bt_navigator', 159 | name='bt_navigator', 160 | output='screen', 161 | respawn=use_respawn, 162 | respawn_delay=2.0, 163 | parameters=[configured_params], 164 | arguments=['--ros-args', '--log-level', log_level], 165 | remappings=remappings), 166 | Node( 167 | package='nav2_waypoint_follower', 168 | executable='waypoint_follower', 169 | name='waypoint_follower', 170 | output='screen', 171 | respawn=use_respawn, 172 | respawn_delay=2.0, 173 | parameters=[configured_params], 174 | arguments=['--ros-args', '--log-level', log_level], 175 | remappings=remappings), 176 | Node( 177 | package='nav2_velocity_smoother', 178 | executable='velocity_smoother', 179 | name='velocity_smoother', 180 | output='screen', 181 | respawn=use_respawn, 182 | respawn_delay=2.0, 183 | parameters=[configured_params], 184 | arguments=['--ros-args', '--log-level', log_level], 185 | remappings=remappings + 186 | [('cmd_vel', 'cmd_vel_nav'), ('cmd_vel_smoothed', 'cmd_vel')]), 187 | Node( 188 | package='nav2_lifecycle_manager', 189 | executable='lifecycle_manager', 190 | name='lifecycle_manager_navigation', 191 | output='screen', 192 | arguments=['--ros-args', '--log-level', log_level], 193 | parameters=[{'use_sim_time': use_sim_time}, 194 | {'autostart': autostart}, 195 | {'node_names': lifecycle_nodes}]), 196 | ] 197 | ) 198 | 199 | load_composable_nodes = LoadComposableNodes( 200 | condition=IfCondition(use_composition), 201 | target_container=container_name_full, 202 | composable_node_descriptions=[ 203 | ComposableNode( 204 | package='nav2_controller', 205 | plugin='nav2_controller::ControllerServer', 206 | name='controller_server', 207 | parameters=[configured_params], 208 | remappings=remappings + [('cmd_vel', 'cmd_vel_nav')]), 209 | ComposableNode( 210 | package='nav2_smoother', 211 | plugin='nav2_smoother::SmootherServer', 212 | name='smoother_server', 213 | parameters=[configured_params], 214 | remappings=remappings), 215 | ComposableNode( 216 | package='nav2_planner', 217 | plugin='nav2_planner::PlannerServer', 218 | name='planner_server', 219 | parameters=[configured_params], 220 | remappings=remappings), 221 | ComposableNode( 222 | package='nav2_behaviors', 223 | plugin='behavior_server::BehaviorServer', 224 | name='behavior_server', 225 | parameters=[configured_params], 226 | remappings=remappings), 227 | ComposableNode( 228 | package='nav2_bt_navigator', 229 | plugin='nav2_bt_navigator::BtNavigator', 230 | name='bt_navigator', 231 | parameters=[configured_params], 232 | remappings=remappings), 233 | ComposableNode( 234 | package='nav2_waypoint_follower', 235 | plugin='nav2_waypoint_follower::WaypointFollower', 236 | name='waypoint_follower', 237 | parameters=[configured_params], 238 | remappings=remappings), 239 | ComposableNode( 240 | package='nav2_velocity_smoother', 241 | plugin='nav2_velocity_smoother::VelocitySmoother', 242 | name='velocity_smoother', 243 | parameters=[configured_params], 244 | remappings=remappings + 245 | [('cmd_vel', 'cmd_vel_nav'), ('cmd_vel_smoothed', 'cmd_vel')]), 246 | ComposableNode( 247 | package='nav2_lifecycle_manager', 248 | plugin='nav2_lifecycle_manager::LifecycleManager', 249 | name='lifecycle_manager_navigation', 250 | parameters=[{'use_sim_time': use_sim_time, 251 | 'autostart': autostart, 252 | 'node_names': lifecycle_nodes}]), 253 | ], 254 | ) 255 | 256 | # Create the launch description and populate 257 | ld = LaunchDescription() 258 | 259 | # Set environment variables 260 | ld.add_action(stdout_linebuf_envvar) 261 | 262 | # Declare the launch options 263 | ld.add_action(declare_namespace_cmd) 264 | ld.add_action(declare_use_sim_time_cmd) 265 | ld.add_action(declare_params_file_cmd) 266 | ld.add_action(declare_autostart_cmd) 267 | ld.add_action(declare_use_composition_cmd) 268 | ld.add_action(declare_container_name_cmd) 269 | ld.add_action(declare_use_respawn_cmd) 270 | ld.add_action(declare_log_level_cmd) 271 | # Add the actions to launch all of the navigation nodes 272 | ld.add_action(load_nodes) 273 | ld.add_action(load_composable_nodes) 274 | 275 | return ld 276 | -------------------------------------------------------------------------------- /launch/nav2_bringup/rviz_launch.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2018 Intel Corporation 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | import os 16 | 17 | from ament_index_python.packages import get_package_share_directory 18 | 19 | from launch import LaunchDescription 20 | from launch.actions import DeclareLaunchArgument, EmitEvent, RegisterEventHandler 21 | from launch.conditions import IfCondition, UnlessCondition 22 | from launch.event_handlers import OnProcessExit 23 | from launch.events import Shutdown 24 | from launch.substitutions import LaunchConfiguration 25 | from launch_ros.actions import Node 26 | from nav2_common.launch import ReplaceString 27 | 28 | 29 | def generate_launch_description(): 30 | # Get the launch directory 31 | bringup_dir = get_package_share_directory('nav2_bringup') 32 | 33 | # Create the launch configuration variables 34 | namespace = LaunchConfiguration('namespace') 35 | use_namespace = LaunchConfiguration('use_namespace') 36 | rviz_config_file = LaunchConfiguration('rviz_config') 37 | 38 | # Declare the launch arguments 39 | declare_namespace_cmd = DeclareLaunchArgument( 40 | 'namespace', 41 | default_value='navigation', 42 | description=('Top-level namespace. The value will be used to replace the ' 43 | ' keyword on the rviz config file.')) 44 | 45 | declare_use_namespace_cmd = DeclareLaunchArgument( 46 | 'use_namespace', 47 | default_value='false', 48 | description='Whether to apply a namespace to the navigation stack') 49 | 50 | declare_rviz_config_file_cmd = DeclareLaunchArgument( 51 | 'rviz_config', 52 | default_value=os.path.join(bringup_dir, 'rviz', 'nav2_default_view.rviz'), 53 | description='Full path to the RVIZ config file to use') 54 | 55 | # Launch rviz 56 | start_rviz_cmd = Node( 57 | condition=UnlessCondition(use_namespace), 58 | package='rviz2', 59 | executable='rviz2', 60 | arguments=['-d', rviz_config_file], 61 | output='screen') 62 | 63 | namespaced_rviz_config_file = ReplaceString( 64 | source_file=rviz_config_file, 65 | replacements={'': ('/', namespace)}) 66 | 67 | start_namespaced_rviz_cmd = Node( 68 | condition=IfCondition(use_namespace), 69 | package='rviz2', 70 | executable='rviz2', 71 | namespace=namespace, 72 | arguments=['-d', namespaced_rviz_config_file], 73 | output='screen', 74 | remappings=[('/tf', 'tf'), 75 | ('/tf_static', 'tf_static'), 76 | ('/goal_pose', 'goal_pose'), 77 | ('/clicked_point', 'clicked_point'), 78 | ('/initialpose', 'initialpose')]) 79 | 80 | exit_event_handler = RegisterEventHandler( 81 | condition=UnlessCondition(use_namespace), 82 | event_handler=OnProcessExit( 83 | target_action=start_rviz_cmd, 84 | on_exit=EmitEvent(event=Shutdown(reason='rviz exited')))) 85 | 86 | exit_event_handler_namespaced = RegisterEventHandler( 87 | condition=IfCondition(use_namespace), 88 | event_handler=OnProcessExit( 89 | target_action=start_namespaced_rviz_cmd, 90 | on_exit=EmitEvent(event=Shutdown(reason='rviz exited')))) 91 | 92 | # Create the launch description and populate 93 | ld = LaunchDescription() 94 | 95 | # Declare the launch options 96 | ld.add_action(declare_namespace_cmd) 97 | ld.add_action(declare_use_namespace_cmd) 98 | ld.add_action(declare_rviz_config_file_cmd) 99 | 100 | # Add any conditioned actions 101 | ld.add_action(start_rviz_cmd) 102 | ld.add_action(start_namespaced_rviz_cmd) 103 | 104 | # Add other nodes and processes we need 105 | ld.add_action(exit_event_handler) 106 | ld.add_action(exit_event_handler_namespaced) 107 | 108 | return ld 109 | -------------------------------------------------------------------------------- /launch/nav2_bringup/slam_launch.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2020 Samsung Research Russia 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | import os 16 | 17 | from ament_index_python.packages import get_package_share_directory 18 | 19 | from launch import LaunchDescription 20 | from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription 21 | from launch.conditions import IfCondition, UnlessCondition 22 | from launch.launch_description_sources import PythonLaunchDescriptionSource 23 | from launch.substitutions import LaunchConfiguration 24 | from launch_ros.actions import Node 25 | from nav2_common.launch import HasNodeParams, RewrittenYaml 26 | 27 | 28 | def generate_launch_description(): 29 | # Input parameters declaration 30 | namespace = LaunchConfiguration('namespace') 31 | params_file = LaunchConfiguration('params_file') 32 | use_sim_time = LaunchConfiguration('use_sim_time') 33 | autostart = LaunchConfiguration('autostart') 34 | use_respawn = LaunchConfiguration('use_respawn') 35 | log_level = LaunchConfiguration('log_level') 36 | 37 | # Variables 38 | lifecycle_nodes = ['map_saver'] 39 | 40 | # Getting directories and launch-files 41 | bringup_dir = get_package_share_directory('turtlebot3_multi_robot') 42 | slam_toolbox_dir = get_package_share_directory('slam_toolbox') 43 | slam_launch_file = os.path.join(slam_toolbox_dir, 'launch', 'online_sync_launch.py') 44 | 45 | # Create our own temporary YAML files that include substitutions 46 | param_substitutions = { 47 | 'use_sim_time': use_sim_time} 48 | 49 | configured_params = RewrittenYaml( 50 | source_file=params_file, 51 | root_key=namespace, 52 | param_rewrites=param_substitutions, 53 | convert_types=True) 54 | 55 | # Declare the launch arguments 56 | declare_namespace_cmd = DeclareLaunchArgument( 57 | 'namespace', 58 | default_value='', 59 | description='Top-level namespace') 60 | 61 | declare_params_file_cmd = DeclareLaunchArgument( 62 | 'params_file', 63 | default_value=os.path.join(bringup_dir, 'params', 'nav2_params.yaml'), 64 | description='Full path to the ROS2 parameters file to use for all launched nodes') 65 | 66 | declare_use_sim_time_cmd = DeclareLaunchArgument( 67 | 'use_sim_time', 68 | default_value='True', 69 | description='Use simulation (Gazebo) clock if true') 70 | 71 | declare_autostart_cmd = DeclareLaunchArgument( 72 | 'autostart', default_value='True', 73 | description='Automatically startup the nav2 stack') 74 | 75 | declare_use_respawn_cmd = DeclareLaunchArgument( 76 | 'use_respawn', default_value='False', 77 | description='Whether to respawn if a node crashes. Applied when composition is disabled.') 78 | 79 | declare_log_level_cmd = DeclareLaunchArgument( 80 | 'log_level', default_value='info', 81 | description='log level') 82 | 83 | # Nodes launching commands 84 | 85 | start_map_saver_server_cmd = Node( 86 | package='nav2_map_server', 87 | executable='map_saver_server', 88 | output='screen', 89 | respawn=use_respawn, 90 | respawn_delay=2.0, 91 | arguments=['--ros-args', '--log-level', log_level], 92 | parameters=[configured_params]) 93 | 94 | start_lifecycle_manager_cmd = Node( 95 | package='nav2_lifecycle_manager', 96 | executable='lifecycle_manager', 97 | name='lifecycle_manager_slam', 98 | output='screen', 99 | arguments=['--ros-args', '--log-level', log_level], 100 | parameters=[{'use_sim_time': use_sim_time}, 101 | {'autostart': autostart}, 102 | {'node_names': lifecycle_nodes}]) 103 | 104 | # If the provided param file doesn't have slam_toolbox params, we must remove the 'params_file' 105 | # LaunchConfiguration, or it will be passed automatically to slam_toolbox and will not load 106 | # the default file 107 | has_slam_toolbox_params = HasNodeParams(source_file=params_file, 108 | node_name='slam_toolbox') 109 | 110 | start_slam_toolbox_cmd = IncludeLaunchDescription( 111 | PythonLaunchDescriptionSource(slam_launch_file), 112 | launch_arguments={'use_sim_time': use_sim_time}.items(), 113 | condition=UnlessCondition(has_slam_toolbox_params)) 114 | 115 | start_slam_toolbox_cmd_with_params = IncludeLaunchDescription( 116 | PythonLaunchDescriptionSource(slam_launch_file), 117 | launch_arguments={'use_sim_time': use_sim_time, 118 | 'slam_params_file': params_file}.items(), 119 | condition=IfCondition(has_slam_toolbox_params)) 120 | 121 | ld = LaunchDescription() 122 | 123 | # Declare the launch options 124 | ld.add_action(declare_namespace_cmd) 125 | ld.add_action(declare_params_file_cmd) 126 | ld.add_action(declare_use_sim_time_cmd) 127 | ld.add_action(declare_autostart_cmd) 128 | ld.add_action(declare_use_respawn_cmd) 129 | ld.add_action(declare_log_level_cmd) 130 | 131 | # Running Map Saver Server 132 | ld.add_action(start_map_saver_server_cmd) 133 | ld.add_action(start_lifecycle_manager_cmd) 134 | 135 | # Running SLAM Toolbox (Only one of them will be run) 136 | ld.add_action(start_slam_toolbox_cmd) 137 | ld.add_action(start_slam_toolbox_cmd_with_params) 138 | 139 | return ld 140 | -------------------------------------------------------------------------------- /models/turtlebot3_burger/meshes/burger_base.dae: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Blender User 6 | Blender 2.83.0 commit date:2020-06-03, commit time:14:38, hash:211b6c29f771 7 | 8 | 2020-06-29T17:10:17 9 | 2020-06-29T17:10:17 10 | 11 | Z_UP 12 | 13 | 14 | 15 | 16 | 17 | 18 | 39.59775 19 | 1.777778 20 | 0.1 21 | 100 22 | 23 | 24 | 25 | 26 | 27 | 0 28 | 0 29 | 10 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 1000 1000 1000 39 | 1 40 | 0 41 | 0.00111109 42 | 43 | 44 | 45 | 46 | 0 47 | 0 48 | 1 49 | 1 50 | 1 51 | 1 52 | 1 53 | 0 54 | 0 55 | 0 56 | 1000 57 | 29.99998 58 | 75 59 | 0.15 60 | 0 61 | 1 62 | 2 63 | 0.04999995 64 | 30.002 65 | 1 66 | 3 67 | 2880 68 | 3 69 | 1 70 | 1 71 | 0.1 72 | 0.1 73 | 1 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 0 0 0 1 85 | 86 | 87 | 0.8 0.8 0.8 1 88 | 89 | 90 | 1.45 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | -0.5664003 -1 -1 -1 -0.5664004 -1 -1 -0.5664003 1.061318 -0.5664004 -1 1.061318 -1 0.5664003 -1 -0.5664004 1 -1 -0.5664003 1 1.061318 -1 0.5664004 1.061318 1 -0.5664003 -1 0.5664004 -1 -1 0.5664003 -1 1.061318 1 -0.5664004 1.061318 0.5664003 1 -1 1 0.5664004 -1 1 0.5664003 1.061318 0.5664004 1 1.061318 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 0 -1 0 1 0 0 0 0 1 -1 0 0 0 1 0 -0.7071068 -0.7071068 0 -0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.7071068 -0.7071068 0 0 0 -1 0 -1 0 0 0 1 0 0 1 0 1 0 -0.7071068 -0.7071068 0 -0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.7071068 -0.7071068 0 0 0 -1 0 0 -1 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 0.625 0.8041999 0.375 0.9458001 0.375 0.8041999 0.625 0.5541999 0.375 0.6958 0.375 0.5541999 0.8208 0.75 0.6792 0.75 0.625 0.6958 0.625 0.05419993 0.375 0.1958 0.375 0.05419993 0.625 0.3041999 0.375 0.4458 0.375 0.3041999 0.625 0.9458001 0.375 1 0.375 0.9458001 0.375 0.3041999 0.625 0.1958 0.625 0.3041999 0.375 0.5541999 0.625 0.4458 0.625 0.5541999 0.375 0.8041999 0.625 0.6958 0.625 0.8041999 0.3208 0.75 0.1791999 0.75 0.125 0.6958 0.625 0.8041999 0.625 0.9458001 0.375 0.9458001 0.625 0.5541999 0.625 0.6958 0.375 0.6958 0.625 0.6958 0.625 0.5541999 0.875 0.5541999 0.625 0.5541999 0.6791999 0.5 0.875 0.5541999 0.6791999 0.5 0.8208 0.5 0.875 0.5541999 0.875 0.5541999 0.875 0.6958 0.625 0.6958 0.875 0.6958 0.8208 0.75 0.625 0.6958 0.625 0.05419993 0.625 0.1958 0.375 0.1958 0.625 0.3041999 0.625 0.4458 0.375 0.4458 0.625 0.9458001 0.625 1 0.375 1 0.375 0.3041999 0.375 0.1958 0.625 0.1958 0.375 0.5541999 0.375 0.4458 0.625 0.4458 0.375 0.8041999 0.375 0.6958 0.625 0.6958 0.125 0.6958 0.125 0.5541999 0.375 0.5541999 0.125 0.5541999 0.1791999 0.5 0.375 0.5541999 0.1791999 0.5 0.3208 0.5 0.375 0.5541999 0.375 0.5541999 0.375 0.6958 0.125 0.6958 0.375 0.6958 0.3208 0.75 0.125 0.6958 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 |

10 0 0 0 0 1 9 0 2 14 1 3 8 1 4 13 1 5 3 2 6 10 2 7 11 2 8 2 3 9 4 3 10 1 3 11 6 4 12 12 4 13 5 4 14 3 5 15 1 5 16 0 5 17 5 6 18 7 6 19 6 6 20 13 7 21 15 7 22 14 7 23 9 8 24 11 8 25 10 8 26 9 9 27 0 9 28 1 9 29 10 10 30 3 10 31 0 10 32 14 1 33 11 1 34 8 1 35 11 11 36 14 11 37 7 11 38 14 2 39 15 2 40 7 2 41 15 2 42 6 2 43 7 2 44 7 12 45 2 12 46 11 12 47 2 2 48 3 2 49 11 2 50 2 3 51 7 3 52 4 3 53 6 13 54 15 13 55 12 13 56 3 14 57 2 14 58 1 14 59 5 15 60 4 15 61 7 15 62 13 16 63 12 16 64 15 16 65 9 17 66 8 17 67 11 17 68 1 18 69 4 18 70 13 18 71 4 9 72 5 9 73 13 9 74 5 9 75 12 9 76 13 9 77 13 19 78 8 19 79 1 19 80 8 9 81 9 9 82 1 9 83

143 |
144 |
145 |
146 | 147 | 148 | 149 | 1 1 1 1 1 -1 1 -1 1 1 -1 -1 -1 1 1 -1 1 -1 -1 -1 1 -1 -1 -1 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 0 0 1 0 -1 0 -1 0 0 0 0 -1 1 0 0 0 1 0 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 0.875 0.5 0.625 0.75 0.625 0.5 0.625 0.75 0.375 1 0.375 0.75 0.625 0 0.375 0.25 0.375 0 0.375 0.5 0.125 0.75 0.125 0.5 0.625 0.5 0.375 0.75 0.375 0.5 0.625 0.25 0.375 0.5 0.375 0.25 0.875 0.5 0.875 0.75 0.625 0.75 0.625 0.75 0.625 1 0.375 1 0.625 0 0.625 0.25 0.375 0.25 0.375 0.5 0.375 0.75 0.125 0.75 0.625 0.5 0.625 0.75 0.375 0.75 0.625 0.25 0.625 0.5 0.375 0.5 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 |

4 0 0 2 0 1 0 0 2 2 1 3 7 1 4 3 1 5 6 2 6 5 2 7 7 2 8 1 3 9 7 3 10 5 3 11 0 4 12 3 4 13 1 4 14 4 5 15 1 5 16 5 5 17 4 0 18 6 0 19 2 0 20 2 1 21 6 1 22 7 1 23 6 2 24 4 2 25 5 2 26 1 3 27 3 3 28 7 3 29 0 4 30 2 4 31 3 4 32 4 5 33 0 5 34 1 5 35

185 |
186 |
187 |
188 |
189 | 190 | 191 | 192 | 68.44905 0 0 0 0 68.44905 0 0 0 0 68.44905 68.59841 0 0 0 1 193 | 194 | 195 | 196 | 0.6859207 -0.3240135 0.6515582 7.358891 0.7276763 0.3054208 -0.6141704 -6.925791 0 0.8953956 0.4452714 4.958309 0 0 0 1 197 | 198 | 199 | 200 | -0.2908646 -0.7711008 0.5663932 4.076245 0.9551712 -0.1998834 0.2183912 1.005454 -0.05518906 0.6045247 0.7946723 5.903862 0 0 0 1 201 | 202 | 203 | 204 | 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 |
-------------------------------------------------------------------------------- /models/turtlebot3_burger/meshes/tire.dae: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Blender User 6 | Blender 2.83.0 commit date:2020-06-03, commit time:14:38, hash:211b6c29f771 7 | 8 | 2020-06-29T17:39:41 9 | 2020-06-29T17:39:41 10 | 11 | Z_UP 12 | 13 | 14 | 15 | 16 | 17 | 18 | 39.59775 19 | 1.777778 20 | 0.1 21 | 100 22 | 23 | 24 | 25 | 26 | 27 | 0 28 | 0 29 | 10 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 1000 1000 1000 39 | 1 40 | 0 41 | 0.00111109 42 | 43 | 44 | 45 | 46 | 0 47 | 0 48 | 1 49 | 1 50 | 1 51 | 1 52 | 1 53 | 0 54 | 0 55 | 0 56 | 1000 57 | 29.99998 58 | 75 59 | 0.15 60 | 0 61 | 1 62 | 2 63 | 0.04999995 64 | 30.002 65 | 1 66 | 3 67 | 2880 68 | 3 69 | 1 70 | 1 71 | 0.1 72 | 0.1 73 | 1 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 0 1 -1 0 1 1 0.1950903 0.9807853 -1 0.1950903 0.9807853 1 0.3826835 0.9238795 -1 0.3826835 0.9238795 1 0.5555703 0.8314696 -1 0.5555703 0.8314696 1 0.7071068 0.7071068 -1 0.7071068 0.7071068 1 0.8314697 0.5555702 -1 0.8314697 0.5555702 1 0.9238795 0.3826834 -1 0.9238795 0.3826834 1 0.9807853 0.1950903 -1 0.9807853 0.1950903 1 1 0 -1 1 0 1 0.9807853 -0.1950902 -1 0.9807853 -0.1950902 1 0.9238796 -0.3826833 -1 0.9238796 -0.3826833 1 0.8314697 -0.5555702 -1 0.8314697 -0.5555702 1 0.7071068 -0.7071068 -1 0.7071068 -0.7071068 1 0.5555702 -0.8314697 -1 0.5555702 -0.8314697 1 0.3826833 -0.9238796 -1 0.3826833 -0.9238796 1 0.1950901 -0.9807853 -1 0.1950901 -0.9807853 1 -3.25841e-7 -1 -1 -3.25841e-7 -1 1 -0.1950907 -0.9807852 -1 -0.1950907 -0.9807852 1 -0.3826839 -0.9238793 -1 -0.3826839 -0.9238793 1 -0.5555707 -0.8314693 -1 -0.5555707 -0.8314693 1 -0.7071073 -0.7071064 -1 -0.7071073 -0.7071064 1 -0.83147 -0.5555697 -1 -0.83147 -0.5555697 1 -0.9238799 -0.3826827 -1 -0.9238799 -0.3826827 1 -0.9807854 -0.1950894 -1 -0.9807854 -0.1950894 1 -1 9.65599e-7 -1 -1 9.65599e-7 1 -0.9807851 0.1950913 -1 -0.9807851 0.1950913 1 -0.9238791 0.3826845 -1 -0.9238791 0.3826845 1 -0.8314689 0.5555713 -1 -0.8314689 0.5555713 1 -0.7071059 0.7071077 -1 -0.7071059 0.7071077 1 -0.5555691 0.8314704 -1 -0.5555691 0.8314704 1 -0.3826821 0.9238801 -1 -0.3826821 0.9238801 1 -0.1950888 0.9807856 -1 -0.1950888 0.9807856 1 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 0.09801727 0.9951847 0 0.2902846 0.9569405 0 0.4713967 0.8819213 0 0.6343935 0.7730103 0 0.7730106 0.6343932 0 0.8819215 0.4713966 0 0.9569404 0.2902848 0 0.9951847 0.09801727 0 0.9951848 -0.09801667 0 0.9569404 -0.2902848 0 0.8819214 -0.4713968 0 0.7730103 -0.6343936 0 0.6343934 -0.7730104 0 0.4713968 -0.8819214 0 0.2902842 -0.9569405 0 0.09801691 -0.9951848 0 -0.09801757 -0.9951848 0 -0.2902852 -0.9569402 0 -0.4713971 -0.8819211 0 -0.6343939 -0.77301 0 -0.7730109 -0.6343929 0 -0.8819217 -0.4713961 0 -0.9569407 -0.2902834 0 -0.9951849 -0.09801602 0 -0.9951847 0.09801787 0 -0.95694 0.2902858 0 -0.8819208 0.4713979 0 -0.7730096 0.6343944 0 -0.6343926 0.7730111 0 -0.4713955 0.881922 0 0 0 1 -0.290283 0.9569408 0 -0.0980165 0.9951848 0 0 0 -1 0.2902847 0.9569404 0 0.6343932 0.7730106 0 0.7730103 0.6343936 0 0.9951847 -0.09801727 0 0.8819216 -0.4713962 0 0.7730106 -0.6343932 0 0.2902843 -0.9569405 0 -0.2902852 -0.9569402 0 -0.6343936 -0.7730103 0 -0.7730111 -0.6343926 0 -0.9569405 -0.2902839 0 -0.9951848 -0.09801661 0 -0.9951846 0.09801846 0 -0.881921 0.4713975 0 -0.6343923 0.7730113 0 0 0 1 -3.97511e-6 0 1 3.97512e-6 0 1 1.43703e-6 0 1 -7.77715e-7 0 1 -2.87796e-7 0 1 -0.2902831 0.9569409 0 -3.97511e-6 0 -1 3.97512e-6 0 -1 3.88857e-7 0 -1 0 0 -1 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 1 1 0.96875 0.5 1 0.5 0.96875 1 0.9375 0.5 0.96875 0.5 0.9375 1 0.90625 0.5 0.9375 0.5 0.90625 1 0.875 0.5 0.90625 0.5 0.875 1 0.84375 0.5 0.875 0.5 0.84375 1 0.8125 0.5 0.84375 0.5 0.8125 1 0.78125 0.5 0.8125 0.5 0.78125 1 0.75 0.5 0.78125 0.5 0.75 1 0.71875 0.5 0.75 0.5 0.71875 1 0.6875 0.5 0.71875 0.5 0.6875 1 0.65625 0.5 0.6875 0.5 0.65625 1 0.625 0.5 0.65625 0.5 0.625 1 0.59375 0.5 0.625 0.5 0.59375 1 0.5625 0.5 0.59375 0.5 0.5625 1 0.53125 0.5 0.5625 0.5 0.53125 1 0.5 0.5 0.53125 0.5 0.5 1 0.46875 0.5 0.5 0.5 0.46875 1 0.4375 0.5 0.46875 0.5 0.4375 1 0.40625 0.5 0.4375 0.5 0.40625 1 0.375 0.5 0.40625 0.5 0.375 1 0.34375 0.5 0.375 0.5 0.34375 1 0.3125 0.5 0.34375 0.5 0.3125 1 0.28125 0.5 0.3125 0.5 0.28125 1 0.25 0.5 0.28125 0.5 0.25 1 0.21875 0.5 0.25 0.5 0.21875 1 0.1875 0.5 0.21875 0.5 0.1875 1 0.15625 0.5 0.1875 0.5 0.15625 1 0.125 0.5 0.15625 0.5 0.125 1 0.09375 0.5 0.125 0.5 0.09375 1 0.0625 0.5 0.09375 0.5 0.02826899 0.3418443 0.1581559 0.02826893 0.4717311 0.158156 0.0625 1 0.03125 0.5 0.0625 0.5 0.03125 1 0 0.5 0.03125 0.5 0.9853885 0.2968217 0.7968216 0.01461148 0.5146115 0.2031785 1 1 0.96875 1 0.96875 0.5 0.96875 1 0.9375 1 0.9375 0.5 0.9375 1 0.90625 1 0.90625 0.5 0.90625 1 0.875 1 0.875 0.5 0.875 1 0.84375 1 0.84375 0.5 0.84375 1 0.8125 1 0.8125 0.5 0.8125 1 0.78125 1 0.78125 0.5 0.78125 1 0.75 1 0.75 0.5 0.75 1 0.71875 1 0.71875 0.5 0.71875 1 0.6875 1 0.6875 0.5 0.6875 1 0.65625 1 0.65625 0.5 0.65625 1 0.625 1 0.625 0.5 0.625 1 0.59375 1 0.59375 0.5 0.59375 1 0.5625 1 0.5625 0.5 0.5625 1 0.53125 1 0.53125 0.5 0.53125 1 0.5 1 0.5 0.5 0.5 1 0.46875 1 0.46875 0.5 0.46875 1 0.4375 1 0.4375 0.5 0.4375 1 0.40625 1 0.40625 0.5 0.40625 1 0.375 1 0.375 0.5 0.375 1 0.34375 1 0.34375 0.5 0.34375 1 0.3125 1 0.3125 0.5 0.3125 1 0.28125 1 0.28125 0.5 0.28125 1 0.25 1 0.25 0.5 0.25 1 0.21875 1 0.21875 0.5 0.21875 1 0.1875 1 0.1875 0.5 0.1875 1 0.15625 1 0.15625 0.5 0.15625 1 0.125 1 0.125 0.5 0.125 1 0.09375 1 0.09375 0.5 0.09375 1 0.0625 1 0.0625 0.5 0.341844 0.4717311 0.2968217 0.4853885 0.25 0.49 0.25 0.49 0.2031787 0.4853885 0.341844 0.4717311 0.2031787 0.4853885 0.1581563 0.4717312 0.341844 0.4717311 0.1581563 0.4717312 0.1166634 0.4495529 0.08029454 0.4197058 0.08029454 0.4197058 0.05044746 0.3833371 0.02826899 0.3418443 0.02826899 0.3418443 0.01461154 0.2968219 0.00999999 0.2500002 0.00999999 0.2500002 0.01461148 0.2031785 0.02826899 0.3418443 0.01461148 0.2031785 0.02826881 0.1581561 0.02826899 0.3418443 0.02826881 0.1581561 0.05044716 0.1166633 0.1581559 0.02826893 0.05044716 0.1166633 0.08029425 0.08029443 0.1581559 0.02826893 0.08029425 0.08029443 0.116663 0.05044734 0.1581559 0.02826893 0.1581559 0.02826893 0.2031782 0.01461154 0.2499999 0.00999999 0.2499999 0.00999999 0.2968216 0.01461148 0.341844 0.02826887 0.341844 0.02826887 0.3833369 0.05044728 0.4197056 0.08029437 0.4197056 0.08029437 0.4495527 0.1166631 0.4717311 0.158156 0.4717311 0.158156 0.4853885 0.2031783 0.49 0.25 0.49 0.25 0.4853885 0.2968217 0.4717311 0.158156 0.4853885 0.2968217 0.4717311 0.341844 0.4717311 0.158156 0.4717311 0.341844 0.4495527 0.3833369 0.4197056 0.4197056 0.4197056 0.4197056 0.3833369 0.4495527 0.341844 0.4717311 0.1581563 0.4717312 0.08029454 0.4197058 0.341844 0.4717311 0.08029454 0.4197058 0.02826899 0.3418443 0.341844 0.4717311 0.1581559 0.02826893 0.2499999 0.00999999 0.4717311 0.158156 0.2499999 0.00999999 0.341844 0.02826887 0.4717311 0.158156 0.341844 0.02826887 0.4197056 0.08029437 0.4717311 0.158156 0.4717311 0.341844 0.4197056 0.4197056 0.4717311 0.158156 0.4197056 0.4197056 0.341844 0.4717311 0.4717311 0.158156 0.02826899 0.3418443 0.02826881 0.1581561 0.1581559 0.02826893 0.341844 0.4717311 0.02826899 0.3418443 0.4717311 0.158156 0.0625 1 0.03125 1 0.03125 0.5 0.03125 1 0 1 0 0.5 0.7031787 0.4853885 0.75 0.49 0.7968217 0.4853885 0.7968217 0.4853885 0.841844 0.4717311 0.8833369 0.4495527 0.8833369 0.4495527 0.9197056 0.4197056 0.9495527 0.3833369 0.9495527 0.3833369 0.9717311 0.341844 0.8833369 0.4495527 0.9717311 0.341844 0.9853885 0.2968217 0.8833369 0.4495527 0.9853885 0.2968217 0.99 0.25 0.9853885 0.2031783 0.9853885 0.2031783 0.9717311 0.158156 0.9853885 0.2968217 0.9717311 0.158156 0.9495527 0.1166631 0.9853885 0.2968217 0.9495527 0.1166631 0.9197056 0.08029437 0.7968216 0.01461148 0.9197056 0.08029437 0.8833369 0.05044728 0.7968216 0.01461148 0.8833369 0.05044728 0.841844 0.02826887 0.7968216 0.01461148 0.7968216 0.01461148 0.75 0.00999999 0.7031782 0.01461154 0.7031782 0.01461154 0.6581559 0.02826893 0.616663 0.05044734 0.616663 0.05044734 0.5802943 0.08029443 0.5504472 0.1166633 0.5504472 0.1166633 0.5282688 0.1581561 0.5146115 0.2031785 0.5146115 0.2031785 0.51 0.2500002 0.5146116 0.2968219 0.5146116 0.2968219 0.5282691 0.3418443 0.5504475 0.3833371 0.5504475 0.3833371 0.5802946 0.4197058 0.7031787 0.4853885 0.5802946 0.4197058 0.6166634 0.4495529 0.7031787 0.4853885 0.6166634 0.4495529 0.6581563 0.4717312 0.7031787 0.4853885 0.7031787 0.4853885 0.7968217 0.4853885 0.8833369 0.4495527 0.7968216 0.01461148 0.7031782 0.01461154 0.5146115 0.2031785 0.7031782 0.01461154 0.616663 0.05044734 0.5146115 0.2031785 0.616663 0.05044734 0.5504472 0.1166633 0.5146115 0.2031785 0.5146115 0.2031785 0.5146116 0.2968219 0.7031787 0.4853885 0.5146116 0.2968219 0.5504475 0.3833371 0.7031787 0.4853885 0.7031787 0.4853885 0.8833369 0.4495527 0.9853885 0.2968217 0.9853885 0.2968217 0.9495527 0.1166631 0.7968216 0.01461148 0.7031787 0.4853885 0.9853885 0.2968217 0.5146115 0.2031785 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 |

1 0 0 2 0 1 0 0 2 3 1 3 4 1 4 2 1 5 5 2 6 6 2 7 4 2 8 7 3 9 8 3 10 6 3 11 9 4 12 10 4 13 8 4 14 11 5 15 12 5 16 10 5 17 13 6 18 14 6 19 12 6 20 15 7 21 16 7 22 14 7 23 17 8 24 18 8 25 16 8 26 19 9 27 20 9 28 18 9 29 21 10 30 22 10 31 20 10 32 23 11 33 24 11 34 22 11 35 25 12 36 26 12 37 24 12 38 27 13 39 28 13 40 26 13 41 29 14 42 30 14 43 28 14 44 31 15 45 32 15 46 30 15 47 33 16 48 34 16 49 32 16 50 35 17 51 36 17 52 34 17 53 37 18 54 38 18 55 36 18 56 39 19 57 40 19 58 38 19 59 41 20 60 42 20 61 40 20 62 43 21 63 44 21 64 42 21 65 45 22 66 46 22 67 44 22 68 47 23 69 48 23 70 46 23 71 49 24 72 50 24 73 48 24 74 51 25 75 52 25 76 50 25 77 53 26 78 54 26 79 52 26 80 55 27 81 56 27 82 54 27 83 57 28 84 58 28 85 56 28 86 59 29 87 60 29 88 58 29 89 53 30 90 37 30 91 21 30 92 61 31 93 62 31 94 60 31 95 63 32 96 0 32 97 62 32 98 14 33 99 30 33 100 46 33 101 1 0 102 3 0 103 2 0 104 3 34 105 5 34 106 4 34 107 5 2 108 7 2 109 6 2 110 7 35 111 9 35 112 8 35 113 9 36 114 11 36 115 10 36 116 11 5 117 13 5 118 12 5 119 13 6 120 15 6 121 14 6 122 15 7 123 17 7 124 16 7 125 17 37 126 19 37 127 18 37 128 19 9 129 21 9 130 20 9 131 21 38 132 23 38 133 22 38 134 23 39 135 25 39 136 24 39 137 25 12 138 27 12 139 26 12 140 27 13 141 29 13 142 28 13 143 29 40 144 31 40 145 30 40 146 31 15 147 33 15 148 32 15 149 33 16 150 35 16 151 34 16 152 35 41 153 37 41 154 36 41 155 37 18 156 39 18 157 38 18 158 39 42 159 41 42 160 40 42 161 41 43 162 43 43 163 42 43 164 43 21 165 45 21 166 44 21 167 45 44 168 47 44 169 46 44 170 47 45 171 49 45 172 48 45 173 49 46 174 51 46 175 50 46 176 51 25 177 53 25 178 52 25 179 53 47 180 55 47 181 54 47 182 55 27 183 57 27 184 56 27 185 57 48 186 59 48 187 58 48 188 59 29 189 61 29 190 60 29 191 5 49 192 3 49 193 1 49 194 1 49 195 63 49 196 5 49 197 63 49 198 61 49 199 5 49 200 61 49 201 59 49 202 57 49 203 57 49 204 55 49 205 53 49 206 53 50 207 51 50 208 49 50 209 49 49 210 47 49 211 53 49 212 47 49 213 45 49 214 53 49 215 45 49 216 43 49 217 37 49 218 43 49 219 41 49 220 37 49 221 41 49 222 39 49 223 37 49 224 37 49 225 35 49 226 33 49 227 33 49 228 31 49 229 29 49 230 29 49 231 27 49 232 25 49 233 25 49 234 23 49 235 21 49 236 21 51 237 19 51 238 17 51 239 17 49 240 15 49 241 21 49 242 15 49 243 13 49 244 21 49 245 13 49 246 11 49 247 9 49 248 9 49 249 7 49 250 5 49 251 61 49 252 57 49 253 5 49 254 57 49 255 53 49 256 5 49 257 37 49 258 33 49 259 21 49 260 33 49 261 29 49 262 21 49 263 29 49 264 25 49 265 21 49 266 13 52 267 9 52 268 21 52 269 9 53 270 5 53 271 21 53 272 53 54 273 45 54 274 37 54 275 5 49 276 53 49 277 21 49 278 61 55 279 63 55 280 62 55 281 63 32 282 1 32 283 0 32 284 62 33 285 0 33 286 2 33 287 2 33 288 4 33 289 6 33 290 6 33 291 8 33 292 10 33 293 10 33 294 12 33 295 6 33 296 12 33 297 14 33 298 6 33 299 14 33 300 16 33 301 18 33 302 18 33 303 20 33 304 14 33 305 20 33 306 22 33 307 14 33 308 22 33 309 24 33 310 30 33 311 24 33 312 26 33 313 30 33 314 26 33 315 28 33 316 30 33 317 30 33 318 32 33 319 34 33 320 34 33 321 36 33 322 38 33 323 38 33 324 40 33 325 42 33 326 42 33 327 44 33 328 46 33 329 46 56 330 48 56 331 50 56 332 50 57 333 52 57 334 54 57 335 54 33 336 56 33 337 62 33 338 56 33 339 58 33 340 62 33 341 58 33 342 60 33 343 62 33 344 62 33 345 2 33 346 6 33 347 30 33 348 34 33 349 46 33 350 34 33 351 38 33 352 46 33 353 38 33 354 42 33 355 46 33 356 46 58 357 50 58 358 62 58 359 50 33 360 54 33 361 62 33 362 62 33 363 6 33 364 14 33 365 14 33 366 22 33 367 30 33 368 62 59 369 14 59 370 46 59 371

119 |
120 |
121 |
122 |
123 | 124 | 125 | 126 | 32.85729 0 0 0 0 -1.43624e-6 -9.10743 0 0 32.85729 -3.98098e-7 0 0 0 0 1 127 | 128 | 129 | 130 | 0.6859207 -0.3240135 0.6515582 7.358891 0.7276763 0.3054208 -0.6141704 -6.925791 0 0.8953956 0.4452714 4.958309 0 0 0 1 131 | 132 | 133 | 134 | -0.2908646 -0.7711008 0.5663932 4.076245 0.9551712 -0.1998834 0.2183912 1.005454 -0.05518906 0.6045247 0.7946723 5.903862 0 0 0 1 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 |
-------------------------------------------------------------------------------- /models/turtlebot3_burger/model-1_4.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 0.0 0.0 0.0 0.0 0.0 0.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | -0.032 0 0.070 0 0 0 12 | 13 | 7.2397393e-01 14 | 4.686399e-10 15 | -1.09525703e-08 16 | 7.2397393e-01 17 | 2.8582649e-09 18 | 6.53050163e-01 19 | 20 | 8.2573504e-01 21 | 22 | 23 | 24 | -0.032 0 0.070 0 0 0 25 | 26 | 27 | 0.140 0.140 0.140 28 | 29 | 30 | 31 | 32 | 33 | -0.032 0 0 0 0 0 34 | 35 | 36 | model://turtlebot3_burger/meshes/burger_base.dae 37 | 0.001 0.001 0.001 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | true 46 | 200 47 | 48 | 49 | 50 | 51 | 0.0 52 | 2e-4 53 | 54 | 55 | 56 | 57 | 0.0 58 | 2e-4 59 | 60 | 61 | 62 | 63 | 0.0 64 | 2e-4 65 | 66 | 67 | 68 | 69 | 70 | 71 | 0.0 72 | 1.7e-2 73 | 74 | 75 | 76 | 77 | 0.0 78 | 1.7e-2 79 | 80 | 81 | 82 | 83 | 0.0 84 | 1.7e-2 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | ~/out:=imu 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -0.020 0 0.161 0 0 0 101 | 102 | 0.001 103 | 0.000 104 | 0.000 105 | 0.001 106 | 0.000 107 | 0.001 108 | 109 | 0.114 110 | 111 | 112 | 113 | -0.020 0 0.161 0 0 0 114 | 115 | 116 | 0.0508 117 | 0.055 118 | 119 | 120 | 121 | 122 | 123 | -0.032 0 0.171 0 0 0 124 | 125 | 126 | model://turtlebot3_burger/meshes/lds.dae 127 | 0.001 0.001 0.001 128 | 129 | 130 | 131 | 132 | 133 | true 134 | true 135 | -0.032 0 0.171 0 0 0 136 | 5 137 | 138 | 139 | 140 | 360 141 | 1.000000 142 | 0.000000 143 | 6.280000 144 | 145 | 146 | 147 | 0.120000 148 | 3.5 149 | 0.015000 150 | 151 | 152 | gaussian 153 | 0.0 154 | 0.01 155 | 156 | 157 | 158 | 159 | 160 | ~/out:=scan 161 | 162 | sensor_msgs/LaserScan 163 | base_scan 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 0 0.08 0.023 -1.57 0 0 172 | 173 | 1.8158194e-03 174 | -9.3392e-12 175 | 1.04909e-11 176 | 3.2922126e-03 177 | 5.75694e-11 178 | 1.8158194e-03 179 | 180 | 2.8498940e-02 181 | 182 | 183 | 184 | 0 0.08 0.023 -1.57 0 0 185 | 186 | 187 | 0.033 188 | 0.018 189 | 190 | 191 | 192 | 193 | 194 | 195 | 100000.0 196 | 100000.0 197 | 0 0 0 198 | 0.0 199 | 0.0 200 | 201 | 202 | 203 | 204 | 0 205 | 0.2 206 | 1e+5 207 | 1 208 | 0.01 209 | 0.001 210 | 211 | 212 | 213 | 214 | 215 | 216 | 0 0.08 0.023 0 0 0 217 | 218 | 219 | model://turtlebot3_burger/meshes/tire.dae 220 | 0.001 0.001 0.001 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 0.0 -0.08 0.023 -1.57 0 0 230 | 231 | 1.8158194e-03 232 | -9.3392e-12 233 | 1.04909e-11 234 | 3.2922126e-03 235 | 5.75694e-11 236 | 1.8158194e-03 237 | 238 | 2.8498940e-02 239 | 240 | 241 | 242 | 0.0 -0.08 0.023 -1.57 0 0 243 | 244 | 245 | 0.033 246 | 0.018 247 | 248 | 249 | 250 | 251 | 252 | 253 | 100000.0 254 | 100000.0 255 | 0 0 0 256 | 0.0 257 | 0.0 258 | 259 | 260 | 261 | 262 | 0 263 | 0.2 264 | 1e+5 265 | 1 266 | 0.01 267 | 0.001 268 | 269 | 270 | 271 | 272 | 273 | 274 | 0.0 -0.08 0.023 0 0 0 275 | 276 | 277 | model://turtlebot3_burger/meshes/tire.dae 278 | 0.001 0.001 0.001 279 | 280 | 281 | 282 | 283 | 284 | 285 | -0.081 0 -0.004 -1.57 0 0 286 | 287 | 0.005 288 | 289 | 0.001 290 | 0.000 291 | 0.000 292 | 0.001 293 | 0.000 294 | 0.001 295 | 296 | 297 | 298 | 299 | 300 | 0.005000 301 | 302 | 303 | 304 | 305 | 306 | 0 307 | 0.2 308 | 1e+5 309 | 1 310 | 0.01 311 | 0.001 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | base_footprint 320 | base_link 321 | 0.0 0.0 0.010 0 0 0 322 | 323 | 324 | 325 | base_link 326 | wheel_left_link 327 | 0.0 0.08 0.023 -1.57 0 0 328 | 329 | 0 0 1 330 | 331 | 332 | 333 | 334 | base_link 335 | wheel_right_link 336 | 0.0 -0.08 0.023 -1.57 0 0 337 | 338 | 0 0 1 339 | 340 | 341 | 342 | 343 | base_link 344 | caster_back_link 345 | 346 | 347 | 348 | base_link 349 | imu_link 350 | -0.032 0 0.068 0 0 0 351 | 352 | 0 0 1 353 | 354 | 355 | 356 | 357 | base_link 358 | base_scan 359 | -0.032 0 0.171 0 0 0 360 | 361 | 0 0 1 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 30 372 | 373 | 374 | wheel_left_joint 375 | wheel_right_joint 376 | 377 | 378 | 0.160 379 | 0.066 380 | 381 | 382 | 20 383 | 1.0 384 | 385 | cmd_vel 386 | 387 | 388 | true 389 | true 390 | false 391 | 392 | odom 393 | odom 394 | base_footprint 395 | 396 | 397 | 398 | 399 | 400 | 401 | ~/out:=joint_states 402 | 403 | 30 404 | wheel_left_joint 405 | wheel_right_joint 406 | 407 | 408 | 409 | -------------------------------------------------------------------------------- /models/turtlebot3_burger/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | TurtleBot3(Burger) 5 | 2.0 6 | model-1_4.sdf 7 | model.sdf 8 | 9 | 10 | Taehun Lim(Darby) 11 | thlim@robotis.com 12 | 13 | 14 | 15 | TurtleBot3 Burger 16 | 17 | 18 | -------------------------------------------------------------------------------- /models/turtlebot3_burger/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 0.0 0.0 0.0 0.0 0.0 0.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | -0.032 0 0.070 0 0 0 12 | 13 | 7.2397393e-01 14 | 4.686399e-10 15 | -1.09525703e-08 16 | 7.2397393e-01 17 | 2.8582649e-09 18 | 6.53050163e-01 19 | 20 | 8.2573504e-01 21 | 22 | 23 | 24 | -0.032 0 0.070 0 0 0 25 | 26 | 27 | 0.140 0.140 0.140 28 | 29 | 30 | 31 | 32 | 33 | -0.032 0 0 0 0 0 34 | 35 | 36 | model://turtlebot3_burger/meshes/burger_base.dae 37 | 0.001 0.001 0.001 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | true 46 | 30 47 | 48 | 49 | 50 | 51 | 0.0 52 | 2e-4 53 | 54 | 55 | 56 | 57 | 0.0 58 | 2e-4 59 | 60 | 61 | 62 | 63 | 0.0 64 | 2e-4 65 | 66 | 67 | 68 | 69 | 70 | 71 | 0.0 72 | 1.7e-2 73 | 74 | 75 | 76 | 77 | 0.0 78 | 1.7e-2 79 | 80 | 81 | 82 | 83 | 0.0 84 | 1.7e-2 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | ~/out:=imu 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -0.020 0 0.161 0 0 0 101 | 102 | 0.001 103 | 0.000 104 | 0.000 105 | 0.001 106 | 0.000 107 | 0.001 108 | 109 | 0.114 110 | 111 | 112 | 113 | -0.020 0 0.161 0 0 0 114 | 115 | 116 | 0.0508 117 | 0.055 118 | 119 | 120 | 121 | 122 | 123 | -0.032 0 0.171 0 0 0 124 | 125 | 126 | model://turtlebot3_burger/meshes/lds.dae 127 | 0.001 0.001 0.001 128 | 129 | 130 | 131 | 132 | 133 | true 134 | false 135 | -0.032 0 0.171 0 0 0 136 | 5 137 | 138 | 139 | 140 | 360 141 | 1.000000 142 | 0.000000 143 | 6.280000 144 | 145 | 146 | 147 | 0.120000 148 | 3.5 149 | 0.015000 150 | 151 | 152 | gaussian 153 | 0.0 154 | 0.01 155 | 156 | 157 | 158 | 159 | ~/out:=scan 160 | false 161 | 162 | sensor_msgs/LaserScan 163 | base_scan 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 0 0.08 0.023 -1.57 0 0 172 | 173 | 1.8158194e-03 174 | -9.3392e-12 175 | 1.04909e-11 176 | 3.2922126e-03 177 | 5.75694e-11 178 | 1.8158194e-03 179 | 180 | 2.8498940e-02 181 | 182 | 183 | 184 | 0 0.08 0.023 -1.57 0 0 185 | 186 | 187 | 0.033 188 | 0.018 189 | 190 | 191 | 192 | 193 | 194 | 195 | 100000.0 196 | 100000.0 197 | 0 0 0 198 | 0.0 199 | 0.0 200 | 201 | 202 | 203 | 204 | 0 205 | 0.2 206 | 1e+5 207 | 1 208 | 0.01 209 | 0.001 210 | 211 | 212 | 213 | 214 | 215 | 216 | 0 0.08 0.023 0 0 0 217 | 218 | 219 | model://turtlebot3_burger/meshes/tire.dae 220 | 0.001 0.001 0.001 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 0.0 -0.08 0.023 -1.57 0 0 230 | 231 | 1.8158194e-03 232 | -9.3392e-12 233 | 1.04909e-11 234 | 3.2922126e-03 235 | 5.75694e-11 236 | 1.8158194e-03 237 | 238 | 2.8498940e-02 239 | 240 | 241 | 242 | 0.0 -0.08 0.023 -1.57 0 0 243 | 244 | 245 | 0.033 246 | 0.018 247 | 248 | 249 | 250 | 251 | 252 | 253 | 100000.0 254 | 100000.0 255 | 0 0 0 256 | 0.0 257 | 0.0 258 | 259 | 260 | 261 | 262 | 0 263 | 0.2 264 | 1e+5 265 | 1 266 | 0.01 267 | 0.001 268 | 269 | 270 | 271 | 272 | 273 | 274 | 0.0 -0.08 0.023 0 0 0 275 | 276 | 277 | model://turtlebot3_burger/meshes/tire.dae 278 | 0.001 0.001 0.001 279 | 280 | 281 | 282 | 283 | 284 | 285 | -0.081 0 -0.004 -1.57 0 0 286 | 287 | 0.005 288 | 289 | 0.001 290 | 0.000 291 | 0.000 292 | 0.001 293 | 0.000 294 | 0.001 295 | 296 | 297 | 298 | 299 | 300 | 0.005000 301 | 302 | 303 | 304 | 305 | 306 | 0 307 | 0.2 308 | 1e+5 309 | 1 310 | 0.01 311 | 0.001 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | base_footprint 320 | base_link 321 | 0.0 0.0 0.010 0 0 0 322 | 323 | 324 | 325 | base_link 326 | wheel_left_link 327 | 0.0 0.08 0.023 -1.57 0 0 328 | 329 | 0 0 1 330 | 331 | 332 | 333 | 334 | base_link 335 | wheel_right_link 336 | 0.0 -0.08 0.023 -1.57 0 0 337 | 338 | 0 0 1 339 | 340 | 341 | 342 | 343 | base_link 344 | caster_back_link 345 | 346 | 347 | 348 | base_link 349 | imu_link 350 | -0.032 0 0.068 0 0 0 351 | 352 | 0 0 1 353 | 354 | 355 | 356 | 357 | base_link 358 | base_scan 359 | -0.032 0 0.171 0 0 0 360 | 361 | 0 0 1 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | /tf:=tf 370 | 371 | 372 | 10 373 | 374 | 375 | wheel_left_joint 376 | wheel_right_joint 377 | 378 | 379 | 0.160 380 | 0.066 381 | 382 | 383 | 20 384 | 1.0 385 | 386 | cmd_vel 387 | 388 | 389 | true 390 | true 391 | false 392 | 393 | odom 394 | odom 395 | base_footprint 396 | 397 | 398 | 399 | 400 | 401 | 402 | ~/out:=joint_states 403 | 404 | 30 405 | wheel_left_joint 406 | wheel_right_joint 407 | 408 | 409 | 410 | -------------------------------------------------------------------------------- /models/turtlebot3_waffle/meshes/waffle_base.dae: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Blender User 6 | Blender 2.83.0 commit date:2020-06-03, commit time:14:38, hash:211b6c29f771 7 | 8 | 2020-06-29T17:22:52 9 | 2020-06-29T17:22:52 10 | 11 | Z_UP 12 | 13 | 14 | 15 | 16 | 17 | 18 | 39.59775 19 | 1.777778 20 | 0.1 21 | 100 22 | 23 | 24 | 25 | 26 | 27 | 0 28 | 0 29 | 10 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 1000 1000 1000 39 | 1 40 | 0 41 | 0.00111109 42 | 43 | 44 | 45 | 46 | 0 47 | 0 48 | 1 49 | 1 50 | 1 51 | 1 52 | 1 53 | 0 54 | 0 55 | 0 56 | 1000 57 | 29.99998 58 | 75 59 | 0.15 60 | 0 61 | 1 62 | 2 63 | 0.04999995 64 | 30.002 65 | 1 66 | 3 67 | 2880 68 | 3 69 | 1 70 | 1 71 | 0.1 72 | 0.1 73 | 1 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 0 0 0 1 85 | 86 | 87 | 0.8 0.8 0.8 1 88 | 89 | 90 | 1.45 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | -0.7789794 -1 -1 -1 -0.7789794 -1 -1 -0.7789794 1 -0.7789794 -1 1 -1 0.7789794 -1 -0.7789794 1 -1 -0.7789794 1 1 -1 0.7789794 1 1 -0.7789794 -1 0.7789794 -1 -1 0.7789794 -1 1 1 -0.7789794 1 0.7789794 1 -1 1 0.7789794 -1 1 0.7789794 1 0.7789794 1 1 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 0 -1 0 1 0 0 0 0 1 -1 0 0 0 1 0 -0.7071068 -0.7071068 0 -0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.7071068 -0.7071068 0 0 0 -1 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 0.625 0.7776276 0.375 0.9723724 0.375 0.7776276 0.625 0.5276276 0.375 0.7223724 0.375 0.5276276 0.6526276 0.75 0.625 0.7223724 0.875 0.5276276 0.625 0.02762752 0.375 0.2223724 0.375 0.02762752 0.625 0.2776276 0.375 0.4723724 0.375 0.2776276 0.625 0.9723724 0.375 1 0.375 0.9723724 0.375 0.2776276 0.625 0.2223724 0.625 0.2776276 0.375 0.5276276 0.625 0.4723724 0.625 0.5276276 0.375 0.7776276 0.625 0.7223724 0.625 0.7776276 0.1526275 0.75 0.125 0.7223724 0.375 0.5276276 0.625 0.7776276 0.625 0.9723724 0.375 0.9723724 0.625 0.5276276 0.625 0.7223724 0.375 0.7223724 0.625 0.7223724 0.625 0.5276276 0.6526276 0.5 0.6526276 0.5 0.8473724 0.5 0.625 0.7223724 0.8473724 0.5 0.875 0.5276276 0.625 0.7223724 0.875 0.5276276 0.875 0.7223724 0.8473724 0.75 0.8473724 0.75 0.6526276 0.75 0.875 0.5276276 0.625 0.02762752 0.625 0.2223724 0.375 0.2223724 0.625 0.2776276 0.625 0.4723724 0.375 0.4723724 0.625 0.9723724 0.625 1 0.375 1 0.375 0.2776276 0.375 0.2223724 0.625 0.2223724 0.375 0.5276276 0.375 0.4723724 0.625 0.4723724 0.375 0.7776276 0.375 0.7223724 0.625 0.7223724 0.125 0.7223724 0.125 0.5276276 0.1526275 0.5 0.1526275 0.5 0.3473724 0.5 0.125 0.7223724 0.3473724 0.5 0.375 0.5276276 0.125 0.7223724 0.375 0.5276276 0.375 0.7223724 0.3473724 0.75 0.3473724 0.75 0.1526275 0.75 0.375 0.5276276 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 |

10 0 0 0 0 1 9 0 2 14 1 3 8 1 4 13 1 5 10 2 6 11 2 7 7 2 8 2 3 9 4 3 10 1 3 11 6 4 12 12 4 13 5 4 14 3 5 15 1 5 16 0 5 17 5 6 18 7 6 19 6 6 20 13 7 21 15 7 22 14 7 23 9 8 24 11 8 25 10 8 26 0 9 27 1 9 28 13 9 29 10 0 30 3 0 31 0 0 32 14 1 33 11 1 34 8 1 35 11 2 36 14 2 37 15 2 38 15 2 39 6 2 40 11 2 41 6 2 42 7 2 43 11 2 44 7 2 45 2 2 46 3 2 47 3 2 48 10 2 49 7 2 50 2 3 51 7 3 52 4 3 53 6 4 54 15 4 55 12 4 56 3 5 57 2 5 58 1 5 59 5 6 60 4 6 61 7 6 62 13 7 63 12 7 64 15 7 65 9 8 66 8 8 67 11 8 68 1 9 69 4 9 70 5 9 71 5 9 72 12 9 73 1 9 74 12 9 75 13 9 76 1 9 77 13 9 78 8 9 79 9 9 80 9 9 81 0 9 82 13 9 83

143 |
144 |
145 |
146 | 147 | 148 | 149 | 1 1 1 1 1 -1 1 -1 1 1 -1 -1 -1 1 1 -1 1 -1 -1 -1 1 -1 -1 -1 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 0 0 1 0 -1 0 -1 0 0 0 0 -1 1 0 0 0 1 0 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 0.875 0.5 0.625 0.75 0.625 0.5 0.625 0.75 0.375 1 0.375 0.75 0.625 0 0.375 0.25 0.375 0 0.375 0.5 0.125 0.75 0.125 0.5 0.625 0.5 0.375 0.75 0.375 0.5 0.625 0.25 0.375 0.5 0.375 0.25 0.875 0.5 0.875 0.75 0.625 0.75 0.625 0.75 0.625 1 0.375 1 0.625 0 0.625 0.25 0.375 0.25 0.375 0.5 0.375 0.75 0.125 0.75 0.625 0.5 0.625 0.75 0.375 0.75 0.625 0.25 0.625 0.5 0.375 0.5 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 |

4 0 0 2 0 1 0 0 2 2 1 3 7 1 4 3 1 5 6 2 6 5 2 7 7 2 8 1 3 9 7 3 10 5 3 11 0 4 12 3 4 13 1 4 14 4 5 15 1 5 16 5 5 17 4 0 18 6 0 19 2 0 20 2 1 21 6 1 22 7 1 23 6 2 24 4 2 25 5 2 26 1 3 27 3 3 28 7 3 29 0 4 30 2 4 31 3 4 32 4 5 33 0 5 34 1 5 35

185 |
186 |
187 |
188 |
189 | 190 | 191 | 192 | 132.5 0 0 0 0 132.5 0 0 0 0 46 46.12724 0 0 0 1 193 | 194 | 195 | 196 | 0.6859207 -0.3240135 0.6515582 7.358891 0.7276763 0.3054208 -0.6141704 -6.925791 0 0.8953956 0.4452714 4.958309 0 0 0 1 197 | 198 | 199 | 200 | -0.2908646 -0.7711008 0.5663932 4.076245 0.9551712 -0.1998834 0.2183912 1.005454 -0.05518906 0.6045247 0.7946723 5.903862 0 0 0 1 201 | 202 | 203 | 204 | 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 |
-------------------------------------------------------------------------------- /models/turtlebot3_waffle/model-1_4.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 0.0 0.0 0.0 0.0 0.0 0.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | -0.064 0 0.048 0 0 0 12 | 13 | 4.2111447e-02 14 | 0 15 | 0 16 | 4.2111447e-02 17 | 0 18 | 7.5254874e-02 19 | 20 | 1.3729096e+00 21 | 22 | 23 | 24 | -0.064 0 0.048 0 0 0 25 | 26 | 27 | 0.265 0.265 0.089 28 | 29 | 30 | 31 | 32 | 33 | -0.064 0 0 0 0 0 34 | 35 | 36 | model://turtlebot3_waffle/meshes/waffle_base.dae 37 | 0.001 0.001 0.001 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | true 46 | 200 47 | 48 | 49 | 50 | 51 | 0.0 52 | 2e-4 53 | 54 | 55 | 56 | 57 | 0.0 58 | 2e-4 59 | 60 | 61 | 62 | 63 | 0.0 64 | 2e-4 65 | 66 | 67 | 68 | 69 | 70 | 71 | 0.0 72 | 1.7e-2 73 | 74 | 75 | 76 | 77 | 0.0 78 | 1.7e-2 79 | 80 | 81 | 82 | 83 | 0.0 84 | 1.7e-2 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | ~/out:=imu 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -0.052 0 0.111 0 0 0 101 | 102 | 0.001 103 | 0.000 104 | 0.000 105 | 0.001 106 | 0.000 107 | 0.001 108 | 109 | 0.114 110 | 111 | 112 | 113 | -0.052 0 0.111 0 0 0 114 | 115 | 116 | 0.0508 117 | 0.055 118 | 119 | 120 | 121 | 122 | 123 | -0.064 0 0.121 0 0 0 124 | 125 | 126 | model://turtlebot3_waffle/meshes/lds.dae 127 | 0.001 0.001 0.001 128 | 129 | 130 | 131 | 132 | 133 | true 134 | true 135 | -0.064 0 0.121 0 0 0 136 | 5 137 | 138 | 139 | 140 | 360 141 | 1.000000 142 | 0.000000 143 | 6.280000 144 | 145 | 146 | 147 | 0.120000 148 | 3.5 149 | 0.015000 150 | 151 | 152 | gaussian 153 | 0.0 154 | 0.01 155 | 156 | 157 | 158 | 159 | 160 | ~/out:=scan 161 | 162 | sensor_msgs/LaserScan 163 | base_scan 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 0.0 0.144 0.023 -1.57 0 0 172 | 173 | 1.1175580e-05 174 | -4.2369783e-11 175 | -5.9381719e-09 176 | 1.1192413e-05 177 | -1.4400107e-11 178 | 2.0712558e-05 179 | 180 | 0.1 181 | 182 | 183 | 184 | 0.0 0.144 0.023 -1.57 0 0 185 | 186 | 187 | 0.033 188 | 0.018 189 | 190 | 191 | 192 | 193 | 194 | 195 | 100000.0 196 | 100000.0 197 | 0 0 0 198 | 0.0 199 | 0.0 200 | 201 | 202 | 203 | 204 | 0 205 | 0.2 206 | 1e+5 207 | 1 208 | 0.01 209 | 0.001 210 | 211 | 212 | 213 | 214 | 215 | 216 | 0.0 0.144 0.023 0 0 0 217 | 218 | 219 | model://turtlebot3_waffle/meshes/tire.dae 220 | 0.001 0.001 0.001 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 0.0 -0.144 0.023 -1.57 0 0 230 | 231 | 1.1175580e-05 232 | -4.2369783e-11 233 | -5.9381719e-09 234 | 1.1192413e-05 235 | -1.4400107e-11 236 | 2.0712558e-05 237 | 238 | 0.1 239 | 240 | 241 | 242 | 0.0 -0.144 0.023 -1.57 0 0 243 | 244 | 245 | 0.033 246 | 0.018 247 | 248 | 249 | 250 | 251 | 252 | 253 | 100000.0 254 | 100000.0 255 | 0 0 0 256 | 0.0 257 | 0.0 258 | 259 | 260 | 261 | 262 | 0 263 | 0.2 264 | 1e+5 265 | 1 266 | 0.01 267 | 0.001 268 | 269 | 270 | 271 | 272 | 273 | 274 | 0.0 -0.144 0.023 0 0 0 275 | 276 | 277 | model://turtlebot3_waffle/meshes/tire.dae 278 | 0.001 0.001 0.001 279 | 280 | 281 | 282 | 283 | 284 | 285 | -0.177 -0.064 -0.004 -1.57 0 0 286 | 287 | 0.001 288 | 289 | 0.00001 290 | 0.000 291 | 0.000 292 | 0.00001 293 | 0.000 294 | 0.00001 295 | 296 | 297 | 298 | 299 | 300 | 0.005000 301 | 302 | 303 | 304 | 305 | 306 | 0 307 | 0.2 308 | 1e+5 309 | 1 310 | 0.01 311 | 0.001 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | -0.177 0.064 -0.004 -1.57 0 0 320 | 321 | 0.001 322 | 323 | 0.00001 324 | 0.000 325 | 0.000 326 | 0.00001 327 | 0.000 328 | 0.00001 329 | 330 | 331 | 332 | 333 | 334 | 0.005000 335 | 336 | 337 | 338 | 339 | 340 | 0 341 | 0.2 342 | 1e+5 343 | 1 344 | 0.01 345 | 0.001 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 0.069 -0.047 0.107 0 0 0 357 | 358 | 0.001 359 | 0.000 360 | 0.000 361 | 0.001 362 | 0.000 363 | 0.001 364 | 365 | 0.035 366 | 367 | 368 | 0.069 -0.047 0.107 0 0 0 369 | 370 | true 371 | true 372 | 30 373 | 374 | 1.02974 375 | 376 | 1920 377 | 1080 378 | R8G8B8 379 | 380 | 381 | 0.02 382 | 300 383 | 384 | 385 | gaussian 386 | 389 | 0.0 390 | 0.007 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | base_footprint 408 | base_link 409 | 0.0 0.0 0.010 0 0 0 410 | 411 | 412 | 413 | base_link 414 | wheel_left_link 415 | 0.0 0.144 0.023 -1.57 0 0 416 | 417 | 0 0 1 418 | 419 | 420 | 421 | 422 | base_link 423 | wheel_right_link 424 | 0.0 -0.144 0.023 -1.57 0 0 425 | 426 | 0 0 1 427 | 428 | 429 | 430 | 431 | base_link 432 | caster_back_right_link 433 | 434 | 435 | 436 | base_link 437 | caster_back_left_link 438 | 439 | 440 | 441 | base_link 442 | imu_link 443 | -0.032 0 0.068 0 0 0 444 | 445 | 0 0 1 446 | 447 | 448 | 449 | 450 | base_link 451 | base_scan 452 | -0.064 0 0.121 0 0 0 453 | 454 | 0 0 1 455 | 456 | 457 | 458 | 459 | base_link 460 | camera_link 461 | 0.064 -0.065 0.094 0 0 0 462 | 463 | 0 0 1 464 | 465 | 466 | 467 | 468 | camera_link 469 | camera_rgb_frame 470 | 0.005 0.018 0.013 0 0 0 471 | 472 | 0 0 1 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 30 483 | 484 | 485 | wheel_left_joint 486 | wheel_right_joint 487 | 488 | 489 | 0.287 490 | 0.066 491 | 492 | 493 | 20 494 | 1.0 495 | 496 | cmd_vel 497 | 498 | 499 | true 500 | true 501 | false 502 | 503 | odom 504 | odom 505 | base_footprint 506 | 507 | 508 | 509 | 510 | 511 | 512 | ~/out:=joint_states 513 | 514 | 30 515 | wheel_left_joint 516 | wheel_right_joint 517 | 518 | 519 | 520 | 521 | -------------------------------------------------------------------------------- /models/turtlebot3_waffle/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | TurtleBot3(Waffle) 5 | 2.0 6 | model-1_4.sdf 7 | model.sdf 8 | 9 | 10 | Taehun Lim(Darby) 11 | thlim@robotis.com 12 | 13 | 14 | 15 | TurtleBot3 Waffle 16 | 17 | 18 | -------------------------------------------------------------------------------- /models/turtlebot3_waffle/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 0.0 0.0 0.0 0.0 0.0 0.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | -0.064 0 0.048 0 0 0 12 | 13 | 4.2111447e-02 14 | 0 15 | 0 16 | 4.2111447e-02 17 | 0 18 | 7.5254874e-02 19 | 20 | 1.3729096e+00 21 | 22 | 23 | 24 | -0.064 0 0.048 0 0 0 25 | 26 | 27 | 0.265 0.265 0.089 28 | 29 | 30 | 31 | 32 | 33 | -0.064 0 0 0 0 0 34 | 35 | 36 | model://turtlebot3_common/meshes/waffle_base.dae 37 | 0.001 0.001 0.001 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | true 46 | 200 47 | 48 | 49 | 50 | 51 | 0.0 52 | 2e-4 53 | 54 | 55 | 56 | 57 | 0.0 58 | 2e-4 59 | 60 | 61 | 62 | 63 | 0.0 64 | 2e-4 65 | 66 | 67 | 68 | 69 | 70 | 71 | 0.0 72 | 1.7e-2 73 | 74 | 75 | 76 | 77 | 0.0 78 | 1.7e-2 79 | 80 | 81 | 82 | 83 | 0.0 84 | 1.7e-2 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | ~/out:=imu 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -0.052 0 0.111 0 0 0 101 | 102 | 0.001 103 | 0.000 104 | 0.000 105 | 0.001 106 | 0.000 107 | 0.001 108 | 109 | 0.114 110 | 111 | 112 | 113 | -0.052 0 0.111 0 0 0 114 | 115 | 116 | 0.0508 117 | 0.055 118 | 119 | 120 | 121 | 122 | 123 | -0.064 0 0.121 0 0 0 124 | 125 | 126 | model://turtlebot3_common/meshes/lds.dae 127 | 0.001 0.001 0.001 128 | 129 | 130 | 131 | 132 | 133 | true 134 | false 135 | -0.064 0 0.121 0 0 0 136 | 5 137 | 138 | 139 | 140 | 360 141 | 1.000000 142 | 0.000000 143 | 6.280000 144 | 145 | 146 | 147 | 0.120000 148 | 3.5 149 | 0.015000 150 | 151 | 152 | gaussian 153 | 0.0 154 | 0.01 155 | 156 | 157 | 158 | 159 | 160 | ~/out:=scan 161 | 162 | sensor_msgs/LaserScan 163 | base_scan 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 0.0 0.144 0.023 -1.57 0 0 172 | 173 | 1.1175580e-05 174 | -4.2369783e-11 175 | -5.9381719e-09 176 | 1.1192413e-05 177 | -1.4400107e-11 178 | 2.0712558e-05 179 | 180 | 0.1 181 | 182 | 183 | 184 | 0.0 0.144 0.023 -1.57 0 0 185 | 186 | 187 | 0.033 188 | 0.018 189 | 190 | 191 | 192 | 193 | 194 | 195 | 100000.0 196 | 100000.0 197 | 0 0 0 198 | 0.0 199 | 0.0 200 | 201 | 202 | 203 | 204 | 0 205 | 0.2 206 | 1e+5 207 | 1 208 | 0.01 209 | 0.001 210 | 211 | 212 | 213 | 214 | 215 | 216 | 0.0 0.144 0.023 0 0 0 217 | 218 | 219 | model://turtlebot3_common/meshes/tire.dae 220 | 0.001 0.001 0.001 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 0.0 -0.144 0.023 -1.57 0 0 230 | 231 | 1.1175580e-05 232 | -4.2369783e-11 233 | -5.9381719e-09 234 | 1.1192413e-05 235 | -1.4400107e-11 236 | 2.0712558e-05 237 | 238 | 0.1 239 | 240 | 241 | 242 | 0.0 -0.144 0.023 -1.57 0 0 243 | 244 | 245 | 0.033 246 | 0.018 247 | 248 | 249 | 250 | 251 | 252 | 253 | 100000.0 254 | 100000.0 255 | 0 0 0 256 | 0.0 257 | 0.0 258 | 259 | 260 | 261 | 262 | 0 263 | 0.2 264 | 1e+5 265 | 1 266 | 0.01 267 | 0.001 268 | 269 | 270 | 271 | 272 | 273 | 274 | 0.0 -0.144 0.023 0 0 0 275 | 276 | 277 | model://turtlebot3_common/meshes/tire.dae 278 | 0.001 0.001 0.001 279 | 280 | 281 | 282 | 283 | 284 | 285 | -0.177 -0.064 -0.004 -1.57 0 0 286 | 287 | 0.001 288 | 289 | 0.00001 290 | 0.000 291 | 0.000 292 | 0.00001 293 | 0.000 294 | 0.00001 295 | 296 | 297 | 298 | 299 | 300 | 0.005000 301 | 302 | 303 | 304 | 305 | 306 | 0 307 | 0.2 308 | 1e+5 309 | 1 310 | 0.01 311 | 0.001 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | -0.177 0.064 -0.004 -1.57 0 0 320 | 321 | 0.001 322 | 323 | 0.00001 324 | 0.000 325 | 0.000 326 | 0.00001 327 | 0.000 328 | 0.00001 329 | 330 | 331 | 332 | 333 | 334 | 0.005000 335 | 336 | 337 | 338 | 339 | 340 | 0 341 | 0.2 342 | 1e+5 343 | 1 344 | 0.01 345 | 0.001 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 0.069 -0.047 0.107 0 0 0 357 | 358 | 0.001 359 | 0.000 360 | 0.000 361 | 0.001 362 | 0.000 363 | 0.001 364 | 365 | 0.035 366 | 367 | 368 | 0.069 -0.047 0.107 0 0 0 369 | 370 | 0 0 0 0 0 0 371 | true 372 | true 373 | 1 374 | 375 | 1.02974 376 | 377 | 640 378 | 480 379 | B8G8R8 380 | 381 | 382 | 0.05 383 | 8.0 384 | 385 | 386 | gaussian 387 | 388 | 0.0 389 | 0.007 390 | 391 | 392 | 393 | 394 | 395 | camera_rgb_frame 396 | 0.1 397 | 100 398 | 399 | 400 | 401 | 402 | 403 | 404 | 432 | 433 | 434 | base_footprint 435 | base_link 436 | 437 | 438 | 439 | base_link 440 | wheel_left_link 441 | 0.0 0.144 0.023 -1.57 0 0 442 | 443 | 0 0 1 444 | 445 | 446 | 447 | 448 | base_link 449 | wheel_right_link 450 | 0.0 -0.144 0.023 -1.57 0 0 451 | 452 | 0 0 1 453 | 454 | 455 | 456 | 457 | base_link 458 | caster_back_right_link 459 | 460 | 461 | 462 | base_link 463 | caster_back_left_link 464 | 465 | 466 | 467 | base_link 468 | imu_link 469 | -0.032 0 0.068 0 0 0 470 | 471 | 0 0 1 472 | 473 | 474 | 475 | 476 | base_link 477 | base_scan 478 | -0.064 0 0.121 0 0 0 479 | 480 | 0 0 1 481 | 482 | 483 | 484 | 485 | base_link 486 | camera_link 487 | 0.064 -0.065 0.094 0 0 0 488 | 489 | 0 0 1 490 | 491 | 492 | 493 | 494 | camera_link 495 | camera_rgb_frame 496 | 0.005 0.018 0.013 1 0 0 497 | 498 | 0 0 1 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | /tf:=tf 507 | 508 | 509 | 30 510 | wheel_left_joint 511 | wheel_right_joint 512 | 513 | 0.287 514 | 0.066 515 | 516 | 20 517 | 1.0 518 | 519 | cmd_vel 520 | 521 | true 522 | true 523 | false 524 | 525 | odom 526 | odom 527 | base_footprint 528 | 529 | 530 | 531 | 532 | 533 | 534 | ~/out:=joint_states 535 | 536 | 30 537 | wheel_left_joint 538 | wheel_right_joint 539 | 540 | 541 | 542 | 543 | -------------------------------------------------------------------------------- /models/turtlebot3_waffle/model_nocamera.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 0.0 0.0 0.0 0.0 0.0 0.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | -0.064 0 0.048 0 0 0 12 | 13 | 4.2111447e-02 14 | 0 15 | 0 16 | 4.2111447e-02 17 | 0 18 | 7.5254874e-02 19 | 20 | 1.3729096e+00 21 | 22 | 23 | 24 | -0.064 0 0.048 0 0 0 25 | 26 | 27 | 0.265 0.265 0.089 28 | 29 | 30 | 31 | 32 | 33 | -0.064 0 0 0 0 0 34 | 35 | 36 | model://turtlebot3_waffle/meshes/waffle_base.dae 37 | 0.001 0.001 0.001 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | true 46 | 50 47 | 48 | 49 | 50 | 51 | 0.0 52 | 2e-4 53 | 54 | 55 | 56 | 57 | 0.0 58 | 2e-4 59 | 60 | 61 | 62 | 63 | 0.0 64 | 2e-4 65 | 66 | 67 | 68 | 69 | 70 | 71 | 0.0 72 | 1.7e-2 73 | 74 | 75 | 76 | 77 | 0.0 78 | 1.7e-2 79 | 80 | 81 | 82 | 83 | 0.0 84 | 1.7e-2 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | ~/out:=imu 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -0.052 0 0.111 0 0 0 101 | 102 | 0.001 103 | 0.000 104 | 0.000 105 | 0.001 106 | 0.000 107 | 0.001 108 | 109 | 0.114 110 | 111 | 112 | 113 | -0.052 0 0.111 0 0 0 114 | 115 | 116 | 0.0508 117 | 0.055 118 | 119 | 120 | 121 | 122 | 123 | -0.064 0 0.121 0 0 0 124 | 125 | 126 | model://turtlebot3_waffle/meshes/lds.dae 127 | 0.001 0.001 0.001 128 | 129 | 130 | 131 | 132 | 133 | true 134 | false 135 | -0.064 0 0.121 0 0 0 136 | 5 137 | 138 | 139 | 140 | 360 141 | 1.000000 142 | 0.000000 143 | 6.280000 144 | 145 | 146 | 147 | 0.120000 148 | 3.5 149 | 0.015000 150 | 151 | 152 | gaussian 153 | 0.0 154 | 0.01 155 | 156 | 157 | 158 | 159 | 160 | ~/out:=scan 161 | 162 | sensor_msgs/LaserScan 163 | base_scan 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 0.0 0.144 0.023 -1.57 0 0 172 | 173 | 1.1175580e-05 174 | -4.2369783e-11 175 | -5.9381719e-09 176 | 1.1192413e-05 177 | -1.4400107e-11 178 | 2.0712558e-05 179 | 180 | 0.1 181 | 182 | 183 | 184 | 0.0 0.144 0.023 -1.57 0 0 185 | 186 | 187 | 0.033 188 | 0.018 189 | 190 | 191 | 192 | 193 | 194 | 195 | 100000.0 196 | 100000.0 197 | 0 0 0 198 | 0.0 199 | 0.0 200 | 201 | 202 | 203 | 204 | 0 205 | 0.2 206 | 1e+5 207 | 1 208 | 0.01 209 | 0.001 210 | 211 | 212 | 213 | 214 | 215 | 216 | 0.0 0.144 0.023 0 0 0 217 | 218 | 219 | model://turtlebot3_waffle/meshes/tire.dae 220 | 0.001 0.001 0.001 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 0.0 -0.144 0.023 -1.57 0 0 230 | 231 | 1.1175580e-05 232 | -4.2369783e-11 233 | -5.9381719e-09 234 | 1.1192413e-05 235 | -1.4400107e-11 236 | 2.0712558e-05 237 | 238 | 0.1 239 | 240 | 241 | 242 | 0.0 -0.144 0.023 -1.57 0 0 243 | 244 | 245 | 0.033 246 | 0.018 247 | 248 | 249 | 250 | 251 | 252 | 253 | 100000.0 254 | 100000.0 255 | 0 0 0 256 | 0.0 257 | 0.0 258 | 259 | 260 | 261 | 262 | 0 263 | 0.2 264 | 1e+5 265 | 1 266 | 0.01 267 | 0.001 268 | 269 | 270 | 271 | 272 | 273 | 274 | 0.0 -0.144 0.023 0 0 0 275 | 276 | 277 | model://turtlebot3_waffle/meshes/tire.dae 278 | 0.001 0.001 0.001 279 | 280 | 281 | 282 | 283 | 284 | 285 | -0.177 -0.064 -0.004 -1.57 0 0 286 | 287 | 0.001 288 | 289 | 0.00001 290 | 0.000 291 | 0.000 292 | 0.00001 293 | 0.000 294 | 0.00001 295 | 296 | 297 | 298 | 299 | 300 | 0.005000 301 | 302 | 303 | 304 | 305 | 306 | 0 307 | 0.2 308 | 1e+5 309 | 1 310 | 0.01 311 | 0.001 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | -0.177 0.064 -0.004 -1.57 0 0 320 | 321 | 0.001 322 | 323 | 0.00001 324 | 0.000 325 | 0.000 326 | 0.00001 327 | 0.000 328 | 0.00001 329 | 330 | 331 | 332 | 333 | 334 | 0.005000 335 | 336 | 337 | 338 | 339 | 340 | 0 341 | 0.2 342 | 1e+5 343 | 1 344 | 0.01 345 | 0.001 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 0.069 -0.047 0.107 0 0 0 357 | 358 | 0.001 359 | 0.000 360 | 0.000 361 | 0.001 362 | 0.000 363 | 0.001 364 | 365 | 0.035 366 | 367 | 368 | 0.069 -0.047 0.107 0 0 0 369 | 370 | true 371 | true 372 | 1 373 | 374 | 1.02974 375 | 376 | 1920 377 | 1080 378 | R8G8B8 379 | 380 | 381 | 0.02 382 | 300 383 | 384 | 385 | gaussian 386 | 389 | 0.0 390 | 0.007 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | > 410 | -0.06 0 .13 0 0 0 411 | 412 | 413 | 0.25 0.25 0.005 414 | 415 | 416 | 417 | Gazebo/Red 418 | 419 | 420 | -0.06 0 .13 0 0 0 421 | 422 | 423 | 0.25 0.25 0.005 424 | 425 | 426 | 427 | 428 | 429 | 430 | base_scan 431 | turtlebot3_tray 432 | 0.94 0.165 0.494 0 0 0 433 | 434 | 435 | 436 | base_footprint 437 | base_link 438 | 439 | 440 | 441 | 442 | base_link 443 | wheel_left_link 444 | 0.0 0.144 0.023 -1.57 0 0 445 | 446 | 0 0 1 447 | 448 | 449 | 450 | 451 | base_link 452 | wheel_right_link 453 | 0.0 -0.144 0.023 -1.57 0 0 454 | 455 | 0 0 1 456 | 457 | 458 | 459 | 460 | base_link 461 | caster_back_right_link 462 | 463 | 464 | 465 | base_link 466 | caster_back_left_link 467 | 468 | 469 | 470 | base_link 471 | imu_link 472 | -0.032 0 0.068 0 0 0 473 | 474 | 0 0 1 475 | 476 | 477 | 478 | 479 | base_link 480 | base_scan 481 | -0.064 0 0.121 0 0 0 482 | 483 | 0 0 1 484 | 485 | 486 | 487 | 488 | base_link 489 | camera_link 490 | 0.064 -0.065 0.094 0 0 0 491 | 492 | 0 0 1 493 | 494 | 495 | 496 | 497 | camera_link 498 | camera_rgb_frame 499 | 0.005 0.018 0.013 0 0 0 500 | 501 | 0 0 1 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 10 512 | 513 | 514 | wheel_left_joint 515 | wheel_right_joint 516 | 517 | 518 | 0.287 519 | 0.066 520 | 521 | 522 | 20 523 | 1.0 524 | 525 | cmd_vel 526 | 527 | 528 | true 529 | true 530 | false 531 | 532 | odom 533 | odom 534 | base_footprint 535 | 536 | 537 | 538 | 539 | 540 | 541 | ~/out:=joint_states 542 | 543 | 10 544 | wheel_left_joint 545 | wheel_right_joint 546 | 547 | 548 | 549 | 550 | -------------------------------------------------------------------------------- /package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | turtlebot3_multi_robot 5 | 2.2.6 6 | 7 | Multi robot support TurtleBot3 in Gazebo 8 | 9 | Arshad Mehmood 10 | Apache 2.0 11 | ament_cmake 12 | gazebo_ros_pkgs 13 | geometry_msgs 14 | nav_msgs 15 | rclcpp 16 | sensor_msgs 17 | tf2 18 | turtlebot3_navigation2 19 | nav2_common 20 | navigation2 21 | launch_ros 22 | launch_ros 23 | navigation2 24 | nav2_common 25 | slam_toolbox 26 | 27 | ament_cmake 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /params/nav2_params.yaml: -------------------------------------------------------------------------------- 1 | amcl: 2 | ros__parameters: 3 | use_sim_time: True 4 | alpha1: 0.2 5 | alpha2: 0.2 6 | alpha3: 0.2 7 | alpha4: 0.2 8 | alpha5: 0.2 9 | base_frame_id: "base_footprint" 10 | beam_skip_distance: 0.5 11 | beam_skip_error_threshold: 0.9 12 | beam_skip_threshold: 0.3 13 | do_beamskip: false 14 | global_frame_id: "map" 15 | lambda_short: 0.1 16 | laser_likelihood_max_dist: 2.0 17 | laser_max_range: 100.0 18 | laser_min_range: -1.0 19 | laser_model_type: "likelihood_field" 20 | max_beams: 60 21 | max_particles: 2000 22 | min_particles: 500 23 | odom_frame_id: "odom" 24 | pf_err: 0.05 25 | pf_z: 0.99 26 | recovery_alpha_fast: 0.0 27 | recovery_alpha_slow: 0.0 28 | resample_interval: 1 29 | robot_model_type: "nav2_amcl::DifferentialMotionModel" 30 | save_pose_rate: 0.5 31 | sigma_hit: 0.2 32 | tf_broadcast: true 33 | transform_tolerance: 1.0 34 | update_min_a: 0.2 35 | update_min_d: 0.25 36 | z_hit: 0.5 37 | z_max: 0.05 38 | z_rand: 0.5 39 | z_short: 0.05 40 | scan_topic: scan 41 | map_topic: /map 42 | 43 | amcl_map_client: 44 | ros__parameters: 45 | use_sim_time: True 46 | 47 | amcl_rclcpp_node: 48 | ros__parameters: 49 | use_sim_time: True 50 | 51 | bt_navigator: 52 | ros__parameters: 53 | use_sim_time: True 54 | global_frame: map 55 | robot_base_frame: base_link 56 | odom_topic: /odom 57 | enable_groot_monitoring: False 58 | groot_zmq_publisher_port: 1666 59 | groot_zmq_server_port: 1667 60 | default_bt_xml_filename: "navigate_w_replanning_and_recovery.xml" 61 | plugin_lib_names: 62 | - nav2_compute_path_to_pose_action_bt_node 63 | - nav2_compute_path_through_poses_action_bt_node 64 | - nav2_smooth_path_action_bt_node 65 | - nav2_follow_path_action_bt_node 66 | - nav2_spin_action_bt_node 67 | - nav2_wait_action_bt_node 68 | - nav2_back_up_action_bt_node 69 | - nav2_drive_on_heading_bt_node 70 | - nav2_clear_costmap_service_bt_node 71 | - nav2_is_stuck_condition_bt_node 72 | - nav2_goal_reached_condition_bt_node 73 | - nav2_goal_updated_condition_bt_node 74 | - nav2_globally_updated_goal_condition_bt_node 75 | - nav2_is_path_valid_condition_bt_node 76 | - nav2_initial_pose_received_condition_bt_node 77 | - nav2_reinitialize_global_localization_service_bt_node 78 | - nav2_rate_controller_bt_node 79 | - nav2_distance_controller_bt_node 80 | - nav2_speed_controller_bt_node 81 | - nav2_truncate_path_action_bt_node 82 | - nav2_truncate_path_local_action_bt_node 83 | - nav2_goal_updater_node_bt_node 84 | - nav2_recovery_node_bt_node 85 | - nav2_pipeline_sequence_bt_node 86 | - nav2_round_robin_node_bt_node 87 | - nav2_transform_available_condition_bt_node 88 | - nav2_time_expired_condition_bt_node 89 | - nav2_path_expiring_timer_condition 90 | - nav2_distance_traveled_condition_bt_node 91 | - nav2_single_trigger_bt_node 92 | - nav2_is_battery_low_condition_bt_node 93 | - nav2_navigate_through_poses_action_bt_node 94 | - nav2_navigate_to_pose_action_bt_node 95 | - nav2_remove_passed_goals_action_bt_node 96 | - nav2_planner_selector_bt_node 97 | - nav2_controller_selector_bt_node 98 | - nav2_goal_checker_selector_bt_node 99 | - nav2_controller_cancel_bt_node 100 | - nav2_path_longer_on_approach_bt_node 101 | - nav2_wait_cancel_bt_node 102 | - nav2_spin_cancel_bt_node 103 | - nav2_back_up_cancel_bt_node 104 | - nav2_drive_on_heading_cancel_bt_node 105 | 106 | bt_navigator_rclcpp_node: 107 | ros__parameters: 108 | use_sim_time: True 109 | 110 | controller_server: 111 | ros__parameters: 112 | use_sim_time: True 113 | controller_frequency: 20.0 114 | min_x_velocity_threshold: 0.001 115 | min_y_velocity_threshold: 0.5 116 | min_theta_velocity_threshold: 0.001 117 | progress_checker_plugin: "progress_checker" 118 | goal_checker_plugin: "goal_checker" 119 | controller_plugins: ["FollowPath"] 120 | 121 | # Progress checker parameters 122 | progress_checker: 123 | plugin: "nav2_controller::SimpleProgressChecker" 124 | required_movement_radius: 0.5 125 | movement_time_allowance: 10.0 126 | # Goal checker parameters 127 | goal_checker: 128 | plugin: "nav2_controller::SimpleGoalChecker" 129 | xy_goal_tolerance: 0.25 130 | yaw_goal_tolerance: 0.25 131 | stateful: True 132 | # DWB parameters 133 | FollowPath: 134 | plugin: "dwb_core::DWBLocalPlanner" 135 | debug_trajectory_details: True 136 | min_vel_x: 0.0 137 | min_vel_y: 0.0 138 | max_vel_x: 0.26 139 | max_vel_y: 0.0 140 | max_vel_theta: 1.0 141 | min_speed_xy: 0.0 142 | max_speed_xy: 0.26 143 | min_speed_theta: 0.0 144 | # Add high threshold velocity for turtlebot 3 issue. 145 | # https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75 146 | acc_lim_x: 2.5 147 | acc_lim_y: 0.0 148 | acc_lim_theta: 3.2 149 | decel_lim_x: -2.5 150 | decel_lim_y: 0.0 151 | decel_lim_theta: -3.2 152 | vx_samples: 20 153 | vy_samples: 5 154 | vtheta_samples: 20 155 | sim_time: 1.7 156 | linear_granularity: 0.05 157 | angular_granularity: 0.025 158 | transform_tolerance: 0.2 159 | xy_goal_tolerance: 0.25 160 | trans_stopped_velocity: 0.25 161 | short_circuit_trajectory_evaluation: True 162 | stateful: True 163 | critics: ["RotateToGoal", "Oscillation", "BaseObstacle", "GoalAlign", "PathAlign", "PathDist", "GoalDist"] 164 | BaseObstacle.scale: 0.02 165 | PathAlign.scale: 32.0 166 | PathAlign.forward_point_distance: 0.1 167 | GoalAlign.scale: 24.0 168 | GoalAlign.forward_point_distance: 0.1 169 | PathDist.scale: 32.0 170 | GoalDist.scale: 24.0 171 | RotateToGoal.scale: 32.0 172 | RotateToGoal.slowing_factor: 5.0 173 | RotateToGoal.lookahead_time: -1.0 174 | 175 | controller_server_rclcpp_node: 176 | ros__parameters: 177 | use_sim_time: True 178 | 179 | local_costmap: 180 | local_costmap: 181 | ros__parameters: 182 | update_frequency: 5.0 183 | publish_frequency: 2.0 184 | global_frame: odom 185 | robot_base_frame: base_link 186 | use_sim_time: True 187 | rolling_window: true 188 | map_topic: /map 189 | width: 3 190 | height: 3 191 | resolution: 0.05 192 | robot_radius: 0.22 193 | plugins: ["voxel_layer", "inflation_layer"] 194 | inflation_layer: 195 | plugin: "nav2_costmap_2d::InflationLayer" 196 | cost_scaling_factor: 3.0 197 | inflation_radius: 0.55 198 | voxel_layer: 199 | plugin: "nav2_costmap_2d::VoxelLayer" 200 | enabled: True 201 | publish_voxel_map: True 202 | origin_z: 0.0 203 | z_resolution: 0.05 204 | z_voxels: 16 205 | max_obstacle_height: 2.0 206 | mark_threshold: 0 207 | observation_sources: scan 208 | scan: 209 | topic: /scan 210 | max_obstacle_height: 2.0 211 | clearing: True 212 | marking: True 213 | data_type: "LaserScan" 214 | static_layer: 215 | map_subscribe_transient_local: True 216 | always_send_full_costmap: True 217 | local_costmap_client: 218 | ros__parameters: 219 | use_sim_time: True 220 | local_costmap_rclcpp_node: 221 | ros__parameters: 222 | use_sim_time: True 223 | 224 | global_costmap: 225 | global_costmap: 226 | ros__parameters: 227 | update_frequency: 1.0 228 | publish_frequency: 1.0 229 | global_frame: map 230 | robot_base_frame: base_link 231 | use_sim_time: True 232 | robot_radius: 0.22 233 | resolution: 0.05 234 | track_unknown_space: true 235 | map_topic: /map 236 | plugins: ["static_layer", "obstacle_layer", "inflation_layer"] 237 | obstacle_layer: 238 | plugin: "nav2_costmap_2d::ObstacleLayer" 239 | enabled: True 240 | observation_sources: scan 241 | scan: 242 | topic: /scan 243 | max_obstacle_height: 2.0 244 | clearing: True 245 | marking: True 246 | data_type: "LaserScan" 247 | static_layer: 248 | plugin: "nav2_costmap_2d::StaticLayer" 249 | map_subscribe_transient_local: True 250 | inflation_layer: 251 | plugin: "nav2_costmap_2d::InflationLayer" 252 | cost_scaling_factor: 3.0 253 | inflation_radius: 0.55 254 | always_send_full_costmap: True 255 | global_costmap_client: 256 | ros__parameters: 257 | use_sim_time: True 258 | global_costmap_rclcpp_node: 259 | ros__parameters: 260 | use_sim_time: True 261 | 262 | map_server: 263 | ros__parameters: 264 | use_sim_time: True 265 | yaml_filename: "turtlebot3_world.yaml" 266 | 267 | map_saver: 268 | ros__parameters: 269 | use_sim_time: True 270 | save_map_timeout: 5000 271 | free_thresh_default: 0.25 272 | occupied_thresh_default: 0.65 273 | map_subscribe_transient_local: False 274 | 275 | planner_server: 276 | ros__parameters: 277 | expected_planner_frequency: 20.0 278 | use_sim_time: True 279 | planner_plugins: ["GridBased"] 280 | GridBased: 281 | plugin: "nav2_navfn_planner/NavfnPlanner" 282 | tolerance: 0.5 283 | use_astar: false 284 | allow_unknown: true 285 | 286 | planner_server_rclcpp_node: 287 | ros__parameters: 288 | use_sim_time: True 289 | 290 | recoveries_server: 291 | ros__parameters: 292 | costmap_topic: local_costmap/costmap_raw 293 | footprint_topic: local_costmap/published_footprint 294 | cycle_frequency: 10.0 295 | recovery_plugins: ["spin", "back_up", "wait"] 296 | spin: 297 | plugin: "nav2_recoveries/Spin" 298 | back_up: 299 | plugin: "nav2_recoveries/BackUp" 300 | wait: 301 | plugin: "nav2_recoveries/Wait" 302 | global_frame: odom 303 | robot_base_frame: base_link 304 | transform_timeout: 0.1 305 | use_sim_time: true 306 | simulate_ahead_time: 2.0 307 | max_rotational_vel: 1.0 308 | min_rotational_vel: 0.4 309 | rotational_acc_lim: 3.2 310 | 311 | robot_state_publisher: 312 | ros__parameters: 313 | use_sim_time: True 314 | -------------------------------------------------------------------------------- /urdf/common_properties.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | -------------------------------------------------------------------------------- /urdf/turtlebot3_burger.urdf: -------------------------------------------------------------------------------- 1 | 2 | 4 | 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 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | -------------------------------------------------------------------------------- /urdf/turtlebot3_waffle.urdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | -------------------------------------------------------------------------------- /worlds/multi_empty_world.world: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | model://ground_plane 7 | 8 | 9 | 10 | model://sun 11 | 12 | 13 | 14 | false 15 | 16 | 17 | 18 | 19 | 8.0 -21.0 16.0 0 0.68 1.9 20 | orbit 21 | perspective 22 | 23 | 24 | 25 | 26 | 50 27 | 0.020 28 | 1 29 | 30 | 31 | quick 32 | 150 33 | 0 34 | 1.400000 35 | 1 36 | 37 | 38 | 0.00001 39 | 0.2 40 | 2000.000000 41 | 0.01000 42 | 43 | 44 | 45 | 46 | 47 | 48 | -0.167142 -0.122396 0 0 -0 0 49 | 50 | 51 | 52 | 53 | 19.5 0.15 2.5 54 | 55 | 56 | 0 0 1.25 0 -0 0 57 | 58 | 59 | 0 0 1.25 0 -0 0 60 | 61 | 62 | 19.5 0.15 2.5 63 | 64 | 65 | 66 | 70 | 1 1 1 1 71 | 72 | 73 | 0 74 | 75 | 76 | 0.125 -9.8 0 0 -0 0 77 | 78 | 79 | 80 | 81 | 82 | 19.75 0.15 2.5 83 | 84 | 85 | 0 0 1.25 0 -0 0 86 | 87 | 88 | 0 0 1.25 0 -0 0 89 | 90 | 91 | 19.75 0.15 2.5 92 | 93 | 94 | 95 | 99 | 1 1 1 1 100 | 101 | 102 | 0 103 | 104 | 105 | 9.8 0 0 0 -0 1.5708 106 | 107 | 108 | 109 | 110 | 111 | 19.75 0.15 2.5 112 | 113 | 114 | 0 0 1.25 0 -0 0 115 | 116 | 117 | 0 0 1.25 0 -0 0 118 | 119 | 120 | 19.75 0.15 2.5 121 | 122 | 123 | 124 | 128 | 1 1 1 1 129 | 130 | 131 | 0 132 | 133 | 134 | 0 9.8 0 0 -0 3.14159 135 | 136 | 137 | 138 | 139 | 140 | 19.75 0.15 2.5 141 | 142 | 143 | 0 0 1.25 0 -0 0 144 | 145 | 146 | 0 0 1.25 0 -0 0 147 | 148 | 149 | 19.75 0.15 2.5 150 | 151 | 152 | 153 | 157 | 1 1 1 1 158 | 159 | 160 | 0 161 | 162 | 163 | -9.8 0 0 0 -0 -1.5708 164 | 165 | 166 | 167 | 168 | 169 | 0.4 0.15 2.5 170 | 171 | 172 | 0 0 1.25 0 -0 0 173 | 174 | 175 | 0 0 1.25 0 -0 0 176 | 177 | 178 | 0.4 0.15 2.5 179 | 180 | 181 | 182 | 186 | 1 1 1 1 187 | 188 | 189 | 0 190 | 191 | 192 | -9.675 -9.8 0 0 -0 0 193 | 194 | 1 195 | 196 | 197 | 198 | 199 | -------------------------------------------------------------------------------- /worlds/multi_robot_world.world: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | model://ground_plane 7 | 8 | 9 | 10 | model://sun 11 | 12 | 13 | 14 | false 15 | 16 | 17 | 18 | 19 | 0.319654 -0.235002 9.29441 0 1.5138 0.009599 20 | orbit 21 | perspective 22 | 23 | 24 | 25 | 26 | 1000.0 27 | 0.001 28 | 1 29 | 30 | 31 | quick 32 | 150 33 | 0 34 | 1.400000 35 | 1 36 | 37 | 38 | 0.00001 39 | 0.2 40 | 2000.000000 41 | 0.01000 42 | 43 | 44 | 45 | 46 | 47 | 1 48 | 49 | model://turtlebot3_world 50 | 51 | 52 | 53 | 54 | 55 | --------------------------------------------------------------------------------