欢迎使用 Alicia-D 机械臂与 LeRobot 框架!本指南将帮助您快速设置环境、安装必要的软件,并开始使用 Alicia-D 机械臂收集数据。即使您是机器人或编程新手,也能轻松上手。
- 操作系统: 推荐使用 Linux (例如 Ubuntu 20.04 或更高版本)。本指南主要基于 Linux 环境。
- Python: 版本 3.10 或更高。
- 硬件:
- Alicia-D 机械臂。
- 一台用于连接和控制机械臂的计算机。
- USB 数据线,用于连接计算机和 Alicia-D 机械臂。
- (可选) 如果您希望收集视觉数据,需要至少一个兼容的USB摄像头 (例如普通的网络摄像头)。
LeRobot 是一个用于机器人学习的开源框架,我们将用它来控制 Alicia-D 并收集数据。
-
获取 LeRobot: 使用 Git 从 GitHub 克隆 LeRobot 仓库。如果您没有安装 Git,请先安装它 (搜索 "如何安装 Git on [您的操作系统]")。
# 导航到您希望存放 LeRobot 项目的文件夹 cd /path/to/your/projects_directory # For Alicia-D-SDK not installed: git clone --recursive git@github.com:Synria-Robotics/lerobot.git -b v5.5.0 # For ALicia-D-SDK installed: git clone https://github.com/Synria-Robotics/lerobot.git -b v5.5.0 # 进入 LeRobot 文件夹 cd lerobot
-
创建虚拟环境 (推荐): 创建
conda环境:conda create -y -n lerobot python=3.10 conda activate lerobot
安装环境依赖:
conda install ffmpeg -c conda-forge
我们推荐将版本锁定到 Python 3.10 你的基础环境 FFmpeg 7.1.1 你的系统库 PyTorch 2.4.1 目前对 Py3.10 支持极好且稳定的版本 Torchvision 0.19.1 必须严格对应 PyTorch 2.4.1 CUDA 12.1 与 FFmpeg 7.x 搭配较好的现代驱动版本
-
安装 Alicia-D SDK
Alicia-D SDK (Software Development Kit) 是控制 Alicia-D 机械臂和读取其数据的核心软件库。
# cd /path/to/Alicia-D-SDK cd Alicia-D-SDK # 检查是否在v6.0.0分支,若否执行下方注释的命令 git branch # git checkout v6.0.0 # 使用 pip 安装 SDK pip install -e .
-
安装 LeRobot 及其依赖:
# 确保您在 lerobot 文件夹的根目录下 # 安装 LeRobot 及其核心依赖 cd .. # Enter the path for lerobot setup pip install -e .
这将安装 LeRobot 框架本身以及运行它所必需的库。且请注意torch torchvision cuda ffmpeg 的版本匹配问题
-
物理连接:
- 使用 USB 数据线将 Alicia-D 遥操套件的示教臂连接到您的计算机。
- 确保机械臂已通电 (如果需要外部电源)。
- (可选) 如果您要使用摄像头,也将摄像头连接到计算机的USB端口。
-
检查连接 (Linux): 在 Linux 系统上,连接机械臂后,它通常会显示为一个串口设备,例如
/dev/ttyUSB0或/dev/ttyACM0。您可以通过以下命令查看新出现的设备:ls /dev/ttyUSB*LeRobot 框架中的 Alicia-D 驱动默认会自动搜索可用的串口。如果自动搜索失败,您可能需要手动指定端口号。
# Add serial port permission sudo chmod 666 /dev/ttyUSB* # temporally sudo usermod -a -G dialout $USER # permanently -
检查连接 (Windows): 在 Windows 系统上,连接机械臂后,它会显示为一个
COM串口(例如COM3、COM5)。您可以通过以下方式查看端口:- 打开“设备管理器” → 展开“端口 (COM 和 LPT)” → 查找类似 “USB-SERIAL CH340 (COM3)” 或 “Silicon Labs CP210x USB to UART Bridge (COM5)” 的设备名称。
- 或使用
mode命令(CMD/PowerShell 均可):mode
如自动搜索失败,可在命令行通过
--robot.port=COM3显式指定端口(将COM3替换为您的实际端口)。注意事项:
- 若首次连接后未识别端口,可能需要安装对应的 USB 转串口驱动(常见为 CH340 或 CP210x),可从芯片官方或硬件厂商处下载并安装。
- 确保没有其他程序占用该串口(如串口调试助手等)。
- 保持默认波特率
1000000;如需修改,请与设备端设置一致。
LeRobot 使用命令行参数来配置数据收集任务。以下是一些关键参数:
--robot.type=alicia_d: 指定我们要使用的机器人类型是 Alicia-D。--control.type=record: 指定我们要执行的任务是数据记录。--control.fps=30: 设置数据记录的帧率 (每秒捕获多少帧数据)。常用的值是 15、30。--control.single_task="在这里描述您的任务": 对您正在演示或记录的任务进行简短描述,例如"机械臂抓取红色的积木并放入盒子中"。--control.root=/path/to/your/datasets/my_alicia_dataset: 指定收集的数据集存储在本地计算机的哪个文件夹。请确保此路径存在,或者 LeRobot 有权限创建它。--control.repo_id=username/dataset_name: (必需) 指定数据集标识符。必须使用用户名/数据集名称的格式(例如:my_user/alicia_demo)。即使您不上传到 Hugging Face Hub (--control.push_to_hub=false),这个格式也是必需的。--control.num_episodes=10: 您希望记录多少个 "回合" 或 "演示" 的数据。--control.warmup_time_s=5: 每个回合开始前,等待多少秒。这给您时间准备。--control.episode_time_s=60: 每个回合计划记录多长时间 (秒)。--control.reset_time_s=30: 每个回合结束后,给您多少时间来重置场景或机械臂到初始状态。--control.push_to_hub=false: 是否在数据收集完成后自动将数据集上传到 Hugging Face Hub。初次使用建议设为false。--robot.port="": (可选) 指定机械臂连接的串口。留空则自动搜索。如果自动搜索失败,请手动设置:Linux 示例"/dev/ttyUSB0",Windows 示例COM3(将其替换为设备管理器中显示的实际端口)。--robot.baudrate=1000000: (可选) 串口通信的波特率。Alicia-D 通常使用 921600,这是默认值。
添加摄像头 (可选):
如果您想同时记录来自一个或多个摄像头的视觉数据,您需要直接在 LeRobot 框架的配置文件中进行设置。
-
打开配置文件: 找到并打开
lerobot/common/robot_devices/robots/configs.py文件。 -
修改
AliciaDRobotConfig: 在该文件中,找到AliciaDRobotConfig类。您可以修改其cameras属性来定义您的摄像头。下面是一个示例,展示了如何配置一个名为 "front" 的前置USB摄像头和一个名为 "wrist" 的腕部USB摄像头:
@RobotConfig.register_subclass("alicia_d") @dataclass class AliciaDRobotConfig(RobotConfig): """Alicia-D机械臂的配置类""" # 串口设置 port: str = "" # 留空则自动搜索 baudrate: int = 1000000 debug_mode: bool = False # 摄像头配置 cameras: dict[str, CameraConfig] = field(default_factory=lambda: { "front": OpenCVCameraConfig( # 摄像头名称,您可以自定义,例如 "front_cam", "webcam" camera_index=0, # OpenCV 摄像头索引 (通常从0开始),或设备路径如 "/dev/video0" (Windows无路径,直接给摄像头的整数索引) fps=30, # 期望的帧率 width=640, # 图像宽度 height=480, # 图像高度 rotation=0 # 旋转角度 (可以是 0, 90, 180, -90) ), "wrist": OpenCVCameraConfig( camera_index="/dev/video2", # 另一个摄像头的设备路径或索引 (Windows无路径,直接给摄像头的整数索引) fps=30, width=640, height=480, rotation=180 ), # 您可以根据需要添加更多摄像头,或者删除不需要的摄像头 }) # 安全控制参数 max_relative_target: list[float] | float | None = None # 模拟模式 mock: bool = False def __post_init__(self): if self.mock: for cam in self.cameras.values(): if not cam.mock: cam.mock = True
cameras字典: 这是一个字典,键是您为摄像头指定的名称 (例如"front","wrist_cam"), 值是OpenCVCameraConfig(或其他摄像头类型的配置对象)。OpenCVCameraConfig参数:camera_index: 对于USB摄像头,这通常是一个数字索引 (0, 1, ...),或者是设备文件的路径 (例如"/dev/video0")。fps: 摄像头的帧率。width,height: 图像的分辨率。rotation: 如果您的摄像头安装方向导致图像是旋转的,可以使用此参数进行校正 (例如90,180,-90)。
- 您可以根据您的实际摄像头数量和参数修改此部分。如果不需要摄像头,可以将
cameras字典设置为空field(default_factory=dict)。
修改完 configs.py 文件并保存后,当您运行数据收集脚本时,LeRobot 将自动使用这些配置来连接和记录摄像头数据。命令行中不再需要添加 --robot.cameras... 参数。
一切准备就绪后,打开您的终端,确保您处于已激活 LeRobot 虚拟环境的 lerobot 文件夹根目录下。然后运行 control_robot.py 脚本并附带上您配置好的参数。
示例命令 (假设摄像头已在 configs.py 中配置):
python lerobot/scripts/control_robot.py \
--robot.type=alicia_d \
--control.type=record \
--control.fps=30 \
--control.single_task="演示如何用Alicia-D机械臂移动一个方块" \
--control.root=/home/ubuntu/lerobot_datasets \
--control.repo_id=ubuntu/alicia_demo_dataset \
--control.num_episodes=5 \
--control.warmup_time_s=5 \
--control.episode_time_s=60 \
--control.reset_time_s=20 \
--control.push_to_hub=false请务必将 /home/ubuntu/lerobot_datasets 和 ubuntu/alicia_demo_dataset 替换为您自己的路径和数据集标识符(用户名/数据集名称格式)。
示例命令 (带一个前置摄像头):
如果您已在 lerobot/common/robot_devices/robots/configs.py 中的 AliciaDRobotConfig 配置了摄像头,则运行数据收集脚本时,无需在命令行中再次指定摄像头参数。脚本会自动加载 configs.py 中的设置。
一套遥操作套件(一个操作臂一个示教臂)
export XDG_RUNTIME_DIR=/tmp
python lerobot/scripts/control_robot.py \
--robot.type=alicia_d \
--control.type=record \
--control.fps=30 \
--control.play_sounds=false \
--control.root=/home/ubuntu/lerobot_datasets \
--control.repo_id=ubuntu/alicia_visual_demo_v2 \
--control.num_episodes=5 \
--control.warmup_time_s=2 \
--control.episode_time_s=5 \
--control.reset_time_s=5 \
--control.push_to_hub=false \
--control.single_task="pick and place demo" \
--control.display_data=true两套遥操作套件(两个操作臂两个示教臂)
python lerobot/scripts/control_robot.py \
--robot.type=alicia_d_multi \
--control.type=record \
--control.fps=30 \
--control.play_sounds=false \
--control.single_task="演示如何用Alicia-D机械臂移动一个方块(带视觉)" \
--control.root=/home/ubuntu/lerobot_datasets_multi \
--control.repo_id=ubuntu/alicia_visual_demo_multi \
--control.num_episodes=10 \
--control.warmup_time_s=10 \
--control.episode_time_s=18 \
--control.reset_time_s=8 \
--control.push_to_hub=false \
--control.video=false数据收集中:
- 脚本运行后,会首先连接机械臂和摄像头。
- 预热阶段: 您有
warmup_time_s秒的时间将机械臂移动到起始姿态。 - 记录阶段: LeRobot 会提示开始记录。在此期间,您操作 Alicia-D 机械臂执行任务,LeRobot 会记录下机械臂的关节状态、夹爪状态以及摄像头图像 (如果配置了)。此阶段持续
episode_time_s秒。 - 重置阶段: 一个回合记录完成后,您有
reset_time_s秒的时间将场景和机械臂复位,为下一个回合做准备。 - 这个过程会重复
num_episodes次。
键盘控制 (在记录过程中):
- 按
→(右箭头键): 提前结束当前回合的记录 (或重置阶段) 并进入下一阶段。 - 按
←(左箭头键): 取消当前回合的记录,并重新开始记录当前回合。 - 按
ESC(退出键): 停止整个数据收集过程。
数据收集完成后,您可以在您指定的 --control.root 路径下找到生成的数据集文件夹。
LeRobot 支持两种数据集训练方式:使用本地数据集和使用 HuggingFace Hub 上的数据集。两种方式都使用相同的 repo_id 格式,主要区别在于是否需要 root 参数:
- 本地数据集:
repo_id使用username/dataset_name格式,需要配合root参数指定数据集的父目录 - HuggingFace Hub 数据集:
repo_id使用username/dataset_name格式,无需root参数(自动从 Hub 下载)
对于本地数据集,使用与数据收集时相同的 repo_id 格式(username/dataset_name),root 参数应该指向包含数据集的父目录:
重要说明:
- 本地数据集目录结构:
root_directory/username/dataset_name/ - 数据收集时创建的文件夹结构会是:
/your/root/path/username/dataset_name/
配置方法:
repo_id: 与数据收集时使用的相同格式(例如my_user/alicia_visual_demo_dataset)root: 包含数据集文件夹的父目录路径(例如/home/ubuntu/lerobot_datasets)
python lerobot/scripts/train.py \
--policy.type=diffusion \
--dataset.repo_id=username/dataset_name \
--dataset.root=/path/to/parent/directory \
--output_dir=/path/to/training_result示例:
python lerobot/scripts/train.py \
--policy.type=diffusion \
--dataset.repo_id=ubuntu/alicia_visual_demo_dataset \
--dataset.root=/home/ubuntu/lerobot_datasets \
--output_dir=/home/ubuntu/lerobot_trained_result对于 HuggingFace Hub 上的数据集,只需要指定 repo_id:
python lerobot/scripts/train.py \
--policy.type=diffusion \
--dataset.repo_id=username/dataset_name \
--output_dir=/path/to/training_result进入训练结果
/path_to_training_result/checkpoints/last/pretrained_model/config.json
确保首行已添加训练类型
"type": "diffusion",
参考examples/5_inference_dp.py修改对应参数验证训练结果
-
"未找到 Alicia-D SDK" 或 "ArmController 未初始化":
- 请确保您已正确安装 Alicia-D SDK (参见步骤2)。
- 确认您在运行 LeRobot 命令时,Alicia-D SDK 所在的 Python 环境是激活的 (或者它已安装到全局 Python 环境中,并且 LeRobot 使用的是同一个 Python 解释器)。
-
"无法连接到 Alicia-D 机械臂":
- 检查 USB 连接是否牢固,机械臂是否已通电。
- 确认机械臂的串口是否被其他程序占用。
- 尝试手动指定
--robot.port参数,例如--robot.port=/dev/ttyUSB0。您可能需要尝试不同的数字 (ttyUSB0, ttyUSB1 等)。 - 在 Linux 上,您可能需要串口的读写权限。尝试将您的用户添加到
dialout组:sudo usermod -a -G dialout $USER,然后重启计算机或重新登录。
-
"AttributeError: 'AliciaDuoRobot' object has no attribute 'some_feature'":
- 这通常表示 Alicia-D 的 LeRobot 驱动实现 (
alicia_d.py) 可能缺少了框架期望的某些属性或方法。请确保您使用的是最新或兼容版本的 LeRobot 和 Alicia-D 驱动。如果问题是最近集成的,可能需要开发者进一步调试。
- 这通常表示 Alicia-D 的 LeRobot 驱动实现 (
-
摄像头无法工作或报错:
- 确保摄像头已正确连接到 USB 端口。
- 使用
--robot.cameras.YOUR_CAM_NAME.camera_index指定的摄像头索引是否正确。您可以使用lerobot/common/robot_devices/cameras/opencv.py --images-dir outputs/cam_test来测试和识别摄像头索引。 - 尝试降低摄像头的
--fps或分辨率 (--width,--height),某些 USB 总线或摄像头可能不支持高参数配置。
-
数据记录频率不理想:
- 如果
--control.fps设置得很高,但实际感觉卡顿或日志显示帧率较低,可能是计算机性能瓶颈,或者摄像头/机械臂通信延迟。 - 确保您的
--robot.max_relative_target(在lerobot/common/robot_devices/robots/configs.py中AliciaDRobotConfig定义或通过命令行覆盖) 设置合理,以允许平滑运动。
- 如果
如果您遇到其他问题,建议查看终端输出的详细错误信息,并可以查阅 LeRobot 的 GitHub Issues 或向 Synria Robotics 技术支持寻求帮助。