Programmatic SDKs Overview

MoveIt Pro exposes the same ROS 2 surface to all programmatic clients. Whatever transport you choose, the available endpoints, message types, and runtime semantics are identical — only the client library and connection mechanics differ.
This section is organized by feature. Each feature page shows the same workflow in every supported transport, switchable through tabs.
Choose a Transport
Two transports are supported:
- Native ROS 2 Client Libraries (RCL) —
rclpy(Python) orrclcpp(C++). The client process joins the ROS 2 graph directly via DDS. - Websocket Client Libraries —
roslibpy(Python),roslibjs(JavaScript),rossharp(C#),roslibrust(Rust),jrosbridge(Java), and others. The client speaks the rosbridge JSON protocol over a websocket to MoveIt Pro'srosbridge_server.
| Native RCL | Websocket via rosbridge | |
|---|---|---|
| Client requirements | ROS 2 install matching the MoveIt Pro distro (Humble or Jazzy). Same DDS network. | Any language with a websocket library. No ROS 2 install required. |
| Transport | DDS over the local network. | TCP/WebSocket to port 3201 on the robot. |
| Network friendliness | DDS multicast can be finicky across subnets / VPNs. | Single TCP port — easier to firewall and proxy. |
| Latency | Lower — direct DDS. | Higher — JSON serialization and websocket hop. |
| Best for | ROS-native applications, on-robot integrations. | Browser apps, mobile apps, fleet managers, or any non-ROS process. |
| Cancellation | Goal handle is a first-class ROS 2 type. | Goal ID returned by send_goal — must be retained to cancel. |
If your client is already a ROS 2 node, use RCL. If it is anything else — a browser, a fleet manager, a process on a different OS — use the websocket transport.
What You Can Do
Each guide below shows the workflow with rclpy and roslibpy side by side:
- Run an existing Objective — execute an Objective by name, optionally cancel it, or call it synchronously through the
/execute_objectiveservice. - Run an Objective from a custom Behavior Tree XML — send a Behavior Tree as a string at runtime, including Subtree port remapping.
- Pass parameters to Objectives at runtime — inject blackboard values without editing the Objective XML.
- Invoke a Python service from a Behavior — bridge a
rclpyservice into an Objective viaCallTriggerService.
Setup
Native RCL
Install ROS 2 matching the distro that MoveIt Pro is running (Humble for Ubuntu 22.04, Jazzy for Ubuntu 24.04) and source its setup script before running your client. Add moveit_studio_sdk_msgs to your package.xml so the action and service definitions are available.
Websocket via rosbridge
The MoveIt Pro Runtime runs a rosbridge server listening on port 3201. To connect across the network, expose that port in the robot's firewall settings.
roslibpy's ROS 2 action support is only on the GitHub main branch as of this writing — install accordingly:
- Ubuntu 24.04 (with venv)
- Ubuntu 22.04
python3 -m venv ~/roslibpy_venv
source ~/roslibpy_venv/bin/activate
pip install git+https://github.com/RobotWebTools/roslibpy.git@main
Activate the venv (source ~/roslibpy_venv/bin/activate) before running scripts that use roslibpy.
pip install git+https://github.com/RobotWebTools/roslibpy.git@main
Through the rosbridge protocol you have access to the full ROS messaging system inside MoveIt Pro.