Skip to content

Software Overview

OMY is a 6-DOF robotic manipulator designed for real-world Physical AI research.
It supports teleoperation, trajectory learning, and deployment of AI policies through a unified ROS 2 control architecture.

The platform runs on ROS 2 Jazzy and uses the ros2_control framework for real-time joint-level control.
The arm is driven by DYNAMIXEL-Y series actuators connected over RS-485 using the Dynamixel SDK.

This system is designed for:

  • Collecting motion data through teleoperation
  • Training and testing trajectory-based AI models
  • Running learned or predefined trajectories on real hardware

OMY provides an efficient and compact platform for Physical AI research in both academic and industrial environments.

System Architecture

INFO

The diagram below illustrates the overall control structure of OMY. Teleoperation or AI-generated commands are processed through ros2_control, translated by the hardware interface, and executed by DYNAMIXEL actuators via RS‑485.

software_architecture

LayerComponentDescription
ComputeRaspberry Pi5ROS 2 Jazzy
Motion Controlros2_controlReal-time joint control at 400Hz
ActuatorsDYNAMIXEL-Y seriesHigh-torque servo via RS-485
CommunicationRS‑485Dynamixel Protocol 2.0
NetworkingEthernetRemote access
Sensors (optional)Intel RealSense D405Mounted on wrist (F3M only)

Why ros2_control?

OMY uses ros2_control for modular, real-time control of its joints.

  • Clean separation between hardware and control logic
  • Supports multiple controller types (trajectory, GPIO, command)
  • Integrates easily with teleop, GUI, and AI-based trajectory sources

This makes it easy to switch between manual, scripted, or learned motion strategies.

Motion Execution Pipeline

Input Source (Teleoperation / AI Policy)

ROS 2 JointTrajectory / Command Topics

controller_manager (400Hz loop)

OMY Controllers

DynamixelHardwareInterface

RS‑485 Bus

DYNAMIXEL-Y Actuators

Controller Configuration & Joint Mapping

ControllerSegmentDOFInput Topic
arm_controller6-DOF Arm6(7)/leader/arm_controller/joint_trajectory
gpio_command_controllerGripper (GPIO pin)1/gpio_command_controller/commands
joint_command_broadcasterAll joints (read-only)Publishes to /joint_states

INFO

In AI TELEOPERATION mode, the number of joints in the Arm Controller becomes 7.

  • All actuators operate in position mode by default.

yaml
/**:
  controller_manager:
    ros__parameters:
      use_sim_time: False
      update_rate: 400  # Hz
      thread_priority: 40
      cpu_affinity: [1, 2, 3]

      joint_state_broadcaster:
        type: joint_state_broadcaster/JointStateBroadcaster

      arm_controller:
        type: joint_trajectory_controller/JointTrajectoryController

      gpio_command_controller:
        type: gpio_controllers/GpioCommandController

/**:
  arm_controller:
    ros__parameters:
      joints:
        - joint1
        - joint2
        - joint3
        - joint4
        - joint5
        - joint6
        - rh_r1_joint

      interface_name: position

      command_interfaces:
        - position

      state_interfaces:
        - position
        - velocity

      allow_partial_joints_goal: true

/**:
  gpio_command_controller:
    ros__parameters:
      type: gpio_controllers/GpioCommandController
      gpios:
        - omy_end
      command_interfaces:
        omy_end:
          - interfaces:
            - R LED
            - G LED
            - B LED
      state_interfaces:
        omy_end:
          - interfaces:
            - Button Status

Debugging & Visualization Tools

Tool / TopicDescription
ros2 control list_controllersCheck controller status
ros2 topic echo /joint_statesMonitor joint position/velocity
RViz2Visualize robot URDF and trajectory execution
Rviz3D view of robot model (URDF), TF, and movement

Safety & Limits

  • Joint limits are defined in the URDF and enforced at the controller layer
  • Velocity/position clamping can be configured per joint
  • Communication errors are detected by the Dynamixel hardware interface

AI Worker and AI Manipulator released under the Apache-2.0 license.