|
| | MotorControlWorker (SchedulerType::Ptr scheduler, const nlohmann::json &root_cfg, const std::array< JointType, JointNumber > &Joints) |
| | 构造一个电机控制工人类型
|
| |
|
| ~MotorControlWorker () |
| | 析构函数
|
| |
| void | TaskCreate () |
| | TaskCreate方法,在任务队列创建的时候会被调度器调用,用户可以在这个方法中初始化一些资源
|
| |
|
void | SetCurrentPositionAsTargetPosition () |
| | 设置当前位置为目标位置
|
| |
| void | TaskCycleBegin () override |
| | TaskCycleBegin方法,在每次任务队列循环开始时被调用,用来读取电机的位置、速度、电流等数据并写入到数据总线中
|
| |
| void | TaskRun () override |
| | TaskRun方法,在每次任务队列循环中被调用,用来实现电机的控制逻辑,默认为空实现,因为电机的控制逻辑在TaskCycleEnd中实现
|
| |
| void | TaskCycleEnd () override |
| | TaskCycleEnd方法,在每次任务队列循环结束时被调用,用来将控制指令写入到电机的控制接口。 限制力矩大小,以及根据控制模式选择不同的控制方式。
|
| |
| | AbstractWorker (SchedulerType::Ptr scheduler, const nlohmann::json &cfg=nlohmann::json()) |
| | 构造一个抽象工人类型
|
| |
| void | setScheduler (SchedulerType::Ptr scheduler) |
| | 设置调度器的指针
|
| |
|
virtual | ~AbstractWorker () |
| | 析构函数,虚函数,用于释放资源
|
| |
| virtual void | TaskDestroy () |
| | TaskDestroy方法,在任务队列删除的时候会被调度器调用,用户可以在这个方法中释放一些资源
|
| |
| void | PrintSplitLine (size_t length=60, char c='-') |
| | print a split line, default length is 60 and character is '-'
|
| |
template<typename
SchedulerType, typename JointType, typename MotorPrecision, size_t JointNumber>
class z::MotorControlWorker< SchedulerType, JointType, MotorPrecision, JointNumber >
MotorControlWorker类型是一个电机控制类型,用于读取实际电机的位置、速度、电流等数据,并将控制指令写入到电机的控制接口。
MotorControlWorker类型是一个电机控制类型,用于读取实际电机的位置、速度、电流等数据,并将控制指令写入到电机的控制接口。 通常来说,用户可以将该类型放在主任务队列中,用于实现电机的控制逻辑。该类型会向数据总线中写入"CurrentMotorPosition", "CurrentMotorVelocity","CurrentMotorTorque"这三个数据,并读取"TargetMotorPosition","TargetMotorVelocity","TargetMotorTorque" 这三个数据并下发给电机,此外还会向数据总线中写入"LimitTargetMotorTorque"数据,以在力矩模式中展示被限制后的目标力矩输出。 用户需要在数据总线中注册这些数据类型,以便于工人类型能够正确的读写数据。用户可以通过配置文件来配置电机的控制模式,限制力矩大小等。
config.json配置文件示例:
{
"Workers": {
"MotorControl": {
//注意这里的ControlMode参数需要和电机的数量相匹配,支持的控制模式有"Torque","Position","Velocity"
//若所有电机都是同一种控制模型,可以简写为一个字符串
//"ControlMode":"Torque"
"ControlMode": [ "Position", "Position", "Velocity", "Position", "Position", "Velocity" ],
"TorqueLimit":[100,100,100,100,100,100], //非力矩模式该字段可以省略
"PosFilterWeight": [0.9,0.1], //位置滤波权重
"VelFilterWeight": [0.9,0.1], //速度滤波权重
"DefaultPosition": [0,0,0,0,0,0] //默认位置,注意这里的默认位置需要和电机的数量相匹配
}
}
}
- 模板参数
-
| SchedulerType | 调度器类型 |
| JointType | 电机类型指针,在这个类型中必须实现GetActualPosition(),GetActualTorque(),GetActualTorque(), SetTargetTorque(),SetTargetPosition(),SetTargetVelocity()方法 |
| MotorPrecision | 电机数据精度,用户可以通过这个参数来指定电机数据的精度,比如可以指定为float或者double |
| JointNumber | 关节电机数量 |