双路相机接入与索引确认
5.1 相机扫描
bash
lerobot-find-cameras只关心 USB 相机(不带 RealSense)时可以直接指定类型,并把抓拍目录固定进项目:
bash
lerobot-find-cameras opencv --output-dir ./outputs/captured_images索引为什么会跳号:看到
0 / 1 / 2 / 8这种不连续编号是正常的。源码里两条扫描路径不一样:Linux 直接列举/dev/video*;macOS / Windows 没有可用的设备枚举接口,只能从索引 0 开始逐个尝试打开。所以 Mac 上的编号含义是「第几个能被打开的索引」,中间的空号是打不开的索引留下的,和物理插在哪个口没关系。这就是反复强调"必须先打开图看画面、再填索引"的原因。
5.2 抓拍输出与索引核对
text
Finalizing image saving...
Image capture finished. Images saved to outputs/captured_images这两行是抓拍收尾:每一路相机各存一张 png 到 outputs/captured_images/,目录相对当前工作目录(换位置用 --output-dir)。
文件名是 {相机类型}_{索引}.png,里面的数字就是相机索引——打开图看画面,就知道哪个索引是哪台相机,这是填 index_or_path 唯一可靠的依据。比如抓到的两张:opencv_0.png 是笔记本自带摄像头,opencv_1.png 是当时被端在手里朝上的那台。本该固定看环境的外置相机拿到的是 1 而不是 0——设备动过一次,索引就重排了,所以必须先看图、再填索引。
5.3 相机路数与命名
LeRobot 不是「检测到几个就用几个」,而是你在命令里写几个就用几个。只需要两路:相机(手机)装在末端,当手部特写 wrist;另一台(外置 USB)固定在一旁,看环境全局 environment。索引只是编号,务必以 lerobot-find-cameras 的实时输出为准——插拔设备后索引会重排。
bash
--robot.cameras="{wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}, \
environment: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}"wrist/environment是相机名字,后面录数据、训练都按这个名字引用,前后保持一致。index_or_path填扫描出来的索引。索引在插拔后可能重排,画面错位就重新扫一次。width/height必须和设备实际输出的帧尺寸严格一致,否则一连相机就报尺寸不匹配。fps是相机自己的采集帧率,与机器人整体的 60 Hz 是两回事,30 足够;有些相机只支持 15,改小即可。