用于统一汇总控制输入并发布控制命令的中枢模块。
CMD 把不同来源(例如遥控、上位机)统一整理为三路命令:
- 底盘命令
- 云台命令
- 发射命令
CMD 主要解决三件事:
- 统一控制源输入接口(
FeedRC/FeedAI)。 - 统一控制模式切换(操作手/自动等)。
- 统一命令发布出口(下游模块只订阅 Topic,不关心输入来源)。
CMD 的典型流程是:
- 输入模块调用
FeedRC(...)或FeedAI(...)。 - CMD 内部执行
ProcessAndPublish()。 - 发布
chassis_cmd、gimbal_cmd、launcher_cmd。 - 底盘/云台/发射模块各自订阅并执行。
关键函数:
FeedRC(const Data&):喂入遥控控制数据。FeedAI(const Data&):喂入上位机/自动控制数据。SetCtrlMode(Mode):切换控制模式。EventHandler(uint32_t):响应外部事件切换模式。ProcessAndPublish():统一整理并发布命令。GetEvent():提供事件绑定入口给 EventBinder 等模块使用。
- 添加模块:
xrobot_add_mod CMD --instance-id cmd
xrobot_gen_main- 典型配置(来自模块 manifest):
module: CMD
entry_header: Modules/CMD/CMD.hpp
constructor_args:
- mode: CMD::Mode::CMD_OP_CTRL
- chassis_cmd_topic_name: "chassis_cmd"
- gimbal_cmd_topic_name: "gimbal_cmd"
- launcher_cmd_topic_name: "launcher_cmd"
template_args: []- 下游模块只需订阅对应命令 Topic。
- 推荐先初始化 CMD,再初始化依赖它的控制模块。
- 控制源切换尽量都走 CMD 的
SetCtrlMode/ 事件入口。 - 不同来源数据结构最终都转换成
CMD::Data再进入 CMD。
- 代码入口:
Modules/CMD/CMD.hpp - Required Hardware:None
- Constructor Arguments:
modechassis_cmd_topic_namegimbal_cmd_topic_namelauncher_cmd_topic_name
- Template Arguments:None
- Depends:None