Skip to content

Synria-Robotics/lerobot

Alicia-D 机械臂 - LeRobot 框架快速上手指南

欢迎使用 Alicia-D 机械臂与 LeRobot 框架!本指南将帮助您快速设置环境、安装必要的软件,并开始使用 Alicia-D 机械臂收集数据。即使您是机器人或编程新手,也能轻松上手。

目录

  1. 系统要求
  2. 安装 Alicia-D SDK
  3. 安装 LeRobot 框架
  4. 连接 Alicia-D 机械臂
  5. 配置数据收集参数
  6. 开始数据收集
  7. 常见问题与故障排除
  8. 可视化已收集的数据集

1. 系统要求

  • 操作系统: 推荐使用 Linux (例如 Ubuntu 20.04 或更高版本)。本指南主要基于 Linux 环境。
  • Python: 版本 3.10 或更高。
  • 硬件:
    • Alicia-D 机械臂。
    • 一台用于连接和控制机械臂的计算机。
    • USB 数据线,用于连接计算机和 Alicia-D 机械臂。
    • (可选) 如果您希望收集视觉数据,需要至少一个兼容的USB摄像头 (例如普通的网络摄像头)。

2. 安装 LeRobot 框架

LeRobot 是一个用于机器人学习的开源框架,我们将用它来控制 Alicia-D 并收集数据。

  1. 获取 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
  2. 创建虚拟环境 (推荐): 创建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 搭配较好的现代驱动版本

  3. 安装 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 .
    

  1. 安装 LeRobot 及其依赖:

    # 确保您在 lerobot 文件夹的根目录下
    # 安装 LeRobot 及其核心依赖
    cd .. # Enter the path for lerobot setup
    pip install -e .

    这将安装 LeRobot 框架本身以及运行它所必需的库。且请注意torch torchvision cuda ffmpeg 的版本匹配问题


4. 连接 Alicia-D 机械臂

  1. 物理连接:

    • 使用 USB 数据线将 Alicia-D 遥操套件的示教臂连接到您的计算机。
    • 确保机械臂已通电 (如果需要外部电源)。
    • (可选) 如果您要使用摄像头,也将摄像头连接到计算机的USB端口。
  2. 检查连接 (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
    
  3. 检查连接 (Windows): 在 Windows 系统上,连接机械臂后,它会显示为一个 COM 串口(例如 COM3COM5)。您可以通过以下方式查看端口:

    • 打开“设备管理器” → 展开“端口 (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;如需修改,请与设备端设置一致。

5. 配置数据收集参数

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 框架的配置文件中进行设置。

  1. 打开配置文件: 找到并打开 lerobot/common/robot_devices/robots/configs.py 文件。

  2. 修改 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... 参数。


6. 开始数据收集

一切准备就绪后,打开您的终端,确保您处于已激活 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_datasetsubuntu/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 路径下找到生成的数据集文件夹。


7. 数据集训练

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 数据集训练

对于 HuggingFace Hub 上的数据集,只需要指定 repo_id

python lerobot/scripts/train.py \
    --policy.type=diffusion \
    --dataset.repo_id=username/dataset_name \
    --output_dir=/path/to/training_result

8. 模型验证

进入训练结果 /path_to_training_result/checkpoints/last/pretrained_model/config.json 确保首行已添加训练类型

    "type": "diffusion",

参考examples/5_inference_dp.py修改对应参数验证训练结果

9. 常见问题与故障排除

  • "未找到 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 驱动。如果问题是最近集成的,可能需要开发者进一步调试。
  • 摄像头无法工作或报错:

    • 确保摄像头已正确连接到 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.pyAliciaDRobotConfig 定义或通过命令行覆盖) 设置合理,以允许平滑运动。

如果您遇到其他问题,建议查看终端输出的详细错误信息,并可以查阅 LeRobot 的 GitHub Issues 或向 Synria Robotics 技术支持寻求帮助。


About

No description, website, or topics provided.

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages