在Raspberry Pi OS上使用PilotPi
开发者快速指南
操作系统映像
强烈推荐使用最新的官方Raspberry Pi OS精简版镜像。 默认情况下,你已通过SSH连接到树莓派。
设置快速访问(可选)
主机名和mDNS
mDNS可帮助你使用主机名而非IP地址连接到树莓派。
sudo raspi-config
导航至网络选项>主机名,设置并退出。你可能也需要设置无密码认证。
配置操作系统
config.txt
sudo nano /boot/config.txt
将文件内容替换为:
# 启用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
sudo raspi-config
接口选项>串口>登录Shell = 否>硬件 = 是。启用UART但禁用登录Shell。
sudo nano /boot/cmdline.txt
在最后一个单词后添加isolcpus=2
。整个文件内容将变为:
console=tty1 root=PARTUUID=xxxxxxxx-xx rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait isolcpus=2
这会告知Linux内核不要在CPU核心2上调度任何进程。我们稍后会手动在该核心上运行PX4。 重启并通过SSH连接到树莓派。
检查串口:
ls /dev/tty*
应该会出现/dev/ttyAMA0
、/dev/ttySC0
和/dev/ttySC1
。
检查I2C:
ls /dev/i2c*
应该会出现/dev/i2c - 0
和/dev/i2c - 1
。
检查SPI:
ls /dev/spidev*
应该会出现/dev/spidev0.0
。
rc.local
在本节中,我们将配置rc.local中的自动启动脚本。
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
保存并退出。
INFO
不需要时,别忘了关闭开关。
CSI相机
INFO
启用CSI相机将导致I2C - 0上的任何设备无法工作。
sudo raspi-config
接口选项>相机
构建代码
要在计算机上获取最新版本,在终端中输入以下命令:
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
INFO
这是构建最新代码所需的全部操作。
为Raspberry Pi OS交叉编译
然后上传:
export AUTOPILOT_HOST=192.168.X.X
或者
export AUTOPILOT_HOST=pi_hostname.local
PX4已配置为使用多旋翼模型启动。
cd PX4-Autopilot
make scumaker_pilotpi_default
然后使用以下命令上传:
make scumaker_pilotpi_default upload
此时应当使用基于Docker的编译。
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文件夹下执行:
rm -rf build/scumaker_pilotpi_default
备选构建方法 (使用docker)
如果只是为了编译代码,可以执行: 如果您是首次使用Docker进行编译,请参考官方文档。 混控器在 pilotpi_xx.conf
文件中启用:
./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
目标。
也可以使用以下命令仅编译代码:
./Tools/docker_run.sh "make scumaker_pilotpi_default"
后期配置
示例输出
执行器配置
首先为您的飞行器设置CA_AIRFRAME参数。 然后您将能够使用常规的执行器配置配置界面分配输出(RPi PWM输出驱动将出现一个输出选项卡)。
外部指南针
在启动脚本(*.config
)中,您会找到:
# 外部GPS和指南针
gps start -d /dev/ttySC0 -i uart -p ubx -s
#hmc5883 start -X
#ist8310 start -X
根据您的情况取消正确项的注释。不确定您的GPS模块配备了哪种指南针?执行以下命令并查看输出:
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
),也会在此处显示。