Skip to main content

软硬件架构设计

硬件系统设计

一个完整的机器人系统,不仅需要稳定的机械结构,还要有可靠的硬件系统。硬件系统作为软件架构的载体,为机器人提供能源、动力、编程接口和感知能力。为了满足在不同环境下机器人仍能独自运行的需求,本课题所设计的轮足机器人应具备无线通信能力。整个硬件系统的电路架构与信号传输线路如图1所示。

图1. 硬件系统连接与信号传输图

本课题所设计的轮足机器人具有4个髋关节电机和2个驱动轮电机,在本硬件系统中,使用CAN通讯作为通讯协议,波特率为1Mbps,使用标准数据帧报文格式。每个髋关节电机需要单独的控制报文进行控制,驱动轮电机可以使用广播的形式控制,仅需一个控制报文即可控制最多4个驱动轮电机。每一个髋关节电机和驱动轮电机的CAN通讯反馈报文频率均为1KHz。为了满足机器人的高动态需求,机器人的控制频率也为1KHz。结合CAN通讯相关知识可知,单个标准数据帧的Bit长度在108 ~ 123之间。CAN通讯协议的总线负载率计算公式为:

BusLoad=BitsTransferredBusBitrate×100%\begin{equation} BusLoad=\frac{BitsTransferred}{BusBitrate} \times 100\% \end{equation}

式中, BusLoadBusLoad 代表总线负载率,BitsTransferredBitsTransferred 代表总线上每秒实际传入的Bit数量,BusBitrateBusBitrate 表示总线波特率。

若将4个髋关节电机与2个驱动轮电机挂载在同一CAN总线上,在一个控制周期内,CAN总线上存在5个控制报文和6个反馈报文,此时CAN总线的最低负载率为118.8%,不可能实现稳定的通讯,即将所有电机挂载在同一CAN总线上是不允许的。因此,本硬件系统使用两路CAN总线,CAN1为髋关节电机通讯总线,CAN2为驱动轮电机通讯总线,确保了主控板与电机通讯的稳定性。

机器人的IMU选用BMI088,具有一个16位三轴加速度计和一个16位三轴陀螺仪。芯片自带温度补偿、数字信号处理和自检功能,简化了系统集成。通过SPI通信方式与主控板进行通讯,使用Mahony姿态解算算法以1KHz的频率计算欧拉角数据。

软件架构设计

嵌入式实时操作系统FreeRTOS

本课题所研究的轮足机器人的软件核心由多个模块组成。各个模块之间具有弱耦合性,负责机器人不同的控制任务。为了保证机器人在控制上的稳定性,严格规定各个模块之间的调度逻辑是十分重要的。

在嵌入式行业内,嵌入式实时操作系统已获得了日益广阔的应用。使用实时操作系统(RTOS, Real time operation system)能够更合理、更高效地使用CPU的资源,并改善了应用软件的设计,从而减少了操作系统的工作时间,更良好地保证了系统的实时性与可靠性。因此大多数操作系统都容许多种程序在一起运行,称为多任务处理。实际上,每个处理器核心在任何给定时间点只能运行单个执行线程(图2)。调度程序作为操作系统的一部分,负责决定何时运行哪个程序,并通过在每个程序之间快速切换来提供同时执行的假象。RTOS中的调度程序旨在提供可预测的执行顺序。这对于嵌入式系统尤其重要,因为嵌入式系统通常具有实时要求。实时要求是指嵌入式系统必须在严格定义的时间内响应特定事件。只有可以预测操作系统调度程序的行为,才能保证满足实时要求。

图2. 单核心多任务操作系统的调度示意图

由于RTOS需占用一定的系统资源,只有少数实时操作系统能在小RAM单片机上运行。本课题所选用的FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。

多任务控制设计分析

本课题的轮足机器人的任务结构如图3所示,由五个控制任务组成,优先级从高到低分别为遥控器任务、状态观测器任务、姿态解算任务、底盘任务和电机控制任务。任务优先级遵循“单任务耗时越高,优先级越低”的原则。

遥控器任务负责接收外部遥控器的数据并解算为机器人的期望控制量,使用串口空闲中断捕获遥控器数据,在任务内执行数据解算,将期望控制量传递给底盘任务。状态观测器任务负责估计机器人的底盘速度,结合其他任务的反馈数据,按照一定的频率使用卡尔曼滤波进行状态估计,得到机器人的速度和位移。姿态解算任务负责IMU数据的处理,将三轴线加速度与三轴角速度使用Mahony算法计算得到四元数,从而得到机器人姿态的欧拉角信息。底盘任务负责机器人的运动控制,使用LQR增益矩阵和PID计算控制量,实现机器人的平衡和移动。电机任务负责接收底盘任务计算得到的控制量和电机的反馈数据,将控制量使用CAN通讯发送给髋关节电机和驱动轮电机。

机器人在启动后,主程序会注册5个任务句柄,并为每个任务句柄分配栈空间和调度优先级,随后等待姿态解算任务初始化。在IMU初始化完毕后,使用任务通知唤醒其他位于阻塞态的任务,5个任务按照提前设定的调度优先级运行。

图3. 轮足机器人的控制任务结构,数字越大优先级越高

多任务的控制任务结构实现了功能模块的分离,各个任务之间相互独立,因此可以按照不同的频率运行。如果需要为机器人添加新的功能或新的模块,只需要添加新的控制任务,并分配合理的调度优先级即可实现机器人功能的增加。多任务的控制任务结构体现了模块化设计的思想,在最大效率利用单片机计算资源的同时确保了运行的稳定性。