One Motor 0.5.1
RoboMaster全平台一站式电机驱动库
|
DJI电机管理器单例类。 更多...
#include <MotorManager.hpp>
Public 类型 | |
using | Result = std::expected<void, std::string> |
Public 成员函数 | |
MotorManager (const MotorManager &)=delete | |
MotorManager (MotorManager &&)=delete | |
MotorManager & | operator= (MotorManager &)=delete |
MotorManager & | operator= (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 MotorManager & | getInstance () |
获取MotorManager的单例实例。 | |
DJI电机管理器单例类。
该类负责管理所有DJI电机的控制指令发送。它作为一个单例,确保全局只有一个实例存在。 MotorManager内部会启动一个独立的发送线程。各个M3508电机实例在计算完控制电流后, 调用 pushOutput
方法将电流值推送到管理器的缓冲区中。 发送线程会以固定的时间间隔(例如1ms),将缓冲区中的所有电机电流值打包成CAN帧, 并通过对应的CAN-bus驱动发送出去。 这种设计将电机控制计算与CAN发送解耦,并保证了发送的周期性。 此类是不可拷贝、不可移动的。
OneMotor::Motor::DJI::MotorManager::~MotorManager | ( | ) |
析构函数。
停止发送线程并等待其结束。
|
noexcept |
从管理器中注销一个电机。
driver | 电机所挂载的CAN总线驱动。 |
canId | 电机的CAN ID。 |
|
static |
获取MotorManager的单例实例。
|
noexcept |
将一个电机的目标电流值推送到发送缓冲区。
id | 电机的ID (1-8),对应其在CAN帧数据区的位置。 |
driver | 电机所挂载的CAN总线驱动。 |
lo_value | 电流值的低8位。 |
hi_value | 电流值的高8位。 |
|
noexcept |
向管理器注册一个电机。
driver | 电机所挂载的CAN总线驱动。 |
canId | 电机的CAN ID。 |