Package Summary
Tags | No category tags. |
Version | 1.1.4 |
License | Apache 2.0 |
Build type | CATKIN |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/ros-industrial/reach_ros.git |
VCS Type | git |
VCS Version | master |
Last Updated | 2024-06-15 |
Dev Status | DEVELOPED |
CI status |
|
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- mripperger
Authors
- mripperger
REACH ROS Plugins
This package contains the ROS1-based plugin implemenations of REACH kinematics, evaluation, and display interfaces
Installation
First, clone the repository into a catkin
workspace
cd ~/reach_ws/src
git clone https://github.com/ros-industrial/reach_ros.git
cd ..
Install the dependencies
vcs import src < src/reach_ros/dependencies.repos
rosdep install --from-paths src --ignore-src -r -y
Build the repository
catkin build
Demo
A simple demonstration of the capability of this repository is provided in the demo
sub-directory.
See the instructions for details on how to run the demo.
Usage
Use the following steps to run a reach study with a robot using the ROS1 infrastructure and plugins.
- 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 (see this demo example file)
- Create a mesh model of the workpiece
Note: the origin of this model should align with the kinematic base frame of the robot
- 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
- Create a configuration YAML file defining the parameters of the reach study and the configuration of the interface plugins (see this demo example)
- Run the setup launch file
roslaunch reach_ros setup.launch robot:=<load_robot_parameters>.launch
- Run the reach study analysis
roslaunch reach_ros start.launch config_file:=<config_file.yaml> config_name:=<arbitrary_config>
Evaluation Plugins
Manipulability
This plugin uses MoveIt! to calculate the manipulability of a robot pose. Higher manipulability results in a higher pose score. Range: [0, inf)
Parameters:
-
planning_group
- The name of the planning group with which to evaluate the manipulability of a given robot pose
-
jacobian_row_subset
(optional)- The indices of the rows of the Jacobian to use when evaluating the manipulability. The row indices should be on [0, 6) and correspond to the output space [x, y, z, rx, ry, rz]
- Ex.
jacobian_row_subset: [0, 1, 2] # position manipulability only
Manipulability Scaled
This plugin uses MoveIt! to calculate the manipulability of a robot pose divided by the characteristic length of the motion group. The characteristic length is computed by walking from the base link to the tip link of the motion group and summing the distances between adjacent links. Higher scaled manipulability results in a higher pose score. Range: [0, inf)
Parameters:
-
planning_group
- The name of the planning group with which to evaluate the manipulability of a given robot pose
-
jacobian_row_subset
(optional)- The indices of the rows of the Jacobian to use when evaluating the manipulability. The row indices should be on [0, 6) and correspond to the output space [x, y, z, rx, ry, rz]
- Ex.
jacobian_row_subset: [0, 1, 2] # position manipulability only
-
excluded_links
(optional)- The names of links contained in the motion group that should not contribute to the characteristic length
Manipulability Ratio
This plugin uses MoveIt! to calculate the manipulability of a robot pose and evaluate a score. The score is calculated as the ratio of the smallest manipulability value to the largest manipulability value. The larger this ratio, the more uniform the dexterity and the higher the score. Range [0, 1]
Parameters:
-
planning_group
- The name of the planning group with which to evaluate the manipulability of a given robot pose
-
jacobian_row_subset
(optional)- The indices of the rows of the Jacobian to use when evaluating the manipulability. The row indices should be on [0, 6) and correspond to the output space [x, y, z, rx, ry, rz]
- Ex.
jacobian_row_subset: [0, 1, 2] # position manipulability only
Distance Penalty
This plugin uses the MoveIt! collision environment to calculate the distance to closest collision for a robot pose. That distance value is then used to score the robot pose. Larger distance to closest collision results in higher pose score. Range: [0, inf)
Parameters:
-
planning_group
- The name of the planning group to be used to solve the robot’s inverse kinematics
-
distance_threshold
- The distance between 2 closest surfaces to collision under which an inverse kinematics solution will be considered invalid
-
collision_mesh_filename
(optional)- The filename (in ROS package URI format) of the reach object mesh to be used to do collision checking
- Example: `package://
/ / .stl
-
collision_mesh_frame
(optional)- The TF frame to which the collision mesh should be attached
- If left unspecified, the collision mesh will be attached to the kinematic base frame associated with
planning_group
-
touch_links
- The names of the robot links with which the reach object mesh is allowed to collide
-
exponent
- score = min(abs(closest_distance_to_collision / distance_threshold), 1.0)^exponent.
Joint Penalty
This plugin uses the MoveIt! robot model to calculate a robot pose score based on how much the pose deviates from the center of the joint range. Robot poses that are closer to the center of the joint range result in higher pose scores. Range: [0, 1]
Parameters:
-
planning_group
- The name of the planning_group with which to evaluate the joint penalty
IK Solvers
MoveIt! IK Solver
This plugin uses MoveIt! kinematics solvers and collision checking to produce collision aware IK solutions
Parameters:
-
planning_group
- Name of the planning group
-
distance_threshold
- The distance from nearest collision at which to invalidate an IK solution. For example, if this parameter is set to 0.1m, then IK solutions whose distance to nearest collision is less than 0.1m will be invalidated
-
collision_mesh_filename
(optional)- The file path to the collision mesh model of the workpiece, in the
package://
or ‘file://’ URI format
- The file path to the collision mesh model of the workpiece, in the
-
collision_mesh_frame
(optional)- The TF frame to which the collision mesh should be attached
- If left unspecified, the collision mesh will be attached to the kinematic base frame associated with
planning_group
-
touch_links
- The TF links that are allowed to be in contact with the collision mesh
-
evaluation_plugin
- The name (and parameters) of the evaluation plugin to be used to score IK solution poses
Discretized MoveIt! IK Solver
This plugin performs the same function as the MoveIt! IK solver plugin above, but calculates IK solutions for a target that has been discretized about its Z-axis by an input angle. The pose with the best score is returned.
Parameters:
-
planning_group
- Name of the planning group
-
distance_threshold
- The distance from nearest collision at which to invalidate an IK solution. For example, if this parameter is set to 0.1m, then IK solutions whose distance to nearest collision is less than 0.1m will be invalidated
-
collision_mesh_filename
(optional)- The file path to the collision mesh model of the workpiece, in the
package://
or ‘file://’ URI format
- The file path to the collision mesh model of the workpiece, in the
-
collision_mesh_frame
(optional)- The TF frame to which the collision mesh should be attached
- If left unspecified, the collision mesh will be attached to the kinematic base frame associated with
planning_group
-
touch_links
- The TF links that are allowed to be in contact with the collision mesh
-
evaluation_plugin
- The name (and parameters) of the evaluation plugin to be used to score IK solution poses
-
discretization_angle
- The angle (between 0 and pi, in radians) with which to sample each target pose about the Z-axis
Display Plugins
ROS Reach Display
This plugin publishes joint state and visualization markers to display the results of the reach study. The markers are interactive:
- Left-clicking on a marker will change the robot position to the IK solution
- This works by publishing a
sensor_msgs/JointState
message to thereach_joints
topic, which is a source topic for thejoint_state_publisher
- This works by publishing a
- Right-clicking on the marker will bring up a context menu that displays the score of the reach target
The markers are colorized with a heat-map, where red represents the highest scores (i.e., hottest) and blue represents the lowest scores (i.e., coldest). Unreachable points are colorized black. There are two methods for computing the values for the heat map:
- By default, the values for the heat map are computed as the ratio of the individual scores to the maximum score. Thus if the scores of the reach study are all fairly consistent and close to the maximum, then the colors of the markers will be mostly red (with the target with the maximum score being the deepest hue of red). If the scores of the reach study targets differ greatly, more variation in color will be seen. Usually this method produces the most meaningful display.
- The values can also be computed using the “full color range”, where the scores are fully normalized before colorization. The lowest score (regardless of value) is always displayed as the deepest hue of blue and the the highest score is always shown as the deepest hue of red. This is valuable for highlighting differences in reachability but can be misleading due to the normalization of the scores.
Parameters:
-
collision_mesh_filename
(optional)- The file path to the collision mesh model of the workpiece, in the
package://
or ‘file://’ URI format
- The file path to the collision mesh model of the workpiece, in the
-
collision_mesh_frame
(optional)- The TF frame to which the collision mesh should be attached
- If left unspecified, the collision mesh will be attached to
kinematic_base_frame
-
kinematic_base_frame
- The base frame of the kinematic tree in which to display the interactive markers
-
marker_scale
- The length (in meters) of the arrow markers representing the target Cartesian points
-
use_full_color_range
(optional, default: False)- Colorize the heat map using the full range of colors (such that the target with the lowest score is the deepest hue of blue, and the target with the highest score is the deepest hue of red)
Target Pose Generator Plugins
Transformed Point Cloud Target Pose Generator
This plugin inherits reach::PointCloudTargetPoseGenerator
, which creates target reach study waypoints from a point cloud file with normals, and transforms the point cloud points into a desired URDF frame (typically the kinematic base frame of the robot).
Parameters:
-
pcd_file
- The path to the point cloud file (.pcd format), in the
package://
orfile://
URI
- The path to the point cloud file (.pcd format), in the
-
points_frame
- The frame of the URDF to which the point cloud points are relative (i.e. the origin frame of the point cloud)
-
target_frame
- The frame into which the point cloud points should be transformed for the reach study purposes. This should be the kinematic base frame of the robot
Changelog for package reach_ros
1.1.4 (2024-06-15)
- Merge pull request #20 from marip8/fix/visualization-speed Fixed speed of loading interactive markers
- Fixed speed of loading interactive markers
- Contributors: Michael Ripperger
1.1.3 (2024-06-10)
- Take self collisions into account in distance_penalty
- Run format jobs on 20.04
- Check that IK solver has been loaded for move group
- Replace deprecated function
- Migrate utility function to reach
- Contributors: Iñigo Moreno, Michael Ripperger
1.1.2 (2023-09-22)
- Merge pull request #15 from ros-industrial/update/demo-yaml Use YAML anchors in reach study config files to simplify
- Merge pull request #14 from ros-industrial/update/ci Updated CI to run on tag push and workflow dispatch
- Updated CI to run on tag push and workflow dispatch
- Use YAML anchors in reach study config files to simplify
- Contributors: Michael Ripperger
1.1.1 (2023-09-07)
- Merge pull request #10 from ros-industrial/updates Minor Updates
- Use RICB in CMakeLists
- Update function to pass by reference
- Export reach_ros library target
- Merge pull request #9 from ros-industrial/fix/plugin Fixed typo in plugin export
- Fixed typo in plugin export
- Contributors: Michael Ripperger
1.1.0 (2023-06-13)
- Merge pull request #8 from marip8/update/reach Updated to REACH 1.3.0
- Updated to REACH 1.3.0
- Merge pull request #7 from marip8/update/collision-distance-eval Collision distance evaluator update
- Regenerated demo results
- Clipped collision distance penalty cost on [0, 1]
- Updated collision distance penalty to optionally include collision mesh; updated README
- Merge pull request #6 from marip8/update/README README updates
- Added installation instructions
- Added documentation for the collision_mesh_frame parameter
- Merge pull request #5 from marip8/updates Updates
- Updated to reach 1.2.0
- Updated the README
- Added transformed point cloud target pose generator
- Exposed plugins in separate library
- Fixed collision mesh frame key
- Merge pull request #4 from marip8/updates Updates
- Set environment variable so plugin loader can find reach_ros plugins
- Fixed tf2 issue
- Merge pull request #3 from marip8/update/deps Updated to reach 0.1.1
- Updated to reach 1.1.0
- Merge pull request #2 from marip8/update/changelog Cleared changelog
- Cleared changelog
- Merge pull request #1 from marip8/update Replace eigen_conversions dependency with tf2
- Replace eigen_conversions dependency with tf2
- Removed the Python tests
- Added reach to the dependencies.repos
- Install the demo files
- Updated README to include documentation about demo and usage
- Added GIF to README
- Flattened reach_ros directory
- Removed docs directory
- Removed reach directory
- Contributors: Michael Ripperger
1.0.0 (2023-05-10)
- Move ROS1 components (#44)
- Contributors: Michael Ripperger
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/setup.launch
-
- rviz [default: true] — Launch Rviz
- robot — Launch file that loads URDF, SRDF, and other kinematics-related parameters
- launch/start.launch
-
- config_file — YAML configuration file for the reach study
- config_name [default: reach_study] — Arbitrary configuration name for the reach study
- results_dir [default: /tmp] — Location in which reach study results will be saved
- demo/config/robot.launch