ros-industrial / reach_ros2

ROS2 packages for REACH
Apache License 2.0
15 stars 4 forks source link

REACH ROS Plugins

Ubuntu

This package contains the ROS2-based plugin implemenations of REACH kinematics, evaluation, and display interfaces

REACH ROS

Installation

First, clone the repository into a colcon workspace

cd ~/reach_ws/src
git clone https://github.com/ros-industrial/reach_ros2.git
cd ..

Install the dependencies

vcs import src < src/reach_ros2/dependencies.repos
rosdep install --from-paths src --ignore-src -r -y

Build the repository

colcon build --symlink-install

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 launch the demo from ROS 2 and see the Python instructions to see how you can use the Python interface to launch studies.

Usage

Use the following steps to run a reach study with a robot using the ROS1 infrastructure and plugins.

  1. Create any files describing your robot system required by the REACH plugins (e.g., URDF, SRDF, kinematics file, joint limits file, etc.)
  2. Create a mesh model of the workpiece

    Note: the origin of this model should align with the kinematic base frame of the robot

  3. 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
  4. Create a configuration YAML file defining the parameters of the reach study and the configuration of the interface plugins (see this demo example)
  5. Run the setup launch file
    ros2 launch reach_ros setup.launch robot_description_file:=<path_to_URDF>
  6. Run the reach study analysis
    ros2 launch reach_ros start.launch \
      robot_description_file:=<path_to_URDF> \
      robot_description_semantic_file:=<path_to_SRDF> \
      robot_description_kinematics_file:=<path_to_kinematics.yaml> \
      robot_description_joint_limits_file:=<path_to_joint_limits.yaml> \
      config_file:=<config_file.yaml> \
      config_name:=<arbitrary_config> \
      results_dir:=<arbitrary_results_directory>

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:

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:

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:

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, 1]

Parameters:

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:

IK Solvers

MoveIt! IK Solver

This plugin uses MoveIt! kinematics solvers and collision checking to produce collision aware IK solutions

Parameters:

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:

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:

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:

  1. 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.
  2. 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:

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: