3️Navigation
Launchfile
localization.launch
<?xml version="1.0"?>
<launch>
<!-- Bringup two turtlebot3s - laptop/remotepc portion -->
<!-- Command Line Arguments -->
<arg name="tb3_0_init_x" default="0.0"/>
<arg name="tb3_0_init_y" default="0.0"/>
<arg name="tb3_0_init_a" default="0.0"/>
<arg name="tb3_1_init_x" default="0.0"/>
<arg name="tb3_1_init_y" default="0.0"/>
<arg name="tb3_1_init_a" default="0.0"/>
<arg name="tb3_2_init_x" default="0.0"/>
<arg name="tb3_2_init_y" default="0.0"/>
<arg name="tb3_2_init_a" default="0.0"/>
<arg name="joy_config" default="f310" />
<arg name="joy_config_file" default="$(find multi_turtlebot3_navigation)/config/$(arg joy_config).config.yaml" />
<arg name="tb3_0_joy_dev" default="/dev/input/js0" />
<arg name="tb3_1_joy_dev" default="/dev/input/js1" />
<arg name="tb3_2_joy_dev" default="/dev/input/js2" />
<!-- Default value for location of map config file -->
<arg name="map_file" default="$(env HOME)/map.yaml"/>
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
<arg name="urdf_file" default="$(find xacro)/xacro --inorder '$(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro'" />
<!-- Loads robot_description to parameter server from URDF file-->
<param name="robot_description" command="$(arg urdf_file)" />
<!-- Map Server -->
<node pkg="map_server" name="map_server" type="map_server" args="$(arg map_file)"/>
<!-- First Robot -->
<group ns="tb3_0">
<!-- Robot State Publisher -->
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
<param name="publish_frequency" type="double" value="50.0" />
<param name="tf_prefix" value="tb3_0"/>
</node>
<!-- AMCL -->
<node pkg="amcl" type="amcl" name="amcl">
<!-- Load default parameters for turtlebot -->
<rosparam file="$(find multi_turtlebot3_navigation)/param/amcl_params.yaml" command="load" />
<param name="initial_pose_x" value="$(arg tb3_0_init_x)"/>
<param name="initial_pose_y" value="$(arg tb3_0_init_y)"/>
<param name="initial_pose_a" value="$(arg tb3_0_init_a)"/>
<param name="odom_frame_id" value="tb3_0/odom"/>
<param name="base_frame_id" value="tb3_0/base_footprint"/>
<!-- Use the single map server -->
<remap from="static_map" to="/static_map"/>
</node>
<!-- Teleop Nodes -->
<!-- <node pkg="joy" type="joy_node" name="joy_node">
<param name="dev" value="$(arg tb3_0_joy_dev)" />
<param name="deadzone" value="0.1" />
<param name="autorepeat_rate" value="10" />
</node>
<node pkg="teleop_twist_joy" name="teleop_twist_joy" type="teleop_node">
<rosparam command="load" file="$(arg joy_config_file)" />
</node> -->
</group>
<!-- Second Robot -->
<group ns="tb3_1">
<!-- Robot State Publisher -->
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
<param name="publish_frequency" type="double" value="50.0" />
<param name="tf_prefix" value="tb3_1"/>
</node>
<!-- AMCL -->
<node pkg="amcl" type="amcl" name="amcl">
<!-- Load default parameters for turtlebot -->
<rosparam file="$(find multi_turtlebot3_navigation)/param/amcl_params.yaml" command="load" />
<param name="initial_pose_x" value="$(arg tb3_1_init_x)"/>
<param name="initial_pose_y" value="$(arg tb3_1_init_y)"/>
<param name="initial_pose_a" value="$(arg tb3_1_init_a)"/>
<param name="odom_frame_id" value="tb3_1/odom"/>
<param name="base_frame_id" value="tb3_1/base_footprint"/>
<!-- Use the single map server -->
<remap from="static_map" to="/static_map"/>
</node>
<!-- Teleop Nodes -->
<!-- <node pkg="joy" type="joy_node" name="joy_node">
<param name="dev" value="$(arg tb3_1_joy_dev)" />
<param name="deadzone" value="0.1" />
<param name="autorepeat_rate" value="10" />
</node>
<node pkg="teleop_twist_joy" name="teleop_twist_joy" type="teleop_node">
<rosparam command="load" file="$(arg joy_config_file)" />
</node> -->
</group>
<group ns="tb3_2">
<!-- Robot State Publisher -->
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
<param name="publish_frequency" type="double" value="50.0" />
<param name="tf_prefix" value="tb3_2"/>
</node>
<!-- AMCL -->
<node pkg="amcl" type="amcl" name="amcl">
<!-- Load default parameters for turtlebot -->
<rosparam file="$(find multi_turtlebot3_navigation)/param/amcl_params.yaml" command="load" />
<param name="initial_pose_x" value="$(arg tb3_2_init_x)"/>
<param name="initial_pose_y" value="$(arg tb3_2_init_y)"/>
<param name="initial_pose_a" value="$(arg tb3_2_init_a)"/>
<param name="odom_frame_id" value="tb3_2/odom"/>
<param name="base_frame_id" value="tb3_2/base_footprint"/>
<!-- Use the single map server -->
<remap from="static_map" to="/static_map"/>
</node>
<!-- Teleop Nodes -->
<!-- <node pkg="joy" type="joy_node" name="joy_node">
<param name="dev" value="$(arg tb3_2_joy_dev)" />
<param name="deadzone" value="0.1" />
<param name="autorepeat_rate" value="10" />
</node>
<node pkg="teleop_twist_joy" name="teleop_twist_joy" type="teleop_node">
<rosparam command="load" file="$(arg joy_config_file)" />
</node> -->
</group>
<!-- RVIZ configured for tb3_0/1 -->
<node pkg="rviz" type="rviz" name="rviz" required="true"
args="-d $(find multi_turtlebot3_navigation)/rviz/three_tb3_one_map_threegoals.rviz"/>
</launch>
navigation.launch
<?xml version="1.0"?>
<launch>
<include file="$(find multi_turtlebot3_navigation)/launch/move_base_namespace.launch">
<arg name="robot_namespace" value="tb3_0" />
</include>
<include file="$(find multi_turtlebot3_navigation)/launch/move_base_namespace.launch">
<arg name="robot_namespace" value="tb3_1" />
</include>
<include file="$(find multi_turtlebot3_navigation)/launch/move_base_namespace.launch">
<arg name="robot_namespace" value="tb3_2" />
</include>
</launch>
<?xml version="1.0"?>
<launch>
<!-- Launch file for move_base to run for one of multiple turtlebot3's -->
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
<!-- Namespace and tf_prefix are assumed to be the same -->
<arg name="robot_namespace"/>
<arg name="move_forward_only" default="false"/>
<group ns="$(arg robot_namespace)">
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
<!-- Default configs form the TB3 repos -->
<param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
<rosparam file="$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml" command="load" ns="global_costmap" />
<rosparam file="$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml" command="load" ns="local_costmap" />
<rosparam file="$(find turtlebot3_navigation)/param/local_costmap_params.yaml" command="load" />
<rosparam file="$(find turtlebot3_navigation)/param/global_costmap_params.yaml" command="load" />
<rosparam file="$(find turtlebot3_navigation)/param/move_base_params.yaml" command="load" />
<rosparam file="$(find turtlebot3_navigation)/param/dwa_local_planner_params_$(arg model).yaml" command="load" />
<!-- Set tf_prefix for frames explicity, overwriting defaults -->
<param name="global_costmap/scan/sensor_frame" value="$(arg robot_namespace)/base_scan"/>
<param name="global_costmap/obstacle_layer/scan/sensor_frame"
value="$(arg robot_namespace)/base_scan"/>
<param name="global_costmap/global_frame" value="map"/>
<param name="global_costmap/robot_base_frame"
value="$(arg robot_namespace)/base_footprint"/>
<param name="local_costmap/scan/sensor_frame" value="$(arg robot_namespace)/base_scan"/>
<param name="local_costmap/obstacle_layer/scan/sensor_frame"
value="$(arg robot_namespace)/base_scan"/>
<param name="local_costmap/global_frame" value="$(arg robot_namespace)/odom"/>
<param name="local_costmap/robot_base_frame"
value="$(arg robot_namespace)/base_footprint"/>
<!-- Centralized map server -->
<remap from="map" to="/map"/>
<param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" />
</node>
</group>
</launch>
Last updated