update HardWareManager
This commit is contained in:
parent
c8cb7fcc2b
commit
53fb1f1d6d
@ -78,11 +78,3 @@ target_link_libraries(robot_wrapper PRIVATE
|
||||
fcl
|
||||
cmvr_es::device_manager
|
||||
${OpenCV_LIBS})
|
||||
|
||||
|
||||
add_executable(moveL moveL.cpp)
|
||||
target_link_libraries(moveL PRIVATE cmvr_es::utils)
|
||||
|
||||
add_executable(speedL speedL.cpp)
|
||||
target_include_directories(speedL PRIVATE ${GLOG_INCLUDE_DIRS})
|
||||
target_link_libraries(speedL PRIVATE cmvr_es::utils ${GLOG_LIBRARIES})
|
||||
35
include/hardware/can/abstractmotor.h
Normal file
35
include/hardware/can/abstractmotor.h
Normal file
@ -0,0 +1,35 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#ifndef CMVR_ES_ABSTRACTMOTOR_H
|
||||
#define CMVR_ES_ABSTRACTMOTOR_H
|
||||
#include "rapidxml/xml_parser.h"
|
||||
|
||||
namespace cmvr::device
|
||||
{
|
||||
class AbstractMotor
|
||||
{
|
||||
public:
|
||||
explicit AbstractMotor(const XmlNode &cfg)
|
||||
{
|
||||
cfg_ = cfg;
|
||||
id_ = cfg.getAttrString("id");
|
||||
joint_name_ = cfg.getAttrString("joint_name");
|
||||
limitQLb_ = cfg.getAttrDefault("limitQLb_",(float)3.14);
|
||||
limitQUb_ = cfg.getAttrDefault("limitQUb_",(float)3.14);
|
||||
limitQd = cfg.getAttrDefault("limitQd",(float)3.0);
|
||||
}
|
||||
~AbstractMotor() = default;
|
||||
|
||||
private:
|
||||
XmlNode cfg_;
|
||||
std::string id_;
|
||||
std::string joint_name_;
|
||||
double limitQLb_;
|
||||
double limitQUb_;
|
||||
double limitQd;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //CMVR_ES_ABSTRACTMOTOR_H
|
||||
23
include/hardware/can/can_group.h
Normal file
23
include/hardware/can/can_group.h
Normal file
@ -0,0 +1,23 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#ifndef CMVR_ES_CAN_GROUP_H
|
||||
#define CMVR_ES_CAN_GROUP_H
|
||||
|
||||
#include "motormanager.h"
|
||||
namespace cmvr::device
|
||||
{
|
||||
class CanGroup
|
||||
{
|
||||
public:
|
||||
explicit CanGroup(const XmlNode &cfg);
|
||||
~CanGroup() = default;
|
||||
private:
|
||||
|
||||
std::shared_ptr<MotorManager> motor_;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //CMVR_ES_CAN_GROUP_H
|
||||
26
include/hardware/can/can_manager.h
Normal file
26
include/hardware/can/can_manager.h
Normal file
@ -0,0 +1,26 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#ifndef CMVR_ES_CAN_MANAGER_H
|
||||
#define CMVR_ES_CAN_MANAGER_H
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
||||
#include "rapidxml/rapidxml.hpp"
|
||||
#include "can_group.h"
|
||||
namespace cmvr::device
|
||||
{
|
||||
class CanManager
|
||||
{
|
||||
|
||||
public:
|
||||
explicit CanManager(const XmlNode &cfg);
|
||||
~CanManager();
|
||||
private:
|
||||
//CanGroup
|
||||
std::unordered_map<std::string,std::shared_ptr<CanGroup>> canGroups_;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //CMVR_ES_CAN_MANAGER_H
|
||||
25
include/hardware/can/motormanager.h
Normal file
25
include/hardware/can/motormanager.h
Normal file
@ -0,0 +1,25 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#ifndef CMVR_ES_MOTORMANAGER_H
|
||||
#define CMVR_ES_MOTORMANAGER_H
|
||||
|
||||
#include <unordered_map>
|
||||
#include <memory>
|
||||
#include "abstractmotor.h"
|
||||
|
||||
namespace cmvr::device
|
||||
{
|
||||
class MotorManager
|
||||
{
|
||||
public:
|
||||
explicit MotorManager(const XmlNode &cfg);
|
||||
~MotorManager();
|
||||
private:
|
||||
std::unordered_map<int, std::shared_ptr<AbstractMotor>> m_motors;//以id区分电机?
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //CMVR_ES_MOTORMANAGER_H
|
||||
21
include/hardware/can/ti5motor.h
Normal file
21
include/hardware/can/ti5motor.h
Normal file
@ -0,0 +1,21 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#ifndef CMVR_ES_TI5MOTOR_H
|
||||
#define CMVR_ES_TI5MOTOR_H
|
||||
|
||||
#include "rapidxml/xml_parser.h"
|
||||
|
||||
namespace cmvr::device{
|
||||
class Ti5Motor
|
||||
{
|
||||
public:
|
||||
explicit Ti5Motor(const XmlNode &cfg);
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif //CMVR_ES_TI5MOTOR_H
|
||||
15
include/hardware/serial/serial_manager.h
Normal file
15
include/hardware/serial/serial_manager.h
Normal file
@ -0,0 +1,15 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#ifndef CMVR_ES_SERIAL_MANAGER_H
|
||||
#define CMVR_ES_SERIAL_MANAGER_H
|
||||
|
||||
namespace cmvr::device
|
||||
{
|
||||
class serial_manager
|
||||
{
|
||||
};
|
||||
}
|
||||
|
||||
#endif //CMVR_ES_SERIAL_MANAGER_H
|
||||
@ -5,10 +5,21 @@
|
||||
#ifndef CMVR_ES_HARDWARE_FACTORY_H
|
||||
#define CMVR_ES_HARDWARE_FACTORY_H
|
||||
|
||||
#include "rapidxml/xml_parser.h"
|
||||
#include "hardware/can/can_manager.h"
|
||||
namespace cmvr::device {
|
||||
|
||||
class hardware_factory
|
||||
{
|
||||
class HardwareFactory {
|
||||
|
||||
|
||||
public:
|
||||
HardwareFactory() = default;
|
||||
|
||||
template<typename HardwareType>
|
||||
std::shared_ptr<HardwareType> create(const XmlNode& cfg);
|
||||
private:
|
||||
std::shared_ptr<CanManager> create_can_(const XmlNode& cfg);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CMVR_ES_HARDWARE_FACTORY_H
|
||||
@ -4,11 +4,31 @@
|
||||
|
||||
#ifndef CMVR_ES_HARDWARE_MANAGER_H
|
||||
#define CMVR_ES_HARDWARE_MANAGER_H
|
||||
#include "rapidxml/xml_parser.h"
|
||||
#include <glog/logging.h>
|
||||
#include <mutex>
|
||||
|
||||
|
||||
class hardware_manager
|
||||
namespace cmvr::device
|
||||
{
|
||||
};
|
||||
class HardWareManager
|
||||
{
|
||||
public:
|
||||
HardWareManager(const HardWareManager&) = delete;
|
||||
HardWareManager& operator=(const HardWareManager&) = delete;
|
||||
|
||||
static HardWareManager& getInstance(const XmlNode &cfg);
|
||||
static HardWareManager& getInstance();
|
||||
static void destroyInstance();
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
XmlNode cfg_;
|
||||
static std::once_flag init_flag_;
|
||||
static std::shared_ptr<HardWareManager> instance_;
|
||||
explicit HardWareManager(const XmlNode &cfg);
|
||||
};
|
||||
}
|
||||
|
||||
#endif //CMVR_ES_HARDWARE_MANAGER_H
|
||||
@ -6,7 +6,6 @@
|
||||
|
||||
using namespace std;
|
||||
using namespace cmvr::device;
|
||||
using namespace cmvr::device;
|
||||
|
||||
template std::shared_ptr<AbstractAGV> DeviceManager::getDevice(const std::string& device_id);
|
||||
template std::shared_ptr<AbstractBattery> DeviceManager::getDevice(const std::string& device_id);
|
||||
|
||||
@ -10,3 +10,6 @@ target_include_directories(hardware PUBLIC
|
||||
)
|
||||
|
||||
add_library(cmvr_es::hardware ALIAS hardware)
|
||||
|
||||
add_subdirectory(can)
|
||||
add_subdirectory(serial)
|
||||
14
src/hardware/can/CMakeLists.txt
Normal file
14
src/hardware/can/CMakeLists.txt
Normal file
@ -0,0 +1,14 @@
|
||||
add_library(can
|
||||
motormanager.cpp
|
||||
can_group.cpp
|
||||
can_manager.cpp
|
||||
ti5motor.cpp
|
||||
)
|
||||
|
||||
target_include_directories(can PUBLIC ${PROJECT_SOURCE_DIR}/include)
|
||||
|
||||
target_link_libraries(can PRIVATE
|
||||
protobuf::libprotobuf
|
||||
)
|
||||
|
||||
add_library(cmvr_es::can ALIAS can)
|
||||
13
src/hardware/can/can_group.cpp
Normal file
13
src/hardware/can/can_group.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#include "hardware/can/can_group.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace cmvr::device;
|
||||
|
||||
CanGroup::CanGroup(const XmlNode &cfg)
|
||||
{
|
||||
motor_ = std::make_shared<MotorManager>(cfg);
|
||||
}
|
||||
21
src/hardware/can/can_manager.cpp
Normal file
21
src/hardware/can/can_manager.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#include "hardware/can/can_manager.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace cmvr::device;
|
||||
|
||||
CanManager::CanManager(const XmlNode& cfg)
|
||||
{
|
||||
for (auto &node: cfg.getChildren()){
|
||||
if (node.getNodeName() == "CanGroup")
|
||||
{
|
||||
string id = node.getAttrString("id");
|
||||
|
||||
|
||||
canGroups_[id] = std::make_shared<CanGroup>(cfg);
|
||||
}
|
||||
}
|
||||
}
|
||||
23
src/hardware/can/motormanager.cpp
Normal file
23
src/hardware/can/motormanager.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#include "hardware/can/motormanager.h"
|
||||
#include "hardware/can/ti5motor.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace cmvr::device;
|
||||
|
||||
|
||||
|
||||
MotorManager::MotorManager(const XmlNode &cfg)
|
||||
{
|
||||
for (auto &node: cfg.getChildren()){
|
||||
if (node.getNodeName() == "Ti5Motor")
|
||||
{
|
||||
string id = node.getAttrString("id");
|
||||
|
||||
std::make_shared<Ti5Motor>(cfg);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
src/hardware/can/ti5motor.cpp
Normal file
11
src/hardware/can/ti5motor.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#include "hardware/can/ti5motor.h"
|
||||
using namespace cmvr::device;
|
||||
|
||||
Ti5Motor::Ti5Motor(const XmlNode &cfg)
|
||||
{
|
||||
|
||||
}
|
||||
11
src/hardware/serial/CMakeLists.txt
Normal file
11
src/hardware/serial/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
||||
add_library(serial
|
||||
serial_manager.cpp
|
||||
)
|
||||
|
||||
target_include_directories(serial PUBLIC ${PROJECT_SOURCE_DIR}/include)
|
||||
|
||||
target_link_libraries(serial PRIVATE
|
||||
protobuf::libprotobuf
|
||||
)
|
||||
|
||||
add_library(cmvr_es::serial ALIAS serial)
|
||||
5
src/hardware/serial/serial_manager.cpp
Normal file
5
src/hardware/serial/serial_manager.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
//
|
||||
// Created by linbo on 2025/10/22.
|
||||
//
|
||||
|
||||
#include "hardware/serial/serial_manager.h"
|
||||
@ -1,7 +1,8 @@
|
||||
add_library(hardware_manager SHARED
|
||||
hardware_factory.cpp
|
||||
hardware_manager.cpp
|
||||
|
||||
../hardware/can/can_manager.cpp
|
||||
../hardware/serial/serial_manager.cpp
|
||||
)
|
||||
|
||||
target_include_directories(hardware_manager PUBLIC
|
||||
|
||||
@ -3,3 +3,25 @@
|
||||
//
|
||||
|
||||
#include "hardware_manager/hardware_factory.h"
|
||||
#include <glog/logging.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace cmvr::device;
|
||||
|
||||
template std::shared_ptr<CanManager> HardwareFactory::create<CanManager>(const XmlNode&);
|
||||
|
||||
template <typename HardwareType>
|
||||
std::shared_ptr<HardwareType> HardwareFactory::create(const XmlNode& cfg) {
|
||||
if constexpr (std::is_same_v<HardwareType, CanManager>) {
|
||||
return create_can_(cfg);
|
||||
}
|
||||
else {
|
||||
LOG(ERROR) << "[DeviceFactory]: Unsupported device type";
|
||||
throw runtime_error("[DeviceFactory]: Unsupported device type");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::shared_ptr<CanManager> HardwareFactory::create_can_(const XmlNode& cfg) {
|
||||
return nullptr;
|
||||
}
|
||||
@ -3,3 +3,34 @@
|
||||
//
|
||||
|
||||
#include "hardware_manager/hardware_manager.h"
|
||||
using namespace std;
|
||||
using namespace cmvr::device;
|
||||
std::shared_ptr<HardWareManager> HardWareManager::instance_ = nullptr;
|
||||
|
||||
HardWareManager::HardWareManager(const XmlNode& cfg) {
|
||||
try {
|
||||
cfg_ = cfg;
|
||||
}
|
||||
catch (const exception &e) {
|
||||
LOG(FATAL) << "[HardWareManager] (HardWareManager): Device manager initialization failed: " << e.what();
|
||||
throw std::runtime_error("[HardWareManager] (HardWareManager): Device manager create failed" + string(e.what()));
|
||||
}
|
||||
}
|
||||
|
||||
HardWareManager& HardWareManager::getInstance(const XmlNode& cfg) {
|
||||
std::call_once(init_flag_, [&cfg] {
|
||||
instance_.reset(new HardWareManager(cfg));
|
||||
});
|
||||
return *instance_;
|
||||
}
|
||||
|
||||
HardWareManager& HardWareManager::getInstance() {
|
||||
if (!instance_) {
|
||||
throw std::runtime_error("[HardWareManager] (getInstance): HardWareManager not initialized. Call getInstance(const XmlNode&) first.");
|
||||
}
|
||||
return *instance_;
|
||||
}
|
||||
|
||||
void HardWareManager::destroyInstance() {
|
||||
instance_.reset();
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user