配置重力补偿
结果: 使用与您的手臂匹配的模型并了解控制结束时会发生什么。您需要经过验证的校准和 控制器文件 。
检查型号匹配
主机根据 测量位置 计算电机输出指令并将其发送到伺服系统。固件不包含手臂几何形状。随着编码器数量的增加,积极的电机输出指令随之而来;模型必须考虑物理关节方向。
两个模型描述了带有空夹具的直立臂:
文件在host/arm-control/models/ |
手臂 |
|---|---|
arm-upright-empty.json |
SO-102 |
so101-upright-empty.json |
SO-101 |
两者都定义了 M2–M4 的耦合项,并为 M1、M5 和 M6 定义了明确的零电机输出指令。提供的六电机臂设置使用 ID 1 – 6 以及每个电机的配置文件。它们的校准绑定特定的编码器偏移、单位分辨率和反转标志;在开始控制 之前,预检会将这些值与电机 进行比较。
机械臂名称或 2048 的参考读数是不够的。请勿将另一个臂的偏移复制到您的电机中或仅更改 encoderCalibration 以通过检查。不同的校准、安装、几何形状或有效负载需要调整或安装的模型和硬件验证。
连接经过验证的模型
对于 tools/poses/controller.local.json ,将此 字段添加到现有的 JSON 对象 ;该行不是完整的配置:
"gravityModel": "../../host/arm-control/models/arm-upright-empty.json"
该路径选择 SO-102 型号。 SO-101 文件为 so101-upright-empty.json ;其状态明确要求对预期的手臂和运动路径进行验证。对您自己的模型使用相对路径,并在 JSON 字段之间保留逗号。
每个配置文件的 gravitySlewEffortPerS 限制重力作用变化的速度; effortLimit 限制电机总输出。如果没有 gravityModel ,工具将在没有模型的情况下运行,并在重用会话时清除保留的重力。单独的非零转换设置不能实现补偿。
搬家前检查
对您的录音运行正常预览:
macOS / Linux
npm run replay -- tools/poses/controller.local.json POSES.json
Windows PowerShell
npm.cmd run replay -- tools/poses/controller.local.json POSES.json
校准不匹配、输入缺失或计算量过多需要进行调查。高于模型或电机限制的结果将被拒绝,而不是默默地被剪掉。不要仅仅为了抑制错误而提高限制而不检查负载。
通过--run,控制器在第一个运动目标之前计算、发送并确认重力。在受支持的机构上,验证多个姿势和负载下的方向和行为。一个成功的姿势并不能验证整个工作空间。
控制期间和退出后
反馈和重力共享一个阅读器,大约每 50 毫秒更新一次。主机新鲜度和截止日期检查并不能使主机成为实时系统。
正常完成将最终补偿留在伺服中。 它不再适应姿态或有效负载的变化。 丢失的消息也不会清除重力:固件以配置的转换速率接近最后一个请求并保留它。扭矩关闭可将其清除。见整理第一个机芯。
创建模型
每个受控电机都需要一个明确的模型,包括零补偿条目。耦合项使用的每个输入都必须受到控制和测量。术语使用 coefficient × sin(angle) 或 coefficient × cos(angle),其中 angle = offsetRad + sum(counts[id] × weights[id])。角度为弧度,系数为 PWM 力单位。常数项没有权重。
基于日志的拟合和独立验证属于 调优过程 。拟合系数不是测量的物理扭矩,并且不会自动构成经过验证的模型。