MQTT通信设计
机器狗MQTT通信设计说明
客户端基本信息
Client_id:robot_go2_{device_id}
其中device_id是机器狗的唯一序列号(SN),以支持多个机器狗。例如,ROBOT_GO2_39120。
Clean Start:False
Session Expiry Interval:60,防止网络波动导致掉线重连后机器狗无法订阅话题,以及启动后接收执行过时的指令消息。
根主题:thing/product/go2_{device_id}/
设备上下线上报
topic: thing/product/go2_{device_id}/status/connection
Direction:up
注意:该topic为设备客户端会话的遗嘱消息话题,遗嘱消息延迟5秒发布,以防平台无法感知到机器狗长时间异常掉线。
设备上线
机器狗启动后,客户端将向topic发送如下消息体:
QoS:1
Retain:True,以防平台重启后无法获取设备的连接状态
{
"status": "online",
"timestamp": 1769688353,
"ip": "192.168.1.101"
}
必填字段解释:
| column | name | type | constraint | description |
|---|---|---|---|---|
| status | 状态 | string | 机器狗设备连接状态,上线时为online | |
| timestamp | 上线时间 | int | 时间戳 | |
| ip | 设备IP | string | 机器狗设备IP,方便调试时区分 |
设备下线
机器狗主动离线或异常掉线时,客户端将向topic发送如下消息体:
QoS:1
Retain:True,以防平台重启后无法获取设备的连接状态
{
"status": "offline",
"timestamp": 1769688353,
"reason": "unexpected_disconnect"
}
| column | name | type | constraint | description |
|---|---|---|---|---|
| status | 状态 | string | 机器狗设备连接状态,离线时为offline | |
| timestamp | 离线时间 | int | 时间戳 | |
| reason | 离线原因 | string | 正常离线为initiative_disconnect,异常掉线时为unexpected_disconnect |
注意:机器狗主动断开时,客户端将发布消息。而异常掉线时,将由Broker延迟发布遗嘱消息,此时消息中的时间戳为设置遗嘱的时间,不是设备掉线的时间,请勿将遗嘱消息中的时间直接作为离线时间,请使用服务器时间
设备状态上报
机器狗上线后定频(暂定0.5Hz)向平台发布状态消息。
topic: thing/product/go2_{device_id}/osd
Direction:up
QoS:0
Retain:False
{
"stamp": 1769688447,
"mode": "Stand",
"move_speed": 0,
"yaw_speed": 0,
"battery_level": 83,
"cpu_temperature": 51,
"avg_motor_temperature": 43.6,
"longitude": 108.74868422512537,
"latitude": 34.02040158758288
}
必填字段解释:
| column | name | type | constraint | description |
|---|---|---|---|---|
| timestamp | 时间戳 | int | 当前状态的时间 | |
| mode | 机器狗姿态 | string | 机器狗姿态,目前仅有站立和趴下两种,站立时为Stand,可行走;趴下时为LieDown,不可行走 | |
| move_speed | 前后速度 | float | 0 - 3.8 | 机器狗前后移动时的线速度(m/s) |
| yaw_speed | 转动速度 | float | 0 - 4 | 机器狗旋转移动时的角速度(rad/s) |
| cpu_temperature | 主板温度 | float | -20 - 100 | 机器狗主板温度℃ |
| avg_motor_temperature | 电机平均温度 | float | -100 - 150 | 机器狗12个关节电机的平均温度 |
| longitude | 位置经度 | float | -180 - 180 | 机器狗当前位置的经度 |
| latitude | 位置纬度 | float | 0 - 90 | 机器狗当前位置的经度 |
任务交互
平台下发任务
Topic:thing/product/go2_{device_id}/services
Direction:Down
QoS:1,机器狗客户端的状态机逻辑可以应对重复消息
Method:flighttask_prepare
平台创建任务后,会向机器狗发布准备任务消息(同大疆上云API),机器狗将通过URL下载并解析航线文件,完成后将进入就绪状态。目前,机器狗仅支持准备与执行一个任务,暂不支持同时准备多个任务。
{
"tid": "4ebaacc8-44f1-4827-8d6d-575e157ecdbb",
"bid": "21651ec3-7705-4d31-b9bf-ad59572e035a",
"timestamp": 1769478297568,
"data": {
"flight_id": "91f761c1-cee5-42c2-ae0f-0ec3ce18bd79",
"execute_time": 1769478297000,
"task_type": 0,
"wayline_type": 0,
"file": {
"url": "http://47.109.94.70:9010/cloud-bucket/wayline_kmz/2026/01/27/5b398724bf6d1ca226677514c03df908.kmz",
"fingerprint": "ac184166817db773a3504d2d752d5bc9"
},
"rth_altitude": 50,
"out_of_control_action": 0,
"exit_wayline_when_rc_lost": 1,
"rth_mode": 1
},
"method": "flighttask_prepare"
}
必填字段解释:
见大疆上云API
准备结果返回
Topic:thing/product/go2_{device_id}/services_reply
Direction:Up
QoS:1
Method:flighttask_prepare
{
"bid": "cc978f50-4598-4877-b13f-ff71ca417245",
"data": {
"result": 0,
"message": ""
},
"tid": "87053f62-5dad-4c2b-ae1f-5193a38c3250",
"timestamp": 1770017873,
"method": "flighttask_prepare"
}
必填字段解释:
| column | name | type | constraint | description |
|---|---|---|---|---|
| result | 准备结果 | int | 若为0则准备成功,-1则准备失败 | |
| message | 失败原因 | string | 失败时为原因信息,成功则为空 |
机器狗任务就绪通知
Topic:thing/product/go2_{device_id}/events
Direction:Up
QoS:2
Method:flighttask_ready
机器狗接收并解析航线文件后,将进入就绪状态,此时会向平台发布任务准备就绪消息(同大疆上云API)。
{
"bid": "297cb822-7406-4d5f-b1c7-a0de4b001b32",
"data": {
"flight_ids": [
"91f761c1-cee5-42c2-ae0f-0ec3ce18bd79"
]
},
"method": "flighttask_ready",
"tid": "947e127d-97c2-4aae-b6e3-4d13f8f157e6",
"timestamp": 1769688363,
"gateway": "ROBOT_GO2_0"
}
必填字段解释:
见大疆上云API
平台启动任务
Topic:thing/product/go2_{device_id}/services
Direction:Down
QoS:1,机器狗客户端的状态机逻辑可以应对重复消息
Method:flighttask_execute
平台接收到机器狗的flighttask_ready消息(同大疆上云API)后,将发布启动任务的消息,机器狗接收到后将开始执行事先就绪的巡检任务。
{
"tid": "7c48324a-d128-4156-8c86-0eb8eaba414f",
"bid": "21651ec3-7705-4d31-b9bf-ad59572e035a",
"timestamp": 1769414352279,
"data": {
"flight_id": "91f761c1-cee5-42c2-ae0f-0ec3ce18bd79"
},
"method": "flighttask_execute"
}
必填字段解释:
见大疆上云API
机器狗上报任务进度
Topic:thing/product/go2_{device_id}/events
Direction:Up
Method:flighttask_progress
QoS:0
机器狗执行任务过程中,会定频(暂定0.5Hz)向平台发送任务进度消息(同大疆上云API)。
{
"bid": "f82cff8d-a397-4ee5-bc97-d16c23d2eb32",
"data": {
"flight_id": "91f761c1-cee5-42c2-ae0f-0ec3ce18bd79",
"status": "in_progress",
"current_waypoint_index": 4,
"percent": 80
},
"method": "flighttask_progress",
"need_reply": 0,
"tid": "85821190-1f07-413b-853c-87f5af1f16c0",
"timestamp": 1769688389,
"gateway": "ROBOT_GO2_0"
}
必填字段解释:
见大疆上云API
平台暂停任务
Topic:thing/product/go2_{device_id}/services
Direction:Down
Method:flighttask_pause
QoS:1,机器狗客户端的状态机逻辑可以应对重复消息
机器狗执行任务过程中,平台可通过发送flighttask_pause消息(同大疆上云API)来暂停机器狗的任务执行。
{
"tid": "e3086a74-3e84-45b5-8196-60f6d9bb0acb",
"bid": "7b8dfbb9-1c24-4531-b370-d70b7db4db1e",
"timestamp": 1769414480881,
"data": {},
"method": "flighttask_pause"
}
必填字段解释:
见大疆上云API
平台恢复任务
Topic:thing/product/go2_{device_id}/services
Direction:Down
Method:flighttask_recovery
QoS:1,机器狗客户端的状态机逻辑可以应对重复消息
机器狗暂停执行任务时,平台可通过发送flighttask_recovery消息(同大疆上云API),使机器狗恢复(继续)任务的执行。
{
"tid": "2b4e6f98-b32e-4182-accf-1326457dc5ba",
"bid": "107cb1b3-b13e-4f2f-b822-4e9ed43ec8d6",
"timestamp": 1769414489273,
"data": {},
"method": "flighttask_recovery"
}
必填字段解释:
见大疆上云API
平台取消任务
Topic:thing/product/go2_{device_id}/services
Direction:Down
Method:return_home
QoS:1,机器狗客户端的状态机逻辑可以应对重复消息
机器狗执行或暂停任务时,平台可通过发送return_home消息(同大疆上云API),使机器狗停止执行当前任务。
{
"tid": "e2a45687-2fd4-47ec-9e63-ef02caaf9973",
"bid": "ef4bde9b-2d98-4239-bc89-467068d3d923",
"timestamp": 1769414839923,
"data": {},
"method": "return_home"
}
必填字段解释:
见大疆上云API
摄像头画面直播
平台下发开始直播
Topic:thing/product/go2_{device_id}/services
Direction:Down
Method:live_start_push
QoS:1,机器狗客户端的状态机逻辑可以应对重复消息
当机器狗开始执行任务时,平台将向机器狗下发开始直播推流的消息(同大疆上云API),此时机器狗将通过rtsp协议,向消息中的url推送摄像头视频流,每一帧视频流的SEI帧中还包含了json格式的osd信息,即结构: [SEI NALU] + [Video NALU],平台解码器读取视频流时,请先解析 SEI,再解析图像。
注意:平台向机器狗直播推流的目标URL暂定为:rtsp://47.109.94.70:554/smb/ROBOT_GO2_39120,其中,ROBOT_GO2_39120为机器狗的SN号
{
"tid": "f1d1f932-c91b-40b9-9199-cd675a5cc7f5",
"bid": "fc20a3f4-4b08-409b-84c2-9ea2276c75c1",
"timestamp": 1769414352398,
"data": {
"url_type": 4,
"url": "rtsp://47.109.94.70:554/smb/ROBOT_GO2_39120",
"video_id": "ROBOT_GO2_0/4/normal-0",
"video_quality": 3
},
"method": "live_start_push"
}
必填字段解释:
见大疆上云API
平台下发停止直播
Topic:thing/product/go2_{device_id}/services
Direction:Down
Method:live_stop_push
QoS:1,机器狗客户端的状态机逻辑可以应对重复消息
当机器狗完成任务后,平台可向机器狗下发停止直播推流的消息(同大疆上云API),此时机器狗将停止直播推流,节省网络带宽。
{
"tid": "f1d1f932-c91b-40b9-9199-cd675a5cc7f5",
"bid": "fc20a3f4-4b08-409b-84c2-9ea2276c75c1",
"timestamp": 1769414352398,
"data": {
"video_id": "ROBOT_GO2_0/4/normal-0"
},
"method": "live_stop_push"
}
必填字段解释:
见大疆上云API
平台远程遥控
为实现在平台上远程操控机器狗进行人工巡检,需要在云平台网页端通过键盘远程遥控机器狗运动,同时显示机器狗通过直播推流传来的摄像头画面,特设计以下通信过程。
启动远程控制
Topic:thing/product/go2_{device_id}/services
Direction:Down
Method:drc_mode_enter
QoS:1,机器狗客户端的状态机逻辑可以应对重复消息
在远程遥控机器狗前,需要平台发送启动远程控制的指令消息,并发送开启直播推流的消息(类似下发飞行任务时),此时机器狗将尝试进入手动控制模式,并向平台返回结果。
{
"tid": "e2a45687-2fd4-47ec-9e63-ef02caaf9973",
"bid": "ef4bde9b-2d98-4239-bc89-467068d3d923",
"timestamp": 1769414839923,
"data": {},
"method": "drc_mode_enter"
}
结果返回
Topic:thing/product/go2_{device_id}/services_reply
Direction:Up
Method:drc_mode_enter
QoS:1
失败原因一般为已启动该功能,或机器狗正在准备/就绪/执行其它路线巡检任务。
{
"bid": "cc978f50-4598-4877-b13f-ff71ca417245",
"data": {
"result": 0,
"message": ""
},
"tid": "87053f62-5dad-4c2b-ae1f-5193a38c3250",
"timestamp": 1770017873,
"method": "drc_mode_enter"
}
必填字段解释:
| column | name | type | constraint | description |
|---|---|---|---|---|
| result | 启动结果 | int | 若为0则执行成功,-1则执行失败 | |
| message | 失败原因 | string | 失败时为原因信息,成功则为空 |
运动控制指令
注意:运动控制指令必须通过thing/product/go2_{device_id}/drc/cmd话题下发,机器狗进入运动控制状态时才会订阅该话题并接收响应消息,退出状态后将取消订阅该话题
切换站立或趴下的姿态
Topic:thing/product/go2_{device_id}/drc/cmd
Direction:Down
Method:switch_posture
机器狗必须在站立时才能进行移动,接收到该消息时会在站立和趴下两个姿态之间进行切换,请勿频繁发送该消息。
{
"tid": "e2a45687-2fd4-47ec-9e63-ef02caaf9973",
"bid": "ef4bde9b-2d98-4239-bc89-467068d3d923",
"timestamp": 1769414839923,
"data": {},
"method": "switch_posture"
}
移动指令
Topic:thing/product/go2_{device_id}/drc/cmd
Direction:Down
Method:move
平台可通过该指令控制机器狗前后左右运动和旋转。发送频率需要保持5-10hz,才能比较精准地控制机器狗的运动。本协议无回包机制。
{
"tid": "e2a45687-2fd4-47ec-9e63-ef02caaf9973",
"bid": "ef4bde9b-2d98-4239-bc89-467068d3d923",
"timestamp": 1769414839923,
"data": {
"vx":0.5,
"vy":0.0,
"vyaw":1.0
},
"method": "move"
}
必填字段解释:
| column | name | type | constraint | description |
|---|---|---|---|---|
| vx | 前后移动速度 | float | -2.5~3.8 | 单位m/s |
| vy | 左右移动速度 | float | -1.0~1.0 | 单位m/s |
| vyaw | 转动速度 | float | -4~4 | 单位rad/s |
紧急停止指令
Topic:thing/product/go2_{device_id}/drc/cmd
Direction:Down
Method:stop_move
平台可通过该指令控制机器狗紧急停止运动。
{
"tid": "e2a45687-2fd4-47ec-9e63-ef02caaf9973",
"bid": "ef4bde9b-2d98-4239-bc89-467068d3d923",
"timestamp": 1769414839923,
"data": {},
"method": "stop_move"
}
停止远程控制
Topic:thing/product/go2_{device_id}/services
Direction:Down
Method:drc_mode_exit
{
"tid": "e2a45687-2fd4-47ec-9e63-ef02caaf9973",
"bid": "ef4bde9b-2d98-4239-bc89-467068d3d923",
"timestamp": 1769414839923,
"data": {},
"method": "drc_mode_exit"
}
完成远程遥控后,需要平台发送停止远程控制的指令消息,此时机器狗将尝试退出远程控制模式,并向平台返回结果。
结果返回
Topic:thing/product/go2_{device_id}/services_reply
Direction:Up
Method:drc_mode_exit
QoS:1
失败原因一般为未启动远程控制,或机器狗正在准备/就绪/执行其它路线巡检任务。
{
"bid": "cc978f50-4598-4877-b13f-ff71ca417245",
"data": {
"result": 0,
"message": ""
},
"tid": "87053f62-5dad-4c2b-ae1f-5193a38c3250",
"timestamp": 1770017873,
"method": "drc_mode_enter"
}

浙公网安备 33010602011771号