从零搭建PX4飞控与边缘计算设备(Jetson/树莓派)的MAVLink通信链路(Ubuntu全版本适配)

张开发
2026/4/15 10:39:37 15 分钟阅读

分享文章

从零搭建PX4飞控与边缘计算设备(Jetson/树莓派)的MAVLink通信链路(Ubuntu全版本适配)
1. 硬件准备与接线指南第一次接触PX4飞控和边缘计算设备通信时最让人头疼的就是硬件接线。我清楚地记得自己第一次尝试连接Pixhawk和Jetson Nano时因为接错线导致整个下午都在排查故障。下面我就把踩过的坑和经验总结给你。核心原则就三点交叉连接、共地处理、电源隔离。以最常见的CH340串口模块为例具体接线方式如下TXD-RX交叉连接模块的TXD引脚接飞控的RX模块的RXD接飞控的TX。这个反接逻辑新手特别容易搞错记住发对收、收对发的口诀。GND必须连接两边的地线一定要接在一起否则会出现信号干扰。我曾遇到过不共地导致数据包丢失率高达30%的情况。VCC悬空处理飞控和模块最好各自独立供电。Pixhawk的TELEM2接口虽然有5V输出但建议只用作信号传输。Pixhawk 2.4.8的TELEM2接口引脚定义如下表引脚编号信号电压功能说明1VCC5V供电输出(最大500mA)2TX3.3V数据发送(接外设RX)3RX3.3V数据接收(接外设TX)4CTS3.3V流控信号(通常不用)5RTS3.3V流控信号(通常不用)6GNDGND公共地实际接线时推荐使用1.25mm转杜邦2.54mm的6P端子线这种转接线在淘宝上10块钱能买一包。记得给接口做好防松脱处理无人机震动环境下接头容易松动。2. 串口驱动安装与配置驱动问题绝对是Linux系统下最让人崩溃的环节。不同版本的Ubuntu对CH340/CH341芯片的支持差异很大我在Ubuntu 18.04、20.04和22.04上都实测过总结出这套通用安装方案。首先插上USB转串口模块在终端执行lsusb正常应该能看到类似1a86:7523 QinHeng Electronics HL-340的设备信息。如果没显示可能是硬件接触问题。驱动安装分三种情况情况一系统自带驱动sudo apt install brltty # 先安装这个可能冲突的包 sudo apt remove brltty # 再立即卸载它这个神奇操作能解决90%的驱动识别问题原理是触发系统自动加载正确驱动。情况二需要手动编译wget http://www.wch.cn/downloads/CH341SER_LINUX_ZIP.html unzip CH341SER_LINUX.ZIP cd CH341SER_LINUX/driver make sudo make install sudo modprobe ch341编译时如果报错可能是缺少内核头文件需要先执行sudo apt install linux-headers-$(uname -r)情况三设备权限问题sudo usermod -a -G dialout $USER sudo chmod 666 /dev/ttyCH341USB0记得注销重新登录使权限生效。验证驱动是否正常工作dmesg | grep ch341应该能看到设备初始化成功的日志。最后用以下命令测试通信stty -F /dev/ttyCH341USB0 921600 raw cat /dev/ttyCH341USB0如果显示乱码但不停刷屏说明硬件链路已经通了。3. PX4飞控参数配置飞控参数配置是通信链路建立的关键环节这里有几个容易忽略的细节。首先要用USB线直接连接飞控和电脑打开QGroundControl(QGC)进行配置。关键参数设置步骤在参数页面搜索MAV_1_CONFIG设置为TELEM2搜索SER_TEL2_BAUD设置波特率(推荐921600)确保MAV_0_CONFIG保持默认的TELEM1不变检查MAV_2_CONFIG是否为禁用状态有个隐藏技巧在配置完成后建议导出参数文件备份。执行param save /fs/microsd/params_backup.param这样下次可以直接加载不用重复配置。波特率选择的经验之谈921600适合高频数据传输(如视觉SLAM)57600适合低功耗场景115200通用折中选择实测发现树莓派4B在921600波特率下持续工作2小时后会出现缓冲区溢出这时需要调整飞控的MAV_1_RATE 200000这个参数控制MAVLink消息发送频率。4. MAVLink通信测试与调试当硬件和基础配置都完成后就该测试通信链路了。推荐使用mavlink-router这个工具sudo apt install mavlink-router mavlink-routerd -e 127.0.0.1:14550 /dev/ttyCH341USB0:921600常见问题排查指南QGC能连接但收不到数据检查飞控参数MAV_1_MODE Onboard MAV_1_FORWARD Enabled数据包不完整可能是硬件问题用示波器检查信号质量。简易测试方法sudo apt install cutecom cutecom -b 921600 -d /dev/ttyCH341USB0观察接收到的原始数据是否规律。通信时断时续大概率是供电不稳导致建议给Jetson/树莓派接独立电源检查所有GND连接是否牢固在TX/RX线上加10kΩ上拉电阻性能优化技巧在/etc/rc.local中加入echo 1 /sys/bus/usb-serial/devices/ttyUSB0/latency_timer将USB延迟从默认16ms降到1ms使用DMA缓冲sudo stty -F /dev/ttyCH341USB0 921600 -onlcr -opost -icanon -echo5. 高级应用与扩展建立稳定通信后就可以开发更高级的应用了。这里分享几个实战项目经验。视觉SLAM集成方案import pymavlink.mavutil as mavutil from pymavlink import mavwp master mavutil.mavlink_connection( /dev/ttyCH341USB0, baud921600, source_system255) while True: msg master.recv_match(blockingTrue) if msg.get_type() GLOBAL_POSITION_INT: print(fGPS: lat{msg.lat/1e7}, lon{msg.lon/1e7})实时控制代码片段#include mavsdk/mavsdk.h using namespace mavsdk; Mavsdk mavsdk; ConnectionResult conn_result mavsdk.add_any_connection(serial:///dev/ttyCH341USB0:921600); auto system mavsdk.systems().at(0); auto action Action{system}; action.arm();带宽优化建议关闭不用的消息流MAV_1_STREAM_EXTRA1_RATE 0 MAV_1_STREAM_EXTRA2_RATE 0使用COMPRESSED_IMAGE传输图像启用MAVLink2协议6. 多平台适配技巧不同版本的Ubuntu和不同边缘计算设备会有细微差异这里总结下关键点。Ubuntu版本差异处理18.04需要手动加载ftdi_sio驱动20.04默认支持最好22.04可能需要禁用ModemManager设备特定配置Jetson系列sudo systemctl stop nvgetty sudo systemctl disable nvgetty树莓派sudo raspi-config非交互式 sudo apt purge triggerhappy内核参数优化echo kernel.sched_rt_runtime_us 1000000 | sudo tee -a /etc/sysctl.conf echo vm.swappiness 10 | sudo tee -a /etc/sysctl.conf最后提醒所有配置变更后都要重启服务sudo udevadm control --reload-rules sudo systemctl restart systemd-udevd

更多文章