跳转到内容

MotorDrivers::Core API

文档稀疏
符号
38
已记录
31
修订版本
0.1.0+d8ebbce805b2

7 / 38 个公开 API 符号没有说明。

命名空间

2

2

controllers::IController

控制器抽象基类 如何根据反馈计算输出 何时调用对应的电机接口发送命令 派生类只需要关心: 控制权申请、启停状态这些通用逻辑在基类里统一处理。

core/motor_if.hpp:245

motors::IMotor

电机抽象接口 驱动层负责把具体电机与驱动接入方式包装成这组接口。上层控制器不需要知道“这个电机到底是 DJI、DM、VESC,还是以后接入的其他类型驱动”,也不需要关心它走的是哪种总线,只需要关心它 支持哪些能力,以及角度、速度等反馈是什么。 setCurrent() :最低层的电流 / 力矩输入 setInternalVelocity() :驱动器的速度指令输入 setInternalPosition() :驱动器的位置指令输入 setInternalMIT() :一次发送更完整的 MIT 控制量 这套接口故意把控制输入拆成四种,是为了明确区分控制深度:

core/motor_if.hpp:69

函数

25

controllers::IController::IController

                    controllers::IController::IController (motors::IMotor *motor, const ControlMode ctrl_mode)
                  

上游未提供说明。

core/motor_if.hpp:303

controllers::IController::disable

                    virtual void controllers::IController::disable ()
                  

停用控制器,并释放已持有的电机

core/motor_if.hpp:281

controllers::IController::enable

                    virtual bool controllers::IController::enable ()
                  

启用控制器,并尝试获取电机控制权 启用后是否成功持有电机

core/motor_if.hpp:261

controllers::IController::enabled

                    bool controllers::IController::enabled () const
                  

控制器当前是否处于启用状态

core/motor_if.hpp:293

controllers::IController::getMotor

                    motors::IMotor * controllers::IController::getMotor () const
                  

取得绑定的电机对象 用于直接从控制器读取电机相应数据,比如获取当前输出角度,输出速度等

core/motor_if.hpp:300

controllers::IController::update

                    virtual void controllers::IController::update ()=0
                  

周期更新控制器 通常在固定频率任务中调用,例如 1 kHz 控制任务。

core/motor_if.hpp:255

controllers::IController::~IController

                    virtual controllers::IController::~IController ()=default
                  

上游未提供说明。

core/motor_if.hpp:248

motors::IMotor::currentController

                    controllers::IController * motors::IMotor::currentController () const
                  

当前持有该电机控制权的控制器

core/motor_if.hpp:224

motors::IMotor::defaultControlMode

                    virtual controllers::ControlMode motors::IMotor::defaultControlMode () const
                  

返回该电机推荐的默认控制模式 ControlMode::Default 当控制器配置使用时,会退回到这里。

core/motor_if.hpp:80

motors::IMotor::getAngle

                    virtual float motors::IMotor::getAngle () const =0
                  

获取输出轴绝对角度 角度,单位 deg

core/motor_if.hpp:89

motors::IMotor::getVelocity

                    virtual float motors::IMotor::getVelocity () const =0
                  

获取输出轴速度 速度,单位 rpm

core/motor_if.hpp:94

motors::IMotor::internalPositionSupportLevel

                    virtual InternalPositionSupportLevel motors::IMotor::internalPositionSupportLevel () const
                  

查询内部位置模式支持等级

core/motor_if.hpp:166

motors::IMotor::internalVelocitySupportLevel

                    virtual InternalVelocitySupportLevel motors::IMotor::internalVelocitySupportLevel () const
                  

查询内部速度模式支持等级

core/motor_if.hpp:136

motors::IMotor::isConnected

                    virtual bool motors::IMotor::isConnected () const
                  

电机是否连接 通过 watchdog 实现,超时时间默认为 10 ms

core/motor_if.hpp:105

motors::IMotor::releaseController

                    virtual void motors::IMotor::releaseController (controllers::IController *ctrl)
                  

释放控制权

core/motor_if.hpp:215

motors::IMotor::resetAngle

                    virtual void motors::IMotor::resetAngle ()=0
                  

把当前反馈角度重新定义为零点

core/motor_if.hpp:98

motors::IMotor::setCurrent

                    virtual void motors::IMotor::setCurrent (const float current)
                  

下发最低层电流 / 力矩类输出 current 输出值,具体物理意义由驱动决定

core/motor_if.hpp:121

motors::IMotor::setInternalMIT

                    virtual void motors::IMotor::setInternalMIT (float t_ff, float p_ref, float v_ref, float kp, float kd)
                  

发送 MIT 控制指令 这类接口用来表达“单次同时给位置、速度、刚度、阻尼、前馈”的高级输入能力。 v_ref setInternalVelocity() v_ref p_ref 注意这里的不一定等同于普通里的速度参考。 在 MIT / 阻抗控制语义下,往往是和配套使用的速度项,物理意义更接近 “位置参考的导数”。因此它的单位由具体驱动决定,特殊情况会在驱动注释里明确说明。

core/motor_if.hpp:195

motors::IMotor::setInternalPosition

                    virtual void motors::IMotor::setInternalPosition (const float pos, const float maxv)
                  

向驱动器发送内部位置指令 pos 位置参考,默认单位 deg maxv 最大速度限制,单位 rpm,传 kNoLimit 表示不限制; 不支持 maxv 的电机会忽略该参数

core/motor_if.hpp:176

motors::IMotor::setInternalVelocity

                    virtual void motors::IMotor::setInternalVelocity (const float rpm, const float maxi)
                  

向驱动器发送内部速度指令 rpm 速度参考;默认单位 rpm maxi 最大电流/力矩限制,传 kNoLimit 表示不限制; 不支持 maxi 的电机会忽略该参数

core/motor_if.hpp:147

motors::IMotor::supportsCurrent

                    virtual bool motors::IMotor::supportsCurrent () const
                  

setCurrent() 是否支持通过下发输出 这不是在判断“有没有这个成员函数”,而是在判断: 当前这台电机、当前这份配置下,是否允许用户把它当作最低层电流 / 力矩输入来使用。 注意不同驱动对“current”的具体物理意义可能不同。 例如 DM 在 MIT 模式下会把它退化成力矩输入使用。

core/motor_if.hpp:116

motors::IMotor::supportsInternalMIT

                    virtual bool motors::IMotor::supportsInternalMIT () const
                  

是否支持 MIT 控制格式

core/motor_if.hpp:185

motors::IMotor::tryAcquireController

                    virtual bool motors::IMotor::tryAcquireController (controllers::IController *ctrl)
                  

尝试让控制器获取该电机的控制权 一个电机同一时刻只允许被一个控制器接管,用来避免多个控制器同时写目标值。

core/motor_if.hpp:202

motors::IMotor::~IMotor

                    virtual motors::IMotor::~IMotor ()=default
                  

上游未提供说明。

core/motor_if.hpp:73

枚举

3

controllers::ControlMode

控制器希望电机使用的控制方式 ExternalPID InternalVel 这里描述的是“控制链路闭合在哪里”。 例如表示在 MCU 里自己做闭环,表示把速度参考交给驱动器内部。

Default
使用电机驱动声明的默认控制模式
ExternalPID
setCurrent() 外部控制器计算输出,再通过下发
InternalMIT
使用 MIT 格式一并发送位置、速度、刚度、阻尼和前馈
InternalPos
仅支持发送位置指令,不支持发送速度指令
InternalVel
使用驱动器内部速度环
InternalVelPos
同时支持发送速度指令与位置指令
core/motor_if.hpp:41

motors::IMotor::InternalPositionSupportLevel

内部位置模式能力等级

NotSupported
上游未提供说明。
RefAndMaxv
上游未提供说明。
RefOnly
上游未提供说明。
core/motor_if.hpp:156

motors::IMotor::InternalVelocitySupportLevel

内部速度控制能力等级

NotSupported
上游未提供说明。
RefAndMaxi
只支持设置目标速度
RefOnly
不支持该控制模式
core/motor_if.hpp:126

变量

5

controllers::IController::ctrl_mode_

                    ControlMode controllers::IController::ctrl_mode_
                  

解析后的最终控制模式

core/motor_if.hpp:353

controllers::IController::enabled_

                    bool controllers::IController::enabled_
                  

控制器是否已经成功持有电机

core/motor_if.hpp:356

controllers::IController::motor_

                    motors::IMotor* controllers::IController::motor_
                  

绑定的电机对象

core/motor_if.hpp:352

motors::IMotor::controller_

                    controllers::IController* motors::IMotor::controller_
                  

当前持有控制权的控制器

core/motor_if.hpp:229

文件

1

core/motor_if.hpp

电机抽象接口与控制器抽象接口 syhanjin 2026-01-28 motors::IMotor :所有电机驱动共同遵守的接口 controllers::ControlMode :控制链路应该如何闭环 controllers::IController :控制器基类 这个文件定义了 MotorDrivers 最核心的三件东西: IMotor 反馈能力:获取角度、速度、连接状态,重置零点 控制输入能力:电流 / 力矩、内部速度、内部位置、MIT 控制权能力:申请、释放、查询当前控制器 设计上,不直接按“某个具体电机型号”建模,而是按“能力”建模: 角度默认使用 deg _rad _rps 速度默认使用 rpm,除非变量名明确带有、等后缀 力矩默认使用 Nm resetAngle() 的含义是“把当前输出角度重新视作零点” 单位约定:

core/motor_if.hpp