Skip to content

Bimanual Manipulation Setup and Examples

crvogt edited this page Feb 25, 2022 · 37 revisions

Summary

This example demonstrates three key developments

  • Configuring an arbitrary arm for MoveIt and Gazebo
  • Launch two robots in an environment as well as move_group modification
  • Add and configure two arms for RexROV then demonstrate key movements

MoveIt

MoveIt is an open-source project that provides the tools to develop complex manipulation scenarios. It integrates a number of motion planning libraries. MoveIt runs on top of ROS and builds on ROS functionality.

Configuring an arm for MoveIt is made simpler by using the MoveIt Setup Assistant. For our example, we followed the ROS Industrial/Universal Robot format for our robot *.urdf files. We found that by adopting this structure over the UUV Simulator structure allowed for greater customization and easier non-MoveIt configurations and sensor additions.

The process for configuring an arm is as follows, with files located in the uuv_manipulators/oberon7 sub-directories:

  1. Start the MoveIt Setup Assistant. This will generate the MoveIt configuration files for planners, collision checking, pick-and-place infrastructure, joystick teleoperation, and predetermined poses. The robot will not be controllable in Gazebo as no ROS controllers will exist, only "fake" MoveIt controllers.
  2. Create the ros controllers. These must be done "by hand" and are specific to the robot. For the Gazebo side, we created three files: joint_state_controller.yaml, arm_controller.yaml, and hand_controller.yaml.
  3. Create a launch file to start all of these controllers. In our case, this launch file is oberon7.launch and includes a node to load ROS controllers.

Dual Oberon7

After configuring one arm, we can make small modifications to allow for N arms in a simulation. In this example, we add group namespaces to several files to allow us to add two arms to one simulation while not having to generate separate controller files.

To start the Gazebo simulation in an empty world, run

roslaunch dave_demo_launch dave_two_arm_demo.launch

Once the controllers have loaded it is safe to start the MoveIt move group and RViz

roslaunch oberon7_moveit_config oberon7_multi_planning_execution.launch

Because we are treating each arm as a separate robot, this will bring up two RViz windows. Each robot can accept and execute a motion plan simultaneously, but are not aware of each other in terms of collision avoidance.

Generating Poses

There are multiple ways of generating poses for each arm. For this demo we consider three of them, all of which require RViz.

  • Random goal pose
  • Drag group end-effector
  • Pre-saved poses

Dual Oberon7 on RexROV

Starting the Gazebo simulation in the dave_ocean_waves.world world.

roslaunch dave_demo_launch dave_oberon7_moveit.launch

Once the simulation has started and controllers have been loaded, the MoveIt interface can be started along with RViz. Starting this prematurely will result in the example not working.

roslaunch rexrov_oberon7_moveit rexrov_dual_arm_moveit_planning_execution.launch moveit_controller_manager:=rexrov

How to move the arms

Simple Rexrov Demo

arm_flex

Clone this wiki locally