Skip to main content

A-750 Robotic Arm

Support for the A-750 robotic arm includes visualization, an adapter to talk to real hardware, and keyboard teleop blueprint.

Quick Start

Run the A-750 teleop stack in mock mode:
dimos run keyboard-teleop-a750
This launches:
ModuleRole
KeyboardTeleopModulePublishes routed spatial EEF twist intent from the keyboard UI
ControlCoordinatorRuns a 100 Hz coordinator loop and EEFTwistTask
ManipulationModuleLoads the A-750 robot model in Drake and serves Meshcat visualization
Open the Meshcat URL printed in the terminal, usually http://localhost:7000, to view the robot.

Real Hardware

The A-750 blueprint uses the mock adapter by default. Start by connecting the arm to your computer with a USB cable. On Linux, the device will likely appear as /dev/ttyACM0. You can also check /dev/serial/ for stable symlinks to connected serial devices. Pro tip: run this in a separate terminal while plugging in the arm to verify that the OS detects it normally:
dmesg -w
If the device appears but DimOS gets a permission error when opening it, you may need to add yourself to the dialout group:
sudo usermod -aG dialout "$USER"
After changing groups, log out and back in again, or start a new login shell, before retrying. To connect to a physical arm, set DEVICE_PATH when launching the blueprint:
DEVICE_PATH=/dev/ttyACM0 dimos run keyboard-teleop-a750

# setting --device-path is not currently supported
# dimos --device-path /dev/ttyACM0 run keyboard-teleop-a750

Robot Model

The robot model and hardware config are defined in dimos/robot/manipulators/a750/config.py. The runnable keyboard teleop stack is composed in dimos/robot/manipulators/a750/blueprints/teleop.py.
FieldValue
Arm jointsjoint1 through joint6
Arm DOF6
Gripper jointsjoint7, joint8 in the URDF; exposed as arm/finger in coordinator hardware
Base linkbase_link
End-effector linkgripper_base
Home joints[0, 0, -90 deg, 0, 0, 0]
Drake modela750_description/urdf/a750_rev1.urdf
FK/EEF twist task modela750_description/urdf/a750_rev1_no_gripper.urdf
The no-gripper model is used for Pinocchio FK/IK inside the coordinator’s EEF twist task because Pinocchio does not consume the xacro path used by the full robot description. Keyboard teleop does not load the model directly.

Gripper

The blueprint configures a parallel-jaw gripper:
ParameterValue
Typea750
Open position0.06 m
Close position0.02 m
Collision exclusionsImported from the A-750 MoveIt/SRDF collision pairs
The adapter reads and commands gripper position in meters using the a750_control Python binding.

Hardware Adapter

The adapter is registered as a750 in dimos/hardware/manipulators/a750/adapter.py. It supports:
Method familyStatus
Connect/disconnectUses a750_control.Robot(device_path)
Joint position readsReads pos_rad from joints 1-6
Joint velocity readsReads vel_rads from joints 1-6
Joint effort readsReads torque_nm from joints 1-6
Joint position commandsSends six joint positions plus a velocity ratio
Enable/disableStarts and stops the a750_control control loop
Gripper reads/commandsReads and commands gripper position in meters
Cartesian hardware commandsStubbed; Cartesian motion is handled through DimOS IK
Force/torque readsNot currently implemented
The a750_control package starts a separate thread with real-time priority for its hardware control loop. That loop sends commands and reads back joint state at 1 kHz. The DimOS read_joint_positions, read_joint_velocities, and read_joint_efforts calls return the most recent data cached by that loop rather than synchronously querying the robot, so returned joint data may be up to 1 ms stale. The USB connection also adds roughly 1 ms of latency. The adapter requires the optional manipulation dependency:
a750-control @ git+https://github.com/adob/a750_control.git@7153e271317e22b4aa55ac1186c0f0e4903e8f39
If a750_control is not installed, connect() records an error and returns False.

Control Path

The keyboard-teleop-a750 blueprint is defined in dimos/robot/manipulators/a750/blueprints/teleop.py.
KeyboardTeleopModule
  -> /coordinator_ee_twist_command TwistStamped
  -> ControlCoordinator EEFTwistTask
  -> A750Adapter or mock adapter
  -> /coordinator_joint_state JointState
  -> ManipulationModule Drake/Meshcat visualization
The coordinator runs at 100 Hz. The lower-level a750_control binding runs its hardware control loop at 1 kHz once the adapter is enabled.

Keyboard Controls

The A-750 teleop command uses the same keyboard controls as the other manipulator teleop blueprints:
KeyAction
W/S+X/-X
A/D+Y/-Y
Q/E+Z/-Z
R/F+Roll/-Roll
T/G+Pitch/-Pitch
Y/H+Yaw/-Yaw
ESCQuit

Known Limitations

  • Joint limits are currently approximate: [-pi, pi] for each arm joint, with max velocity pi rad/s in the DimOS adapter.
  • EEF twist commands are integrated and solved by the DimOS coordinator task, not by a native Cartesian mode in the hardware adapter.
  • Force/torque data is not exposed yet.
  • Real hardware mode depends on the external a750_control package and a reachable serial device.