机器人机械臂的模仿学习:无需编码器的轨迹生成
采用MG996R舵机驱动的伺服式机械臂——其舵机本身不带内置编码器——存在齿隙、机械磨损及定位不准等问题。与其进行复杂的运动学标定,我们转而采用模仿学习方案:由人工引导机械臂沿期望轨迹运动,同时通过外部电位器实时记录各关节角度。这些由人类示范采集的轨迹数据,随后用于训练神经网络,使其能够逐帧复现运动过程。
机械结构包含一个旋转底座(Z轴)、三段联动连杆及末端夹爪。四个关节处均安装10kΩ电位器,每10毫秒向Arduino Mini输出模拟信号。舵机控制由PCA9685PW PWM驱动芯片完成。所有轨迹数据均以CSV格式离线保存,供后续处理。
硬件配置与运行模式
Arduino持续读取电位器值,并实施平滑滤波以抑制噪声:每个新采样值均与前一数值加权平均更新。原始ADC值(0–1023)暂不转换为关节角度,而是留待PC端统一处理——此举可避免采集过程中因计算负载引发舵机抖动。
系统具备两种独立运行模式:
- 轨迹录制模式:依赖电位器反馈实时记录动作;
- 回放与执行模式:驱动舵机复现已学习的运动序列。
舵机由专用电源供电,防止电压跌落。机械臂实际工作空间被限定在一块便于操作的34点网格区域(形似国际象棋棋盘)。所有运动均以该网格上方的同一“归位点”为中转枢纽:归位 → 目标 → 归位。
此举大幅降低数据量:仅需录制68条往返轨迹(34个目标点 × 2),无需穷举全部点对组合。
模仿学习全流程
轨迹录制
人工将机械臂从归位点移至目标点再返回,Arduino以10ms间隔持续记录各关节角度。原始数据受机械齿隙影响,存在明显噪声与漂移。
目标标定
对最终关节角度进行微调,确保末端执行器精确定位。针对每条轨迹终点,依据实测误差进行补偿校正——这对重复性抓取或精准放置尤为关键。
神经网络训练
模型根据当前关节状态与目标坐标,预测下一时刻各关节的角度增量(delta)。输入:当前归一化关节角 + (x, y)目标坐标;输出:4维角度增量向量。另设“瞄准修正”阶段,在运动最后10%动态逼近标定后的目标位置。
PyBullet URDF模型仅用于可视化展示——不参与物理仿真或训练建模,因此真实世界中的齿隙与柔性变形未被纳入模拟。
数据预处理
所有轨迹统一归一化并插值为固定长度序列。针对每组“归位–目标”组合,采集多次演示样本并取平均,提升鲁棒性。
预处理步骤包括:
- 使用滑动平均法滤除噪声;
- 将关节角度归一化至[0, 1]区间;
- 线性插值至每条轨迹100–200个时间步;
- 将(x, y)目标坐标拼接为网络的条件输入。
神经网络架构
采用多层感知机(MLP),具体设计如下:
- 输入层:4维(归一化关节角);
- 两个可学习嵌入层,分别编码目标x/y坐标;
- 一个时间步嵌入层(表征运动进程);
- 隐藏层:256 → 128 → 64神经元,ReLU激活函数,Dropout率=0.1;
- 输出层:4维预测角度增量。
训练采用均方误差(MSE)损失函数,Adam优化器(学习率=1e−3),批量大小=32,共500轮迭代。数据集按80/10/10划分为训练集/验证集/测试集。
误差补偿策略:每条轨迹最后10%的预测结果,直接替换为指向标定目标位置的线性插值——确保末端定位精度。
实验结果与泛化能力
训练完成的网络可将关节角度误差控制在5°以内,目标点定位精度达±2 mm。对于训练网格点之间的未见目标中心(即插值点),泛化误差仍稳定在±4 mm内。
不同方法对比:
| 方法 | 关节角度误差 | 目标定位精度(mm) |
|------|--------------|---------------------|
| 开环运动学模型 | 12° | ±8 |
| 纯模仿学习 | 4° | ±2 |
| 模仿学习 + 瞄准修正 | 2° | ±1 |
该方案可快速迁移至其他无片上传感的低成本机械臂平台。
核心结论
- 模仿学习绕开了对编码器和高精度运动学模型的依赖;
- 外置电位器提供了可靠、低成本的真实轨迹标注;
- 神经网络生成条件化、目标导向的运动步进,并叠加最终瞄准修正;
- 仅68条人工录制轨迹,即可实现对全新目标点的强泛化能力;
- 即便在入门级硬件上,也能达成亚2毫米级末端定位精度。
— Editorial Team
暂无评论。