更新一些开发文档,方便统一开发环境与格式
This commit is contained in:
46
doc/framework.md
Normal file
46
doc/framework.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# 框架
|
||||
## 总体介绍
|
||||
### 机器人参数
|
||||
机器人的主要选项在 [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)**:将控制量发送给执行机构来执行。
|
||||
|
||||
> 后续内容待完善
|
||||
Reference in New Issue
Block a user