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