Skip to main content

8.10.4

· One min read

Improvements

  • The performance of the UI and associated systems such as rosbridge was improved.
  • Numeric values now preserved their type information in our backend instead of being converted to strings, preventing type-mismatch errors.
  • Tolerances in RRT were relaxed for better planning.
  • Parameter overrides properly accepted ROS types.

Bug Fixes

  • The orientation converter glitching issue was fixed.
  • The JTAC no longer allowed goals that violated the path tolerance.

9.1.1

· One min read

Other Enhancements

Other Improvements

  • Exposed set_jacobian_inverse_damping in the Python PathIKOptions API, allowing users to tune the Jacobian inverse damping factor for Path IK solving.

Bug Fixes

  • Fixed project3dToPixel segfaulting or returning incorrect coordinates on Jetson ARM64 due to an OpenCV ABI mismatch between the pre-built ros-humble-image-geometry package and NVIDIA's JetPack OpenCV. All objectives using GetMasks3DFromMasks2D or FindMaskedObjects now work correctly on both amd64 and ARM64.
  • Fixed Enter/Space behavior when selecting favorited behaviors.
  • Automatically populate port values when a subtree is added.
  • Updated the moveit_pro_acm_updater tool to handle the case where the output SRDF already exists by adding an -f/--force flag and merging new ACM entries into an existing SRDF instead of failing or requiring manual cleanup.

9.1.0

· 13 min read

Major Features

ROS Jazzy Support

ROS Jazzy Support

ROS Jazzy builds are now available, alongside our existing ROS Humble build! Support for ROS Jazzy is still experimental, but all you need to do to try it out is set the variable MOVEIT_ROS_DISTRO to jazzy in your ~/.config/moveit_pro/moveit_pro_config.9.yaml file.

Segment Anything (SAM3) Multimodal AI Support

Segment Anything (SAM3) Multimodal AI Support

SAM3-based multimodal image segmentation is now available through the new GetMasks2DFromExemplar Behavior. This capability enables flexible object detection using combinations of text prompts, exemplar images, and bounding boxes, allowing developers to build robust exemplar-based perception pipelines. To help users get started, the lab_sim environment now includes three new Objectives demonstrating exemplar-driven segmentation workflows: ML Segment Bottles from File, ML Find Objects on Table, and ML Find Bottles on Table from Image Exemplar.

Better CPU Usage for ML Models

Better CPU Usage for ML Models

The CPU-only ONNX (Open Neural Network Exchange) inference now uses all available cores and enables memory pooling, providing a significant speedup (4-8x) on machines without a GPU. Previously, threading and memory settings were tuned for GPU execution and left CPU inference single-threaded. Also, when no GPU is available and ONNX Runtime falls back to CPU inference, a warning is now surfaced in the UI log panel. Previously this was only printed to the console, so users had no visibility into why ML inference was slower than expected.

Custom View Panes in the UI

Custom View Panes in the UI

You can now add custom dashboards, data displays, and web content as custom view panes in the canvas. You can add external URLs or local HTML files, and optionally enable ROS Bridge for each pane to allow content to interact with ROS topics. Access the management modal by clicking "Add Custom Pane" in any view pane's dropdown menu to add, edit, or remove custom view panes. An example Joint States Monitor pane (joint-states-monitor-example.html) is included as a reference for building custom panes with live ROS data.

See the Creating Custom View Panes in the MoveIt Pro UI for more details.

Monitor Currently Executing Behavior Tree Node

Monitor Currently Executing Behavior Tree Node

The navigation bar now shows the name(s) of currently running Behavior Tree leaf nodes during Objective execution instead of the static "Executing..." text.

Easier Teleop with Ghost Preview

Easier Teleop with Ghost Preview

Hovering over teleop buttons now shows a transparent ghost robot previewing the target position. This works for Pose teleop D-pad buttons, Joint teleop +/- buttons, and gripper open/close buttons (joints at their limit positions). The ghost hides during button press and reappears on the next hover.

Improved View Pane and Navigation Menu

Improved View Pane and Navigation Menu

The UI has been streamlined by consolidating navigation controls into the View dropdown menu, where navigation costmaps (Occupancy Grid, Global Costmap, and Local Costmap) now appear alongside Display options and Markers in a single visibility toggle. Additionally, the View Pane menu has been redesigned to show all available panes with checkboxes indicating the active one, making it easier to see and switch between views without hiding the currently selected pane.

New Planning Scene Sidebar for Environment Editing

New Planning Scene Sidebar for Environment Editing

The Keep-Out Zone modal has been replaced with a dedicated Planning Scene Editor sidebar, making it easier to create and edit environment objects directly within the UI. The new panel supports adjustable Height, Width, and Length for non-cube shapes, precise position and rotation controls (X/Y/Z and Roll/Pitch/Yaw), object deletion, and quick access to Load Scene and Export Scene tools.

Coordinate Frame Indicator

Coordinate Frame Indicator

A new coordinate frame indicator in the 3D viewport shows labeled XYZ axes that rotate with the camera, helping you identify the world coordinate frame at a glance. The indicator can be toggled from the View menu.

Other Enhancements

Misc User Interface Improvements

  • Added a filter dropdown to the sidebar for filtering Objectives and Behaviors. Users can filter by type (Runnable, Non-Runnable, and Behaviors in editor mode) and by access level (Editable, Non-Editable). The filter button is positioned next to the Collapse All button in the sidebar.
  • Added vertical 2-pane layout option to the canvas layout selector, allowing users to stack two panes top/bottom in addition to the existing side-by-side layout.
  • Added a toast warning when a point cloud is captured but "Point Clouds" is disabled in the View menu, so users know to re-enable visibility.
  • Added a tooltip for viewing the full Behavior port value.
  • Added a "Stop" button to the Breakpoint popup, allowing users to cancel the running Objective directly from the breakpoint prompt without needing to use the navbar stop button.
  • Added an "Auto-Clear on Run" toggle to the View menu's Markers section. When disabled, markers from previous Objective runs are preserved instead of being cleared at the start of a new run.
  • Added a double-click guard on the Edit/Done button to prevent accidental toggling when clicking too fast.
  • Added a "Clear all alerts" button to clear alert history directly from the Alert Sidebar settings dropdown.
  • Added Expand All / Collapse All buttons to the runtime Behavior Tree status viewer, allowing users to quickly expand or collapse all subtrees without switching to editor mode.
  • Added the "Create Waypoint" button to the navbar, allowing users to create waypoints from any teleoperation tab without needing to switch to the Waypoints tab.
  • Added auto-hide for the Behavior Selection Sidebar in Edit mode. The sidebar automatically closes when entering editor mode and opens when exiting, encouraging the use of the inline plus button for adding Behaviors to Behavior Trees.
  • Added navigation costmaps (Occupancy Grid, Global Costmap, Local Costmap) to the View dropdown menu alongside Display options and Markers in a unified visibility toggle, replacing the separate Navigation dropdown.
  • Added the "Show All Ports" toggle to the Behavior Tree controls bar and the "Snap to Box" checkbox to the Settings dropdown, decluttering the Objective dropdown menu.
  • Added the "Back to Parent" button when editing subtrees, allowing users to quickly navigate back to the parent Objective.
  • Added Enter key navigation in the search nodes bar, allowing users to jump to the next search result with a keyboard shortcut.
  • Added automatic point cloud clearing when using "Reset Simulation", preventing stale point cloud data from remaining visible after a reset.
  • Added port value matching to Behavior Tree search. Search now matches port values in addition to node names and port names, with the value field highlighted when a match occurs.
  • Added a block on dragging nodes from expanded subtrees in the Objective Builder. A warning toast explains that the subtree must be edited directly to rearrange its nodes.
  • Added multi-line wrapping for Behavior Tree node titles instead of truncating with ellipsis.
  • Added improved View Pane swap button positioning and styling. The swap button now appears above the resize handle to prevent accidental resizing when hovering over it, and the background is transparent by default, only appearing on hover.
  • Added automatic navigation back to the previously viewed Objective after using Teleoperate from an Objective.
  • Added automatic dismissal of toast notifications from previous Objective runs when a new Objective starts, preventing stale notifications from cluttering the UI.
  • Added automatic rosbridge WebSocket reconnection when the backend restarts, re-subscribing all active topics. Previously, users had to manually refresh the browser. A "Robot connected" success toast confirms when joint states resume.
  • Added dynamic resizing for joint sliders to fill available space when the sidebar width changes.
  • Added file path display to the Objective hover tooltip in the sidebar, making it easier to locate Objectives within the robot configuration package inheritance structure.
  • Added persistence for the last selected teleoperation mode (Waypoints, IMarker, Pose, or Joint) in the Teleoperation UI.

New Behaviors (Skills)

  • ListControllers is a new Behavior to retrieve controllers based on their type and activation state.
  • SetMujocoState is a new Behavior to set the joint state of the robot inside MuJoCo simulation.
  • CreateBoundingBox2D is a new Behavior that constructs a BoundingBox2D message from individual coordinate and size ports, suitable for wiring into Behaviors that accept box prompts.
  • CreateBoundingBoxes2D is a new Behavior that converts a flat vector of doubles into a vector of BoundingBox2D messages, where each group of four values (x, y, width, height) specifies a single box.
  • CreateBoundingBoxFromOffset is a new Behavior that generates a BoundingBox2D covering an exemplar image's dimensions with optional padding, ready to be passed to GetMasks2DFromExemplar.
  • PublishBoundingBoxes2D is a new Behavior that publishes a visualization of labeled bounding boxes overlaid on an image to a ROS topic.
  • OverridePoseOrientation is a new Behavior that replaces the orientation of a pose with a fixed quaternion, useful for enforcing gripper-down approach orientations.
  • GetCenterMostAprilTag is a new Behavior that selects the AprilTag detection closest to the camera image center from a set of detections.
  • ClearAllVisualMarkers is a new Behavior that deletes all visualization markers from the /visual_markers topic.
  • VisualizeLine is a new Behavior that draws a line marker between two poses, useful for visualizing spatial relationships such as detection-to-grasp offsets.

Behavior Improvements

  • SwitchControllers now detects control chains and automatically activates or deactivates controllers in a chain if automatic_activation or automatic_deactivation are set to true.
  • PlanMTCTask (MoveIt Task Constructor) now has a suppress_failure_message port that silently returns failure instead of publishing a UI alert when MTC planning fails. This is useful when planning failures are expected and handled by retry decorators.
  • ResetMujocoSim disables all active command controllers before resetting MuJoCo, and re-enables them after.
  • TransformPose can now optionally visualize the resulting pose as a coordinate-frame marker.
  • VisualizePath now supports customizable line color (line_color_rgb port, RGB 0-255) and line width (line_width port, in meters). Defaults match the previous green color and 1 cm width, with the line opacity increased from 0.8 to 1.0 for improved visibility.
  • MoveGripperAction provides improved timeout error messages with current port values and actionable troubleshooting steps.
  • PlanMTCTask error messages now include the task name, indent each failing stage for readability, and include a legend explaining the (solutions found / failures) notation.
  • SetupMTCFixedJointState now has an ignore_collisions port that allows users to skip collision checking in the FixedState stage. This is useful when the initial planning scene is expected to be in collision and the ACM rules are not yet set up, allowing downstream stages with the correct ACM to handle collisions instead of failing immediately.

Reference Application Changes

  • Added a new lab_sim_behaviors package for lab_sim with a ComputeTrayPlacePositionsUsingAprilTags custom Behavior that computes grid-based place positions relative to a tray AprilTag for bottle placement workflows.
  • Added an example Objective for SetMujocoState in lab_sim demonstrating how to set the robot's joint state inside the MuJoCo simulation.
  • In lab_sim there are three new Objectives to demonstrate how to use exemplars with GetMasks2DFromExemplar.
    • ML Segment Bottles from File loads an image from file of a laboratory table and uses text prompting to find bottles. Useful for troubleshooting and tuning parameters and prompts.
    • ML Find Objects on Table uses text prompting to find various objects on the MuJoCo lab table.
    • ML Find Bottles on Table from Image Exemplar uses an image exemplar of a square pill bottle to find simulated pill bottles in MuJoCo scene. Combine image exemplar with text prompts for more performance.

Documentation Improvements

Other Improvements

  • The Joint Trajectory Admittance Controller (JTAC) now accepts trajectories that specify only a subset of the controller's joints. Unspecified joints will hold their current position throughout the trajectory execution.
  • Updated LLM server models to the latest versions: Claude Opus 4.6, Claude Sonnet 4.6, and GPT-5.4.
  • Exposed set_jacobian_inverse_damping in the Python PathIKOptions API, allowing users to tune the Jacobian inverse damping factor for Path IK solving.
  • Added Objective REST API V2, which uses structured JSON instead of XML for data transfer, improving performance and simplifying programmatic access to Objectives.

Bug Fixes

  • Fixed controller activation in STRICT mode by skipping already-active controllers before activation and already-inactive controllers before deactivation.
  • Fixed scroll position not being preserved in the Quick Add Behavior menu when navigating back from the description view to the Behavior list.
  • Fixed port value tooltip remaining visible while editing port values in Behavior Tree nodes. The tooltip now hides when the input is focused and reappears on hover after editing.
  • Fixed warning toast notifications rendering with blue (info) styling instead of yellow (warning) styling.
  • Fixed a bug where the optimization-based IK (Inverse Kinematics) solver would perform solution validation only at the very end of the optimization process, causing it to always report optimal but invalid solutions.
  • Fixed a bug where SetupMTCFixedJointState checked for collisions using its own isolated planning scene, ignoring ACM (Allowed Collision Matrix) modifications from upstream MTC stages like SetupMTCIgnoreCollisionsBetweenObjects. A new ignore_collisions port (default: true) defers collision checking to downstream stages that have the correct ACM. To restore the previous Behavior, set ignore_collisions to false.
  • Removed the whole-scene collision check from the MTC ModifyPlanningScene stage. This stage is used to modify the ACM and add/remove collision objects, not to plan motion. The unscoped collision check caused false failures when unrelated objects in the scene were colliding (e.g., an octomap overlapping a static collision object).
  • Fixed a bug in MergePointClouds where NaN (Not a Number) values in the point clouds could cause ICP (Iterative Closest Point) alignment to fail and throw an exception. The Behavior now removes NaN values from the point clouds before alignment to ensure robust operation.
  • Added missing access stand and cart collision objects to the hangar_sim planning scene. The access stand (collision_Cube_002.001) was not in the URDF, and the cart (collision_Cube) position did not match its Mujoco world location, causing the robot to plan through both objects.
  • Fixed the default pose port value for VisualizePose to use {pose_stamped} (previously {stamped_pose}) to match MoveIt Pro conventions.
  • Fixed an issue where the JTAC would accept trajectories that don't start at the robot's current position, causing sudden jumps at the start of execution.
  • Fixed an issue where rosbridge_server could end up consuming large amounts of CPU

9.0.0

· 12 min read

Major Features

This is a very exciting major release, full of new features! 🎁

Joint Jog Teleoperation

Joint Jog Teleoperation

MoveIt Pro 9.0 introduces a new Joint Jog teleoperation mode that allows users to directly control individual robot joints through the Web UI. This new implementation replaces the previous MoveIt Servo-based joint jogging with a more robust and performant solution.

Key improvements over the previous Servo-based implementation:

  • Better Performance: The new Joint Velocity Controller provides smoother, more responsive joint motion with configurable velocity and acceleration limits per joint.
  • Enhanced Safety: Built-in safety features include online collision checking, joint limit enforcement with configurable safety margins, and automatic stopping when commands time out.
  • Simplified Configuration: Joint Jog uses a streamlined configuration file (joint_jog.yaml) that maps planning groups to their controllers, eliminating the need for complex MoveIt Servo parameter tuning.
  • Multi-Arm Support: Native support for dual-arm and multi-arm configurations with independent control of each manipulator.
  • Mobile Base Integration: Seamless integration with mobile bases, allowing simultaneous control of platform and arm joints (whole body control).

The Joint Jog Behavior performs continuous collision checking to ensure safe operation, with user-configurable link padding and stop safety factors. Users can also disable collision checking when needed for specific applications.

See the 9.0 User Workspace Migration Guide for instructions on updating your robot configuration packages to use the new Joint Jog feature, as the previous MoveIt Servo-based implementation is no longer available.

Scan and Plan Capabilities for Spraying & Surface Treatment

Scan and Plan Capabilities for Spraying & Surface Treatment

One of the recent improvements to MoveIt Pro is a set of Behaviors that enable scanning point clouds of the real-world and automatically generating rasterized Cartesian tool paths across the contours. This is ideal for spraying, washing, sanding, grinding, and more. You can see an example of this working in the Move along Contour Objective in the hangar_sim world and Plan Path Along Surface Objective in factory_sim. New Behaviors include:

  • GetContourFromPointCloudSlice - creates a planar contour that is offset around a point cloud slice.
  • MergePointClouds - exposes an option to align the point clouds using ICP when merging them.
  • CropPosesInBox - filter a vector of poses, such as a Cartesian path, based on a bounding box.

New Image Mask Behaviors

New Image Mask Behaviors

New Behaviors were added to enable inspecting and filtering bounding boxes and areas of 2D masks. Check out FilterMasks2DByArea, FilterMasks2DByBoundingBox, and GetMask2DProperties for more information. Useful for pruning image masks produced by ML Behaviors such as automasking.

Fully Redesigned User Interface

Fully Redesigned User Interface

The new 9.0 UI reduces mouse travel for common workflows, removes confusion around editing while in Build mode, and eliminates wasted space caused by duplicate header bars. The refreshed layout delivers a cleaner, more modern look that improves usability today while making the product more visually appealing. A key change is we have removed the main Build / Run buttons, unifying this concept into a single sidebar, but many other enhancements are explained below.

Added optional "Snap to Box" feature to the Behavior Tree editor

Added optional "Snap to Box" feature to the Behavior Tree editor

This editing mode allows nodes to be visually snapped to insertion points between siblings when dragging, making it easier to reorganize the tree structure. The implementation includes visual drop zones, grid-based layout for consistent node sizing, and a toggle in the UI to enable/disable the feature depending on your preference.

Added search for nodes and ports in editor mode with highlighted matches

Added search for nodes and ports in editor mode with highlighted matches

You can now search Behavior Tree nodes and ports by name in the editor, navigate between matches, and see the current match highlighted directly on the canvas.

Added Runtime/Editor filtering to toast history

Added Runtime/Editor filtering to toast history

Users can now filter alert messages in the alert history drawer by their source: Runtime (ROS logs and Objective execution events) or Editor (Build mode and editor operations). This makes it easier to focus on the messages that matter for the current task—for example, isolating Runtime alerts while debugging a Behavior Tree, or viewing only Editor-related notices while configuring Objectives.

Added Isometric View Modes

Added Isometric View Modes

Users can now view the robot and scene from multiple perspectives simultaneously (the original 3D "Visualization" view plus 3 new orthographic views along the X, Y, and Z axes). The different views can be selected from the view dropdown menu.

Added 5 and 6 pane view options

Added 5 and 6 pane view options

Added two new pane view options for large monitors: 5-pane view and 6-pane view. These layouts provide additional flexibility for users who need to view multiple camera feeds and visualization panels simultaneously.

  • 5-pane view: Features one tall pane on the left spanning the full height of the canvas and four smaller panes on the right arranged in a 2×2 grid (two columns, two rows).
  • 6-pane view: Displays six equal-sized panes in a 2×3 grid layout (33.33% width each), ideal for viewing multiple camera streams alongside the main visualization.

Added multi-joint simultaneous jogging functionality

Added multi-joint simultaneous jogging functionality

In the teleoperation interface, users can now adjust multiple joint sliders and approve all changes together before execution.

AI Oriented Robot Config Guides

We have revamped our robot configuration guides to be better understood by AI Assistants and turn URDFs into fully functional robot configurations.

Other Enhancements

Inverse Kinematics with Better Constraints

  • Path IK now exposes a way to track a path's orientation as a nullspace cost, rather than as a constraint. This allows position-only constrained paths to still closely follow the target orientation when kinematically feasible. Only available in the C++ and Python APIs via PathIKOptions::setTrackPathOrientationNullspaceTask().
  • Path IK now allows customizing the maximum allowed path deviation tolerances via PathIKOptions::setMaxAllowedPathDeviation(). Available in the C++ and Python APIs.
  • Path IK now allows users to provide a custom nullspace override function via PathIKOptions::setNullspaceOverrideFunction(). This function receives the computed nullspace component and current joint values, and can modify or replace the nullspace component before it is applied. Available in the C++ and Python APIs.

Misc UI Changes

  • Added a "MoveIt Pro Started" separator to the logs in the alert sidebar
  • Updated the visual appearance and layout of the Ports Sidebar in the Behavior Tree editor for better readability and UI consistency.
  • Added a Behavior category displayed in the Behavior description popover, as well as the "Quick Add" menu under the Behavior name
  • Message type names in the UI are now sanitized to hide verbose C++ template parameters: <std::allocator<void> > suffixes are removed, std::__cxx11::basic_string<...> is simplified to std::string, and default allocator template parameters in vectors are removed. This makes type names cleaner and easier to read, and allows users to enter simple type names that will match for type highlighting.
  • Moved "Submit Feedback" out of the settings menu and into the About modal.
  • Software Upgrade notification toasts now persist dismissal state, so that dismissed upgrade notifications for a specific version will not reappear until a newer version is available.

Updated ROS Snapshot

  • The ROS Humble snapshot being used for packages was updated to the 2026-01-07 snapshot.
  • Stay tuned for an optional ROS Jazzy in an upcoming 9.x release ;-)

Behavior Changes

  • SetupMTCMoveToPose, SetupMTCMoveToJointState, SetupMTCMoveToNamedState, and SetupMTCConnectWithTrajectory had been deprecated in version 7.1.0 and are now removed entirely in 9.0. Please use SetupMTCPlanToPose, SetupMTCPlanToJointState, SetupMTCPlanToNamedState, and SetupMTCConnectWithProRRT respectively.
  • DetachURDF and RemoveURDFFromScene Behaviors now return success (no-op) when attempting to detach or remove a tool that doesn't exist, instead of returning an error.
  • Consolidated ExecuteFollowJointTrajectory and ExecuteTrajectoryWithAdmittance into a single ExecuteTrajectory Behavior that supports both standard FollowJointTrajectory action servers and Joint Trajectory Admittance Controller (JTAC) action servers via an execution_pipeline input port.
  • GetContourFromPointCloudSlice: Renamed input port desired_pose_spacing to max_pose_spacing to better reflect its Behavior as an upper limit on waypoint spacing rather than a target spacing value. This is a breaking change that requires updating Objective files.
  • GetImage, GetCameraInfo, GetPointCloud: Renamed input port timeout_sec to message_timeout_sec to better distinguish it from the publisher_timeout_sec port. This is a breaking change that requires updating Objective files.
  • ExecuteMTCTask has been deprecated in favor of ExecuteMTCSolution and the new Execute MTC Solution subtree. The core Move to Pose and Request Teleoperation Objectives have been updated to use this new subtree internally. This will allow deprecating the old MoveIt 2 execution pipeline in favor of more transparent and direct communication with the robot controllers.

Removed Deprecated Behaviors

The following previously deprecated Behaviors have been removed. If you have custom Objectives using any of these Behaviors, please refer to the 9.0 User Workspace Migration Guide.

  • ActivateControllers
  • AddSubframeToObject
  • AddToolToScene
  • AppendOrientationConstraint
  • AttachTool
  • DetachTool
  • GenerateObjectsInBox
  • GetGraspAndTwistSubframes
  • GetMoveAlongArcSubframes
  • InitializeMotionConstraints
  • LoadObjectiveParameters
  • RemoveToolFromScene
  • ServoTowardsPose
  • SetupMTCApproachGrasp
  • SetupMTCGenerateCuboidGrasps
  • SetupMTCGenerateVacuumGrasps
  • SetupMTCRetractFromGrasp
  • TeleoperateTwist
  • TransformPoseFromYaml
  • WriteCalibratedPoseToYaml

Reference Application Changes

  • In factory_sim there is a new Objective Automask Camera Iterate Masks which demonstrates using automask on binary camera images and visualizes each mask individually using breakpoints. This particular Objective is useful for tuning mask parameters and can be applied to improve ML workflows.

Documentation Improvements

  • Adds tutorial for how to use GetMasks2DAutomask for ML-based automasking or automatic segmentation of images

Other Improvements

  • Path IK now exposes a way to track a path's orientation as a nullspace cost, rather than as a constraint. This allows position-only constrained paths to still closely follow the target orientation when kinematically feasible. Only available in the C++ and Python APIs via PathIKOptions::setTrackPathOrientationNullspaceTask().
  • Path IK now allows customizing the maximum allowed path deviation tolerances via PathIKOptions::setMaxAllowedPathDeviation(). Available in the C++ and Python APIs.
  • Path IK now allows users to provide a custom nullspace override function via PathIKOptions::setNullspaceOverrideFunction(). This function receives the computed nullspace component and current joint values, and can modify or replace the nullspace component before it is applied. Available in the C++ and Python APIs.
  • For the example Objectives Pick 1 Pill Bottle and Pick All Pill Bottles in lab_sim, the text prompts have been changed to a more descriptive prompt, improving the performance and consistency of the image segmentation.
  • Removed deprecated configuration related to planning group setup, including the joints and base_link/base_frame parameters. All example configurations which still use these parameters now accept planning_group_name instead.
  • The OMPL library is no longer used in any functionality in MoveIt Pro, having been fully deprecated many releases ago and select algorithms re-implemented from first principles as discussed on the MoveIt Pro Core page.
  • MoveIt Pro nodes launched via ROS launch now use TTY terminals, preserving colored console output.

Bug Fixes

  • Fixed LogMessage Behavior not setting a source name, which caused the UI to incorrectly parse messages containing periods or colons.
  • Fixed issue where the EditWaypoint Behavior was failing to save new waypoints.
  • Fixed an issue in trajectory parameterization where the last point of the trajectory could be missed due to rounding errors in time step calculation, leading to "Trajectory end-point deviates too much from goal state" errors in MTC pipelines.
  • Fixed an issue in trajectory parameterization where trajectories with max velocity and max acceleration vectors that are empty, of non-equal size, or non-finite were not rejected, causing a segfault.

Breaking API Changes

  • LoggerBase::publishFailureMessage, publishWarnMessage, and publishInfoMessage are no longer virtual. Tests mocking these methods should mock publishMessage(int32_t, const std::string&) instead.
  • The URLs for camera streams viewed in the Web UI now contain a qos_profile field which is set to sensor_data to match the QoS settings of MuJoCo. This should also be the default for most cameras but if you are unable to view a camera stream in the web UI, you can verify that the web subscription QoS matches the camera publisher QoS with ros2 topic info -v /my/camera/topic and adjust the publisher QoS settings accordingly.
  • All Web UI ROS topics previously published under the /studio_ui/ namespace have been renamed to use the /moveit_pro_ui/ prefix instead. For example, /studio_ui/store_joint_state/moveit_pro_ui/store_joint_state, /studio_ui/motion_ended/moveit_pro_ui/motion_ended, /studio_ui/move_joint/moveit_pro_ui/move_joint, /studio_ui/move_end_effector/moveit_pro_ui/move_end_effector, and /studio_ui/switch_primary_view/moveit_pro_ui/switch_primary_view. Any custom nodes subscribing or publishing to these topics must be updated accordingly.
  • The STUDIO variable prefixes were made into MOVEIT prefixes instead and are now found in a new ~/.config/moveit_pro_config.9.yaml.

Migration Guide

Information on migrating a workspace from MoveIt Pro 8.x to 9.0 can be found in the 9.0 User Workspace Migration Guide.

warning

MoveIt Pro 9.0 encourages users to switch to the Joint Trajectory Admittance Controller (JTAC) for improved safety and performance when executing trajectories. The JTAC will respect the robot joint acceleration limits when it needs to stop a trajectory. Make sure to set the stop_accelerations parameter in the controller configuration high enough that the robot can decelerate and stop quickly enough to meet your application's safety requirements.

8.10.3

· 2 min read

Improvements

  • Improved some ServiceClientBehaviorBase log statements by including the service name and timeout duration.
  • Improved the UI performance through rosbridge topic discovery QoS. Any applications on top of MoveIt Pro using rosbridge will also find improvements even if you are not using the UI.
  • Improved modal placement to not block information in the UI.
  • Improved color printing in the console when running in verbose mode (--verbose/-v).

Bug Fixes

  • Fixed Behavior Tree XML sync issue where previously deleted nodes persisted in the XML, causing incorrect graph structure when adding new Behaviors.
  • Fixed --include never flag in the update_acm script only working when combined with --verbose.
  • Fixed update_acm overwriting the whole srdf file. Users are now prompted to use --force/-f to overwrite the original srdf.
  • Fixed the need to refresh the browser when adding OpenAI API keys to the LLM Builder.
  • Fixed the Behavior xml rarely becoming malformed or outdated.
  • Fixed an issue where EditWaypoint could not save a new waypoint.
  • Fixed an issue in trajectory parameterization where the last point of the trajectory could be missed due to rounding errors in time step calculation, leading to "Trajectory end-point deviates too much from goal state" errors in MTC pipelines.
  • Fixed deviations in the last point of trajectories caused by polling at the wrong time, leading to unexpected robot motion.
  • Fixed JTAC segfaults and failures on single point trajectories, making the controller more stable for usage.
  • Fixed Offline Licensing inconsistently invalidating when it shouldn't, usually caused by container purge.

8.10.2

· One min read

Other Improvements

  • Major performance improvements when running the UI.

Bug Fixes

  • Fixed metadata in an Objective getting overridden when editing Subtrees.
  • Fixed the UI reporting an incorrect version upgrade when on the latest version of MoveIt Pro.
  • Fixed MoveIt Pro Cloud Instances sometimes being inaccessible.
  • Fixed the urdf_to_mjcf verb creating incorrect mjcf files due to similar mesh and geom names.

8.10.1

· One min read

Other Enhancements

Improvements

  • Running moveit_pro with the headless flag no longer checks for a running X server

Bug Fixes

  • Fixed a bug where Multi-tip Cartesian Path IK would fail when the robot's joint model group had multiple disconnected branches.

8.10.0

· 3 min read

Major Features

MoveIt Pro Core

MoveIt Pro Core

A new sub-product is now available (additional costs apply) that exposes the core MoveIt Pro planners, solvers, and controllers with low-level C++ and Python APIs. It does not include Behavior Trees nor much of the rest of MoveIt Pro's capabilities. Learn more..

MoveIt Pro Core

Behavior Tree Editor Sync with IDE

Now when you edit a Behavior Tree XML file in your IDE / text editor of choice, the changes are automatically refreshed in the MoveIt Pro UI.

Behavior Tree Editor Sync with IDE

URDF to MJCF Converter

The urdf_to_mjcf makes it easier to convert between different robot model types - ROS' URDF and MuJoCo's MJCF format.

URDF to MJCF Converter

Enhanced Segment Anything Model Support

The new Behavior GetMasks2DAutomask uses the SAM2 model to automatically segment images using a grid of points as prompts. You can see an example of how this is utilized in the factory_sim robot configuration package.

GetMasks2DAutomask

New Task Constructor Execution Behavior

A new Behavior ExecuteMTCSolution is available to execute a pre-computed MTC solution trajectory on a robot. This Behavior will replace the existing ExecuteMTCTask Behavior, as we advance towards a leaner execution pipeline.

ExecuteMTCSolution offers two controller interfaces: one for standard 'FollowJointTrajectory' controllers (e.g. ros2_control JTC), and another for the Joint Trajectory Admittance Controller (JTAC) included in MoveIt Pro. This allows users to easily execute MTC solutions with or without admittance control, and simplifies integration with other vendor controllers different than the ros2_control JTC, but offering the same FollowJointTrajectory action interface.

ExecuteMTCSolution Behavior

Other Enhancements

Misc UI Changes

  • Added new multi step modal for splitting workflows into distinct steps for the Custom Behavior Creation flow.

Reference Application Changes

  • Franka Robotics dual arm model URDFs updated

Documentation Improvements

  • Improvements to Configure ROS 2 DDS documentation updating our recommendation for "dual computer" configurations.

Other Improvements

  • The TF2 utility tf2-tools is now automatically installed and available in the MoveIt Pro container.
  • Enables graph optimization for ONNX runtime, increasing ML inference performance
  • Model predictive control functionality now has sphere residuals and associated Behavior for the residual.
  • Updated NVIDIA driver version recommendations to >= 525 and < 580
  • The Behavior Tree Assistant LLM models have been upgraded to Claude Opus 4.5, Gemini 3 Pro, and GPT-5.1 Codex.
  • Various license check and security improvements.

Bug Fixes

  • Fixed an issue where tight tolerances in ProRRT orientation constraints caused a misleading error message.
  • Joint-space planning Behaviors (such as PlanToJointGoal) will now properly report when goal states are outside of the given orientation tolerance.
  • Alert Sidebar logs each Objective run, even if there's no alerts
  • Waypoint manager node no longer fails to start when the waypoints YAML file is empty
  • Fixed a bug where the MTC Debugger in the UI will crash when opened.
  • Fixed a bug in the AddVirtualObjectToPlanningScene Behavior where virtual objects were incorrectly set to allow collisions with all other objects by default.

8.9.1

· One min read

Bug Fixes

  • Fixed Behavior Tree not saving when only edges changed
  • Only show expand/collapse button on control nodes that have children
  • Added missing error message title for joint limits
  • Fixed toast messages briefly appearing over the Alert History sidebar

8.9.0

· 3 min read

Major Features

Alert Message History Sidebar

Added a toast message history list into a sidebar to view past errors, warnings, and info messages. Supports search and respects current log level settings.

Alert Message History Sidebar

Visualize TF Transform Frames

Added a Visualize TF Objective to visualize any transform frame known to ROS' tf2 in the UI. This can be used in your Behavior Trees to help with debugging and visualization of coordinate frames.

Visualize TF Transform Frames

It requires core visualization Objectives to be enabled in the robot configuration package config.yaml file, for instance:

objectives:
...
objective_library_paths:
...
visualization_objectives:
package_name: "moveit_pro_objectives"
relative_path: "objectives/visualization"

Expand/Collapse Sequence Nodes

Added a collapse/expand button for Sequence nodes, similar in functionality to Subtrees.

Expand/Collapse Sequence Nodes

Enhanced Behavior Tree Node Coloring

Added a visual difference in Behavior Trees to distinguish between the currently editable Behavior Tree nodes and non-editable Subtree nodes.

Enhanced Behavior Tree Node Coloring

Prevent Accidental Keepout Zone Clicking

Added a lock/unlock toggle next to the "Add Keepout Zone" button to disable unintentional user interaction with collision keepout zones.

Prevent Accidental Keepout Zone Clicking

Other Enhancements

Misc UI Changes

  • Added dropdown with multiselect for tip_links in PlanCartesianPath and other Behaviors requiring tip_links as input.
  • Updated the color scheme of nodes in Behavior Trees, and added a unified two-layer theming system with a scalable color palette and semantic tokens.

Behavior Changes

  • The Joint Trajectory Admittance Controller (JTAC), and corresponding Behavior ExecuteTrajectoryWithAdmittance, can now be used without defining the admittance parameters. In this case, the controller will execute the trajectory without admittance control, making it equivalent to a standard Joint Trajectory Controller. This makes it easier to use the JTAC in applications that do not require admittance control.

  • The Path IK MTC Stage (e.g. SetupMTCPathIK) now generates partial trajectories, for visualization purposes, when the full path is not feasible. This allows users to see how far along the path the IK solver was able to compute valid waypoints before encountering an issue such as joint limits or collisions.

  • Fixed Tutorial 1 to use the updated name ML Segment Image Objective and image.

Other Improvements

  • The pose_jog configuration file (pose_jog.yaml) is now required.

Bug Fixes

  • Fixed a bug in the Joint Trajectory Admittance Controller (JTAC) where joint angles in trajectory messages were assumed to be in the same order as the controller's internal joint order. The controller now correctly respects the joint_names field in the JointTrajectory message and reorders joint values accordingly.
  • RecordJointTrajectory improved to better handle multithreaded service callbacks and creation to prevent race conditions.
  • Fixed issue causing an Objective tree to be saved multiple times when opened without applying modifications.