update HardWareManager
This commit is contained in:
parent
c8cb7fcc2b
commit
53fb1f1d6d
@ -78,11 +78,3 @@ target_link_libraries(robot_wrapper PRIVATE
|
|||||||
fcl
|
fcl
|
||||||
cmvr_es::device_manager
|
cmvr_es::device_manager
|
||||||
${OpenCV_LIBS})
|
${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
|
#ifndef CMVR_ES_HARDWARE_FACTORY_H
|
||||||
#define 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
|
#endif //CMVR_ES_HARDWARE_FACTORY_H
|
||||||
@ -4,11 +4,31 @@
|
|||||||
|
|
||||||
#ifndef CMVR_ES_HARDWARE_MANAGER_H
|
#ifndef CMVR_ES_HARDWARE_MANAGER_H
|
||||||
#define CMVR_ES_HARDWARE_MANAGER_H
|
#define CMVR_ES_HARDWARE_MANAGER_H
|
||||||
|
#include "rapidxml/xml_parser.h"
|
||||||
|
#include <glog/logging.h>
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
|
namespace cmvr::device
|
||||||
class hardware_manager
|
|
||||||
{
|
{
|
||||||
};
|
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
|
#endif //CMVR_ES_HARDWARE_MANAGER_H
|
||||||
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace cmvr::device;
|
using namespace cmvr::device;
|
||||||
using namespace cmvr::device;
|
|
||||||
|
|
||||||
template std::shared_ptr<AbstractAGV> DeviceManager::getDevice(const std::string& device_id);
|
template std::shared_ptr<AbstractAGV> DeviceManager::getDevice(const std::string& device_id);
|
||||||
template std::shared_ptr<AbstractBattery> 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_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
|
add_library(hardware_manager SHARED
|
||||||
hardware_factory.cpp
|
hardware_factory.cpp
|
||||||
hardware_manager.cpp
|
hardware_manager.cpp
|
||||||
|
../hardware/can/can_manager.cpp
|
||||||
|
../hardware/serial/serial_manager.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(hardware_manager PUBLIC
|
target_include_directories(hardware_manager PUBLIC
|
||||||
|
|||||||
@ -3,3 +3,25 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include "hardware_manager/hardware_factory.h"
|
#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"
|
#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