Omnidirectional Mobile Base
Damiao AGV Specifications
Complete technical specifications: drive system, UART/DBUS protocol, channel mapping, agent CLI flags, and platform integration details.
Core Specifications
Drive system, communication, and control parameters
| Vendor | Damiao (达妙) |
| Drive Configuration | 4-wheel omnidirectional (4WS4WD) |
| Wheel Type | Mecanum or omni wheels |
| Motion Axes | X (forward/back), Y (lateral), Z (yaw/rotation) |
| Control Interface | UART5 on main controller (pin PD2, RX) |
| Baud Rate | 100000 |
| Serial Framing | 8 data bits, even parity, 2 stop bits (8E2) |
| Protocol | DBUS/SBUS-style RC frame, 18 bytes per frame |
| Channel Range | ch0–ch3: 11-bit, values 0–2047, centre 1024 |
| Amplitude Parameter | --amp default 660, range 250–900 (offset from centre 1024) |
| Control Rate | 30 Hz (configurable with --control-hz) |
| Telemetry Rate | 8 Hz (configurable with --telemetry-hz) |
| Command Timeout | 300 ms (configurable with --cmd-timeout-ms); AGV auto-stops |
| Shutdown Safety | 3 centre-position DBUS frames sent on agent exit before serial close |
| Platform Device Type | mobile_base |
| Platform Capabilities | ["mobile_base", "agv", "telemetry"] |
| Agent Module | dami_agent.py |
| Backend WebSocket URL | ws://localhost:8000 (default) |
| Mock Mode | Yes (--mock); serial port skipped, full WebSocket pipeline active |
DBUS Frame Layout
18-byte frame structure used for all motion commands
| Bytes | Content | Notes |
|---|---|---|
| 0–5 | ch0, ch1, ch2, ch3 packed (11-bit each) | Little-endian bit-packing; 44 bits in 48 bits |
| 5 (high nibble) | s0 (bits [5:4]), s1 (bits [7:6]) | Switch states; fixed at 1/1 (centre) for AGV |
| 6–15 | Mouse and keyboard fields | Zeroed; not parsed by AGV firmware |
| 16–17 | ch4 (11-bit) | Fixed at centre (1024); not used for AGV motion |
Channel-to-Velocity Mapping
How the AGV firmware decodes channels and how the agent encodes velocity commands
| Channel | Firmware Decodes As | Agent Encodes From | Formula |
|---|---|---|---|
| ch0 | Yaw (rotation) | vw (angular velocity) | ch0 = 1024 + (−vw) × amp |
| ch1 | Unused | — | Fixed at 1024 |
| ch2 | Lateral (Y) | vy | ch2 = 1024 + vy × amp |
| ch3 | Forward (X) | vx | ch3 = 1024 + vx × amp |
Serial framing is critical.
The UART5 must be configured as 100000 baud, 8E2 (8 data bits, even parity, 2 stop bits). A common mistake is opening the port as 8N1. The AGV firmware will silently ignore or misparse frames at the wrong framing — use
pyserial.PARITY_EVEN and STOPBITS_TWO.
Agent CLI Reference
All flags for dami_agent.py
| Flag | Default | Description |
|---|---|---|
| --backend | ws://localhost:8000 | Platform WebSocket base URL |
| --session | (required) | Teleop session ID (format: RC-XXXX-XXXX) |
| --node-id | hostname | AGV node identifier in the session |
| --serial-port | /dev/ttyUSB0 | USB-to-TTL adapter device path |
| --telemetry-hz | 8.0 | Frequency to send telemetry to platform |
| --control-hz | 30.0 | DBUS frame output rate (Hz) |
| --cmd-timeout-ms | 300 | Auto-stop if no command received within this window |
| --amp | 660 | Joystick amplitude; 500–760 recommended range |
| --invert-x | false | Flip forward/backward direction |
| --invert-y | false | Flip left/right direction |
| --invert-z | false | Flip rotation direction |
| --mock | false | Skip serial port; validate command pipeline only |
Platform Integration
WebSocket registration and telemetry format
| WebSocket Endpoint | /api/teleop/ws on the Fearless Platform backend |
| Registration Role | robot |
| Device Type | mobile_base |
| Capabilities | ["mobile_base", "agv", "telemetry"] |
| Telemetry Fields | vx_cmd, vy_cmd, vw_cmd (current velocity sign); feedback object with connection state, amp, timeout |
| Keepalive | Ping sent after 45 s of platform silence; AGV auto-stops after cmd timeout if connection drops |
| Episode Recording | All telemetry frames archived in JSONL alongside arm, camera, and tactile nodes in the same session |
Damiao Motor Components
QDD actuators used in the AGV drivetrain and mounted arm payloads
Context: motors vs. the AGV.
Damiao (达妙科技) makes both the AGV mobile base (this hardware page) and the QDD motor components used in robot arms mounted on the AGV. The motor information below covers the DM-J43xx-2EC series used in OpenArm and DK1 payloads integrated with this AGV. Full motor reference: Damiao Motors Wiki →
| Model | Peak Torque | No-Load Speed | Gear Ratio | Typical Joint |
|---|---|---|---|---|
| DM-J4310-2EC V1.1 | ~10 Nm | ~30 rpm | 10:1 | Wrist & gripper (J7, J8) |
| DM-J4340-2EC | ~18 Nm | ~15 rpm | 10:1 | Elbow & mid-arm (J4, J5, J6) |
| DM-J4340p-2EC | ~25 Nm | ~12 rpm | 10:1 | Base & shoulder (J1, J2, J3) |
| Stator Diameter | 43 mm (all variants) |
| Nominal Voltage | 24 V DC |
| Communication | CAN 2.0 / CAN FD |
| Encoder | Dual (motor-side + output-side) |
| Control Modes | MIT PVT, position, velocity, torque |
| CAN Nominal Baud | 1 Mbit/s |
| CAN FD Data Baud | Up to 5 Mbit/s |
| Operating Temperature | −20 °C to 80 °C |
Torque ratings are peak values.
Continuous torque is typically 40–60% of the peak rating. Size motor selection for continuous duty to avoid thermal shutdown during sustained operations.