Robotic Evaluation And Comparison Heuristic
The REACH repository is a tool that allows users to visualize and quantitatively evaluate the reach capability of a robot system for a given workpiece.
The package is comprised of several packages:
reach_msgs
- Message definitions for the reach study
reach_core
- Core code to operate the reach study
- Interfaces for plugins
- Inverse kinematics solver
- Robot pose evaluator
- Reach Display
moveit_reach_plugins
- Implementations of the plugin interfaces built on the MoveIt! planning framework
cd ~/catkin_ws/src
git clone https://github.com/ros-industrial/reach.git
cd ..
rosdep install --from-paths src --ignore-src -r -y
catkin build
A simple demonstration of the capability of this repository is provided in the reach_demo
package. See the instructions for details on how to run the demo.
- Create a URDF of your robot system
- Create a launch file to load the URDF, SRDF, and other required parameters (e.g. related to kinematics, joint, limits) to the parameter server
- Create a mesh model of the workpiece
- Create a point cloud of the target points on the workpiece
- This point cloud can be generated using a command line tool from PCL 1.8:
pcl_mesh_sampling <workpiece_mesh>.ply <output_cloud>.pcd -n_samples <number of samples> -leaf_size <leaf_size> -write_normals true
- This point cloud can be generated using a command line tool from PCL 1.8:
- Create a configuration YAML file (see example in config directory)
- Run the setup launch file
roslaunch reach_core setup.launch robot:=<load_robot_parameters>.launch
- Run the reach study analysis
roslaunch reach_core start.launch config_file:=<config_file.yaml> config_name:=<arbitrary_config>
The algorithm searches for alignment of the TCP Z-axis with the pointcloud normals.
- Ensure the object mesh scale and the point cloud scale match and are correct in RViz. It is common to be off by a factor of 1000.
- If it is OK for a robot link to collide with the mesh, add the link to "touch_links" fields in the config file.
- A different IK solver may yield better results than the default. A good choice is TracIK. Typically this is configured in kinematics.yaml.
- reach_core has some options for programmatically querying the reachability database.