2.7 KiB
2.7 KiB
框架
总体介绍
机器人参数
机器人的主要选项在 robot_typedef 中定义。
在robot_param中导入个性化定义的每个机器人具体的物理参数,包括但不限于控制中要用到的物理参数、PID参数等等。
通过这种做法达到机器人代码通用化的目的,只需替换不同机器人的 robot_param.h 文件即可实现不同车型的适配。
模块划分
本框架主要划分为以下几个模块。
- assist 辅助模块
- chassis 底盘模块
- gimbal 云台模块
- IMU 陀螺仪模块
- referee 裁判系统模块
- robot_cmd 机器人控制模块
- shoot 射击模块
- other 其他乱七八糟的东西
模块控制
不同的模块由其对应的控制任务进行控制,如底盘为chassis_task,云台为gimbal_task,射击为shoot_task ...
* 层级结构
每个模块都做成了三层的上中下结构,上层可以调用下层的数据和函数。防止了上下层之间循环调用造成的混乱局面。
- 上层:task任务层
该层中提供freertos的任务函数接口,用来创建本模块的控制任务。同时创建各个任务执行函数的弱定义空函数,当无需用到此模块时使用。 - 中层:任务执行层
该层为任务函数的实体部分,根据不同的硬件条件有不同的执行方式。需对每种硬件条件编写不同的执行代码以实现适配,并通过预编译的方式选择编译对应硬件的控制代码。 - 下层:任务根基层
该层为整个模块的根基部分,定义了在不同硬件条件下都需要用到的类型、函数、变量等等。
* 步骤划分
每个控制任务都可以分成以下几个步骤:
- 发布数据 (xxxPublish):发布本模块的数据以供其他模块使用。
- 初始化 (xxxInit):在进入任务循环前先行对该任务所需要的各种参数进行初始化。
- 获取反馈 (xxxObserver):获取各种传感器的反馈数据,以便接下来进行控制处理。
- 异常处理 (xxxHandleException):在任务循环中遇到异常情况时如果有处理方法则进行异常处理(通常为电机失能等等),若无法处理且会造成危险的话则尝试进行报警。
- 模式设置 (xxxSetMode) :设置对应模块的模式,在不同模式下模块会有不同的动作。
- 更新目标 (xxxReference):更新各个目标值,作为控制的目标结果。
- 计算控制量 (xxxConsole):计算出各个执行机构的控制量使得模块效果达到目标。
- 发送控制量 (xxxSendCmd):将控制量发送给执行机构来执行。
后续内容待完善