2.8.0
Changes in This Release
- Ability to teach pose offsets from AprilTags using the UI.
- Added several new Behaviors to support this workflow.
- (Experimental)
AveragePoseStamped
-- Averages estimated AprilTag poses to mitigate detection noise and stabilize results. CalculatePoseOffset
- Calculates the offset transform from a source pose to a destination pose, relative to the source pose's coordinate frame.WritePoseToYAML
- Writes a pose to a YAML file.TransformPoseFromYaml
- Transforms a pose using another pose contained in a YAML file.- Pick AprilTag Labeled Object tutorial updated to reflect this new feature.
- (Experimental)
- Added several new Behaviors to support this workflow.
- Upgraded to latest version of MoveIt Servo.
- Separated
Teleoperate
Behavior and Objective intoTeleoperate Joint Jog
andTeleoperate Twist
.
- Separated
- New motion planning Behaviors:
AddCartesianPoseToSequence
andSetupMTCCartesianSequence
- Enables setting up a sequence of poses and planning through those poses.CreateJointState
- Create a valid joint state for your robot given joint names and position values.MoveToJointState
- Moves to a specified input joint state provided.SetupMTCFromSolution
- Provides an alternative toSetupMTCCurrentState
to initialize a MoveIt Task Constructor (MTC) task from the final state of a previously computed solution.
- New perception Behaviors:
LoadImageFromFile
- Loads an image from a file as a ROS Image message.GetSynchronizedCameraTopics
- Retrieves time synchronized RGB image, point cloud, and camera intrinsics data from ROS topics.FindMaskedObjects
- Segments a point cloud given image segmentation masks and returns graspable object representations.CropPointsInBox
- Segments a point cloud given a rectangular region of interest (ROI).
- New experimental Behaviors for Task and Motion Planning (TAMP):
GetPlanUsingTAMP
- Requests a plan from a ROS 2 Planning System (PlanSys2) planning server.CreateBehaviorTreeFromTaskPlan
- Builds an Objective given a task plan and a mapping between task actions and Subtrees.
IsForceWithinThreshold
Behavior refactored to be reusable in loops by reinitializing its running counters.- Switch default inverse kinematics (IK) solver in UR example configuration to TRAC-IK.
- UI updates:
- Create input and output port remappings for Subtrees.
- Toggle log levels for controlling the amount information displayed on the screen.
- "Convert to Subtree" menu options moved into context menus.
- Create input and output port remappings for Subtrees.
Migration Guide
Upgraded to latest version of MoveIt Servo
Starting with version 2.8.0
, the Teleoperate
Behavior was divided into two separate behaviors named TeleoperateJointJog
and TeleoperateTwist
depending on the corresponding type of command.
Similarly, the Teleoperate
Objective has been updated to separate Teleoperate Joint Jog
and Teleoperate Twist
Objectives that use the respective Behaviors above.
If you are upgrading your robot configuration package(s) from a previous version, ensure you make these changes before running MoveIt Studio. You can directly use the teleoperate_joint_jog.xml and teleoperate_twist.xml files in the UR example repo.
IsForceWithinThreshold
refactored to be reusable in a loop
In previous MoveIt Studio versions, the IsForceWithinThreshold
Behavior was written as a Condition node that returned SUCCESS
or RUNNING
at every tick.
Starting with version 2.8.0
, this Behavior is now an Action node that can also return RUNNING
and only returns a terminal state if the force exceeds the provided thresholds.
As such, updating your robot configuration package(s) from a previous version requires changing your Objectives. For example, to execute a task that is aborted early due to exceeding a force threshold, the changes are as follows:
<!-- Previous implementation -->
<ForceSuccess>
<ReactiveSequence>
<Condition ID="IsForceWithinThreshold" parameters="{parameters}" />
<Action ID="SomeOtherTask" />
</ReactiveSequence>
</ForceSuccess>
<!-- New implementation -->
<Control ID="Parallel" success_count="1" failure_count="1">
<Decorator ID="Inverter">
<Action ID="IsForceWithinThreshold" parameters="{parameters}"/>
</Decorator>
<Action ID="SomeOtherTask"/>
</Control>