手把手教机器人学新技能:LeRobot人类反馈学习全攻略
你是否曾希望机器人能像学徒一样,通过观察你的示范就能学会新技能?传统机器人编程需要专业知识,而LeRobot的人类反馈学习技术让这一愿景成为现实。本文将带你掌握如何通过手机、游戏手柄等直观设备,让机器人快速掌握复杂操作,无需编写一行代码。
核心原理:让机器人像人类一样"看示范学动作"
LeRobot的人类反馈学习基于示范学习(Learning from Demonstration) 原理,通过三步实现技能传递:
- 人类示范:操作员通过手机/手柄执行目标动作
- 数据记录:系统捕捉示范过程中的关节运动、视觉图像等数据
- 策略训练:AI模型从示范数据中提炼动作模式,生成机器人可执行的策略
这种方法将传统编程转化为"手把手教学",大幅降低机器人应用门槛。核心实现位于src/lerobot/teleoperators/phone/teleop_phone.py,该模块支持iOS和Android设备的姿态捕捉与动作映射。
准备工作:硬件与软件环境搭建
硬件需求
- 兼容机器人(如SO100、Lekiwi等)
- 智能手机(iOS/Android)或游戏手柄
- 计算机(推荐配置:8GB内存,NVIDIA显卡)
软件安装
# 克隆代码仓库
git clone https://gitcode.com/GitHub_Trending/le/lerobot
cd lerobot
# 安装依赖(根据系统选择)
pip install -r requirements-ubuntu.txt # Ubuntu系统
# 或
pip install -r requirements-macos.txt # macOS系统
设备连接
- 手机端:安装HEBI Mobile I/O(iOS)或WebXR应用(Android)
- 机器人端:确保电机控制器已正确配置,参考src/lerobot/motors/motors_bus.py中的电机总线管理实现
- 计算机端:启动通信服务,建立设备间数据传输通道
实战教学:30分钟教会机器人抓取物体
步骤1:配置示范设备
以手机为例,通过以下代码初始化 teleoperator 系统:
from lerobot.teleoperators.phone.teleop_phone import Phone
from lerobot.teleoperators.phone.config_phone import PhoneConfig, PhoneOS
# 创建配置对象
config = PhoneConfig(
phone_os=PhoneOS.ANDROID, # 或PhoneOS.IOS
camera_offset=[0.05, 0.02, 0.0] # 手机摄像头相对握持位置的偏移
)
# 初始化手机遥操作器
phone = Phone(config)
phone.connect()
phone.calibrate()
校准过程中,需将手机保持特定姿态:顶部指向机器人前方,屏幕朝上,按提示完成基准姿态设置。
步骤2:示范动作录制
使用LeRobot提供的录制工具捕捉示范数据:
# 启动录制程序
python src/lerobot/scripts/lerobot_record.py \
--robot so100 \
--teleop phone \
--task pick_place \
--output_dir ./demonstrations/pick_place_demo
录制时注意:
- 保持动作平滑连贯
- 重复示范3-5次以提高鲁棒性
- 确保工作区域光线充足(影响视觉数据质量)
录制的数据将保存在指定目录,包含:
- 关节角度序列(joint_states.hdf5)
- 摄像头图像序列(images/)
- 动作元数据(metadata.json)
步骤3:训练动作策略
使用录制的示范数据训练AI模型:
# 启动训练脚本
python src/lerobot/scripts/lerobot_train.py \
--dataset ./demonstrations/pick_place_demo \
--policy smolvla \
--epochs 50 \
--batch_size 32
训练过程中,系统会自动:
- 数据预处理:标准化关节角度,调整图像尺寸
- 模型训练:使用src/lerobot/policies/smolvla中的SMOLVLA算法
- 策略评估:定期测试模型性能并保存最优版本
核心训练逻辑位于src/lerobot/rl/learner.py,实现了从示范数据到动作策略的端到端学习。
步骤4:技能部署与优化
训练完成后,将策略部署到机器人:
# 启动策略执行
python src/lerobot/scripts/lerobot_eval.py \
--robot so100 \
--policy_path ./trained_policies/pick_place_model \
--num_episodes 10
若发现机器人动作不够精准,可通过以下方式优化:
- 增加示范数据多样性
- 调整src/lerobot/processor/normalize_processor.py中的状态标准化参数
- 微调策略超参数(如学习率、迭代次数)
高级应用:多模态反馈与复杂技能组合
多设备协同控制
LeRobot支持多种输入设备组合,例如同时使用手机姿态控制和游戏手柄按钮操作:
# 游戏手柄配置示例
from lerobot.teleoperators.gamepad.teleop_gamepad import GamepadTeleop
gamepad = GamepadTeleop(config)
gamepad.connect()
# 组合设备输入
def get_combined_action():
phone_action = phone.get_action()
gamepad_action = gamepad.get_action()
return {
"arm_pose": phone_action["phone.pos"],
"gripper": gamepad_action["button_a"],
"speed": gamepad_action["axis_left_y"]
}
技能组合与迁移
通过src/lerobot/datasets/lerobot_dataset.py中的数据集管理工具,可以将多个基础技能组合成复杂任务:
from lerobot.datasets.lerobot_dataset import LeRobotDataset
# 加载基础技能数据集
pick_demo = LeRobotDataset.load("pick_demonstrations")
place_demo = LeRobotDataset.load("place_demonstrations")
# 组合成新任务
combined_dataset = pick_demo.concat(place_demo)
combined_dataset.save("pick_place_combined")
这种模块化方法使机器人能快速适应新任务,只需组合已有技能模块。
常见问题与解决方案
校准失败
- 症状:手机姿态与机器人动作映射不准确
- 解决:
- 确保校准环境无强电磁干扰
- 检查手机传感器权限设置
- 重新执行校准,保持手机静止3秒以上
动作复现精度低
- 症状:机器人示范动作与预期偏差大
- 解决:
- 增加示范次数(建议5-10次)
- 减小单次示范动作幅度
- 调整src/lerobot/processor/delta_action_processor.py中的动作平滑参数
训练过程崩溃
- 症状:模型训练中出现内存溢出或NaN错误
- 解决:
- 减小批次大小(--batch_size)
- 降低图像分辨率
- 检查示范数据完整性
结语:迈向人机协作新纪元
LeRobot的人类反馈学习技术正在重新定义人机交互方式。通过直观的示范教学,普通用户也能让机器人掌握复杂技能,这将极大推动服务机器人、工业自动化等领域的发展。
下一步,你可以探索:
立即尝试LeRobot,开启你的机器人教学之旅!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



