LeRobot Sim2Real相机配置参数详解

相机配置参数详解

1. base_camera_settings - 基础相机设置

这是整个配置文件的核心部分,定义了仿真环境中虚拟相机的位置和参数。

pos - 相机位置 (3D 坐标)
json 复制代码
"pos": [0.69, 0.37, 0.28]

含义:相机在 3D 空间中的位置(单位:米)

维度 含义 说明
X 轴 0.69 相机距离机器人基座的前后距离 正值 = 相机在机器人前方
Y 轴 0.37 相机距离机器人基座的左右距离 正值 = 相机在机器人右侧
Z 轴 0.28 相机距离桌面的高度 正值 = 相机在桌面上方

坐标系统

复制代码
           Z (高度)
           ↑
           |
           |
           |________→ X (前后)
          /
         /
        ↙ Y (左右)

机器人基座位于原点 (0, 0, 0)
桌面高度为 Z = 0

实际含义(以您的配置为例):

  • 相机在机器人前方 69cm
  • 相机在机器人右侧 37cm
  • 相机在桌面上方 28cm

fov - 视野角度
json 复制代码
"fov": 0.8256

含义 :相机的垂直视野角度(Field of View),单位:弧度(radians)

换算

python 复制代码
0.8256 弧度 = 0.8256 × (180 / π) ≈ 47.3°

作用

  • 决定相机能看到多大的范围
  • 值越大 → 视野越广 → 能看到的场景越多(但会产生更多畸变)
  • 值越小 → 视野越窄 → 相当于"望远镜"效果

常见值参考

FOV (弧度) FOV (角度) 效果
0.52 30° 窄视野(望远效果)
0.79 45° 标准视野
0.83 47° 您的当前配置
1.05 60° 广角
1.57 90° 超广角

target - 相机指向目标点
json 复制代码
"target": [0.185, -0.15, 0.0]

含义:相机镜头瞄准的 3D 空间中的点(单位:米)

维度 含义
X 轴 0.185 目标点在机器人前方 18.5cm
Y 轴 -0.15 目标点在机器人左侧 15cm
Z 轴 0.0 目标点在桌面高度

作用

  • 定义相机的朝向(从 pos 看向 target
  • 相机会自动计算旋转角度,使镜头中心对准这个点

可视化(俯视图):

复制代码
        Y (左右)
        ↑
        |
  ------+------- X (前后)
        |
        
📷 相机位置 pos = (0.69, 0.37, 0.28)
        |
        |  视线方向
        |    ↘
        |      ↘
        |        ↘
        |          ⊙ 目标点 target = (0.185, -0.15, 0.0)
        |         (大约在工作区中心)
        |
   🤖 机器人 (0, 0, 0)

🖼️ 其他配置参数详解

2. greenscreen_overlay_path - 绿幕背景路径

json 复制代码
"greenscreen_overlay_path": "/home/liuchaoqun03/workspace/lerobot-sim2real/greenscreen.png"

含义:真实背景图像的绝对路径

作用

  • 在训练时,将仿真机器人叠加到真实背景上
  • 提高 Sim2Real 迁移效果
  • 使仿真环境看起来更像真实环境

要求

  • 必须是从真实相机拍摄的背景图(机器人已移除)
  • 路径必须存在且可访问

3. spawn_box_pos - 方块生成位置

json 复制代码
"spawn_box_pos": [0.3, 0.05]

含义:方块生成区域的中心位置(单位:米)

维度 含义
X 轴 0.3 方块在机器人前方 30cm
Y 轴 0.05 方块在机器人中心稍微右侧 5cm

作用

  • 定义方块随机生成的中心区域
  • 配合 spawn_box_half_size 形成一个矩形区域

4. spawn_box_half_size - 方块生成区域半径

json 复制代码
"spawn_box_half_size": 0.1

含义:方块生成区域的半径(单位:米)

实际生成范围

复制代码
X 轴范围:[0.3 - 0.1, 0.3 + 0.1] = [0.2m, 0.4m]
Y 轴范围:[0.05 - 0.1, 0.05 + 0.1] = [-0.05m, 0.15m]

可视化(俯视图):

复制代码
     Y
     ↑
     |
  0.15|    ┌─────────┐
     |    │         │  ← 方块随机生成区域
  0.05|    │    ⊗    │     (20cm × 20cm 正方形)
     |    │         │
 -0.05|    └─────────┘
     |
  ───┼────┼────┼────┼──→ X
     0   0.2  0.3  0.4
          
   🤖 机器人 (0, 0)

5. domain_randomization_config - 域随机化配置

json 复制代码
"domain_randomization_config": {
  "robot_color": [1.0, 1.0, 1.0]
}

含义:训练时机器人的颜色随机化配置

参数 含义
robot_color [1.0, 1.0, 1.0] RGB 颜色 (白色)

RGB 值范围[0.0, 1.0]

  • [1.0, 1.0, 1.0] = 白色
  • [1.0, 0.0, 0.0] = 红色
  • [0.0, 1.0, 0.0] = 绿色
  • [0.0, 0.0, 1.0] = 蓝色

作用

  • 通过随机化机器人颜色,提高策略的泛化能力
  • 防止神经网络过度依赖机器人的视觉外观

🔧 如何正确设置相机位置

方法1:使用相机对齐脚本(推荐)

这是最简单且最准确的方法:

bash 复制代码
# 运行相机对齐脚本
./run.sh camera

工作流程

  1. 脚本会显示实时的仿真/真实图像叠加效果
  2. 使用键盘调整仿真相机位置:
    • W/S:前后移动
    • A/D:左右移动
    • ↑/↓:上下移动
    • ←/→:调整 FOV
    • Backspace:重置
  3. 当两个图像完美对齐后,按 Ctrl+C 保存
  4. 参数会自动保存到 env_config.json

对齐效果示例

复制代码
理想对齐:
┌─────────────────────┐
│  仿真机器人边缘      │
│  与真实机器人边缘    │  ← 完美重合
│  完全重合           │
└─────────────────────┘

不良对齐:
┌─────────────────────┐
│  仿真机器人 ≠       │
│  真实机器人         │  ← 位置偏差
└─────────────────────┘

方法2:手动测量和计算

如果您想手动设置,需要测量真实相机的物理位置:

步骤1:测量真实相机位置

使用卷尺测量:

复制代码
1. X 轴(前后):
   - 测量相机镜头中心到机器人基座的水平距离
   - 示例:69cm

2. Y 轴(左右):
   - 测量相机镜头中心距离机器人中心线的距离
   - 向右为正,向左为负
   - 示例:37cm(右侧)

3. Z 轴(高度):
   - 测量相机镜头中心距离桌面的垂直高度
   - 示例:28cm
步骤2:测量相机 FOV

方法A:查相机规格

  • 查看相机产品说明书
  • 常见 USB 相机 FOV:60°-70°

方法B:实际测量

python 复制代码
import math

# 测量方法:
# 1. 在距离相机 d 米处放置物体
# 2. 测量相机能看到的画面宽度 w
# 3. 计算 FOV

d = 0.5  # 相机到物体距离(米)
w = 0.6  # 画面宽度(米)

# 计算水平 FOV(假设 16:9 比例)
fov_h = 2 * math.atan(w / (2 * d))
# 转换为垂直 FOV(用于配置)
fov_v = fov_h * (3/4)  # 4:3 比例

print(f"垂直 FOV: {fov_v:.4f} 弧度 ({math.degrees(fov_v):.1f}°)")
步骤3:计算 target 点
python 复制代码
# target 应该指向工作区域的中心
# 通常是方块生成区域的中心

spawn_center_x = 0.3
spawn_center_y = 0.05
target = [spawn_center_x, spawn_center_y, 0.0]  # Z=0 表示桌面高度

📐 参数调整指南

场景1:相机看不到机器人

症状:仿真图像中机器人不在视野内

原因postarget 设置不当

解决方案

json 复制代码
// 调整相机位置,让它更靠近机器人
"pos": [0.5, 0.2, 0.25],  // 减小 X 和 Y 值
"target": [0.0, 0.0, 0.1]   // 指向机器人中心

场景2:视角太宽/太窄

症状:相机视野范围不合适

解决方案

json 复制代码
// 视野太窄(看不全)→ 增大 FOV
"fov": 1.0,  // 从 0.83 增加到 1.0

// 视野太宽(畸变严重)→ 减小 FOV
"fov": 0.7,  // 从 0.83 减少到 0.7

场景3:相机角度不对

症状:相机俯视角度太大/太小

解决方案

json 复制代码
// 增加俯视角度 → 提高相机高度
"pos": [0.69, 0.37, 0.40],  // Z 从 0.28 增加到 0.40

// 减少俯视角度 → 降低相机高度
"pos": [0.69, 0.37, 0.20],  // Z 从 0.28 减少到 0.20

✅ 验证配置是否正确

检查清单

  • pos 值合理(X: 0.5-1.0m, Y: 0.2-0.5m, Z: 0.2-0.4m)
  • fov 值合理(0.7-1.2 弧度 / 40°-70°)
  • target 指向工作区域中心
  • greenscreen_overlay_path 文件存在
  • spawn_box_pos 在机器人工作范围内
  • 运行相机对齐脚本验证效果

测试命令

bash 复制代码
# 测试配置是否正确
./run.sh camera

# 如果看到合理的图像叠加效果,说明配置正确 ✅

💡 最佳实践建议

1. 使用相机对齐脚本

不要手动计算,让脚本自动生成配置。

2. 记录物理设置

  • 拍照记录相机的物理位置
  • 在相机支架上做标记
  • 避免后续意外移动相机

3. 定期验证

  • 每次开始训练前运行对齐检查
  • 确保相机没有移动

4. 备份配置

bash 复制代码
cp env_config.json env_config.json.backup

📝 配置文件模板

json 复制代码
{
  "base_camera_settings": {
    "pos": [0.69, 0.37, 0.28],           // 相机 3D 位置 [X, Y, Z]
    "fov": 0.8256,                        // 视野角度(弧度)
    "target": [0.185, -0.15, 0.0]        // 相机指向点 [X, Y, Z]
  },
  "greenscreen_overlay_path": "greenscreen.png",  // 背景图路径
  "spawn_box_pos": [0.3, 0.05],          // 方块生成中心 [X, Y]
  "spawn_box_half_size": 0.1,            // 生成区域半径
  "domain_randomization_config": {
    "robot_color": [1.0, 1.0, 1.0]       // 机器人颜色 [R, G, B]
  }
}

希望这个详细的解释帮助您理解配置文件!如果还有疑问,请随时询问。🚀

json 复制代码
"pos": [0.69, 0.37, 0.28]
plaintext 复制代码
           Z (高度)
           ↑
           |
           |
           |________→ X (前后)
          /
         /
        ↙ Y (左右)

机器人基座位于原点 (0, 0, 0)
桌面高度为 Z = 0
json 复制代码
"fov": 0.8256
python 复制代码
0.8256 弧度 = 0.8256 × (180 / π) ≈ 47.3°
json 复制代码
"target": [0.185, -0.15, 0.0]
plaintext 复制代码
        Y (左右)
        ↑
        |
  ------+------- X (前后)
        |
        
📷 相机位置 pos = (0.69, 0.37, 0.28)
        |
        |  视线方向
        |    ↘
        |      ↘
        |        ↘
        |          ⊙ 目标点 target = (0.185, -0.15, 0.0)
        |         (大约在工作区中心)
        |
   🤖 机器人 (0, 0, 0)
json 复制代码
"greenscreen_overlay_path": "/home/liuchaoqun03/workspace/lerobot-sim2real/greenscreen.png"
json 复制代码
"spawn_box_pos": [0.3, 0.05]
json 复制代码
"spawn_box_half_size": 0.1
plaintext 复制代码
X 轴范围:[0.3 - 0.1, 0.3 + 0.1] = [0.2m, 0.4m]
Y 轴范围:[0.05 - 0.1, 0.05 + 0.1] = [-0.05m, 0.15m]
plaintext 复制代码
     Y
     ↑
     |
  0.15|    ┌─────────┐
     |    │         │  ← 方块随机生成区域
  0.05|    │    ⊗    │     (20cm × 20cm 正方形)
     |    │         │
 -0.05|    └─────────┘
     |
  ───┼────┼────┼────┼──→ X
     0   0.2  0.3  0.4
          
   🤖 机器人 (0, 0)
json 复制代码
"domain_randomization_config": {
  "robot_color": [1.0, 1.0, 1.0]
}
shellscript 复制代码
# 运行相机对齐脚本
./run.sh camera
plaintext 复制代码
理想对齐:
┌─────────────────────┐
│  仿真机器人边缘      │
│  与真实机器人边缘    │  ← 完美重合
│  完全重合           │
└─────────────────────┘

不良对齐:
┌─────────────────────┐
│  仿真机器人 ≠       │
│  真实机器人         │  ← 位置偏差
└─────────────────────┘
plaintext 复制代码
1. X 轴(前后):
   - 测量相机镜头中心到机器人基座的水平距离
   - 示例:69cm

2. Y 轴(左右):
   - 测量相机镜头中心距离机器人中心线的距离
   - 向右为正,向左为负
   - 示例:37cm(右侧)

3. Z 轴(高度):
   - 测量相机镜头中心距离桌面的垂直高度
   - 示例:28cm
python 复制代码
import math

# 测量方法:
# 1. 在距离相机 d 米处放置物体
# 2. 测量相机能看到的画面宽度 w
# 3. 计算 FOV

d = 0.5  # 相机到物体距离(米)
w = 0.6  # 画面宽度(米)

# 计算水平 FOV(假设 16:9 比例)
fov_h = 2 * math.atan(w / (2 * d))
# 转换为垂直 FOV(用于配置)
fov_v = fov_h * (3/4)  # 4:3 比例

print(f"垂直 FOV: {fov_v:.4f} 弧度 ({math.degrees(fov_v):.1f}°)")
python 复制代码
# target 应该指向工作区域的中心
# 通常是方块生成区域的中心

spawn_center_x = 0.3
spawn_center_y = 0.05
target = [spawn_center_x, spawn_center_y, 0.0]  # Z=0 表示桌面高度
json 复制代码
// 调整相机位置,让它更靠近机器人
"pos": [0.5, 0.2, 0.25],  // 减小 X 和 Y 值
"target": [0.0, 0.0, 0.1]   // 指向机器人中心
json 复制代码
// 视野太窄(看不全)→ 增大 FOV
"fov": 1.0,  // 从 0.83 增加到 1.0

// 视野太宽(畸变严重)→ 减小 FOV
"fov": 0.7,  // 从 0.83 减少到 0.7
json 复制代码
// 增加俯视角度 → 提高相机高度
"pos": [0.69, 0.37, 0.40],  // Z 从 0.28 增加到 0.40

// 减少俯视角度 → 降低相机高度
"pos": [0.69, 0.37, 0.20],  // Z 从 0.28 减少到 0.20
shellscript 复制代码
# 测试配置是否正确
./run.sh camera

# 如果看到合理的图像叠加效果,说明配置正确 ✅
shellscript 复制代码
cp env_config.json env_config.json.backup
json 复制代码
{
  "base_camera_settings": {
    "pos": [0.69, 0.37, 0.28],           // 相机 3D 位置 [X, Y, Z]
    "fov": 0.8256,                        // 视野角度(弧度)
    "target": [0.185, -0.15, 0.0]        // 相机指向点 [X, Y, Z]
  },
  "greenscreen_overlay_path": "greenscreen.png",  // 背景图路径
  "spawn_box_pos": [0.3, 0.05],          // 方块生成中心 [X, Y]
  "spawn_box_half_size": 0.1,            // 生成区域半径
  "domain_randomization_config": {
    "robot_color": [1.0, 1.0, 1.0]       // 机器人颜色 [R, G, B]
  }
}
相关推荐
线束线缆组件品替网3 小时前
Aries Electronics 定制线缆选型与设计建议
数码相机·测试工具·智能手机·电脑·pcb工艺
风途知识百科3 小时前
小型车载自动气象站
人工智能·数码相机
代码s贝多芬的音符6 小时前
IOS webview打开相机 相册 选择文件上传
数码相机·ios
格林威21 小时前
跨设备图像拼接:统一色彩偏差的8个核心策略,附OpenCV+Halcon实战代码!
人工智能·数码相机·opencv·机器学习·计算机视觉·视觉检测·工业相机
DaLiangChen1 天前
Unity 导览相机实现:键鼠控制自由漫游(WASD 移动 + 右键旋转)
数码相机·unity·游戏引擎
风途知识百科3 天前
el缺陷检测仪 检测光伏板性能质量的测试设备
数码相机
驱动开发0073 天前
UVC 红外相机初始化流程 setup包解析
驱动开发·数码相机·云计算·usb重定向
Tel199253080044 天前
CCD触发相机触发高速同步脉冲分配器
数码相机
线束线缆组件品替网5 天前
服务器和交换机链路:Amphenol ICC 电缆组件实用解析
数码相机·电脑·硬件工程·材料工程·智能电视