无人机开源框架: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库文档

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

相关推荐
海砥装备HardAus2 小时前
实操版:无人机简单自动飞行轨迹实现详解
无人机·飞控·飞控调试
AI_零食2 小时前
开源鸿蒙跨平台Flutter开发:手账记事模板库应用
学习·flutter·华为·开源·harmonyos·鸿蒙
斯坦SteinY2 小时前
github年度热门开源项目
ai·chatgpt·开源·github·排名·热门项目
GitCode官方2 小时前
【西安站招募】OpenClaw 龙虾争霸赛 4 月 11 日极限开战,寻找古都 “虾王”!
开源·atomgit
提子拌饭1332 小时前
开源鸿蒙跨平台Flutter开发:家庭影像传承系统
flutter·华为·开源·harmonyos·鸿蒙
世人万千丶2 小时前
开源鸿蒙跨平台Flutter开发:古诗词学习应用
学习·flutter·华为·开源·harmonyos·鸿蒙
独特的螺狮粉3 小时前
开源鸿蒙跨平台Flutter开发:室内探险游戏应用
开发语言·flutter·游戏·华为·开源·harmonyos·鸿蒙
独特的螺狮粉3 小时前
开源鸿蒙跨平台Flutter开发:喝水时间提醒应用
开发语言·flutter·华为·信息可视化·开源·harmonyos·鸿蒙
GIS数据转换器3 小时前
车辆监控管理系统
人工智能·3d·无人机·知识图谱·旅游