Robot PU 思考
课程:机器人思考(反馈回路)
"机器人思考"通常不是类似人类的思考。在机器人学中,它通常意味着:
- 观察传感器
- 计算调整量
- 应用调整
- 快速重复
这被称为反馈回路(闭环控制)。
在 Robot PU 中,行走和平衡是一个很好的例子。扩展程序的 moveBalance(...) 在行走时连续读取 IMU 并调整舵机目标。
1. 控制回路:开环 vs 闭环
A. 开环控制(无反馈)
开环意味着:
- 你命令一个动作
- 你不测量结果
- 你假设机器人按预期运行
示例思路:
- "将腿部舵机设置为这些角度,希望机器人稳定。"
优点:
- 简单
- 在完美硬件上可预测
缺点:
- 对电池电压、摩擦力、负载、碰撞敏感
- 当实际情况与假设不同时无法恢复
B. 闭环控制(反馈)
闭环意味着:
- 命令一个动作
- 测量发生了什么(传感器)
- 计算误差
- 修正命令
优点:
- 对干扰鲁棒
- 自纠正
缺点:
- 更复杂
- 需要良好的传感器数据和良好的调参
2. Robot PU 示例:moveBalance()(行走 + 平衡)
在 robotpu.ts 中,行走调用:
walk(sp, di)→moveBalance(sp, di, ...)
moveBalance(...) 内部的高层思路:
- 观察: 读取 IMU 数据并估计身体倾斜
- 思考: 计算需要倾斜/偏移腿部和身体多少来保持平衡
- 行动: 将这些偏移作为"控制向量"应用到底层舵机目标
然后它调用底层步态引擎(wk.move(...))来推进运动状态。
3. 观察:balanceParam()(传感器 → 状态估计)
balanceParam() 读取加速度计:
input.acceleration(Dimension.X/Y/Z)
并计算与倾斜相关的内部信号(你将在代码中看到的示例):
bodyRoll、bodyPitch- 滤波版本
bodyRoll2、bodyPitch2(随时间平滑)
这是一个小而重要的想法:滤波。
- 原始传感器有噪声
- 滤波降低噪声,使控制输出不会抖动
4. 思考:将 IMU 倾斜转换为纠正偏移
在 moveBalance(...) 中,机器人使用估计的 roll/pitch 计算偏移:
- 如果机器人向左倾斜 → 移动重心 / 舵机偏移以恢复
- 如果机器人向右倾斜 → 做相反的操作
你将看到类似以下逻辑:
- 钳制修正量(
maxRollCtrl),防止过度纠正 - 当倾斜较大时减速(安全 + 稳定性)
"思考"的输出是一组控制信号写入 pr.servoCtrl[...]。
然后该控制向量与当前步态姿态目标结合。
5. 行动:应用控制并推进步态
行动步骤是:
- 应用计算出的
servoCtrl偏移 - 调用
wk.move(...)向当前姿态迈出一小步
这就是为什么运动动作被设计为反复调用:每次调用是反馈 + 运动更新的一次迭代。
6. 控制器类型(概念)
Robot PU 的平衡逻辑是启发式控制器的实际示例(手工设计的规则 + 钳制 + 平滑)。
其他常见控制器:
- P 控制器:修正量与误差成正比
- PD 控制器:比例 + 阻尼(使用误差变化率)
- PID 控制器:比例 + 积分 + 微分
典型权衡:
- P: 简单,但可能振荡
- PD: 更稳定,更少超调
- PID: 可以消除稳态误差,但调参可能棘手
7. 更高级的"思考"(非必须,但值得了解)
这些在更高级的机器人中很常见。这里作为未来方向提及(它们未在本教程代码中实现)。
卡尔曼滤波器 / 互补滤波器
- 更好的传感器融合(例如,加速度计 + 陀螺仪)和更好的状态估计
前馈控制
从计划运动预测所需舵机输出
与反馈结合以获得最佳结果
概率模型(贝叶斯 / 概率网络)
- 显式表示不确定性(当传感器有噪声时有用)
强化学习
Q-learning / Q-tables:学习在每个状态下采取哪个动作
现代变体使用神经网络(Deep Q Networks)
8. 实用 MakeCode 模式:观察 → 思考 → 行动
以下是你将在许多项目中重用的通用模式:
basic.forever(function () {
// Observation
const cm = robotPu.sonarDistanceCm()
// Thinking
let speed = 2
let turn = 0
if (cm > 0 && cm < 15) {
speed = -2
turn = 0.8
}
// Action
robotPu.walk(speed, turn)
})
"笨"机器人和"聪明"机器人之间的区别通常是思考步骤的质量。