在完成前几步主控的开发后,一个低成本高算力的实时控制器已经搭建好,当我们的控制程序框架编写完成后就可以开始进行运动控制算法的开发,对于之前提到的典型三任务架构中,control_task由于需要不断修改因此其会在调试中不断编译启动,而hardware_task在底层协议确定后基本不用修改,因此我们希望它能上电自动运行,另外navigation_task主要负责遥控和上位机通讯,在一般情况下也不需要修改,因此它也需要自启动。

因此首先编辑/etc/rc.local文件,采用sudo nano /etc/rc.local在exit上面加上对应的启动程序:

/home/pi/MOCO_ML/hardware_task/build/hardware_task &
sleep 2
/home/pi/MOCO_ML/control_task/build/control_task &
sleep 2
/home/pi/MOCO_ML/navigation_task/build/navigation_task &
sleep 2

其中&表示后台运行否则自启动过程会开在第一个程序,在保存后重启sudo reboot

在完成重启后可以通过ps查看个每个任务的PID进程号:

pi@pi:~/MOCO_ML $  ps -ef | grep control_task
root       630     1 13 20:34 ?        00:00:03 /home/pi/MOCO_ML/control_task/build/control_task
pi        1661  1584  0 20:34 pts/1    00:00:00 grep --color=auto control_task

对于我们项目名称比较统一的方式,可以不需要一个一个查看,则使用过滤查看命令ps aux | grep "MOCO_ML"

则当三个任务顺利启动后,蜂鸣器会有提示音,并且可以采用UDP连接上位机:

最终采用sudo shutdown -r now命令进行关机,采用kill -9 进程id 命令来杀死后台线程!

综上,通过6个步骤已经能自己构建一个类似MIT Upboard用于机器人运动控制的主控,当然其中很多部分还可以在继续优化,我也为此构建了一个采用树莓派为核心的开发板,欢迎大家后续预定关注:

MOCO-Pihat是一个面向高性能机器人运动控制的树莓派载板(提供安装好RT实时补打的镜像和安装教程),其采用STM32F4单片机作为主控制器,其具有两个典型固件模型,设计参考MIT Mini-Cheetha和Mjbot等方案,提供了两个主要的固件模式,采用同一套硬件完成(A)独立主控模式:可以直接在控制器中编程完成运动控制开发,可作为STM32学习用的开发板;(B)ARM载板模式:可作为如树莓派的IO载板,采集传感器数据并接受控制命令以CAN总线发送出去;(C)四足机器人运动控制器,控制器板载基本的IMU运动传感器,以CAN总线作为主要伺服控制接口完成与ODrive的通讯,另外预留USB可以连接上位机监控底层力控数据,并实现遥控、参数调节和状态切换,欢迎关注该开发板!