嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载本文面向希望在树莓派Raspberry Pi上通过 PilotPi 扩展板运行 PX4 Autopilot 的开发者完整讲解基于 Raspberry Pi OSarmhf的部署流程包括系统镜像选择、config.txt/cmdline.txt底层外设配置、rc.local开机自启动、交叉编译与 Docker 编译两种构建方式以及执行器与外部罗盘的后配置。读完本文你将能够独立完成从裸机树莓派到可飞的多旋翼/固定翼 PX4 平台搭建并理解每一步背后的内核设备树与 PX4 启动脚本原理。PilotPi 扩展板接线示意电源部分3~6S 电池、PWM 伺服/动力输出、CSI 摄像头与未用 GPIO。PilotPi 扩展板接线示意传感器部分GPS、遥测、RC、ADC 与外部 I2C 接口。一、PilotPi 硬件背景速览PilotPi 是一块可直接插在树莓派2B/3B/3B/4B上的 PX4 飞控扩展板。根据硬件文档 raspberry_pi_pilotpi.md 的说明板载关键器件包括加速度计/陀螺仪ICM42688P部分批次为 ICM42605磁力计IST8310部分批次为 QMC5883L气压计MS5611PWM 输出PCA968516 通道ADCADS11153 路 0~5VADC1 内部接电池分压供电3~6S 电池内置电压检测通过 USB 给树莓派供电通信接口GPS/dev/ttySC0、遥测/dev/ttySC1、外部 I2C/dev/i2c-0、RC 输入/dev/ttyAMA0SBUS注意外部 I2C 总线与 CSI 摄像头接口存在引脚冲突二者只能二选一。这些引脚与接线约束直接决定了本文后续操作系统层的配置方式。二、准备 Raspberry Pi OS 系统镜像官方推荐使用最新的 Raspberry Pi OS Litearmhf 镜像——Lite 版本不含桌面环境资源占用低适合飞控实时任务。安装镜像的常规方式通过dd或 Raspberry Pi Imager 写入 SD 卡后你需要先确保能通过 SSH 连接树莓派在无显示器场景下可通过在boot分区放置ssh空文件启用 SSH 服务。PilotPi 的板级定义文件 boards/scumaker/pilotpi/default.px4board 中指定了CONFIG_BOARD_TOOLCHAINarm-linux-gnueabihf与CONFIG_BOARD_ARCHITECTUREcortex-a53对应 32 位 armhf 工具链如需在 64 位环境下构建可参考 arm64.px4board 中的CONFIG_BOARD_TOOLCHAINaarch64-linux-gnu。三、可选设置主机名与 mDNS 访问mDNS 允许你通过主机名而非 IP 地址连接树莓派对动态 IP 环境非常方便sudo raspi-config进入Network Options Hostname设置主机名后退出。设置完成后即可用pi_hostname.local访问。文档同时建议配置 SSH 免密登录passwordless auth避免每次上传固件时输入密码。四、操作系统底层配置PilotPi 通过树莓派 GPIO 的 SPI、I2C、UART 接口与外部芯片通信因此必须先修改两处内核启动配置文件。4.1 config.txt启用外设 overlaysudo nano /boot/config.txt将文件内容替换为# enable sc16is752 overlay dtoverlaysc16is752-spi1 # enable I2C-1 and set the frequency to 400KHz dtparami2c_armon,i2c_arm_baudrate400000 # enable spidev0.0 dtparamspion # enable RC input enable_uart1 # enable I2C-0 dtparami2c_vcon # switch Bluetooth to miniuart dtoverlayminiuart-bt逐行含义如下配置项作用dtoverlaysc16is752-spi1挂载 SC16IS752 SPI 转双 UART 芯片的 device tree overlay产生/dev/ttySC0GPS与/dev/ttySC1遥测两个串口dtparami2c_armon,i2c_arm_baudrate400000启用 I2C-1 并设置为 400kHz板载 IMU/磁力计/气压计所在的内部总线dtparamspion启用 SPI 总线生成/dev/spidev0.0SC16IS752 挂在 SPI1 上enable_uart1启用主 UARTRC 输入信号走/dev/ttyAMA0dtparami2c_vcon启用 I2C-0即 PilotPi 的外部 I2C 总线连接外部罗盘等设备dtoverlayminiuart-bt把蓝牙从主 UART 切换到 mini UART将主 UART 让给 RC 输入使用4.2 cmdline.txt隔离 CPU 核心给 PX4首先通过 raspi-config 配置串口sudo raspi-config进入Interfacing Options Serial将 login shell 设为No、hardware 设为Yes——即启用 UART 但不在其上挂载登录 shell保证串口专供 RC 使用。然后编辑内核命令行sudo nano /boot/cmdline.txt在最后一个单词后追加isolcpus2整文件形如consoletty1 rootPARTUUIDxxxxxxxx-xx rootfstypeext4 elevatordeadline fsck.repairyes rootwait isolcpus2isolcpus2告诉 Linux 内核不要在 CPU 核心 2 上调度任何进程。我们将在后续步骤中把 PX4 手动绑定taskset -c 2到这个专属核心上运行从而保证飞行控制任务的实时性。4.3 重启并验证接口重启并重新 SSH 登录后逐项检查设备节点是否就绪ls /dev/tty*应能看到/dev/ttyAMA0RC、/dev/ttySC0GPS与/dev/ttySC1遥测。ls /dev/i2c*应能看到/dev/i2c-0外部 I2C与/dev/i2c-1内部 I2C。ls /dev/spidev*应能看到/dev/spidev0.0。4.4 rc.local开机自动启动 PX4PilotPi 板载一个Boot Mode 开关连接 BCM25/GPIO25。系统启动脚本会读取该开关状态决定是否随系统自动拉起 PX4——这比在飞行中手动 SSH 启动更可靠。编辑sudo nano /etc/rc.local在exit 0之前追加以下内容echo 25 /sys/class/gpio/export echo in /sys/class/gpio/gpio25/direction if [ $(cat /sys/class/gpio/gpio25/value) -eq 1 ] ; then echo Launching PX4 cd /home/pi/px4 ; nohup taskset -c 2 ./bin/px4 -d -s pilotpi_mc.config 2 1 /home/pi/px4/px4.log fi echo 25 /sys/class/gpio/unexport脚本逻辑导出 GPIO25 为输入并读取电平若为 1Boot Mode 开关为 On则进入/home/pi/px4目录用taskset -c 2将 PX4 绑定到隔离核心上以pilotpi_mc.config多旋翼配置启动日志写入px4.log。注意当不需要自动起飞时请把 Boot Mode 开关拨到 Off避免意外启动。4.5 可选启用 CSI 摄像头若需要使用 CSI 摄像头sudo raspi-config进入Interfacing Options Camera启用。但需牢记启用 CSI 摄像头会占用 I2C-0导致外部 I2C 总线上所有设备如外部罗盘失效这是 PilotPi 硬件引脚复用的硬约束。五、构建 PX4 固件5.1 获取源码在开发机上获取最新源码含子模块git clone https://github.com/PX4/PX4-Autopilot.git --recursive--recursive会一并拉取所有 git 子模块uORB 消息、MAVLink 库等这是直接构建最新代码所需的全部前置条件。5.2 为 Raspberry Pi OS 交叉编译先在终端导出树莓派地址IP 或 mDNS 主机名均可export AUTOPILOT_HOST192.168.X.X或export AUTOPILOT_HOSTpi_hostname.local进入源码目录并构建 PilotPi 默认配置cd PX4-Autopilot make scumaker_pilotpi_default上传到树莓派make scumaker_pilotpi_default upload从上传实现 boards/scumaker/pilotpi/cmake/upload.cmake 可以看到其底层逻辑AUTOPILOT_HOST默认值即raspberrypiAUTOPILOT_USER默认pi通过rsync将运行时二进制目录与posix-configs/rpi/pilotpi*.config一并同步到目标机的/home/pi/px4目录。因此你也可以通过export AUTOPILOT_USERxxx覆盖默认用户名。SSH 登录树莓派后运行cd px4 sudo taskset -c 2 ./bin/px4 -s pilotpi_mc.config此时 PX4 即以多旋翼配置启动。若需固定翼配置将启动脚本替换为pilotpi_fw.config见第七节。5.3 处理 GLIBC 版本不匹配若在树莓派上执行bin/px4时出现如下错误bin/px4: /lib/xxxx/xxxx: version GLIBC_2.29 not found (required by bin/px4)说明宿主编译环境的 glibc 版本高于目标系统此时应改用 Docker 方式编译见下一节。切换前先清理旧构建产物rm -rf build/scumaker_pilotpi_default六、Docker 方式编译与 CI 一致的工具链Docker 方式使用与 PX4 CI 完全相同的工具集能规避宿主机工具链版本漂移问题。首次使用 Docker 构建前请先阅读 Docker 使用前提。在 PX4-Autopilot 目录下执行./Tools/docker_run.sh export AUTOPILOT_HOST192.168.X.X; export NO_NINJA_BUILD1; make scumaker_pilotpi_default upload从 Tools/docker_run.sh 的源码可以看到该脚本的本质以px4io/px4-dev官方构建容器运行传入的命令字符串挂载当前源码目录与~/.ccache缓存并发布 14556 UDP 端口供 MAVLink 使用。注意两点Docker 内不支持 mDNS每次上传必须显式指定正确的 IP 地址。NO_NINJA_BUILD1如果你的 IDE 不支持 ninja 构建系统此选项会回退到 make 构建另外如果只想编译不上传去掉命令末尾的upload目标即可./Tools/docker_run.sh make scumaker_pilotpi_default七、Post-configuration起飞前的必要设置7.1 执行器配置首先为你的机型设置 CA_AIRFRAME 参数。之后即可在地面站标准的 Actuator Configuration 界面 中为各个输出通道分配功能——此时界面会出现一个对应RPi PWM 输出驱动即 PCA9685的输出选项卡。7.2 外部罗盘GPS 模块内置罗盘在启动脚本*.config中你会看到 GPS 与外部罗盘相关的行# external GPS compass gps start -d /dev/ttySC0 -i uart -p ubx -s #hmc5883 start -X #ist8310 start -X其中gps start以 UBX 协议-p ubx启动/dev/ttySC0上的 GPS并自动检测串口方向-s。下面两行被注释的外部罗盘驱动需要根据你的 GPS 模块实际搭载的罗盘芯片取消注释对应一行。如何确认是哪一种罗盘在树莓派上安装 I2C 探测工具并扫描外部总线sudo apt-get update sudo apt-get install i2c-tools i2cdetect -y 0i2cdetect扫描/dev/i2c-0外部 I2C 总线的典型输出0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- 0e -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --地址1eHMC5883 型罗盘对应取消注释hmc5883 start -X地址0eIST8310 型罗盘对应取消注释ist8310 start -X一般 GPS 模块只会搭载其中一种外部 I2C 总线上若还接了其他设备同样会显示在这里。八、源码级解读PilotPi 启动脚本与板级配置8.1 启动脚本结构多旋翼 / 固定翼仓库中提供了两个现成启动脚本posix-configs/rpi/pilotpi_mc.config 与 posix-configs/rpi/pilotpi_fw.config分别对应多旋翼与固定翼。二者共同的启动流程为参数恢复param select parameters.bsonparam import从持久化文件恢复参数。板级豁免与校准默认值param set CBRK_SUPPLY_CHK 894281关闭电源检查断路器PilotPi 未实现system_powerparam set-default BAT1_V_DIV 5.7设置电池分压系数对应 boards/scumaker/pilotpi/init/rc.board_defaults 中注释的 1K 4.7K 分压网络。机型标识SYS_AUTOSTART 4001多旋翼或2100固定翼SYS_AUTOCONFIG 0保持当前配置不被覆盖。基础服务dataman数据管理、load_mon负载监控、battery_status电池状态。板载传感器优先启动 ICM42688P-R 4旋转 90°失败则回退 ICM42605优先 IST8310-a 15指定 I2C 地址 0x0F失败则回退 QMC5883L气压计 MS5611ADC ADS1115。输出与分配pca9685_pwm_out start -XPCA9685 PWM 输出挂在外部 I2C 总线-X随后启动control_allocator控制分配器。GPS 与外部罗盘gps start -d /dev/ttySC0 -i uart -p ubx -s外部罗盘默认注释。RC 输入rc_input start -d /dev/ttyAMA0从主 UART 读取遥控信号。控制栈模块多旋翼sensors→commander→navigator→ekf2→land_detector multicopter→mc_hover_thrust_estimator→flight_mode_manager→mc_pos_control→mc_att_control→mc_rate_control。固定翼额外包含airspeed_selector、ms4525do start -X空速计以及fw_att_control、fw_mode_manager、fw_lat_lon_control。MAVLink 与日志mavlink start -x -u 14556 -r 1000000 -p开启 UDP 14556 遥测mavlink start -x -Z -d /dev/ttySC1开启遥测串口logger start -t -b 200启动日志记录200KB 缓冲。8.2 板级 Kconfig固件里编译了哪些驱动boards/scumaker/pilotpi/default.px4board 揭示了该配置默认启用的关键驱动与模块传感器驱动DRIVERS_IMU_INVENSENSE_ICM42605、DRIVERS_IMU_INVENSENSE_ICM42688P、DRIVERS_MAGNETOMETER_HMC5883、DRIVERS_MAGNETOMETER_ISENTEK_IST8310、DRIVERS_MAGNETOMETER_QMC5883L、DRIVERS_BAROMETER_MS5611、DRIVERS_ADC_ADS1115、DRIVERS_PCA9685_PWM_OUT并启用CONFIG_PCA9685_USE_EXTERNAL_CRYSTALy外部晶振、DRIVERS_GPS、DRIVERS_RC_INPUT。核心模块EKF2、COMMANDER、NAVIGATOR、CONTROL_ALLOCATOR、MC_*与FW_*全部控制器、MAVLINK、LOGGER、LAND_DETECTOR等。这与启动脚本中依次start的模块一一对应也从源码层面印证了第七节「RPi PWM 输出驱动」选项卡出现的机制——PCA9685 驱动确实被编译进固件并通过pca9685_pwm_out命令对外暴露。九、常见问题排查速查现象可能原因与处理启动报GLIBC_2.29 not found宿主机工具链 glibc 过新改用./Tools/docker_run.sh构建/dev/ttySC0//dev/ttySC1不存在config.txt缺少dtoverlaysc16is752-spi1或 SPI 未启用/dev/i2c-0不存在缺少dtparami2c_vconRC 无信号检查enable_uart1与miniuart-bt确认登录 shell 已从串口移除外部罗盘检测不到检查 Boot Mode 开关状态、i2cdetect -y 0扫描地址HMC58831e、IST83100e确认未启用 CSI 摄像头上传失败Docker 内不支持 mDNSAUTOPILOT_HOST必须填 IP确认目标机/home/pi/px4目录存在且 SSH 免密已配置按照本文顺序完成系统配置、固件构建与后配置后你的 PilotPi 平台即可在taskset -c 2的隔离核心上稳定运行 PX4并通过 QGroundControl 进行参数调整、执行器校准与试飞前的完整自检。赞分享嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载相关推荐从零构建树莓派操作系统内核raspberry-pi-os 项目实战指南从零构建树莓派操作系统内核raspberry pi os 项目实战指南 本指南以开源仓库 raspberry pi os 为核心系统介绍如何借助 Linux示例工程深入 Linux kbuild 内核构建系统从递归 Makefile 到 vmlinux 映像Raspberry Pi OS 系列教程深入 Linux kbuild 内核构建系统从递归 Makefile 到 vmlinux 映像Raspberry Pi OS 系列教程 导读 本文是《Ra示例工程Raspberry Pi OS从零开始构建ARM64操作系统的完整指南Raspberry Pi OS从零开始构建ARM64操作系统的完整指南 Raspberry Pi OS是一个专门为学习操作系统开发而设计的教学项目采用ARM示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考