Wiki
单执行器实物适配
Existing English translations were reused. 19 current source blocks remain in Simplified Chinese, without triggering paid translation.
按实际电机、驱动器和协议实现设备后端。先验证一个执行器,再扩展完整机器人。
1.示例 1:明确设备契约
| 项目 | 需要确认的内容 |
|---|---|
| 身份 | 型号、固件、地址与协议版本 |
| 通信 | 速率、帧格式、校验和确认 |
| 模式 | 位置、速度、力矩或电流,切换条件 |
| 反馈 | 编码器分辨率、轴侧、圈数与故障 |
| 传动 | 减速比、方向、零点与有效范围 |
| 停机 | 保持、减速、禁能与抱闸的含义 |
| 超时 | 目标过期、通信失联时设备自己做什么 |
协议未明确前,不猜测使能报文。先做只读解析,核对身份和反馈。
1.1.Ubuntu 设备路径与权限
实际 USB 串口可能为 /dev/ttyUSB0 或 /dev/ttyACM0。检查实际路径与所属组:
ls -l /dev/ttyUSB0
id -nG
设备属于 dialout 而当前用户不在该组时,可执行以下命令,注销并重新登录后再检查:
sudo usermod -aG dialout "$USER"
可用时优先记录 /dev/serial/by-id 中的稳定设备链接。不要以 root 运行整个机器人程序来绕过设备配置。
2.示例 2:换算编码器与速度
假设有效分辨率每电机转 8192 count,减速比 10,方向 sign,已展开的多圈计数 count:
q = sign * (count - zero) * 2π / (8192 * 10)
dq = sign * motor_rpm * 2π / (60 * 10)
8192 必须是协议中的有效 count/rev。如果手册给的是线数,要先确认是否已经计入四倍频。单圈计数先处理回绕;没有圈数或足够采样约束时,两个读数不能唯一恢复跨多圈运动。
保存 /tmp/jazzy_units.cpp 验证算术:
#include <cmath>
#include <iostream>
int main()
{
const double pi = std::acos(-1.0);
const double q = 40960.0 * 2.0 * pi / (8192.0 * 10.0);
const double dq = 60.0 * 2.0 * pi / (60.0 * 10.0);
std::cout << "q=" << q << " rad, dq=" << dq << " rad/s\n";
}
g++ -std=c++17 /tmp/jazzy_units.cpp -o /tmp/jazzy_units
/tmp/jazzy_units
示例结果约 q=3.14159、dq=0.628319。这是假设参数的换算,不是设备测量结果。
3.示例 3:实现设备后端
on_init 校验实际接口和参数;on_configure 建立通信并取得可信反馈;on_activate 确认故障、模式与初始目标;read 更新 SI 单位状态;write 检查并转换命令;on_deactivate 执行设备定义的停止流程。
使能、清错和停止需要确认时,用有序的离散操作和明确状态处理。不要把虚拟协议的最新目标邮箱直接当作可靠命令队列。
上一章固定两个关节和教学协议,不能只改串口路径就作为单执行器实物驱动。完成适配后,按身份、反馈、单位、方向、模式、小范围运动和停止逐项验收,保存对应日志。
返回 Jazzy 总览 · 上一篇:虚拟串口与模拟下位机 · 下一篇:完整机器人与进阶实例