# 框架 ## 总体介绍 ### 机器人参数 机器人的主要选项在 [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)**:将控制量发送给执行机构来执行。 > 后续内容待完善