Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time

Migration Notes

API changes in MoveIt releases

ROS Noetic

  • Static member variable interface of the CollisionDetectorAllocatorTemplate for the string NAME was replaced with a virtual method getName.
  • RobotModel no longer overrides empty URDF collision geometry by matching the visual geometry of the link.
  • Planned trajectories are slow by default. The default values of the velocity_scaling_factor and acceleration_scaling_factor can now be customized and default to 0.1 instead of 1.0. The values can be changed by setting the parameters default_acceleration_scaling_factor and default_velocity_scaling_factor in the joint_limits.yaml of your robot's moveit_config package. Consider setting them to values between 0.2 and 0.6, to allow for significant speedup/slowdown of your application. Additionally, you can always change the factors per request with the corresponding methods in the move_group_interface, the MoveGroupCommander or in the Rviz interface. (1890)
  • Extended the return value of MoveitCommander.MoveGroup.plan() from trajectory to a tuple of (success, trajectory, planning_time, error_code) to better match the C++ MoveGroupInterface (790)
  • moveit_rviz.launch, generated by MSA, provides an argument rviz_config to configure the rviz config to be used. The old boolean config argument was dropped. (1397)
  • Moved the example package moveit_controller_manager_example into moveit_tutorials
  • Requests to get_planning_scene service without explicitly setting "components" now return full scene
  • moveit_ros_planning no longer depends on moveit_ros_perception
  • CollisionRobot and CollisionWorld are combined into a single CollisionEnv class. This applies for all derived collision checkers as FCL, ALL_VALID, HYBRID and DISTANCE_FIELD. Consequently, getCollisionRobot[Unpadded] / getCollisionWorld functions are replaced through a getCollisionEnv in the planning scene and return the new combined environment. This unified collision environment provides the union of all member functions of CollisionRobot and CollisionWorld. Note that calling checkRobotCollision of the CollisionEnv does not take a CollisionRobot as an argument anymore as it is implicitly contained in the CollisionEnv.
  • RobotTrajectory provides a copy constructor that allows a shallow (default) and deep copy of waypoints
  • Replace the redundant namespaces robot_state:: and robot_model:: with the actual namespace moveit::core::. The additional namespaces will disappear in the future (ROS2).
  • Moved the library moveit_cpp to moveit_ros_planning. The classes are now in namespace moveit_cpp, access via moveit::planning_interface is deprecated.
  • The joint states of passive joints must be published in ROS and the CurrentStateMonitor will now wait for them as well. Their semantics dictate that they cannot be actively controlled, but they must be known to use the full robot state in collision checks. (
  • Removed deprecated header moveit/macros/deprecation.h. Use [[deprecated]] instead.
  • All uses of MOVEIT_CLASS_FORWARD et. al. must now be followed by a semicolon for consistency (and to get -pedantic builds to pass for the codebase).

ROS Melodic

  • Migration to tf2 API.
  • Replaced Eigen::Affine3d with Eigen::Isometry3d, which is computationally more efficient. Simply find-replace occurences of Affine3d: find . -iname "*.[hc]*" -print0 | xargs -0 sed -i 's#Affine3#Isometry3#g'
  • The move_group capability ExecuteTrajectoryServiceCapability has been removed in favor of the improved ExecuteTrajectoryActionCapability capability. Since Indigo, both capabilities were supported. If you still load default capabilities in your config/launch/move_group.launch, you can just remove them from the capabilities parameter. The correct default capabilities will be loaded automatically.
  • Deprecated method CurrentStateMonitor::waitForCurrentState(double wait_time) was finally removed.
  • Renamed RobotState::getCollisionBodyTransforms to getCollisionBodyTransform as it returns a single transform only.
  • Removed deprecated class MoveGroup (was renamed to MoveGroupInterface).
  • KinematicsBase: Deprecated members tip_frame_, search_discretization_. Use tip_frames_ and redundant_joint_discretization_ instead.
  • KinematicsBase: Deprecated initialize(robot_description, ...) in favour of initialize(robot_model, ...). Adapt your kinematics plugin to directly receive a RobotModel. See the KDL plugin for an example.
  • IK: Removed notion of IK attempts and redundant random seeding in RobotState::setFromIK(). Number of attempts is limited by timeout only. (#1288) Remove parameters kinematics_solver_attempts from your kinematics.yaml config files.
  • RDFLoader / RobotModelLoader: removed TinyXML-based API (
  • Deprecated EndEffectorInteractionStyle got removed from RobotInteraction ( Use the corresponding InteractionStyle definitions instead

ROS Kinetic

  • In the C++ MoveGroupInterface class the plan() method returns a MoveItErrorCode object and not a boolean. static_cast<bool>(mgi.plan()) can be used to achieve the old behavior.
  • CurrentStateMonitor::waitForCurrentState(double wait_time) has been renamed to waitForCompleteState to better reflect the actual semantics. Additionally a new method waitForCurrentState(const ros::Time t = ros::Time::now()) was added that actually waits until all joint updates are newer than t.
  • To avoid deadlocks, the PlanningSceneMonitor listens to its own EventQueue, monitored by an additional spinner thread. Providing a custom NodeHandle, a user can control which EventQueue and processing thread is used instead. Providing a default NodeHandle, the old behavior (using the global EventQueue) can be restored, which is however not recommended.