Files
Simba-ELCT-FrameWork/doc/framework.md

46 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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