Skip to main content

Software Overview

AQUARM is a dual-arm 6-DOF manipulator system for underwater operation, mounted on the Robster ROV.
Each arm has six slip-ring (continuous-rotation) joints plus a gripper axis, and both arms are commanded together as a single 14-axis set. The operator side runs Inverse kinematics SDK, a Python stack on ROS 2 Humble with CycloneDDS as the middleware. Joint commands are published as a DDS joint_states topic and delivered to the arm controllers by a KCAN SDK bridge over UDP in position mode.

The stack has three layers:

  • VR — a Meta Quest 3 app streams wrist poses, button state, and emergency stop to the PC over USB or WIFI.
  • IK SDK — Receives the target pose from the VR, solves the inverse kinematics, and commands for the robot arm in real time.
  • KCAN SDK — a KCAN bridge converts joint commands into driver packets for the left and right arm controllers, and streams measured position, velocity, and torque back to the operator.


System Architecture

info

The diagram below shows AQUARM's control structure: teleoperation input becomes a joint command stream on the PC, travels over CycloneDDS, and reaches



Master ARM Teleoperation

software_architecture

LayerComponentDescription
OperatorMaster ARMWrist pose, buttons, emergency stop
ComputeControl BOXROS 2 Humble
Motion ControlMaster – slave position streamingMaster arm joint state → KCAN → joint command
ActuatorsKA-U6017-120-KDH-V1High-torque motor via CAN
CommunicationKCANKCAN SDK 7.0.0




VR Teleoperation

software_architecture

LayerComponentDescription
OperatorMeta Quest 3Wrist pose, buttons, emergency stop
ComputeControl BOXROS 2 Humble
Motion ControlIK SDKPose → IK → joint command
ActuatorsKA-U6017-120-KDH-V1High-torque motor via CAN
CommunicationKCANKCAN SDK 7.0.0


Why KCAN?

AQUARM's joint drivers are reached through the KCAN SDK over UDP — one board per arm, seven nodes each (six joints + gripper on node 7).

  • Direct joint access — position commands out, measured position / velocity / torque back on the same link
  • Simple setup path — control mode, run enable, and encoder reset handled through the SDK
  • One interface for every motion source — VR IK output, master-arm angles, and scripted or learned trajectories all end at the same joint command call
  • ROS 2 stays at the topic layer — joint_states over CycloneDDS, so RViz2 and the sim tools work unchanged

Motion Execution Pipeline

VR headset (wrist pose)
Master arm (joint states)

Operator PC
· VR path: Solve IK via SDK
· MasterArm path : streaming and publish MasterArm joint state to AQUARM

CycloneDDS rt/joint_states (7 axes × 2 arms)

OMY Controllers

KCAN SDK bridge

AQUARM joint drivers (node 1–7 per arm)

Actuators

Controller Configuration & Joint Mapping


Visualization Tools

Tool / TopicDescription
MujocoFast physics playback of the MJCF model
IssacsimGPU simulation with the ROV in a scene
Rviz23D view of robot model (URDF), TF, and movement

Safety & Limits