moveit2
The MoveIt Motion Planning Framework for ROS 2.
|
API changes in MoveIt releases
trajectory_processing::Path
and trajectory_processing::Trajectory
APIs have been updated to prevent misuse. The constructors have been replaced by builder methods so that errors can be communicated. Paths and trajectories now need to be created with Path::Create()
and Trajectory::Create()
. These methods now return an std::optional
that needs to be checked for a valid value. Trajectory
no longer has the isValid()
method. If it's invalid, Trajectory::Create()
will return std::nullopt
. Finally, Path
now takes the list of input waypoints as std::vector
, instead of std::list
.lockSceneRead()
and lockSceneWrite()
are now protected member functions, for internal use only. To lock the planning scene, use LockedPlanningSceneRO
or LockedPlanningSceneRW
: CollisionObject
messages are now defined with a Pose
, and shapes and subframes are defined relative to the object's pose. This makes it easier to place objects with subframes and multiple shapes in the scene. This causes several changes:getFrameTransform()
now returns this pose instead of the first shape's pose..scene
) have changed format. Loading old files is still supported. You can add a line 0 0 0 0 0 0 1
under each line with an asterisk to upgrade old files.getName
.RDFLoader
to load from string parameter OR string topic (and add the ability to publish a string topic).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)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)moveit_controller_manager_example
into moveit_tutorialsget_planning_scene
service without explicitly setting "components" now return full scenemoveit_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 waypointsrobot_state::
and robot_model::
with the actual namespace moveit::core::
. The additional namespaces will disappear in the future (ROS2).moveit_cpp
to moveit_ros_planning
. The classes are now in namespace moveit_cpp
, access via moveit::planning_interface
is deprecated.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. (https://github.com/ros-planning/moveit/pull/2663)moveit/macros/deprecation.h
. Use [[deprecated]]
instead.MOVEIT_CLASS_FORWARD
et. al. must now be followed by a semicolon for consistency (and to get -pedantic builds to pass for the codebase).<ns>/move_group/display_planned_path
instead of /move_group/display_planned_path
).RobotState::attachBody()
now takes a unique_ptr instead of an owning raw pointer.MoveItErrorCode
from both moveit_ros_planning
and moveit_ros_planning_interface
to moveit_core
. The class now is in namespace moveit::core
, access via moveit::planning_interface
or moveit_cpp::PlanningComponent
is deprecated.ConstraintSampler::project()
as there was no real difference to sample()
.TrajectoryExecutionManager::pushAndExecute()
and the code associated to it. The code was unused and broken.tf2
API.find . -iname "*.[hc]*" -print0 | xargs -0 sed -i 's#Affine3#Isometry3#g'
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.CurrentStateMonitor::waitForCurrentState(double wait_time)
was finally removed.RobotState::getCollisionBodyTransforms
to getCollisionBodyTransform
as it returns a single transform only.tip_frame_
, search_discretization_
. Use tip_frames_
and redundant_joint_discretization_
instead.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.kinematics_solver_attempts
from your kinematics.yaml
config files.RDFLoader
/ RobotModelLoader
: removed TinyXML-based API (https://github.com/ros-planning/moveit/pull/1254)EndEffectorInteractionStyle
got removed from RobotInteraction
(https://github.com/ros-planning/moveit/pull/1287) Use the corresponding InteractionStyle
definitions insteadplan()
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
.