Skip to main content

2.8.0

· 3 min read

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.
  • Upgraded to latest version of MoveIt Servo.
    • Separated Teleoperate Behavior and Objective into Teleoperate Joint Jog and Teleoperate Twist.
  • New motion planning Behaviors:
    • AddCartesianPoseToSequence and SetupMTCCartesianSequence - 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 to SetupMTCCurrentState 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.

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>