WSL2 环境中校准&遥操作 SO-101 机械臂

windows串口映射到WSL2

枚举windows中的USB设备

shell 复制代码
$ (lerobot) PS D:\projects\lerobot> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
2-4    04f3:0c82  ELAN WBF Fingerprint Sensor                                   Not shared
2-5    04f2:b7e9  HP 5MP Camera, HP IR Camera, Camera DFU Device                Not shared
2-6    5843:7884  Web Camera                                                    Not shared
2-9    046d:c52b  Logitech USB Input Device, USB 输入设备                       Not shared
2-10   8087:0037  英特尔(R) 无线 Bluetooth(R)                                   Not shared
3-2    1a86:55d3  USB-Enhanced-SERIAL CH343 (COM7)                              Not shared
3-3    1a86:55d3  USB-Enhanced-SERIAL CH343 (COM4)                              Shared
4-1    0b95:1790  ASIX USB to Gigabit Ethernet Family Adapter                   Not shared

共享串口

shell 复制代码
(lerobot) PS D:\projects\lerobot> usbipd bind --busid 3-2
(lerobot) PS D:\projects\lerobot> usbipd bind --busid 3-3
usbipd: info: Device with busid '3-3' was already shared.
(lerobot) PS D:\projects\lerobot> usbipd attach --wsl --busid 3-2
usbipd: info: Using WSL distribution 'Ubuntu-22.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Detected networking mode 'mirrored'.
usbipd: info: Using IP address 127.0.0.1 to reach the host.
(lerobot) PS D:\projects\lerobot> usbipd attach --wsl --busid 3-3
usbipd: info: Using WSL distribution 'Ubuntu-22.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Detected networking mode 'mirrored'.
usbipd: info: Using IP address 127.0.0.1 to reach the host.
(lerobot) PS D:\projects\lerobot> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
2-4    04f3:0c82  ELAN WBF Fingerprint Sensor                                   Not shared
2-5    04f2:b7e9  HP 5MP Camera, HP IR Camera, Camera DFU Device                Not shared
2-6    0000:0002  未知 USB 设备(设备描述符请求失败)                             Not shared
2-9    046d:c52b  Logitech USB Input Device, USB 输入设备                       Not shared
2-10   8087:0037  英特尔(R) 无线 Bluetooth(R)                                   Not shared
3-2    1a86:55d3  USB-Enhanced-SERIAL CH343 (COM7)                              Attached
3-3    1a86:55d3  USB-Enhanced-SERIAL CH343 (COM4)                              Attached
4-1    0b95:1790  ASIX USB to Gigabit Ethernet Family Adapter                   Not shared

在WSL2中查看串口已映射

shell 复制代码
$ (lerobot) hugh@HUGH:~/lerobot$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1
Serail SO-101 ARM
ttyACM0 hugh_follower_arm
ttyACM1 hugh_leader_arm

校准leader arm

shell 复制代码
$ lerobot-calibrate     --teleop.type=so101_leader     --teleop.port=/dev/ttyACM1     --teleop.id=hugh_leader_arm

校准follower arm

shell 复制代码
$ lerobot-calibrate     --teleop.type=so101_leader     --teleop.port=/dev/ttyACM0     --teleop.id=hugh_follower_arm

遥操作

shell 复制代码
$  lerobot-teleoperate     --robot.type=so101_follower     --robot.port=/dev/ttyACM0     --robot.id=hugh_follower_arm     --teleop.type=so101_leader     --teleop.port=/dev/ttyACM1     --teleop.id=hugh_leader_arm

hugging face SO-101 ARM teleop

遥操作架构

数据流

数据集存储格式

shell 复制代码
my_dataset/
├── meta/
│   ├── info.json                    # fps=30, 任务描述, 特征定义
│   ├── stats.json                   # 各通道 mean/std (用于归一化)
│   ├── episodes/
│   │   └── chunk-000/
│   │       └── file-000.parquet     # 每条 episode 的起止帧索引
│   └── tasks.parquet                # 任务文本描述
├── data/
│   └── chunk-000/
│       └── file-000.parquet         # 时序数据 (每行一帧):
│                                    #   timestamp, frame_index, episode_index,
│                                    #   observation.state[6], action[6]
└── videos/
    ├── observation.images.wrist/
    │   └── chunk-000/
    │       └── file-000.mp4         # 腕部视频 (H.264, 640×480@30fps)
    └── observation.images.top/
        └── chunk-000/
            └── file-000.mp4         # 俯拍视频 (H.264, 640×480@30fps)

电机通信协议

shell 复制代码
┌────────────────────────────────────────────────┐
│                  Feetech STS3215                │
│                                                │
│  控制表 (Control Table):                        │
│  ┌──────────────────┬──────┬────────┐          │
│  │ 寄存器            │ 地址  │ 大小    │          │
│  ├──────────────────┼──────┼────────┤          │
│  │ Model_Number     │ 3    │ 2B(R)  │          │
│  │ ID               │ 5    │ 1B     │          │
│  │ Baud_Rate        │ 6    │ 1B     │          │
│  │ Min_Position     │ 9    │ 2B     │          │
│  │ Max_Position     │ 11   │ 2B     │          │
│  │ Max_Torque       │ 16   │ 2B     │          │
│  │ Homing_Offset    │ 31   │ 2B     │          │
│  │ Torque_Enable    │ 40   │ 1B     │          │
│  │ Goal_Position    │ 42   │ 2B(W)  │          │
│  │ Present_Position │ 56   │ 2B(R)  │          │
│  │ Present_Load     │ 60   │ 2B(R)  │          │
│  └──────────────────┴──────┴────────┘          │
│                                                │
│  参数: 分辨率 4096, 波特率 1Mbps, 协议 v0      │
└────────────────────────────────┘

控制循环时序

shell 复制代码
时间 →
帧0          帧1          帧2          帧3
│            │            │            │
├─ 读取从手位置 ├─ 读取从手位置 ├─ 读取从手位置 ├─ 读取从手位置
├─ 读取主手位置 ├─ 读取主手位置 ├─ 读取主手位置 ├─ 读取主手位置
├─ 采集腕部图像 ├─ 采集腕部图像 ├─ 采集腕部图像 ├─ 采集腕部图像
├─ 采集俯拍图像 ├─ 采集俯拍图像 ├─ 采集俯拍图像 ├─ 采集俯拍图像
├─ 写入 parquet ├─ 写入 parquet ├─ 写入 parquet ├─ 写入 parquet
├─ 推入视频帧   ├─ 推入视频帧   ├─ 推入视频帧   ├─ 推入视频帧
│            │            │            │
  ← 33ms →    ← 33ms →    ← 33ms →    ← 33ms →
  (30 FPS)

usbipd 命令详解

usbipd 是 Windows 上的 USB/IP 工具,用于将 Windows 主机上的 USB 设备共享给 WSL2(Windows Subsystem for Linux 2)使用。下面详细介绍三个核心命令。

1. usbipd list

usbipd list 命令用于列出 Windows 主机上所有可用的 USB 设备及其状态。

命令语法

shell 复制代码
usbipd list

输出说明

执行后输出类似以下格式:

shell 复制代码
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
2-4    04f3:0c82  ELAN WBF Fingerprint Sensor                                   Not shared
3-2    1a86:55d3  USB-Enhanced-SERIAL CH343 (COM7)                              Not shared
3-3    1a86:55d3  USB-Enhanced-SERIAL CH343 (COM4)                              Shared

各列含义:

  • BUSID :USB 总线标识符,格式为 总线号-设备号(如 3-2),用于唯一标识设备在系统中的位置。
  • VID:PID :供应商ID:产品ID,用于标识设备类型(如 1a86:55d3 表示 CH343 串口芯片)。
  • DEVICE:设备名称或描述。
  • STATE :设备共享状态:
    • Not shared:设备未共享,仅 Windows 可用。
    • Shared:设备已共享给 WSL2,但 WSL2 尚未连接。
    • Attached:设备已共享且 WSL2 已连接。

使用场景

  • 查看所有 USB 设备列表。
  • 确认目标设备的 BUSID(用于后续 bindattach 命令)。
  • 检查设备当前共享状态。

2. usbipd bind --busid 3-2

usbipd bind 命令用于将指定的 USB 设备从 Windows 主机共享(绑定)给 WSL2。

命令语法

shell 复制代码
usbipd bind --busid <BUSID>

示例:

shell 复制代码
usbipd bind --busid 3-2

参数说明

  • --busid <BUSID>:必需参数,指定要绑定的 USB 设备的 BUSID(通过 usbipd list 获取)。

命令作用

  1. 驱动切换:在 Windows 端卸载该设备的原生驱动程序,加载 USB/IP 虚拟总线驱动。
  2. 网络暴露:通过 TCP/IP 网络将设备暴露给 WSL2,使 WSL2 能够通过网络访问该设备。
  3. 状态变更 :设备状态从 Not shared 变为 Shared

注意事项

  • 需要管理员权限运行(在管理员 PowerShell 或命令提示符中执行)。
  • 执行前确保设备未被 Windows 应用程序占用。
  • 绑定后设备在 Windows 端将不可用,直到解除绑定。
  • 若要撤销绑定,使用 usbipd unbind --busid <BUSID>

3. usbipd attach --wsl --busid 3-2

usbipd attach 命令用于在 WSL2 内部连接(挂载)已由 Windows 共享的 USB 设备。

命令语法

shell 复制代码
usbipd attach --wsl --busid <BUSID>

示例:

shell 复制代码
usbipd attach --wsl --busid 3-2

参数说明

  • --wsl:指定目标为 WSL2 环境(默认使用默认的 WSL2 发行版)。
  • --busid <BUSID>:必需参数,指定要连接的设备的 BUSID。

命令作用

  1. 建立连接:在 WSL2 内部通过 USB/IP 客户端连接到 Windows 主机上已共享的设备。
  2. 创建设备节点 :在 WSL2 的 /dev 目录下创建对应的设备文件(如串口设备通常为 /dev/ttyUSB*/dev/ttyACM*)。
  3. 状态变更 :设备状态从 Shared 变为 Attached

输出示例

shell 复制代码
usbipd: info: Using WSL distribution 'Ubuntu-22.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Detected networking mode 'mirrored'.
usbipd: info: Using IP address 127.0.0.1 to reach the host.

注意事项

  • 该命令在 WSL2 内部的 Linux 终端中执行(不是在 Windows PowerShell 中)。
  • 需要确保 Windows 端已通过 usbipd bind 共享了该设备。
  • 连接成功后,即可在 WSL2 中像使用本地 USB 设备一样使用该设备。

完整工作流程示例

以共享串口设备 COM7(BUSID: 3-2)为例:

  1. 查看设备列表(Windows PowerShell):

    shell 复制代码
    usbipd list
  2. 绑定设备(Windows PowerShell,管理员权限):

    shell 复制代码
    usbipd bind --busid 3-2
  3. 连接设备(WSL2 终端):

    shell 复制代码
    usbipd attach --wsl --busid 3-2
  4. 在 WSL2 中验证

    shell 复制代码
    ls /dev/ttyUSB*   # 或 /dev/ttyACM*

通过这三个命令的配合,即可实现 Windows USB 设备到 WSL2 的完整映射。

相关推荐
REDcker4 天前
远程实时操控技术详解
音视频·实时音视频·数据采集·遥控·遥操作·数据闭环·远程操控
五羟基己醛1 个月前
【Robotics】半小时入门具身智能之复现一篇顶会论文--足式机器人的自适应能量步态控制
人工智能·机器人·robot·具身智能
五羟基己醛1 个月前
【Robotics】半小时入门具身智能之Win11下IsaacSim环境搭建
机器人·robot·具身智能·isaacsim
五羟基己醛1 个月前
【Robotics】半小时入门具身智能之手动创建第一个项目
机器人·robot·具身智能·isaacsim
PNP机器人1 个月前
基于视觉运动扩散与 AR 遥操作的多指灵巧手在手操控学习研究
人工智能·遥操作·灵巧手
:mnong2 个月前
跟着 Sesame Robot 项目学习
人工智能·robot·esp
机器人小白6142 个月前
2026 Jetson AGX Orin安装Isaac ROS指南
智能硬件·jetson·robot·具身智能
BBTSOH159015160442 个月前
3D System力反馈的touch,touch x,Premium 1.5/六自由度的主要区别
机械臂·虚拟现实·人形机器人·机械手·遥操作·3d syestem·力反馈
BBTSOH159015160443 个月前
VR每日简报2026.4.14
人工智能·机器人·vr·具身智能·人形机器人·机械手·遥操作