四足机器人高算力、低成本主控第一步:给树莓派打上RT实时补丁

之前开发四足机器人主要基于单片机来实现,目前STM32整体价格上升,使得后续主控制器芯片的选用十分困难,另外单片机算力对于四足机器人来说还是无法满足,目前整个机器人代码运行相比仿真中各模块已经大大降低控制频率,在Webots仿真中从状态估计到底层力控制都能运行在5ms内,而在单片机中不得不拆分开系统层级,仅保证底层力控和CAN通讯能实现2~5ms,并且控制周期会浮动,导致整个机器人控制带宽的下降,另外也没法运行之前提到的QP优化,轨迹优化或动力学库等高性能算法,目前在单片机中整个机器人操作系统线程运行时间如下:

为实现高算力如MIT方案中采用的是以Upboard(X86 1.4Ghz)并外扩CAN载板的形式来实现,但由于目前MIT方案太普遍导致淘宝上他的价格很高,目前类似这样的单板嵌入式处理器有很多最熟悉的就是树莓派了,目前树莓派已经出了很多不同的版本,除了独立单板外也有集成用的板载模块,其性能目前已经提高很多另外社区维护也特别好,当然最终要的是价格低、供货稳定,因此我采用类似的方案将以其作为处理器构建一个高性能低成本处理器:

对于Linux系统来说要实现运动控制计算,由于Linux操作系统调度要保证实时性需要安装对应的实时补丁,由于国内树莓派很多应用均为低成本视觉应用,因此相关的实时补丁安装教程较少,参考standford puppy机器人的相关教程,我找到了一个可行的配置教程:

1. 从源码编译

该方式需要在一个安装好Ubuntu的电脑上完成对树莓派实时系统的编译在将其拷贝到树莓派中刷机,具体步骤如下:

mkdir ~/rpi-kernel
cd ~/rpi-kernel
mkdir rt-kernel

建立文件夹后下载树莓派实时补打:

git clone https://github.com/raspberrypi/linux.git -b rpi-4.19.y-rt
git clone https://github.com/raspberrypi/tools.git

上述补打大概2G空间,之后开始配置链接器:

export ARCH=arm
export CROSS_COMPILE=~/rpi-kernel/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-
export INSTALL_MOD_PATH=~/rpi-kernel/rt-kernel
export INSTALL_DTBS_PATH=~/rpi-kernel/rt-kernel
之后针对你选用的树莓派平台进行特殊配置:

A. 对于Rasbperry Pi 1/1.2 B(+), A(+), Zero (W):

export KERNEL=kernel
cd ~/rpi-kernel/linux/
make bcmrpi_defconfig

B. 对于Rasbperry Pi 2, 3 B(+):

export KERNEL=kernel7
cd ~/rpi-kernel/linux/
make bcm2709_defconfig

C. 对于Rasbperry Pi 4B:

export KERNEL=kernel7l
cd ~/rpi-kernel/linux/
make bcm2711_defconfig

配置完成开始编译内核:

make -j4 zImage
make -j4 modules
make -j4 dtbs
make -j4 modules_install
make -j4 dtbs_install

在编译完成后最后一条命令会显示DEPMOD 4.19.59-rt23-v7l+,之后:

mkdir $INSTALL_MOD_PATH/boot
./scripts/mkknlimg ./arch/arm/boot/zImage $INSTALL_MOD_PATH/boot/$KERNEL.img’
cd $INSTALL_MOD_PATH/boot
mv $KERNEL.img kernel7_rt.img

此时系统已经编译完毕,将其进行打包:

cd $INSTALL_MOD_PATH
tar czf ../rt-kernel.tgz *

之后就可以将rt-kernel.tgz拷贝到树莓派来实现刷机,使用winSCP软件拷贝到树莓派中:

首先在根目录建立tmp文件夹将补丁拷贝进去:

tar xzf rt-kernel.tgz
cd boot
sudo cp -rd * /boot/
cd ../lib
sudo cp -dr * /lib/
cd ../overlays
sudo cp -d * /boot/overlays
cd ..
sudo cp -d bcm* /boot/

之后编辑config文件,sudo nano boot/config.txt在末尾加上kernel=kernel7_rt.img后保存,在重启后输入uname -r如显示4.19.59-rt23-v7l+则补丁安装成功

2. 下载编译好的补丁

如果不想自己编译也可以下载别人编译好的版本,各版本可以在如下链接中下载:

对于树莓派4B的补丁我已经编译好上传在:

链接:https://pan.baidu.com/s/1qWtbvqMqbEVk1leqjlLpAA 
提取码:fsy6 

下载后同源码编译方法将其拷贝到树莓派中进行相应操作,在打上补丁后可以测试其实时性变化:

从图中可以看到相比没有打补丁的系统其最大延时仅为93us!