|
One Motor 0.6.0
RoboMaster全平台一站式电机驱动库
|
DJI电机管理器单例类。 更多...
#include <MotorManager.hpp>
Public 成员函数 | |
| MotorManager (const MotorManager &)=delete | |
| MotorManager (MotorManager &&)=delete | |
| MotorManager & | operator= (MotorManager &)=delete |
| MotorManager & | operator= (MotorManager &&)=delete |
| ~MotorManager () | |
| 析构函数。 | |
| tl::expected< void, Error > | registerMotor (Can::CanDriver &driver, uint16_t canId) noexcept |
| 向管理器注册一个电机。 | |
| tl::expected< void, Error > | deregisterMotor (Can::CanDriver &driver, uint16_t canId) noexcept |
| 从管理器中注销一个电机。 | |
| void | pushOutput (Can::CanDriver &driver, uint16_t control_can_id, uint8_t offset, 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总线驱动。 |
| control_can_id | |
| offset | |
| lo_value | 电流值的低8位。 |
| hi_value | 电流值的高8位。 |
|
noexcept |
向管理器注册一个电机。
| driver | 电机所挂载的CAN总线驱动。 |
| canId | 电机的CAN ID。 |