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(用于后续
bind和attach命令)。 - 检查设备当前共享状态。
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获取)。
命令作用
- 驱动切换:在 Windows 端卸载该设备的原生驱动程序,加载 USB/IP 虚拟总线驱动。
- 网络暴露:通过 TCP/IP 网络将设备暴露给 WSL2,使 WSL2 能够通过网络访问该设备。
- 状态变更 :设备状态从
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。
命令作用
- 建立连接:在 WSL2 内部通过 USB/IP 客户端连接到 Windows 主机上已共享的设备。
- 创建设备节点 :在 WSL2 的
/dev目录下创建对应的设备文件(如串口设备通常为/dev/ttyUSB*或/dev/ttyACM*)。 - 状态变更 :设备状态从
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)为例:
-
查看设备列表(Windows PowerShell):
shellusbipd list -
绑定设备(Windows PowerShell,管理员权限):
shellusbipd bind --busid 3-2 -
连接设备(WSL2 终端):
shellusbipd attach --wsl --busid 3-2 -
在 WSL2 中验证:
shellls /dev/ttyUSB* # 或 /dev/ttyACM*
通过这三个命令的配合,即可实现 Windows USB 设备到 WSL2 的完整映射。