Robowflex
v0.1
Making MoveIt Easy
|
Robowflex is primarily a wrapper around components from other robotics libraries (in particular, components from MoveIt!). The name "Robowflex" is a portmanteau of "Robot" and "Bowflex", as Robowflex was intended just to be better "bench"-marking software (as in "bench press") than the rest. However, the software needed for doing benchmarking was the same as the software needed for running motion planning in "isolation" from a ROS system while still using ROS components, useful for many other things other than benchmarking. Thus, the project has spun out and become a toolbox for motion planning using real robots that are MoveIt! enabled.
The high-level goals of the project are as follows:
This document provides a high-level overview of the design and API of the robowflex_library
, as well as some of the auxiliary components. Unless otherwise noted, the class or method will be in robowflex_library
.
There are only a few core components in Robowflex that are necessary for planning. A brief overview of them is provided below. Take a look at the scripts to see the components in action.
robot_model::RobotModel
, and the scratch state is a robot_state::RobotState
. See the detailed description in Robot for more information.planning_scene::PlanningScene
.Geometry::make*
are provided to easily create instances of geometry. The class wraps a shapes::Shape
and bodies::Body
, which are used many places in MoveIt!.robowflex_ompl
which gives direct access to the OMPL state space used in MoveIt!, and robowflex_tesseract
provides a planning interface through tesseract and trajopt.One of the core challenges that Robowflex tackles is the issues of input / output in a ROS system (see IO). Robowflex provides a few useful things on this front:
yaml.h
and io/yaml.h
) compatible with the output dumped by ROS Python and rostopic echo
. Many of the components provide methods that serialize / deserialize YAML files.tf.h
.robowflex_visualization
. See the readme for more details.Additionally, there are a few implementations of robowflex::Robot for some commonly used robots, such as robowflex::UR5Robot, robowflex::FetchRobot, and robowflex::R2Robot.
Robowflex strives to maintain compatibility with all commonly used ROS distributions, from Kinetic to Noetic. Indigo support was dropped due to lack of ROS Docker support. To this end, there are many adapters and internal constructs so that users can run Robowflex in any of these environments without modification. However, there are some things to note about how various internal APIs have changed and how this affects behavior:
rosmaster
if one is not already running only on Melodic onward, due to a dependency of how this is implemented on Boost 1.64.Eigen::Affine3d
as the representation of transformation matrices to Eigen::Isometry3d
in Melodic in version 0.10.6. To account for this, we provide robowflex::RobotPose
which is a type alias for the correct matrix representation.Note that there are other internal functions that account for API differences between ROS versions, but they are not relevant to user code. There are macros in macros.h
that allow for conditional compilation on versions.
See here and here for how documentation is generated. This documents all code in the other Robowflex projects, as well as their README.md
files if they exist (see the add_doc
macro in .docs/CMakeLists.txt
). Additional written documentation is in the .docs/markdown
folder.