Once the map of the environment is available, the robot is ready to be localized. We make use of the amcl package (http://wiki.ros.org/amcl) in ROS, which helps us with autonomous navigation. amcl uses a particle filter to determine the position of the robot against a known map. The particle filter provides a list of poses based on the robot's sensor information and certain assumptions (you can find more information here: http://wiki.ros.org/amcl). As the robot moves, the pose cloud (the list of poses) converges toward the robot, stating the robot's positional assumption. If the poses are beyond a certain range, they are neglected automatically.
Since we use a differential drive robot, we shall make use of the already available amcl_diff.launch file as a template for our robot. To simulate our robot's navigation stack, let's create a file called mobile_manipulator_move_base.launch, all our move_base with the necessary parameters, and include the amcl node. Our launch file will look as follows:
<launch>
<node name="map_server" pkg="map_server" type="map_server" args="/home/robot/test.yaml"/>
<include file="$(find navigation)/launch/amcl_diff.launch"/>
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
<rosparam file="$(find navigation)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find navigation)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find navigation)/config/local_costmap_params.yaml" command="load" />
<rosparam file="$(find navigation)/config/global_costmap_params.yaml" command="load" />
<rosparam file="$(find navigation)/config/base_local_planner_params.yaml" command="load" />
<remap from="cmd_vel" to="/robot_base_velocity_controller/cmd_vel"/>
</node>
</launch>
Now that the robot base navigation has been set, let's learn how to set the arm in motion.