(Note -- this has only been tested on Melodic)
This repository provides MoveIt configurations for HEBI standard arm kits. These are designed for and have been tested with the HEBI MoveIt node in the hebi_cpp_api_examples
package ( https://github.com/HebiRobotics/hebi_cpp_api_ros_examples/ ).
You must have the following repositories or packages in your catkin workspace:
hebi_cpp_api_examples
( https://github.com/HebiRobotics/hebi_cpp_api_ros_examples/ ).hebi_description
( https://github.com/HebiRobotics/hebi_description/ ).hebi_moveit_configs
( https://github.com/HebiRobotics/hebi_moveit_configs/ ).
After running catkin make
, first modify the parameters in the moveit_arm_node<configuration>.launch
file to match your robot (e.g., module names, desired gains, etc). In particular, ensure that the modules you are trying to control have matching name and family properties to those in the launch file (these properties can be set using the Scope tool found at http://docs.hebi.us ). Then run:
roslaunch hebi_cpp_api_ros_examples moveit_arm_node<configuration>.launch
For a custom system created from HEBI components, you can follow the same steps we used for creating these configurations to ensure the resulting configuration will work with the HEBI MoveIt node. First, create a .xacro file for your custom robot (using the components/examples/documentation in https://github.com/HebiRobotics/hebi_description ), and then follow the instructions below.
Note -- this closely follows the official MoveIt tutorial, and this should be referenced for more detailed information.
Before running this, ensure you have sourced the devel/setup.sh file of a workspace where you have run catkin_make
with the hebi_description
package. Then run the first launch command below from that directory.
roslaunch moveit_setup_assistant setup_assistant.launch
- Press the button for creating a new config
- Browse to find your XACRO (or URDF) file. If using a xacro, add the
--xacro-ns
flag in the "optional xacro arguments" box. - press the "load files" button
- Move to the self collisions tab. We moved up the sampling density to about halfway, but a lower sampling density will probably work fine.
- Press "generate collision matrix". We find the "matrix view" of these results more intuitive.
- Move to the virtual joints tab. MoveIt config recommends adding a virtual joint from the base to the world. (We were not sure if this is necessary, given that we already have a world element, but we followed the MoveIt tutorial here):
- Click on Add Virtual Joint
- Set the name as "virtual_joint"
- Set the child link as "world" and the parent frame name as "world"
- Set the joint type as "fixed"
- Click "save"
- Move to the planning groups tab
- Click "add group"
- Enter "group name" as "hebi_arm"
- Choose
kdl_kinematics_plugin/KDLKinematicsPlugin
as the kinematics solver. Note: this can be tweaked as desired - Let "Kin. Search Resolution" and "Kin. Search Timeout" stay at their default values.
- Click "add joints". Ctrl-click to select all of the actuator joints in the left pane (e.g., "HEBI/base/X8_9")
- Click on the right arrow in the center to add the selected joints to the right panel
- Press "save"
If you have a gripper, you can add the gripper as a planning group, too:
- Click "add group"
- Enter "group name" as "hand"
- Leave kinematic solver as "none", and let "Kin. Search Resolution" and "Kin. Search Timeout" stay at their default values.
- Click "add links"
- Shift-click to select all of the links in the left pane that begin with "end_effector" except for
end_effector/INPUT_INTERFACE
(or whichever links are part of your end effector) - Click on the right arrow in the center to add the selected links to the right panel
- Press "save"
- Move to the robot poses tab
- Click "Add Pose".
- Choose a name for the pose, and set joint angles here. We recommend adding a "home" pose in a convenient (e.g., elbow-up) configuration.
If you have a gripper, you can add gripper poses here the same way. We recommend adding an "open" and "closed" pose for the gripper.
Only follow these steps if you have a gripper
- Move to the end effectors tab
- Choose
hand
as the "End Effector Name" - Choose
hand
as the "End Effector Group" - Choose
end_effector/INPUT_INTERFACE
as the "parent link" (this serves as the output of the last link on the arm) - Leave "parent group" blank
- Move to the ROS Controllers tab
- Click the "auto add followjointstrajectory controllers for each planning group" at the top of the page.
- If creating an arm with a gripper, delete the
hand_controller
controller that was created.
- Go to the 3D sensing/perception tab, and select "none"
- Go to the Author Information tab, and enter your name and email (required by catkin for publishing packages)
- Go to the "Configuration Files" tab, and select the desired output directory. Note that the files will be placed directly in the selected directory, not in a new subdirectory, so choose a directory matching convention such as
myrobotname_moveit_config
. - Click "Generate Package"
- Click "exit setup assistant"
- If creating an arm with a gripper, you will need to manually add the following entry to the end of the
config/ros_controllers.yaml
file, under thecontroller_list
parameter. You may have to change the joint name if you have created a different end effector.
- name: hand_controller
action_ns: gripper_action
type: GripperCommand
default: true
joints:
- end_effector/input_l_finger
- Save/commit your files after testing them.