大疆无人机如何通过MQTT获取实时位置?

要通过 MQTT 获取大疆无人机的实时位置,核心流程是:无人机数据经由 Pilot 2 或机场网关,通过上云 API 的 OSD 主题上报,您的云平台订阅该主题即可获取位置信息。

以下是基于大疆上云 API​ 的具体实现步骤。


🚀 1. 前提条件

  1. 适用设备:行业无人机(如 M30/M300/M4 系列)及大疆机场,并搭配支持上云 API 的遥控器(如 RC Plus)或机场固件。

  2. 平台部署:已部署大疆上云 API 后端服务,并配置好 MQTT Broker(如 EMQX)。

  3. 设备连接:在 Pilot 2 的"云服务"中配置您的云平台地址,使遥控器和无人机成功连接并上报数据。


📡 2. MQTT 订阅:获取 OSD 数据

位置信息包含在无人机(Aircraft)的 OSD(On-Screen Display)数据中。您需要订阅其专属的 OSD 主题。

  • 订阅主题

    thing/product/{aircraft_sn}/osd

    • 说明{aircraft_sn}是无人机的序列号。您可以在 Pilot 2 的设备信息页面或上云 API 的后台管理界面找到它。
  • MQTT 示例 (使用 paho.mqtt.python)

    python

    import paho.mqtt.client as mqtt

    import json

    def on_connect(client, userdata, flags, rc):

    print("Connected with result code " + str(rc))

    订阅无人机OSD主题,QoS可根据需求选择

    client.subscribe("thing/product/YOUR_AIRCRAFT_SN/osd", qos=0)

    def on_message(client, userdata, msg):

    payload = json.loads(msg.payload)

    data = payload.get("data", {})

    提取位置信息

    latitude = data.get("latitude")

    longitude = data.get("longitude")

    height = data.get("height") # 相对起飞点高度 (米)

    elevation = data.get("elevation") # 海拔高度 (米)

    if latitude is not None and longitude is not None:

    print(f"实时位置: 经度={longitude}, 纬度={latitude}, 高度={height}, 海拔={elevation}")

    client = mqtt.Client()

    client.on_connect = on_connect

    client.on_message = on_message

    使用上云API配置的MQTT连接信息

    client.username_pw_set("admin", "public")

    client.connect("your-emqx-host", 1883, 60)

    client.loop_forever()


📊 3. 解析位置数据

订阅 osd主题后,您将收到包含实时遥测数据的 JSON 报文。关键字段如下:

json

{

"bid": "00000000-0000-0000-0000-000000000000",

"data": {

"latitude": 31.2304, // 纬度 (度)

"longitude": 121.4737, // 经度 (度)

"height": 120.5, // 相对起飞点高度 (米)

"elevation": 15.3, // 海拔高度 (米)

"attitude_head": -79, // 航向角 (度)

"attitude_pitch": 4.3, // 俯仰角 (度)

"attitude_roll": 0, // 横滚角 (度)

"horizontal_speed": 5.2, // 水平速度 (m/s)

"vertical_speed": 0.1, // 垂直速度 (m/s)

"home_distance": 350.7, // 距返航点距离 (米)

"position_state": { // 定位状态

"gps_number": 12,

"is_fixed": 1,

"quality": 2,

"rtk_number": 0

},

// ... 其他字段

},

"timestamp": 1736411578239,

"gateway": "5YSZKCC00212VA"

}

核心定位字段说明:

字段 (Field) 含义 单位 说明
latitude 纬度 度 (°) WGS84 坐标系
longitude 经度 度 (°) WGS84 坐标系
height 相对高度 米 (m) 相对于起飞点的高度
elevation 海拔高度 米 (m) 基于海平面的高度
position_state 定位状态 - is_fixed为1表示已定位,gps_numberrtk_number反映卫星/RTK数量

💡 4. 注意事项

  • 定位状态校验 :使用前务必检查 position_state字段,确保 is_fixed1gps_number足够(如 > 6),以保证定位精度。

  • 数据更新频率:OSD 数据上报频率通常为 1-5 秒/次,具体取决于设备型号和设置,适用于监控大屏和轨迹回放,但不适合厘米级精确定位。

  • 机场场景 :对于大疆机场,无人机的 OSD 主题同样为 thing/product/{aircraft_sn}/osd。机场本身的位置通常在拓扑信息中上报。

  • 坐标系转换:获取到的经纬度是 WGS84 坐标系,如需在地图上展示或进行距离计算,请使用高德、百度等地图 SDK 提供的转换工具将其转换为平面坐标。

相关推荐
l14372332672 小时前
短剧多语种翻译的技术难点:为什么AI翻译比人工翻译更适合出海?
开发语言·人工智能·php
初遇你时动了情2 小时前
服务器lunix制作 docker镜像
运维·服务器·docker
請你喝杯Java2 小时前
AI驱动的软件开发革命:以Claude Code为例
人工智能
森叶2 小时前
AI 时代的“万能插座”:深度拆解 MCP 协议背后的 HTTP + SSE 异步架构(含完整、可直接运行源码 + 逐行注释)
人工智能·http·架构
lujunql2 小时前
CMake 生成Visual Studio 2022工程---第三章.Eclipse Paho C
mqtt·vs2022·eclipse paho c
无心水2 小时前
【OpenClaw:应用与协同】19、OpenClaw控制移动设备与物联网节点——ADB/MQTT集成实战
人工智能·物联网·adb·bm25·openclaw·openclaw·三月创作之星
运维老司机2 小时前
国产鲲鹏服务器 Kylin Linux 部署 TiDB v8.5.5 实战(TiUP 单机部署完整教程)
linux·服务器·kylin
熊猫钓鱼>_>2 小时前
OpenClaw 多平台接入:让 AI 助理接管你的工作与生活
人工智能·ai·自动化·生活·skills·agent skills·openclaw
Saniffer_SH2 小时前
【高清视频】介绍一个自动化测试辅助小工具 - 上下电测试适用于电脑冷启动的掉电盒
网络·人工智能·驱动开发·嵌入式硬件·测试工具·计算机外设·压力测试