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"
}
posted @ 2026-01-26 15:44  安河桥北i  阅读(12)  评论(0)    收藏  举报