One Motor 0.5.1
RoboMaster全平台一站式电机驱动库
载入中...
搜索中...
未找到
OneMotor::Motor::DJI::MotorManager类 参考

DJI电机管理器单例类。 更多...

#include <MotorManager.hpp>

Public 类型

using Result = std::expected<void, std::string>
 

Public 成员函数

 MotorManager (const MotorManager &)=delete
 
 MotorManager (MotorManager &&)=delete
 
MotorManageroperator= (MotorManager &)=delete
 
MotorManageroperator= (MotorManager &&)=delete
 
 ~MotorManager ()
 析构函数。
 
Result registerMotor (Can::CanDriver &driver, uint16_t canId) noexcept
 向管理器注册一个电机。
 
Result deregisterMotor (Can::CanDriver &driver, uint16_t canId) noexcept
 从管理器中注销一个电机。
 
template<uint8_t id>
void pushOutput (Can::CanDriver &driver, uint8_t lo_value, uint8_t hi_value) noexcept
 将一个电机的目标电流值推送到发送缓冲区。
 

静态 Public 成员函数

static MotorManagergetInstance ()
 获取MotorManager的单例实例。
 

详细描述

DJI电机管理器单例类。

该类负责管理所有DJI电机的控制指令发送。它作为一个单例,确保全局只有一个实例存在。 MotorManager内部会启动一个独立的发送线程。各个M3508电机实例在计算完控制电流后, 调用 pushOutput 方法将电流值推送到管理器的缓冲区中。 发送线程会以固定的时间间隔(例如1ms),将缓冲区中的所有电机电流值打包成CAN帧, 并通过对应的CAN-bus驱动发送出去。 这种设计将电机控制计算与CAN发送解耦,并保证了发送的周期性。 此类是不可拷贝、不可移动的。

构造及析构函数说明

◆ ~MotorManager()

OneMotor::Motor::DJI::MotorManager::~MotorManager ( )

析构函数。

停止发送线程并等待其结束。

成员函数说明

◆ deregisterMotor()

Result OneMotor::Motor::DJI::MotorManager::deregisterMotor ( Can::CanDriver & driver,
uint16_t canId )
noexcept

从管理器中注销一个电机。

参数
driver电机所挂载的CAN总线驱动。
canId电机的CAN ID。
返回
Result 操作结果。

◆ getInstance()

MotorManager & OneMotor::Motor::DJI::MotorManager::getInstance ( )
static

获取MotorManager的单例实例。

返回
对MotorManager唯一实例的引用。

◆ pushOutput()

template<uint8_t id>
template void OneMotor::Motor::DJI::MotorManager::pushOutput< 8 > ( Can::CanDriver & driver,
uint8_t lo_value,
uint8_t hi_value )
noexcept

将一个电机的目标电流值推送到发送缓冲区。

模板参数
id电机的ID (1-8),对应其在CAN帧数据区的位置。
参数
driver电机所挂载的CAN总线驱动。
lo_value电流值的低8位。
hi_value电流值的高8位。

◆ registerMotor()

Result OneMotor::Motor::DJI::MotorManager::registerMotor ( Can::CanDriver & driver,
uint16_t canId )
noexcept

向管理器注册一个电机。

参数
driver电机所挂载的CAN总线驱动。
canId电机的CAN ID。
返回
Result 操作结果。

该类的文档由以下文件生成: