Over the last week you've learned how to use ROS to integrate sensors, perform localisation and build maps while navigating in a Gazebo simulation and perceiving and manipulating objects with April Tags. In this session you'll integrate these packages and algorithms to create a simulated robot that can perform mobile manipulation.
In robotics research, mobile manipulation is a broad set of problems where a mobile robot performs synergistic navigation and interaction with the environment. Here we'll work on a restricted problem— mobility plus manipulation— where the robot alternates between navigation and manipulation modes (i.e. it parks before moving its arm).
Goal: Navigate between a set of waypoints and collect objects of interest:
In order to implement the mobile manipulation functionality, you will need the manipulation and slam_navigation repositories in working order.
Don't worry if you didn't get a final outcome for manipulation.
You will also need the ABB repository downloaded into your workspace.
After you git clone
the repository, make sure you switch to the kinetic-devel
branch, which also builds on Noetic.
You'll be using the Husky with ABB arm mounted on it in order to achieve mobile manipulation. You have two tasks:
- Create Launch files for running everything required.
- Modify this script to execute the mobile manipulation task.
This session uses different simulated hardware from yesterday. Instead of the UR5, we will be using an ABB IRB120 arm mounted on a Husky robot.
You will not need any of the manipulation functionality as it is already implemented here. You are more than welcome to change that functionality if you want. However, you will need the dependencies installed in for that repo.
Find the file that will spawn multiple stands and apriltags
This is following the Day #2 SLAM tutorial here.
Will be using amcl this time:
roslaunch mobility-plus-manipulation move_base_map_server_amcl.launch
Action
Create a launch file to do the following:
mobility-plus-manipulation/husky_abb.launch
mobility-plus-manipulation/move_base_map_server_amcl.launch
husky_abb_moveit_config/moveit_planning_execution_gazebo.launch
mobility-plus-manipulation husky_abb.launch
;
roscd mobility-plus-manipulation/scripts
source husky_abb_description.bash
This command makes sure the abb gets included with the robot description in the URDF. Do not dedicate any brain power to determining why this file is needed and what it does.
You should see something like this:
Action
Create another launch file with the following
<node name="planner" pkg="mobility-plus-manipulation" type="planner.py" output="screen" />
<node name="transform_tag_frame" pkg="husky_abb_manipulation" type="transform_tag_frame"/>
<node name="husky_abb_grab_object_node" pkg="husky_abb_manipulation" type="husky_abb_grab_object_node" output="screen"/>
and a parameter call move_before_grasp
set to true
.
Launch the file.
Modify the planner
Action
modify the planner.py script to obtain the desired functionality. You will need to have slam_navigation configured properly
Optionally, set move_before_grasp
to true
and see what it does.
Known issues The physics in Gazebo might break down after picking up one or two cubes.
Robotic tasks often require complex state machines where robots observe and execute actions depending on its current state (think Markovian assumption), if not for all states. ROS provides a state-machine system for this very purpose called Smach, which you can use for handling state-machines in your system.
Work through the Smach tutorials and see how you can use it to perform the sequence of mobility and manipulation tasks above.