cmvr-es/include/hardware/can/motor_protocol/abstractmotorprotocol.h

65 lines
2.1 KiB
C
Raw Normal View History

2025-10-22 16:40:55 +08:00
//
// Created by linbo on 2025/10/22.
//
2025-10-24 09:51:14 +08:00
#ifndef CMVR_ES_ABSTRACTMOTORPROTOCOL_H
#define CMVR_ES_ABSTRACTMOTORPROTOCOL_H
2025-10-22 16:40:55 +08:00
#include "rapidxml/xml_parser.h"
2025-10-29 16:26:15 +08:00
#include "cmvr/msgs/canopen.pb.h"
#include "cmvr/msgs/motor.pb.h"
2025-10-24 10:51:49 +08:00
namespace cmvr::hardware
2025-10-22 16:40:55 +08:00
{
2025-10-24 09:51:14 +08:00
class AbstractMotorProtocol
2025-10-22 16:40:55 +08:00
{
2025-10-29 16:26:15 +08:00
public:
enum class CommProto : uint8_t {
CANOPEN = 1,
CUSTOM = 2
};
2025-10-22 16:40:55 +08:00
public:
2025-10-24 09:51:14 +08:00
explicit AbstractMotorProtocol(const XmlNode &cfg)
2025-10-22 16:40:55 +08:00
{
cfg_ = cfg;
id_ = cfg.getAttrString("id");
joint_name_ = cfg.getAttrString("joint_name");
2025-10-24 17:06:17 +08:00
limitQLb_ = cfg.getAttrDefault("limitQLb_",3.14f);
limitQUb_ = cfg.getAttrDefault("limitQUb_",3.14f);
limitQd = cfg.getAttrDefault("limitQd",3.0f);
2025-10-22 16:40:55 +08:00
}
2025-10-29 16:26:15 +08:00
virtual ~AbstractMotorProtocol() = default;
/**
* @brief
* @param node_id Id
* @return
*/
virtual bool initNode(uint8_t node_id) = 0;
virtual void setQ(uint8_t node_id, double angle_rad) = 0;
virtual void setMode(uint8_t node_id,msgs::RunMode mode ) = 0;
virtual msgs::RunMode getMode(uint8_t node_id) = 0;
virtual void setLimitQdd(uint8_t node_id, double u_qdd,double l_qdd) = 0;
virtual void setLimitQd(uint8_t node_id,double qd) = 0;
virtual void setLimitQ(uint8_t node_id, double ub, double lb) = 0;
virtual bool calibrateZeroQ(uint8_t node_id) = 0;
virtual bool reachedTargetQ(uint8_t node_id) = 0;
virtual void setQd(uint8_t node_id, double qd) = 0;
virtual void setQdd(uint8_t node_id,double qdd) = 0;
virtual void brake(uint8_t node_id) = 0;
virtual void torqueOff(uint8_t node_id) = 0;
2025-10-22 16:40:55 +08:00
2025-10-29 16:26:15 +08:00
virtual double getQ(uint8_t node_id) = 0;
virtual double getQd(uint8_t node_id) = 0;
CommProto comm_proto{CommProto::CANOPEN};
protected:
2025-10-22 16:40:55 +08:00
XmlNode cfg_;
std::string id_;
std::string joint_name_;
double limitQLb_;
double limitQUb_;
double limitQd;
};
}
2025-10-24 09:51:14 +08:00
#endif //CMVR_ES_ABSTRACTMOTORPROTOCOL_H