Every autonomous mobile robot vendor names the same measurement differently. Forge maps 8 of them into one canonical field set so your agent reads one shape.
| OEM | Vertical | Protocols | Coverage | Mapped |
|---|---|---|---|---|
| MiR (Mobile Industrial Robots) | autonomous mobile robot | ROS 2 (DDS) HTTP / REST MQTT Sparkplug B | 99% | 10 fields |
| OTTO Motors | autonomous mobile robot | ROS 2 (DDS) HTTP / REST MQTT Sparkplug B | 95% | 10 fields |
| 6 River Systems | autonomous mobile robot | HTTP / REST ROS 2 (DDS) | 91% | 10 fields |
| AGILOX | autonomous mobile robot | ROS 2 (DDS) HTTP / REST OPC UA | 91% | 10 fields |
| Fetch Robotics | autonomous mobile robot | ROS 2 (DDS) HTTP / REST | 91% | 10 fields |
| Geek+ (Geekplus) | autonomous mobile robot | HTTP / REST MQTT Sparkplug B | 91% | 10 fields |
| Locus Robotics | autonomous mobile robot | HTTP / REST MQTT Sparkplug B ROS 2 (DDS) | 91% | 10 fields |
| Omron AMR (LD/HD) | autonomous mobile robot | ROS 2 (DDS) HTTP / REST MQTT Sparkplug B | 91% | 10 fields |
One real example per vendor — the clearest illustration of why a per-vendor parser does not scale.
| Raw tag in | Canonical field out | Source | |
|---|---|---|---|
| /robot_status/battery_percentage: 82 | → | amr.battery.charge: 82 | MiR (Mobile Industrial Robots) |
| battery_soc: 0.74 | → | amr.battery.charge: 74 | OTTO Motors |
| battery_pct: 76 | → | amr.battery.charge: 76 | 6 River Systems |
| battery_pct: 76 | → | amr.battery.charge: 76 | AGILOX |
| battery_pct: 76 | → | amr.battery.charge: 76 | Fetch Robotics |
| battery_pct: 76 | → | amr.battery.charge: 76 | Geek+ (Geekplus) |
HTTP / REST (8) ROS 2 (DDS) (7) MQTT Sparkplug B (5) OPC UA (1)
amr.battery.chargeamr.battery.chargingamr.battery.voltageamr.operating_modeamr.position.thetaamr.position.xamr.position.yamr.safety.estopamr.velocity.angularamr.velocity.linear
Full schema: FoundryNet/canonical-schema (MIT, 366 fields).