Skip to content

在Raspberry Pi OS上使用PilotPi

开发者快速指南

操作系统映像

强烈推荐使用最新的官方Raspberry Pi OS精简版镜像。 默认情况下,你已通过SSH连接到树莓派。

设置快速访问(可选)

主机名和mDNS

mDNS可帮助你使用主机名而非IP地址连接到树莓派。

sh
sudo raspi-config

导航至网络选项>主机名,设置并退出。你可能也需要设置无密码认证

配置操作系统

config.txt

sh
sudo nano /boot/config.txt

将文件内容替换为:

sh
# 启用sc16is752覆盖
dtoverlay=sc16is752-spi1
# 启用I2C - 1并将频率设置为400KHz
dtparam=i2c_arm=on,i2c_arm_baudrate=400000
# 启用spidev0.0
dtparam=spi=on
# 启用RC输入
enable_uart=1
# 启用I2C - 0
dtparam=i2c_vc=on
# 将蓝牙切换到miniuart
dtoverlay=miniuart-bt

cmdline.txt

sh
sudo raspi-config

接口选项>串口>登录Shell = 否>硬件 = 是。启用UART但禁用登录Shell。

sh
sudo nano /boot/cmdline.txt

在最后一个单词后添加isolcpus=2。整个文件内容将变为:

sh
console=tty1 root=PARTUUID=xxxxxxxx-xx rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait isolcpus=2

这会告知Linux内核不要在CPU核心2上调度任何进程。我们稍后会手动在该核心上运行PX4。 重启并通过SSH连接到树莓派。

检查串口:

sh
ls /dev/tty*

应该会出现/dev/ttyAMA0/dev/ttySC0/dev/ttySC1

检查I2C:

sh
ls /dev/i2c*

应该会出现/dev/i2c - 0/dev/i2c - 1

检查SPI:

sh
ls /dev/spidev*

应该会出现/dev/spidev0.0

rc.local

在本节中,我们将配置rc.local中的自动启动脚本。

sh
sudo nano /etc/rc.local

exit 0上方添加以下内容:

sh
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

保存并退出。

INFO

不需要时,别忘了关闭开关。

CSI相机

INFO

启用CSI相机将导致I2C - 0上的任何设备无法工作。

sh
sudo raspi-config

接口选项>相机

构建代码

要在计算机上获取最新版本,在终端中输入以下命令:

sh
git clone https://github.com/PX4/PX4-Autopilot.git --recursive

INFO

这是构建最新代码所需的全部操作。

为Raspberry Pi OS交叉编译

然后上传:

sh
export AUTOPILOT_HOST=192.168.X.X

或者

sh
export AUTOPILOT_HOST=pi_hostname.local

PX4已配置为使用多旋翼模型启动。

sh
cd PX4-Autopilot
make scumaker_pilotpi_default

然后使用以下命令上传:

sh
make scumaker_pilotpi_default upload

此时应当使用基于Docker的编译。

sh
cd px4
sudo taskset -c 2./bin/px4 -s pilotpi_mc.config

在执行下一步之前,先清除现有构建目录: 如果在树莓派上执行bin/px4时遇到类似以下问题:

bin/px4: /lib/xxxx/xxxx: version `GLIBC_2.29' not found (required by bin/px4)

如果您是首次使用Docker进行编译,请参考官方说明。 在PX4 - Autopilot文件夹下执行:

sh
rm -rf build/scumaker_pilotpi_default

备选构建方法 (使用docker)

如果只是为了编译代码,可以执行: 如果您是首次使用Docker进行编译,请参考官方文档。 混控器在 pilotpi_xx.conf 文件中启用:

sh
./Tools/docker_run.sh "export AUTOPILOT_HOST=192.168.X.X; export NO_NINJA_BUILD=1; make scumaker_pilotpi_default upload"

INFO

Docker内部不支持mDNS。您也可以自己创建一个。

INFO

如果您的集成开发环境(IDE)不支持ninja构建,NO_NINJA_BUILD=1选项会有帮助。您也可以不进行上传操作,只需移除upload目标。

也可以使用以下命令仅编译代码:

sh
./Tools/docker_run.sh "make scumaker_pilotpi_default"

后期配置

示例输出

执行器配置

首先为您的飞行器设置CA_AIRFRAME参数。 然后您将能够使用常规的执行器配置配置界面分配输出(RPi PWM输出驱动将出现一个输出选项卡)。

外部指南针

在启动脚本(*.config)中,您会找到:

sh
# 外部GPS和指南针
gps start -d /dev/ttySC0 -i uart -p ubx -s
#hmc5883 start -X
#ist8310 start -X

根据您的情况取消正确项的注释。不确定您的GPS模块配备了哪种指南针?执行以下命令并查看输出:

sh
sudo apt-get update
sudo apt-get install i2c-tools
i2cdetect -y 0

示例输出:

     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: -- -- -- -- -- -- -- --

1e表示基于HMC5883的指南针挂载在外部I2C总线上。类似地,IST8310的值为0e

INFO

通常您只会有其中一个。如果其他设备连接到外部I2C总线(/dev/i2c - 0),也会在此处显示。