controllers
上游未提供说明。
core/motor_if.hpp:330.1.0+d8ebbce805b27 / 38 个公开 API 符号没有说明。
上游未提供说明。
core/motor_if.hpp:33上游未提供说明。
core/motor_if.hpp:28控制器抽象基类 如何根据反馈计算输出 何时调用对应的电机接口发送命令 派生类只需要关心: 控制权申请、启停状态这些通用逻辑在基类里统一处理。
core/motor_if.hpp:245电机抽象接口 驱动层负责把具体电机与驱动接入方式包装成这组接口。上层控制器不需要知道“这个电机到底是 DJI、DM、VESC,还是以后接入的其他类型驱动”,也不需要关心它走的是哪种总线,只需要关心它 支持哪些能力,以及角度、速度等反馈是什么。 setCurrent() :最低层的电流 / 力矩输入 setInternalVelocity() :驱动器的速度指令输入 setInternalPosition() :驱动器的位置指令输入 setInternalMIT() :一次发送更完整的 MIT 控制量 这套接口故意把控制输入拆成四种,是为了明确区分控制深度:
core/motor_if.hpp:69
controllers::IController::IController (motors::IMotor *motor, const ControlMode ctrl_mode)
上游未提供说明。
core/motor_if.hpp:303
virtual void controllers::IController::disable ()
停用控制器,并释放已持有的电机
core/motor_if.hpp:281
virtual bool controllers::IController::enable ()
启用控制器,并尝试获取电机控制权 启用后是否成功持有电机
core/motor_if.hpp:261
bool controllers::IController::enabled () const
控制器当前是否处于启用状态
core/motor_if.hpp:293
motors::IMotor * controllers::IController::getMotor () const
取得绑定的电机对象 用于直接从控制器读取电机相应数据,比如获取当前输出角度,输出速度等
core/motor_if.hpp:300
virtual void controllers::IController::update ()=0
周期更新控制器 通常在固定频率任务中调用,例如 1 kHz 控制任务。
core/motor_if.hpp:255
virtual controllers::IController::~IController ()=default
上游未提供说明。
core/motor_if.hpp:248
motors::IMotor::IMotor ()
上游未提供说明。
core/motor_if.hpp:72
controllers::IController * motors::IMotor::currentController () const
当前持有该电机控制权的控制器
core/motor_if.hpp:224
virtual controllers::ControlMode motors::IMotor::defaultControlMode () const
返回该电机推荐的默认控制模式 ControlMode::Default 当控制器配置使用时,会退回到这里。
core/motor_if.hpp:80
virtual float motors::IMotor::getAngle () const =0
获取输出轴绝对角度 角度,单位 deg
core/motor_if.hpp:89
virtual float motors::IMotor::getVelocity () const =0
获取输出轴速度 速度,单位 rpm
core/motor_if.hpp:94
virtual InternalPositionSupportLevel motors::IMotor::internalPositionSupportLevel () const
查询内部位置模式支持等级
core/motor_if.hpp:166
virtual InternalVelocitySupportLevel motors::IMotor::internalVelocitySupportLevel () const
查询内部速度模式支持等级
core/motor_if.hpp:136
virtual bool motors::IMotor::isConnected () const
电机是否连接 通过 watchdog 实现,超时时间默认为 10 ms
core/motor_if.hpp:105
virtual void motors::IMotor::releaseController (controllers::IController *ctrl)
释放控制权
core/motor_if.hpp:215
virtual void motors::IMotor::resetAngle ()=0
把当前反馈角度重新定义为零点
core/motor_if.hpp:98
virtual void motors::IMotor::setCurrent (const float current)
下发最低层电流 / 力矩类输出 current 输出值,具体物理意义由驱动决定
core/motor_if.hpp:121
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
virtual void motors::IMotor::setInternalPosition (const float pos, const float maxv)
向驱动器发送内部位置指令 pos 位置参考,默认单位 deg maxv 最大速度限制,单位 rpm,传 kNoLimit 表示不限制; 不支持 maxv 的电机会忽略该参数
core/motor_if.hpp:176
virtual void motors::IMotor::setInternalVelocity (const float rpm, const float maxi)
向驱动器发送内部速度指令 rpm 速度参考;默认单位 rpm maxi 最大电流/力矩限制,传 kNoLimit 表示不限制; 不支持 maxi 的电机会忽略该参数
core/motor_if.hpp:147
virtual bool motors::IMotor::supportsCurrent () const
setCurrent() 是否支持通过下发输出 这不是在判断“有没有这个成员函数”,而是在判断: 当前这台电机、当前这份配置下,是否允许用户把它当作最低层电流 / 力矩输入来使用。 注意不同驱动对“current”的具体物理意义可能不同。 例如 DM 在 MIT 模式下会把它退化成力矩输入使用。
core/motor_if.hpp:116
virtual bool motors::IMotor::supportsInternalMIT () const
是否支持 MIT 控制格式
core/motor_if.hpp:185
virtual bool motors::IMotor::tryAcquireController (controllers::IController *ctrl)
尝试让控制器获取该电机的控制权 一个电机同一时刻只允许被一个控制器接管,用来避免多个控制器同时写目标值。
core/motor_if.hpp:202
virtual motors::IMotor::~IMotor ()=default
上游未提供说明。
core/motor_if.hpp:73控制器希望电机使用的控制方式 ExternalPID InternalVel 这里描述的是“控制链路闭合在哪里”。 例如表示在 MCU 里自己做闭环,表示把速度参考交给驱动器内部。
DefaultExternalPIDInternalMITInternalPosInternalVelInternalVelPos内部位置模式能力等级
NotSupportedRefAndMaxvRefOnly内部速度控制能力等级
NotSupportedRefAndMaxiRefOnly
ControlMode controllers::IController::ctrl_mode_
解析后的最终控制模式
core/motor_if.hpp:353
bool controllers::IController::enabled_
控制器是否已经成功持有电机
core/motor_if.hpp:356
motors::IMotor* controllers::IController::motor_
绑定的电机对象
core/motor_if.hpp:352
controllers::IController* motors::IMotor::controller_
当前持有控制权的控制器
core/motor_if.hpp:229
float motors::IMotor::kNoLimit
上游未提供说明。
core/motor_if.hpp:226电机抽象接口与控制器抽象接口 syhanjin 2026-01-28 motors::IMotor :所有电机驱动共同遵守的接口 controllers::ControlMode :控制链路应该如何闭环 controllers::IController :控制器基类 这个文件定义了 MotorDrivers 最核心的三件东西: IMotor 反馈能力:获取角度、速度、连接状态,重置零点 控制输入能力:电流 / 力矩、内部速度、内部位置、MIT 控制权能力:申请、释放、查询当前控制器 设计上,不直接按“某个具体电机型号”建模,而是按“能力”建模: 角度默认使用 deg _rad _rps 速度默认使用 rpm,除非变量名明确带有、等后缀 力矩默认使用 Nm resetAngle() 的含义是“把当前输出角度重新视作零点” 单位约定:
core/motor_if.hpp