{"asyncapi":"3.0.0","channels":{"robotLive":{"address":"/web/robot/live/{deviceUuid}/ws","messages":{"BEHAVIOR_EVENT":{"$ref":"#/components/messages/BEHAVIOR_EVENT"},"CMD_ACTION":{"$ref":"#/components/messages/CMD_ACTION"},"CMD_EMERGENCY_STOP_LOCK":{"$ref":"#/components/messages/CMD_EMERGENCY_STOP_LOCK"},"CMD_EMERGENCY_STOP_UNLOCK":{"$ref":"#/components/messages/CMD_EMERGENCY_STOP_UNLOCK"},"CMD_INITIALIZE_POSE":{"$ref":"#/components/messages/CMD_INITIALIZE_POSE"},"CMD_NAVIGATE_CANCEL":{"$ref":"#/components/messages/CMD_NAVIGATE_CANCEL"},"CMD_POSTURE":{"$ref":"#/components/messages/CMD_POSTURE"},"CMD_VEL":{"$ref":"#/components/messages/CMD_VEL"},"LASER_SCAN":{"$ref":"#/components/messages/LASER_SCAN"},"OCCUPANCY_GRID":{"$ref":"#/components/messages/OCCUPANCY_GRID"},"PLANNED_PATH":{"$ref":"#/components/messages/PLANNED_PATH"},"ROBOT_STATE":{"$ref":"#/components/messages/ROBOT_STATE"},"TELEMETRY":{"$ref":"#/components/messages/TELEMETRY"},"reconnect":{"$ref":"#/components/messages/reconnect"}},"parameters":{"deviceUuid":{"description":"Robot device uuid"}}}},"components":{"messages":{"BEHAVIOR_EVENT":{"examples":[{"payload":{"activity":"ROUTE_RUN","activity_uuid":"kX9mQ2rTSa6vL0pWcYb1Ng","battery":{"start_pct":91},"description":"Patrol run","distance_remaining":6.4,"estimated_time_remaining_sec":18,"event":"PROGRESS","event_uuid":"Q1w2E3r4T5y6U7i8O9p0AQ","goal_pose":{"orientation":[0,0,0.7071,0.7071],"position":[4.2,-1.5,0]},"navigation_time_sec":42.5,"originator_uuid":"Zx8Cv7Bn6Mm5Ll4Kk3Jj2A","phase":"NAVIGATE_TO_WAYPOINT","phase_uuid":"G7Qpbx5-RnC9av0WwS3jbA","prediction":{"available":true,"confidence":"HIGH","consumption_pct":4.5,"distance_basis":"planned","distance_m":120},"priority":50,"route_uuid":"Pz5Lc8Xe1Wa4Ru7Ty0Io3Q","started_at_ms":1727799950000,"timestamp":1727800000000,"type":"BEHAVIOR_EVENT","waypoint_index":2,"waypoint_total":5,"waypoint_uuid":"Hw4Rt7Yp2Kd9Vs3Bn6Mq1w"}}],"payload":{"$ref":"#/components/schemas/RawRobotBehaviorEventMessage"},"summary":"Activity lifecycle and progress: STARTED, PROGRESS, SUSPENDED, RESUMED, COMPLETED, FAILED, CANCELED or REJECTED."},"CMD_ACTION":{"examples":[{"payload":{"action":"GO2_STAND_UP","timestamp":1727800000000,"type":"CMD_ACTION"}}],"payload":{"$ref":"#/components/schemas/ActionCmd"},"summary":"Run a platform-specific action; see the action field for the values each robot platform supports."},"CMD_EMERGENCY_STOP_LOCK":{"examples":[{"payload":{"timestamp":1727800000000,"type":"CMD_EMERGENCY_STOP_LOCK"}}],"payload":{"$ref":"#/components/schemas/EmergencyStopLockCmd"},"summary":"Engage the emergency stop. The robot stays stopped until CMD_EMERGENCY_STOP_UNLOCK."},"CMD_EMERGENCY_STOP_UNLOCK":{"examples":[{"payload":{"timestamp":1727800000000,"type":"CMD_EMERGENCY_STOP_UNLOCK"}}],"payload":{"$ref":"#/components/schemas/EmergencyStopUnlockCmd"},"summary":"Release the emergency stop."},"CMD_INITIALIZE_POSE":{"examples":[{"payload":{"pose":{"orientation":[0,0,0,1],"position":[0.5,0,0]},"timestamp":1727800000000,"type":"CMD_INITIALIZE_POSE"}}],"payload":{"$ref":"#/components/schemas/InitializePoseCmd"},"summary":"Set the robot's localization estimate to a pose in the map frame."},"CMD_NAVIGATE_CANCEL":{"examples":[{"payload":{"timestamp":1727800000000,"type":"CMD_NAVIGATE_CANCEL"}}],"payload":{"$ref":"#/components/schemas/NavigateCancelCmd"},"summary":"Cancel navigation: the current pose, waypoint, home, route/patrol, idle docking or exploration activity, plus queued ones. Low-battery docking continues."},"CMD_POSTURE":{"examples":[{"payload":{"axes":{"pitch":-0.1},"duration_ms":5000,"timestamp":1727800000000,"type":"CMD_POSTURE"}}],"payload":{"$ref":"#/components/schemas/PostureCmd"},"summary":"Adjust body posture. axes is a sparse map of platform-specific axis name to value (e.g. pitch in rad); empty or missing axes returns to neutral."},"CMD_VEL":{"examples":[{"payload":{"timestamp":1727800000000,"twist":{"angular":[0,0,0.2],"linear":[0.3,0,0]},"type":"CMD_VEL"}}],"payload":{"$ref":"#/components/schemas/VelocityCmd"},"summary":"Teleoperate with a velocity twist in the robot base frame: linear [x, y, z] in m/s, angular [x, y, z] in rad/s."},"LASER_SCAN":{"examples":[{"payload":{"frame":"base_footprint","indices":[0,1,2,35],"max_range_m":3,"ranges":[1.25,null,2.4,0.8],"sectors":36,"timestamp":1727800000000,"type":"LASER_SCAN"}}],"payload":{"$ref":"#/components/schemas/RawRobotLaserScan"},"summary":"Nearest obstacle per angular sector around the robot."},"OCCUPANCY_GRID":{"examples":[{"payload":{"data_compressed":"eJxjYASC1FRGBgZGRgAFWwDS","height":3,"origin":[-10,-5,0],"resolution":0.1,"timestamp":1727800000000,"type":"OCCUPANCY_GRID","width":4}}],"payload":{"$ref":"#/components/schemas/RawRobotOccupancyGrid"},"summary":"Live occupancy grid of the map being built or used."},"PLANNED_PATH":{"examples":[{"payload":{"frame":"map","poses":[[1.2,-0.4],[1.8,-0.2],[2.5,0.1]],"timestamp":1727800000000,"type":"PLANNED_PATH"}}],"payload":{"$ref":"#/components/schemas/RawRobotPlannedPath"},"summary":"Planned navigation path as [x, y] points."},"ROBOT_STATE":{"examples":[{"payload":{"avoidance_mode":"GO2_AVOIDANCE_MODE","battery_current_ma":-3200,"battery_level":82,"battery_state":"DISCHARGING","battery_voltage_mv":28600,"latest_transform":{"frame":"map","transform":{"rotation":[0,0,0.38,0.92],"translation":[1.2,-0.4,0]}},"locomotion_state":"STANDING","map_uuid":"bL0cfvn7Squz3-swZjifpg","navigation_stack_state":"NAVIGATING","operational_state":"OPERATIONAL","return_home":{"available":true,"confidence":"HIGH","distance_basis":"planned","distance_m":38.5,"required_pct":7.2,"sufficient":true},"timestamp":1727800000000,"type":"ROBOT_STATE"}}],"payload":{"$ref":"#/components/schemas/RawRobotStateMessage"},"summary":"Robot state: locomotion, battery, navigation mode and latest pose."},"TELEMETRY":{"examples":[{"payload":{"activity":"ROUTE_RUN","correlationId":"kX9mQ2rTSa6vL0pWcYb1Ng","frame":"map","mapUuid":"bL0cfvn7Squz3-swZjifpg","timestamp":1727800000000,"transformation":{"rotation":[0,0,0.38,0.92],"translation":[1.2,-0.4,0]},"type":"TELEMETRY"}}],"payload":{"$ref":"#/components/schemas/RawRobotTelemetry"},"summary":"Robot pose sample. correlationId is the activity_uuid of the activity in progress."},"reconnect":{"examples":[{"payload":{"action":"reconnect","reason":"device_not_connected"}}],"payload":{"properties":{"action":{"enum":["reconnect"],"type":"string"},"reason":{"type":"string"}},"type":"object"},"summary":"Sent by the cloud when the robot is not connected; reconnect later."}},"schemas":{"ActionCmd":{"properties":{"action":{"description":"Supported values by robot platform; other values are ignored.\n\n| Platform | Actions |\n|---|---|\n| go2, go2_v2, go2_2d | GO2_STAND_UP, GO2_SIT, GO2_LAY_DOWN, GO2_WALK_MODE, GO2_POSE_MODE, GO2_TERRAIN_WALK_MODE, GO2_ECONOMIC_GAIT_MODE, GO2_HELLO, GO2_ENABLE_AVOIDANCE_MODE, GO2_ENABLE_FREE_AVOID, ENABLE_RH_SIMPLE_AVOIDANCE, DISABLE_ALL_AVOIDANCE |\n| diablo, diablo_2dlidar | DIABLO_STAND_MODE, DIABLO_CAR_MODE, ENABLE_RH_SIMPLE_AVOIDANCE, DISABLE_ALL_AVOIDANCE |\n| turtlebot4 | ENABLE_RH_SIMPLE_AVOIDANCE, DISABLE_ALL_AVOIDANCE |","type":"string"},"timestamp":{"description":"Epoch milliseconds","format":"int64","type":"integer"},"type":{"enum":["CMD_ACTION"],"type":"string"}},"required":["action","timestamp","type"],"type":"object"},"ActivityBatteryUsage":{"properties":{"active_ms":{"format":"int64","type":"integer"},"charged_during_activity":{"type":"boolean"},"consumed_pct":{"format":"double","type":"number"},"distance_m":{"format":"double","type":"number"},"end_pct":{"format":"double","type":"number"},"start_pct":{"format":"double","type":"number"}},"type":"object"},"BatteryPrediction":{"properties":{"available":{"type":"boolean"},"confidence":{"enum":["NONE","LOW","HIGH","UNKNOWN"],"type":"string"},"consumption_pct":{"format":"double","type":"number"},"distance_basis":{"enum":["planned","straight_line"],"type":"string"},"distance_m":{"format":"double","type":"number"},"reason":{"type":"string"}},"type":"object"},"BehaviorEventTypeEnum":{"enum":["STARTED","PROGRESS","SUSPENDED","RESUMED","COMPLETED","FAILED","CANCELED","REJECTED","UNKNOWN"],"type":"string"},"EmergencyStopLockCmd":{"properties":{"timestamp":{"description":"Epoch milliseconds","format":"int64","type":"integer"},"type":{"enum":["CMD_EMERGENCY_STOP_LOCK"],"type":"string"}},"required":["timestamp","type"],"type":"object"},"EmergencyStopUnlockCmd":{"properties":{"timestamp":{"description":"Epoch milliseconds","format":"int64","type":"integer"},"type":{"enum":["CMD_EMERGENCY_STOP_UNLOCK"],"type":"string"}},"required":["timestamp","type"],"type":"object"},"InitializePoseCmd":{"properties":{"pose":{"$ref":"#/components/schemas/Pose"},"timestamp":{"description":"Epoch milliseconds","format":"int64","type":"integer"},"type":{"enum":["CMD_INITIALIZE_POSE"],"type":"string"}},"required":["pose","timestamp","type"],"type":"object"},"LatestTransform":{"properties":{"frame":{"type":"string"},"transform":{"$ref":"#/components/schemas/Transformation"}},"type":"object"},"NavigateCancelCmd":{"properties":{"timestamp":{"description":"Epoch milliseconds","format":"int64","type":"integer"},"type":{"enum":["CMD_NAVIGATE_CANCEL"],"type":"string"}},"required":["timestamp","type"],"type":"object"},"Pose":{"properties":{"orientation":{"items":{"description":"Serialized as [x, y, z, w]","format":"double","type":"number"},"maxItems":4,"minItems":4,"type":"array"},"position":{"items":{"description":"Serialized as [x, y, z]","format":"double","type":"number"},"maxItems":3,"minItems":3,"type":"array"}},"type":"object"},"PostureCmd":{"properties":{"axes":{"additionalProperties":{"format":"double","type":"number"},"type":"object"},"duration_ms":{"description":"Hold time; absent holds until replaced","format":"int64","type":"integer"},"timestamp":{"description":"Epoch milliseconds","format":"int64","type":"integer"},"type":{"enum":["CMD_POSTURE"],"type":"string"}},"required":["timestamp","type"],"type":"object"},"PreemptedBy":{"properties":{"activity":{"$ref":"#/components/schemas/RobotActivityEnum"},"priority":{"format":"int32","type":"integer"}},"type":"object"},"RawRobotBehaviorEventMessage":{"properties":{"activity":{"$ref":"#/components/schemas/RobotActivityEnum"},"activity_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"battery":{"$ref":"#/components/schemas/ActivityBatteryUsage"},"description":{"type":"string"},"distance_remaining":{"format":"float","type":"number"},"estimated_time_remaining_sec":{"format":"double","type":"number"},"event":{"$ref":"#/components/schemas/BehaviorEventTypeEnum"},"event_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"failure_reason":{"type":"string"},"goal_pose":{"$ref":"#/components/schemas/Pose"},"navigation_time_sec":{"format":"double","type":"number"},"originator_context":{"type":"string"},"originator_name":{"type":"string"},"originator_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"patrol_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"phase":{"type":"string"},"phase_event":{"type":"string"},"phase_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"prediction":{"$ref":"#/components/schemas/BatteryPrediction"},"preempted_by":{"$ref":"#/components/schemas/PreemptedBy"},"priority":{"format":"int32","type":"integer"},"route_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"started_at_ms":{"format":"int64","type":"integer"},"timestamp":{"format":"int64","type":"integer"},"type":{"enum":["BEHAVIOR_EVENT"],"type":"string"},"waypoint_index":{"format":"int32","type":"integer"},"waypoint_total":{"format":"int32","type":"integer"},"waypoint_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"}},"required":["timestamp","type"],"type":"object"},"RawRobotLaserScan":{"properties":{"event_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"frame":{"type":"string"},"indices":{"description":"Covered sectors; a missing sector is a blind spot","items":{"format":"int32","type":"integer"},"type":"array"},"max_range_m":{"format":"double","type":"number"},"originator_context":{"type":"string"},"originator_name":{"type":"string"},"originator_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"ranges":{"description":"Meters, parallel to indices; null = covered but clear out to max_range_m","items":{"format":"double","type":"number"},"type":"array"},"raw":{"$ref":"#/components/schemas/RawScan"},"sectors":{"description":"Total sector count around the robot","format":"int32","type":"integer"},"timestamp":{"format":"int64","type":"integer"},"type":{"enum":["LASER_SCAN"],"type":"string"}},"required":["timestamp","type"],"type":"object"},"RawRobotOccupancyGrid":{"properties":{"data_compressed":{"description":"base64(zlib(width*height bytes, row-major)). Each byte is the ROS occupancy value + 1: 0 unknown, 1 free, 2-101 occupied 1-100%","type":"string"},"event_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"height":{"format":"int32","type":"integer"},"origin":{"description":"Map-frame pose of cell (0,0): [x m, y m, yaw rad]","items":{"format":"double","type":"number"},"maxItems":3,"minItems":3,"type":"array"},"originator_context":{"type":"string"},"originator_name":{"type":"string"},"originator_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"resolution":{"description":"Meters per cell","format":"double","type":"number"},"timestamp":{"format":"int64","type":"integer"},"type":{"enum":["OCCUPANCY_GRID"],"type":"string"},"width":{"format":"int32","type":"integer"}},"required":["timestamp","type"],"type":"object"},"RawRobotPlannedPath":{"properties":{"event_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"frame":{"type":"string"},"originator_context":{"type":"string"},"originator_name":{"type":"string"},"originator_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"poses":{"items":{"items":{"format":"double","type":"number"},"type":"array"},"type":"array"},"timestamp":{"format":"int64","type":"integer"},"type":{"enum":["PLANNED_PATH"],"type":"string"}},"required":["timestamp","type"],"type":"object"},"RawRobotStateMessage":{"properties":{"avoidance_mode":{"enum":["DISABLED","RH_SIMPLE_AVOIDANCE","DOCKING_AVOIDANCE","GO2_AVOIDANCE_MODE","GO2_FREE_AVOID"],"type":"string"},"battery_current_ma":{"description":"Positive = charging","format":"int32","type":"integer"},"battery_level":{"description":"Percent, 0-100","format":"double","type":"number"},"battery_state":{"enum":["OFF","CHARGING","DISCHARGING","FULL","NOT_CHARGING","UNKNOWN"],"type":"string"},"battery_voltage_mv":{"format":"int32","type":"integer"},"event_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"latest_transform":{"$ref":"#/components/schemas/LatestTransform"},"locomotion_state":{"type":"string"},"map_uuid":{"type":"string"},"navigation_stack_state":{"enum":["DISABLED","MAPPING","NAVIGATING"],"type":"string"},"operational_state":{"enum":["DISCONNECTED","OPERATIONAL","EMERGENCY_STOP"],"type":"string"},"originator_context":{"type":"string"},"originator_name":{"type":"string"},"originator_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"return_home":{"$ref":"#/components/schemas/ReturnHomeEstimate"},"timestamp":{"format":"int64","type":"integer"},"type":{"enum":["ROBOT_STATE"],"type":"string"}},"required":["timestamp","type"],"type":"object"},"RawRobotTelemetry":{"properties":{"activity":{"$ref":"#/components/schemas/RobotActivityEnum"},"correlationId":{"type":"string"},"event_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"frame":{"type":"string"},"mapUuid":{"type":"string"},"originator_context":{"type":"string"},"originator_name":{"type":"string"},"originator_uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"timestamp":{"format":"int64","type":"integer"},"transformation":{"$ref":"#/components/schemas/Transformation"},"type":{"enum":["TELEMETRY"],"type":"string"}},"required":["timestamp","type"],"type":"object"},"RawScan":{"properties":{"angle_increment":{"format":"double","type":"number"},"angle_min":{"format":"double","type":"number"},"count":{"format":"int32","type":"integer"},"frame":{"type":"string"},"origin":{"items":{"format":"double","type":"number"},"type":"array"},"origin_ok":{"type":"boolean"},"range_max":{"format":"double","type":"number"},"range_min":{"format":"double","type":"number"},"ranges_b64":{"type":"string"}},"type":"object"},"ReturnHomeEstimate":{"properties":{"available":{"type":"boolean"},"confidence":{"enum":["NONE","LOW","HIGH","UNKNOWN"],"type":"string"},"distance_basis":{"enum":["planned","straight_line"],"type":"string"},"distance_m":{"format":"double","type":"number"},"reason":{"type":"string"},"required_pct":{"format":"double","type":"number"},"sufficient":{"type":"boolean"}},"type":"object"},"RobotActivityEnum":{"enum":["IDLE","MANUAL_CMD_VEL","MANUAL_ACTION","MANUAL_POSTURE","NAVIGATE_TO_POSE","NAVIGATE_TO_HOME","NAVIGATE_TO_WAYPOINT","ROUTE_RUN","LOW_BATTERY_DOCKING","IDLE_DOCKING","DWELLING","EMERGENCY","EXPLORE_AND_MAP","EXPLORE_AREA","MAINTENANCE_HOLD","UNKNOWN"],"type":"string"},"Transformation":{"properties":{"rotation":{"items":{"format":"double","type":"number"},"maxItems":4,"minItems":4,"type":"array"},"translation":{"items":{"format":"double","type":"number"},"maxItems":3,"minItems":3,"type":"array"}},"type":"object"},"Twist":{"properties":{"angular":{"items":{"format":"double","type":"number"},"maxItems":3,"minItems":3,"type":"array"},"linear":{"items":{"format":"double","type":"number"},"maxItems":3,"minItems":3,"type":"array"}},"required":["angular","linear"],"type":"object"},"VelocityCmd":{"properties":{"timestamp":{"description":"Epoch milliseconds","format":"int64","type":"integer"},"twist":{"$ref":"#/components/schemas/Twist"},"type":{"enum":["CMD_VEL"],"type":"string"}},"required":["timestamp","twist","type"],"type":"object"}}},"defaultContentType":"application/json","info":{"description":"Live control and telemetry for a Rhombus robot over WebSocket.\n\nGet the socket URL from `wanLiveRobotUri` in the `getAllMediaUris` response; the handshake is authenticated the same way as the other live media WebSocket URIs it returns.\n\nClient to robot messages are JSON text frames. Every command needs `type` and `timestamp` (epoch milliseconds); the robot silently drops a command without them. Robot to client messages arrive as binary frames holding UTF-8 JSON.\n\nNew message types, fields and enum values may be added at any time; clients must ignore what they do not recognize.","title":"Rhombus Robot Live API","version":"1.0.0"},"operations":{"BEHAVIOR_EVENT":{"action":"receive","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/BEHAVIOR_EVENT"}]},"CMD_ACTION":{"action":"send","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/CMD_ACTION"}]},"CMD_EMERGENCY_STOP_LOCK":{"action":"send","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/CMD_EMERGENCY_STOP_LOCK"}]},"CMD_EMERGENCY_STOP_UNLOCK":{"action":"send","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/CMD_EMERGENCY_STOP_UNLOCK"}]},"CMD_INITIALIZE_POSE":{"action":"send","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/CMD_INITIALIZE_POSE"}]},"CMD_NAVIGATE_CANCEL":{"action":"send","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/CMD_NAVIGATE_CANCEL"}]},"CMD_POSTURE":{"action":"send","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/CMD_POSTURE"}]},"CMD_VEL":{"action":"send","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/CMD_VEL"}]},"LASER_SCAN":{"action":"receive","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/LASER_SCAN"}]},"OCCUPANCY_GRID":{"action":"receive","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/OCCUPANCY_GRID"}]},"PLANNED_PATH":{"action":"receive","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/PLANNED_PATH"}]},"ROBOT_STATE":{"action":"receive","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/ROBOT_STATE"}]},"TELEMETRY":{"action":"receive","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/TELEMETRY"}]},"reconnect":{"action":"receive","channel":{"$ref":"#/channels/robotLive"},"messages":[{"$ref":"#/channels/robotLive/messages/reconnect"}]}},"servers":{"robotLive":{"description":"Per-robot host taken from wanLiveRobotUri.","host":"{wanHost}","protocol":"wss","variables":{"wanHost":{"description":"Host of wanLiveRobotUri"}}}}}