# 在 Raspberry Pi OS 上使用 PilotPi

# 开发者快速指南

# 操作系统镜像

总是推荐使用最新官方的 Raspberry Pi OS Lite (opens new window) 镜像。

默认你已经通过ssh连接到了树莓派。

# 设置快速访问(可选)

# 主机名和 mDNS

mDNS 帮助您使用主机名替代IP地址连接到您的树莓派。

sudo raspi-config

导航到 Network Options > Hostname。 设置并退出。 您也可能想要设置 无密码认证 (opens new window)

# 配置操作系统

# config.txt

sudo nano /boot/config.txt

将文件内容替换为:

# enable sc16is752 overlay
dtoverlay=sc16is752-spi1
# enable I2C-1 and set the frequency to 400KHz
dtparam=i2c_arm=on,i2c_arm_baudrate=400000
# enable spidev0.0
dtparam=spi=on
# enable RC input
enable_uart=1
# enable I2C-0
dtparam=i2c_vc=on
# switch Bluetooth to miniuart
dtoverlay=miniuart-bt

# cmdline.txt

sudo raspi-config

Interfacing Options > Serial > login shell = No > hardware = Yes. 启用 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

保存并退出。

注解

Don't forget to turn off the switch when it is not needed.

# CSI 相机

注解

Enable CSI camera will stop anything works on I2C-0.

sudo raspi-config

Interfacing Options > Camera

# 构建代码

To get the very latest version onto your computer, enter the following command into a terminal:

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

注解

This is all you need to do just to build the latest code.

# 为 Raspberry Pi OS 交叉编译

然后上传:

export AUTOPILOT_HOST=192.168.X.X

通过 ssh 连接并运行它:

export AUTOPILOT_HOST=pi_hostname.local

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

cd PX4-Autopilot
make scumaker_pilotpi_default

如果在树莓派上运行PX4时遇到了以下问题:

make scumaker_pilotpi_default upload

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

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

在执行下一步之前,先清除现有构建目录:

以下方法可以获得与CI相同的编译工具与环境。

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

如果您是首次使用 Docker 进行编译,请参考官方说明 (opens new window)

在 PX4-Autopilot 文件夹下执行:

rm -rf build/scumaker_pilotpi_default

# 备选构建方法 (使用 docker)

只是为了编译代码,则可以执行:

If you are compiling for the first time with docker, please refer to the official docs.

混控器在 pilotpi_xx.conf 文件中启用:

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

所有可用的混控配置都存储在 etc/mixers 中。 您也可以自己创建一个。 :::

注解

If your IDE doesn't support ninja build, NO_NINJA_BUILD=1 option will help. You can compile without uploading too. Just remove upload target.

It is also possible to just compile the code with command:

./Tools/docker_run.sh "make scumaker_pilotpi_default"

# 后期配置

示例输出

# Actuator Configuration

First set the CA_AIRFRAME parameter for your vehicle.

You will then be able to assign outputs using the normal Actuator Configuration configuration screen (an output tab will appear for the RasPi PWM output driver).

# External Compass

In the startup script(*.config), you will find

# external GPS & compass
gps start -d /dev/ttySC0 -i uart -p ubx -s
#hmc5883 start -X
#ist8310 start -X

Uncomment the correct one for your case. Not sure which compass comes up with your GPS module? Execute the following commands and see the output:

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

Sample output:

     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 indicates a HMC5883 based compass is mounted on external I2C bus. Similarly, IST8310 has a value of 0e.

注解

Generally you only have one of them. Other devices will also be displayed here if they are connected to external I2C bus.(/dev/i2c-0)