☰
Dora 无人机实战教程:如何用 MAVLink 2 桥接跑通 ArduPilot SITL 闭环飞行
2026/9/25 16:34:28 网站建设 项目流程

Dora 无人机实战教程:如何用 MAVLink 2 桥接跑通 ArduPilot SITL 闭环飞行

【免费下载链接】doraDORA (Dataflow-Oriented Robotic Architecture 面向数据流的机器人架构) 是为 AI 与具身智能机器人打造的高性能开发框架,以数据流范式重构开发逻辑,原生支持分布式部署与端边云协同 —— 无需复杂适配,即可实现一体端到端具身大小脑、VLA等模型部署,无缝衔接感知、推理、控制全链路,让 AI 能力与机器人动作深度融合。 依托 Rust 内核与零拷贝通信技术,它将具身大小脑、VLA等模型推理、多模态数据融合延迟压缩至微秒级,同时兼容 ROS2 生态与国产 AI 芯片,彻底降低具身智能机器人的开发门槛,让分布式部署下的 AI 赋能创新更高效、更灵活。项目地址: https://gitcode.com/dora-rs/dora

Dora 是一款为 AI 与具身智能打造的高性能数据流开发框架,本教程带你用它内置的 MAVLink 2 桥接节点驱动 ArduPilot SITL 模拟器,完成一次完整的"起飞 → 悬停 → 降落 → 解锁"闭环飞行演示——全程只需两个终端命令,无需真机、无需 MAVProxy。

🚁 这次演示能做什么?

整个任务由一条 Dora 数据流驱动,包含两个节点:

  • bridge(MAVLink 2 桥接节点):负责与 ArduPilot SITL 之间的 MAVLink 报文收发。SITL 广播的心跳、位置、命令回执等报文,会被桥接节点转成 Dora 数据流里的 Arrow 消息;反之,数据流里的控制指令会被序列化为标准 MAVLink 2 帧发给飞控。
  • mission(Python 任务节点):一个状态机,负责按顺序下发"切换 GUIDED 模式 → 上锁 → 起飞 → 等待到达目标高度 → 悬停 5 秒 → 降落 → 解锁",并逐条等待COMMAND_ACK确认。

数据流拓扑很简单,可直接查看 examples/mavlink2-bridge-sitl-mission/dataflow.yml:

ArduCopter SITL (独立进程, udp:127.0.0.1:14550) │ MAVLink 2 ▼ bridge ──Arrow──▶ mission.py(状态机) ▲ │ └──────────────────┘ (command_long_cmd 下行指令)

桥接扩展的完整说明见 libraries/extensions/mavlink2-bridge/src/lib.rs,可执行的桥接节点在 binaries/mavlink2-bridge-node/。

🛠️ 环境准备:一次性安装步骤

1. 安装 Dora

git clone https://gitcode.com/dora-rs/dora cd dora # 按仓库 README 完成构建,得到 dora CLI

2. 安装 ArduPilot SITL(首次约需 5–10 分钟编译)

# 克隆 ArduPilot 源码(含子模块),放到 ~/src/ardupilot cd ~/src/ardupilot Tools/environment_install/install-prereqs-ubuntu.sh -y ./waf configure --board sitl ./waf copter

平台支持:Ubuntu 22.04/24.04 为一级支持平台,macOS 亦支持(SITL 速度约慢 10–15%);Windows 需要 WSL。详见 examples/mavlink2-bridge-sitl-mission/README.md。

🚀 启动 SITL 模拟器

打开终端 1,运行仓库自带的启动脚本 examples/mavlink2-bridge-sitl-mission/scripts/start_sitl.sh:

ARDUPILOT_SRC=~/src/ardupilot \ ./examples/mavlink2-bridge-sitl-mission/scripts/start_sitl.sh

脚本会以固定首页坐标(旧金山,保证每次演示可复现)启动 ArduCopter 四旋翼,并将 MAVLink 转发到udp:127.0.0.1:14550。等到终端打印出APM: EKF3 IMU0 is using GPS(约 10 秒),说明模拟器已就绪。

🎯 运行 Dora 数据流:闭环飞行全流程

打开终端 2,一条命令启动数据流:

dora run examples/mavlink2-bridge-sitl-mission/dataflow.yml --uv --stop-after 90s

--uv会自动为 Python 任务节点准备含pyarrow和dora-rs的虚拟环境。

任务状态机实现在 examples/mavlink2-bridge-sitl-mission/mission.py,每个状态都会等待飞控的COMMAND_ACK或位置阈值,并带超时保护——卡住会明确报错而不是无限等待。

✅ 成功长什么样?

mission: vehicle heartbeat received mission: -> SET_MODE GUIDED (cmd=176) mission: <- ACK SET_MODE GUIDED [ACCEPTED, 0.1s] mission: -> ARM (cmd=400) mission: <- ACK ARM [ACCEPTED, 0.1s] mission: -> TAKEOFF (cmd=22) mission: reached 8.51 m (target 8.50) mission: hovering for 5.0s mission: -> LAND (cmd=21) mission: landed at 0.04 m mission: -> DISARM (cmd=400) mission: SUCCESS - takeoff + hover + land + disarm complete

最后的mission: SUCCESS行是标准通过标志,可用grep做自动化判定。

⚙️ 调参指南:用环境变量控制飞行参数

环境变量默认值作用
MAVLINK_SITL_TAKEOFF_ALT_M10.0起飞目标高度(米)
MAVLINK_SITL_HOVER_SECS5.0悬停时长(秒)
MAVLINK_SITL_COMMAND_TIMEOUT15.0单条命令 ACK 超时(秒)
MAVLINK_SITL_ALT_TIMEOUT30.0高度推进超时(秒)
MAVLINK_SITL_HOME37.7749,-122.4194,0,0SITL 首页lat,lon,alt,yaw

例如想把起飞高度改到 5 米:MAVLINK_SITL_TAKEOFF_ALT_M=5.0 dora run ...。

🩺 常见问题快速排查

现象可能原因
no HEARTBEAT within 15sSITL 没运行,或没转发到 14550 端口
ARM: ACK = TEMPORARILY_REJECTEDEKF 尚未就绪,SITL 启动后多等一会儿再跑数据流
altitude did not reach … within 30s仿真物理被暂停,或飞控静默拒绝了 GUIDED 模式
ACK = DENIEDonSET_MODE车辆类型不是 ArduCopter(固件版本过旧)

完整故障表见 examples/mavlink2-bridge-sitl-mission/README.md 的 "Failure modes" 一节。

📡 从仿真到真机:把桥接指向真实飞控

SITL 验证通过后,接入真实飞控只需改数据流里 bridge 节点的MAVLINK_BRIDGE_CONFIG,支持 TCP、UDP、串口三种链路(实现见 libraries/extensions/mavlink2-bridge/src/transport.rs):

- id: bridge env: MAVLINK_BRIDGE_CONFIG: | endpoint: tcp://192.168.1.10:5760 # Pixhawk 数传电台 # or: udp://0.0.0.0:14550 # 监听任意地面站 # or: serial:///dev/ttyACM0?baud=115200

🧭 下一步探索

  • 免 ArduPilot 的快速上手:examples/mavlink2-bridge/README.md 提供了内置 MAVLink 模拟器的 Rust / Python / C++ 三语言版演示,dora run examples/mavlink2-bridge/dataflow-rust.yml --stop-after 5s一条命令即可体验心跳闭环。
  • 扩展任务:mission.py是标准状态机,在 TAKEOFF 与 LAND 之间插入航点、载荷触发等新状态即可扩展;新增 MAVLink 命令只需对应MAV_CMD_*整数和参数语义。
  • 多机部署:Dora 原生支持分布式数据流,桥接节点可放入独立 daemon,配合dora up / build / start / stop / down生命周期管理远程调度。

用 Dora 的数据流范式 + MAVLink 2 桥接,你只需用 Python 写一个状态机,就能把 ArduPilot 的整个飞行控制链路纳管——仿真到真机,只改一行 endpoint。

【免费下载链接】doraDORA (Dataflow-Oriented Robotic Architecture 面向数据流的机器人架构) 是为 AI 与具身智能机器人打造的高性能开发框架,以数据流范式重构开发逻辑,原生支持分布式部署与端边云协同 —— 无需复杂适配,即可实现一体端到端具身大小脑、VLA等模型部署,无缝衔接感知、推理、控制全链路,让 AI 能力与机器人动作深度融合。 依托 Rust 内核与零拷贝通信技术,它将具身大小脑、VLA等模型推理、多模态数据融合延迟压缩至微秒级,同时兼容 ROS2 生态与国产 AI 芯片,彻底降低具身智能机器人的开发门槛,让分布式部署下的 AI 赋能创新更高效、更灵活。项目地址: https://gitcode.com/dora-rs/dora

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询