Skip to content
SmartManipulator-X · Operator PC

Motion planningfor a ROS 2 robot arm

The Operator PC plans the motions of the SmartManipulator-X arm in MoveIt 2 and shows them in RViz2. It runs ROS 2 Jazzy in Docker, uses the same robot model as the Robot PC, and sends every trajectory over ROS 2 DDS — it never touches the motor hardware.

  • ROS 2 Jazzy
    in Docker
  • MoveIt 2
    OMPL + pick_ik
  • RViz2
    WSLg or X11
  • Apache-2.0
    open source
Isometric scene: an operator workstation plans a motion in MoveIt 2 and RViz2, the trajectory goes over ROS 2 DDS to the Robot PC, the joint states come back, and a BCN3D Moveo arm follows the planned tool path
The problem

Plan on one computer, move on another

The Robot PC owns the USB link to the controller and runs ros2_control; it has to stay lean and must not carry a 3D GUI. Motion planning and visualization need MoveIt 2, RViz2 and OpenGL, and they must use exactly the same joints, limits and controllers as the Robot PC — otherwise a plan that looks right on the screen is rejected, or worse, executed differently on the arm. The Operator PC is a separate computer and a separate image that joins the Robot PC over ROS 2 DDS, like a second machine on the Ethernet.

One robot model on both computers

The image build takes the robot description and the Fast DDS profile straight from the Robot PC repository (a Compose additional build context). Nothing is copied by hand, so joint names, limits and transport settings cannot drift.

  • additional_contexts
  • URDF/Xacro
  • Fast DDS

A 5-DOF arm in a 6-D planner

The Moveo has five arm joints and cannot reach an arbitrary pose. pick_ik solves for the tool position only (rotation_scale 0.0), so dragging the interactive marker in RViz2 always finds a solution that OMPL can plan to.

  • pick_ik
  • OMPL
  • SRDF

A 3D GUI in a container, on any desktop

RViz2 runs inside the container and draws through WSLg on Windows 11 or X11 on a Linux desktop. Software OpenGL (llvmpipe) is the default, so it starts on every host without a GPU setup.

  • WSLg
  • X11
  • llvmpipe
What you get

A ready operator station for the arm

One Docker image, one ROS 2 package and two Compose services: move_group with the MoveIt configuration of the Moveo, RViz2 with the MotionPlanning panel, and a shell on the same network for the ROS 2 tools.

5 + 1arm joints + gripper
2trajectory controllers over DDS
3named arm poses
0hardware connections

Quick start

Plan a motion in three steps

No board and no arm are needed: the Robot PC runs ros2_control with mock hardware in Docker, and the Operator PC joins it on the same Docker network. Clone both repositories side by side — the Operator PC image takes the robot model from the Robot PC repository.

git clone https://github.com/SystemFromScratch/sfs-smartmanipulator-x-robot.git SmartManipulator-X-Robot-PC
git clone https://github.com/SystemFromScratch/sfs-smartmanipulator-x-operator.git SmartManipulator-X-Operator-PC

# terminal 1: the Robot PC (creates the network smx_net)
cd SmartManipulator-X-Robot-PC
docker compose -f docker/docker-compose.yml up --build robot_pc

# terminal 2: the Operator PC (move_group + RViz2)
cd SmartManipulator-X-Operator-PC
docker compose -f docker/docker-compose.yml up --build operator_pc

RViz2 opens with the MotionPlanning panel. Drag the interactive marker at the gripper, click Plan & Execute, and the Robot PC log shows arm_controller accepting the goal; the arm in RViz2 follows the /joint_states that come back over DDS (Planning in RViz2).

Find your way

If you want to… Read
Understand what the Operator PC is and where it sits in SmartManipulator-X Overview
Run the Operator PC together with the Robot PC Getting started
Plan and execute motions, use the named poses Planning in RViz2
See the nodes, topics and actions across both computers Architecture
Change planning groups, kinematics, limits or controllers MoveIt 2 configuration
Change the image, the services or the GUI setup Docker image and Compose
Connect over a real network or another domain Network and DDS
Fix a black window, a missing robot or a rejected trajectory Troubleshooting
Read about the Robot PC, the controller firmware and the hardware SmartManipulator-X system documentation
Read everything offline or print it PDF user manual
SystemFromScratch®

Part of an open-source embedded portfolio

SmartManipulator-X is developed by Anton Vynohradov under SystemFromScratch® — embedded software and hardware built from the first schematic to certification.

SystemFromScratch® is a registered trademark. ROS is a trademark of Open Source Robotics Foundation, Inc.; MoveIt is a trademark of PickNik Inc.; BCN3D is a trademark of BCN3D Technologies. SmartManipulator-X is not affiliated with or endorsed by them.