相机配置参数详解
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
工作流程:
- 脚本会显示实时的仿真/真实图像叠加效果
- 使用键盘调整仿真相机位置:
W/S:前后移动A/D:左右移动↑/↓:上下移动←/→:调整 FOVBackspace:重置
- 当两个图像完美对齐后,按
Ctrl+C保存 - 参数会自动保存到
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:相机看不到机器人
症状:仿真图像中机器人不在视野内
原因 :pos 或 target 设置不当
解决方案:
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]
}
}