Alicia-M 模仿学习系统介绍
LeRobot 提供了一个覆盖机器人学习完整生命周期的统一框架,功能涵盖 数据采集、模型训练、算法验证与部署 四个环节,帮助研究者和开发者高效地实现从感知到控制的闭环开发。以下是基于LeRobot的灵动遥操套件的模仿学习示例。
1. 安装与环境准备
1.1 创建 Python 环境
conda create -n lerobot python=3.10 -y
conda activate lerobot
1.2 安装依赖
git clone https://github.com/Synria-Robotics/lerobot.git -b v6.1.1-beta
cd lerobot
pip install -e .
验证安装:
lerobot-record --help
lerobot-train --help
以上指令仅需运行一次。
2 单遥操套件物块抓取
采用的设备/物品:
- Alicia M操作臂;
- Alicia D示教臂
- 一个C10 玄雅相机;
- 一个D405 RealSense 相机;
- 2.5 cm x 2.5 cm 正方体;
- 收纳盒;
2.1 硬件连接
2.1.1 示教臂和操作臂数据分别获取
- 将D405腕部相机(wrist)和C10前置相机(front)连接电脑
- 灵动示教臂和云擎操作臂数据线均连接电脑
该模式下操作臂的当前状态(Observation)和给定的动作(Action)分别从操作臂数据线和示教臂数据线获取。
2.2 数据采集
2.2.1 端口号获取
- 检测相机RBG端口号:
cd lerobot
conda activate lerobot
python examples/camera/camera_detection.py
得到如下结果:
Found 2 usable camera stream(s).
Press 'q' in the video window to cycle to the next camera.
Displaying Camera 1/2: TSTC USB20 WEB CAMERA on /dev/video7
Closing feed for TSTC USB20 WEB CAMERA.
Displaying Camera 2/2: Intel(R) RealSense(TM) Depth Ca (usb-0000 on /dev/video4
Closing feed for Intel(R) RealSense(TM) Depth Ca (usb-0000.
All camera streams have been shown. Exiting.
分别记录前置相机和腕部相机的RGB端口号为:7/4。
- 检测机械臂端口号:
- Linux系统:
ls /dev/ttyACM*
仅连接示教臂得到:/dev/ttyACM0;
分别连接示教臂和操作臂得到:/dev/ttyACM0 /dev/ttyACM1,其中,灵动示教臂端口号为1, 云擎操作臂为1。
- Windows系统:
打开“设备管理器” → 展开“端口 (COM 和 LPT)” → 查找类似 “USB-SERIAL CH340 (COM3)” 或 “Silicon Labs CP210x USB to UART Bridge (COM5)” 的设备名称。
或使用 mode 命令(CMD/PowerShell 均可):
mode
后续指令以Linux系统为主,Windows/macOS用户可将对应的机械臂/相机端口号替换为对应系统版本。
2.2.2 示教臂和操作臂数据分别获取
lerobot-record \
--robot.type=alicia_m_follower \
--robot.port=/dev/ttyACM0 \
--robot.cameras='{
wrist_camera: {type: opencv, index_or_path: /dev/video4, width: 640, height: 480, fps: 30}
}' \
--robot.id=alicia_m \
--teleop.type=alicia_d_leader \
--teleop.id=leader_arm \
--teleop.port=/dev/ttyACM1 \
--teleop.target_follower_type=alicia_m \
--teleop.use_action_as_observation=false \
--dataset.repo_id=ubuntu/grab-cube-demo1 \
--dataset.root=/home/ubuntu/Data/Lerobot \
--dataset.num_episodes=10 \
--dataset.single_task="Grab the cube" \
--dataset.episode_time_s=80 \
--dataset.reset_time_s=5 \
--display_data=true \
--dataset.push_to_hub=false \
--teleop.directly_controls_robot=false
--resume=true 加上该行可基于当前数据集继续采集。
2.3 数据集训练
lerobot-train \
--dataset.repo_id=ubuntu/grab-cube-demo1 \
--dataset.root=/home/ubuntu/Data/Lerobot \
--dataset.video_backend=pyav \
--policy.type=act \
--policy.push_to_hub=false \
--output_dir=outputs/train/act_grab_cube \
--job_name=act_grab_cube \
--policy.device=cuda \
--wandb.enable=true \
--wandb.project=alicia-d-grasp-cube \
--steps=50000 \
--batch_size=32 \
--save_freq=5000 \
--log_freq=100 \
--eval_freq=5000
参数选择:
--policy.type=act: 选择训练模型,ACT为act,DP为diffusion。
--dataset.repo_id=username/dataset_name: 数据集标识符。
--dataset.root=/path/to/parent/directory: 训练使用的数据集地址路径。尽量采用和采集时相同的路径。
--output_dir=/path/to/training_result: 训练完成的模型输出路径,该路径目录下包括不同的检查点。
继续训练
lerobot-train \
--config_path=outputs/train/act_grab_cube/checkpoints/050000 \
--dataset.repo_id=ubuntu/grab-cube-dataset \
--dataset.root=/home/ubuntu/Data/LerobotData/test2 \
--dataset.video_backend=pyav \
--policy.type=act \
--policy.device=cuda \
--steps=100000 \
--batch_size=32
2.4 模型推理
单臂推理示例:
python examples/alicia/eval_alicia_arms.py \
--policy.path=outputs/train/act_grab_cube/checkpoints/last/pretrained_model \
--robot.type=alicia_m_follower \
--robot.port=/dev/ttyACM1 \
--robot.cameras="{front: {type: opencv, index_or_path: /dev/video12, width: 640, height: 480, fps: 30}}" \
--policy.device=cuda \
--task="Grab the cube" \
--duration=120 \
--fps=10 \
--num_episodes=5 \
--record_eval=false
关键参数:
--policy.path: 训练好的策略检查点目录路径(例如:outputs/train/act_grab_cube/checkpoints/last/pretrained_model 或 outputs/train/act_grab_cube/checkpoints/050000/pretrained_model)
--robot.port: 操作臂的串口
--task: 任务描述(应与训练时使用的任务匹配)
--duration: 每个评估回合的持续时间(秒)
--fps: 动作执行频率(Hz)
--num_episodes: 要运行的评估回合数
--record_eval: 是否将评估回合录制到数据集(true 或 false)
--eval_dataset_repo_id: 用于录制评估回合的数据集仓库 ID(如果 record_eval=true 则需要)