无人机开源框架:PX4-树莓派-岸上计算机全解析

无人机开源框架:PX4 - 树莓派 - 岸上计算机

一、系统架构概览

在无人机三层架构中,各模块的职责划分遵循"实时性优先、复杂性分层"的原则:


二、各模块功能划分

1. PX4飞控(底层实时控制层)

PX4运行在Pixhawk/Pixracer等飞控硬件上,使用NuttX实时操作系统,主要负责:

功能类别 具体职责
传感器驱动 直接读取IMU、磁力计、GPS、气压计、超声波等
姿态估计 运行EKF(扩展卡尔曼滤波)融合传感器数据,计算当前姿态、位置和速度
底层控制 PID/ADRC控制算法,输出PWM/CAN信号驱动电机和舵机
安全监控 电压监测、看门狗、失控保护(failsafe)、地理围栏
通信中继 通过串口与树莓派交换MAVLink/uXRCE-DDS消息

关键特点:

  • 硬实时保障(微秒级响应,对于稳定飞行至关重要)

  • 不处理视觉、路径规划等计算密集型任务

  • 即使树莓派死机,PX4仍能保持基础稳定控制(姿态保持、返航)

2. 树莓派(机载任务计算机)

树莓派运行Linux系统(Ubuntu/Raspbian),作为"任务计算机"承担:

功能类别 具体职责
视觉处理 摄像头图像采集、目标检测与跟踪(如行人、车辆)、AprilTag识别
路径规划 基于环境感知数据,生成动态航点并发送给PX4
SLAM/定位增强 视觉SLAM(如ORB-SLAM3)、VIO(视觉惯性里程计)、RTK GPS数据处理
通信网关 将PX4数据转发至地面站、接收地面指令
ROS节点运行 可运行ROS/ROS2节点,整合各传感器和算法

实际项目案例:

  • ERLE无人机:树莓派4运行YOLO目标检测,Pixhawk运行PX4实现自动跟随

  • 无人机快递系统:树莓派处理条形码识别和投递点确认

3. 岸上计算机(地面站/控制中心)

岸上计算机通常是一台PC或笔记本,运行QGroundControl或其他定制地面站:

功能类别 具体职责
任务规划 预设航点、区域测绘路径、自动任务脚本上传
实时监控 显示无人机姿态、高度、GPS状态、电池电压、视频流
数据记录 记录飞行日志、传感器数据用于后处理分析
应急干预 手动接管控制、紧急降落/返航指令
云服务对接 数据上传至云端进行长期存储或分析

三、通信方式详解

1. PX4 ↔ 树莓派(机载通信)

这是最关键的内部通信链路,有两种主流方案:

方案A:MAVLink(传统、简单)

text

复制代码
PX4 (TELEM2串口) <--UART--> 树莓派 (串口GPIO/USB)
                MAVLink协议
  • 物理连接:串口(UART),常用TELEM2端口

  • 波特率:921600 bps(推荐)

  • 软件方案:

    • MAVROS(ROS用户): 将MAVLink转换为ROS话题

    • MAVLink Router:轻量级路由转发

    • pymavlink(Python): 适合快速开发

接线表(Pixhawk TELEM2 → 树莓派串口):

TELEM2针脚 信号 树莓派GPIO
2 TX (输出) RXD (GPIO 15)
3 RX (输入) TXD (GPIO 14)
6 GND GND

⚠️ 电压注意:Pixhawk串口为3.3V,树莓派GPIO也为3.3V,可直接连接。

Python示例(使用pymavlink接收数据):

python

复制代码
from pymavlink import mavutil

# 连接到串口
master = mavutil.mavlink_connection('/dev/serial0', baud=921600)

# 等待心跳包
master.wait_heartbeat()
print("Heartbeat from PX4")

# 循环读取姿态数据
while True:
    msg = master.recv_match(type='ATTITUDE', blocking=True)
    roll = msg.roll
    pitch = msg.pitch
    yaw = msg.yaw
    print(f"Roll: {roll:.2f}, Pitch: {pitch:.2f}, Yaw: {yaw:.2f}")
方案B:uXRCE-DDS / ROS2(现代、功能更强)

text

复制代码
PX4 (uXRCE-DDS Client) <--UART/Ethernet--> 树莓派 (uXRCE-DDS Agent) <--> ROS2节点
  • 核心优势:PX4内部uORB消息直接映射为ROS2话题,无需手动转换

  • 适用场景:需要使用ROS2生态、复杂传感器融合、多机协同、集群飞行

  • 启动方式:

    bash

    复制代码
    # PX4端(NuttShell)
    uxrce_dds_client start -t UART -d /dev/ttyS3
    
    # 树莓派端
    MicroXRCEAgent serial --dev /dev/ttyS0 -b 921600

订阅PX4的IMU数据示例(ROS2):

python

复制代码
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Imu

class IMUSubscriber(Node):
    def __init__(self):
        super().__init__('imu_subscriber')
        self.subscription = self.create_subscription(
            Imu,
            '/fmu/out/vehicle_imu',
            self.imu_callback,
            10)
    
    def imu_callback(self, msg):
        self.get_logger().info(f'Acceleration: {msg.linear_acceleration}')

rclpy.init()
node = IMUSubscriber()
rclpy.spin(node)

2. 树莓派 ↔ 岸上计算机(远程通信)

通信方式 适用场景 典型配置
WiFi 视距内、短距离飞行(<300米) 树莓派连接USB无线网卡,地面站接入同一网络
4G/LTE 超视距飞行(BVLOS) 4G模块 + 云端服务器中转,可实现无限距离
数传电台 中远距离、低延迟需求 433MHz/915MHz/2.4GHz,速率约50-250kbps
Ethernet over USB 开发调试阶段 树莓派通过USB连接电脑,使用RNDIS虚拟网卡

数据流向:

  • 上行:地面指令("飞向航点A"、"调整参数")→ 树莓派 → PX4

  • 下行:状态数据(姿态/GPS/电池) + 视频流 + 任务日志 → 地面站显示

典型数传电台方案:

text

复制代码
树莓派USB <--> SiK Radio (3DR) <~~~无线~~~> SiK Radio (USB) <--> QGroundControl

3. RTK GPS/动捕系统接入(高精度定位)

对于需要厘米级定位的场景(如农业喷洒、精准降落),可接入外部定位源:

text

复制代码
RTK基站/GPS --> 数传电台 --> 树莓派(ntrip_client) --> MAVLink GPS_INJECT --> PX4
                     ↓
              RTCM校正数据

或通过动捕系统(室内定位):

text

复制代码
动捕系统 --> VRPN服务器 --> WiFi --> 树莓派(vrpn_client_ros) --> MAVROS --> PX4
                                                      ↓
                                              VISION_POSITION_ESTIMATE消息

四、数据流示例:自动目标跟随

以典型的无人机跟随车辆任务为例,数据流转如下:

  1. 地面操作员:在QGroundControl中启动"跟随模式",框选目标车辆

  2. 岸上计算机:通过4G发送目标特征(颜色、大小)和初始位置

  3. 树莓派:

    • 接收并解析目标信息

    • 启动YOLO目标检测算法处理摄像头图像

    • 计算目标相对于无人机的位置偏移

    • 生成期望位置指令(如"向东移动2米")

  4. PX4飞控:

    • 读取IMU/GPS/光流传感器数据

    • 运行EKF估计当前位姿

    • 位置控制PID计算出电机PWM指令

  5. 电机:执行动作,无人机跟随目标移动

  6. 树莓派(并行):将跟随视频通过RTMP推流到云端

  7. 岸上计算机:实时显示跟随视频、无人机姿态、剩余电量


五、方案选择建议

场景 推荐配置 理由
学生项目/原型验证 MAVLink + MAVROS + WiFi 生态成熟、资料丰富、快速上手
科研/视觉导航 uXRCE-DDS + ROS2 + 4G 支持复杂感知算法、便于集成视觉SLAM
工业巡检 MAVLink + RTK + 数传电台 可靠性高、厘米级定位
无人机集群 uXRCE-DDS + ROS2 + 4G 分布式计算、多机协同通信
FPV竞速/特技 直接遥控器控制(无需树莓派) 极致低延迟

六、硬件选型参考

组件 推荐型号 说明
飞控 Pixhawk 6C / Cube Orange 稳定可靠,社区支持好
树莓派 Raspberry Pi 4B (4GB) 性能足够处理视觉任务
摄像头 Raspberry Pi Camera V2 / Intel RealSense D435 V2适合RGB图像,D435提供深度信息
GPS Here3 / M8N GPS + 罗盘 配合RTK可实现厘米级定位
数传电台 Holybro SiK Telemetry Radio V3 915MHz,20km范围
电源 PM02D电源模块 + 降压模块 为树莓派提供5V供电

七、常见问题与调试技巧

问题 可能原因 解决方法
树莓派收不到PX4数据 串口配置错误 检查/dev/serial0权限,确认波特率一致
无人机起飞后震荡 EKF参数未调优 运行QGC的参数调优向导
视频传输卡顿 WiFi干扰严重 切换到5GHz频段或使用4G
跟随响应迟钝 树莓派计算负载高 优化YOLO模型(使用Tiny版本)

📚 推荐阅读:

  • PX4官方文档《Companion Computers》

  • ROS2与PX4联合教程(Articulated Robotics)

  • DroneKit Python库文档

如需要具体的代码示例或硬件选型建议,欢迎继续提问!

相关推荐
千桐科技3 分钟前
数据中台 ETL 编排实践:基于 qData 开源版实现数据接入、转换与调度执行
数据仓库·开源·etl
也非非也31 分钟前
DeepSeek没发公告,但它把Agent装进了你的电脑
人工智能·开源·agent·deepseek·dsh
分布式存储与RustFS2 小时前
纠删码到底吃掉了多少容量:EC:4、EC:8 的利用率与容错怎么算
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
沐言Agent4 小时前
太惊艳了!2 个让你的 Codex 狠狠省 Token 的开源项目,必须收藏!
人工智能·ai·开源
程序员清风4 小时前
vLLM 实战:用 OpenAI 兼容接口部署本地大模型推理服务
开源·github·vllm
狗凯之家源码网5 小时前
PHP 开源 IM 即时通讯系统效果实测与功能展示
开发语言·开源·php
天天向上2915 小时前
Spring AI 实战:14 个踩坑记录,其中一个让我的测试全绿但产品是坏的
java·开源
枫叶丹47 小时前
AI 的记忆不是数据库:长期个性化如何避免过期与污染
人工智能·chatgpt·开源·agent·codex
浅安的邂逅8 小时前
260926-OpenAI 急停最强模型训练:智能体借 DNS 漏洞联网,还泄露了 GitHub token
人工智能·chatgpt·开源·openai·ai日报
workflower9 小时前
企业竞争要素变迁,智能型企业走向新四化
人工智能·机器学习·机器人·无人机·软件工程