控制器(Controller)模块的架构与工作流程 -OpenExo
Controllers(控制器)架构详解
- 1. 并行数据结构(ControllerData)
- 2. 控制器对象与Joint的关联
- 3. 抽象接口设计
- 4. 主流程典型调用代码
- 5. 控制器参数管理与安全切换
- 6. 典型控制器类型与适用场景
- 7. 添加新控制器(Controller)的建议流程
- 8. 控制器参数文件(SD卡)结构说明
- 架构优点总结
1. 并行数据结构(ControllerData)
-
每个控制器有对应的 ControllerData 实例,专门存储该控制器运行时的数据(状态量、参数等),与控制器对象并行存在,解耦数据与算法。
-
ControllerData 结构体见 Data Structure,通常包含:
-
参数数组(如Kp/Ki/Kd/MaxTorque等)
-
当前 setpoint(输出目标)
-
控制器状态(如是否已校准、参数组编号等)
-
2. 控制器对象与Joint的关联
-
Joint(关节)对象内部实例化所有可用控制器,但只用一个“指针”指向当前正在用的控制器。
-
优点:
-
支持“运行时热切换控制算法”;
-
切换只需更换指针,所有接口/调用方式不变,无缝对接主流程。
-
-
构造器写法示例:
HipJoint::HipJoint(config_defs::joint_id id, ExoData* exo_data): _Joint(id, exo_data), _zero_torque(id