// // Created by linbo on 2025/10/23. // #pragma once #include #include "rapidxml/xml_parser.h" #include "jsoncpp/json/json.h" namespace cmvr::device { enum ControllerState { ControllerState_Idle, //默认 ControllerState_Executing, //正在执行命令 ControllerState_Switching //命令被中断,正在切换 }; class AbstractController { public: explicit AbstractController(const XmlNode& cfg){} virtual ~AbstractController(){} [[nodiscard]] ControllerState getState() const {return state_;} //此处的Json中应该包含目标电机信息,电机id,canGroupId等其他必要参数,用以确定是调用哪个can实例发送消息 // 还要包含操作内容,比如要执行的是直接控制每个电机位置,还是指定末端关节位置 /* "params":{“canGroupId”:"",motors:[{"joint_name":"","id":""},{"joint_name":"","id":""}]}, "operate":{} **/ virtual void call(const Json::Value& json) = 0; virtual void interrupt() = 0; virtual void stop() = 0; protected: ControllerState state_; double defaultSpeed_; double defaultAcc_; }; }