SimKit 提供完整的数据生成能力,支持多种传感器数据类型和标注格式。
# 支持的数据类型
## RGB/深度/语义分割图像
- 多相机视角渲染
- 高分辨率输出
- 实时渲染支持

*RGB 渲染输出*

*边界框标注*
## 3D 边界框标注
- 自动生成 2D/3D 边界框
- 实例分割掩码
- 深度图对齐
## 点云数据
- 高精度深度图转点云
- 支持多帧融合
- 法线估计
## 批量场景变体生成
- 物体位置随机化
- 纹理和材质随机化
- 光照条件变化
# 使用示例
```python
from simkit import HssdSceneEnv, ManiSkillRenderPacketBuilder
# 创建环境
env = HssdSceneEnv(
scene="102343992",
dataset_root="/path/to/hssd",
obs_mode="state_dict",
render_mode="rgb_array",
robot_uid="r1pro"
)
# 重置环境
obs, info = env.reset(seed=0)
# 获取渲染数据包
packet = env.get_render_packet()
# 获取 RGB 图像
rgb = env.render()
# 使用数据包构建器
builder = ManiSkillRenderPacketBuilder()
built_packet = builder.build(packet)
# 访问数据
print(f"RGB shape: {rgb.shape}")
print(f"2D BBoxes: {built_packet.bboxes_2d}")
print(f"3D BBoxes: {built_packet.bboxes_3d}")
```
# 输出格式
## RGB 图像
- 格式:`numpy.ndarray`
- 形状:`(H, W, 3)`
- 数据类型:`uint8`
- 值范围:`0-255`
## 深度图
- 格式:`numpy.ndarray`
- 形状:`(H, W)`
- 数据类型:`float32`
- 单位:米
## 语义分割
- 格式:`numpy.ndarray`
- 形状:`(H, W)`
- 数据类型:`uint32`
- 值:实例 ID
## 2D 边界框
- 格式:`list[dict]`
- 字段:`x_min`, `y_min`, `x_max`, `y_max`, `label`, `instance_id`
## 3D 边界框
- 格式:`list[dict]`
- 字段:`position`, `size`, `rotation`, `label`, `instance_id`
# 批量生成
```python
from simkit.data import BatchDataGenerator
# 创建批量生成器
generator = BatchDataGenerator(
scene_templates=["scene_001.yaml", "scene_002.yaml"],
num_variants=100,
output_dir="datasets/generated"
)
# 配置域随机化
generator.set_domain_randomization(
object_positions=True,
textures=True,
lighting=True
)
# 生成数据
generator.generate()
```
# 数据导出
## COCO 格式
```python
from simkit.data.export import export_to_coco
export_to_coco(
dataset_path="datasets/generated",
output_path="datasets/coco_format",
include_masks=True,
include_keypoints=False
)
```
## YOLO 格式
```python
from simkit.data.export import export_to_yolo
export_to_yolo(
dataset_path="datasets/generated",
output_path="datasets/yolo_format",
classes=["object_1", "object_2", "object_3"]
)
```
# 性能指标
| 配置 | 单 GPU | 多 GPU (8) |
|------|-------|-----------|
| RGB (512x512) | 60 FPS | 480 FPS |
| 深度图 | 60 FPS | 480 FPS |
| 语义分割 | 45 FPS | 360 FPS |
| 3D 边界框 | 60 FPS | 480 FPS |
---
# 🔍 验证项
## 0. HSSD 机器人放置位置生成
**目标**: 在 HSSD 场景中自动找到合适的 R1 Pro 机器人放置位置
**验证内容**:
- [ ] 场景文件解析 (HSSD JSON 格式)
- [ ] 桌子/工作台检测
- [ ] 机器人基座位置计算
- [ ] 8 个候选位置生成 (围绕桌子)
- [ ] 碰撞检测
- [ ] 可达性验证
- [ ] 工作空间覆盖验证
- [ ] 稳定性评分计算
- [ ] 批量场景处理
**实现文件**:
- `simkit/simulators/maniskill/hssd_robot_placer.py`
- `test/simulators/maniskill/test_hssd_robot_placer.py`
**使用示例**:
```python
from simkit import HSSDRobotPlacer
# 创建放置器
placer = HSSDRobotPlacer(robot_uid="r1pro")
# 在场景中放置机器人
report = placer.place_robot_in_scene("102343992")
# 访问报告
print(f"位置:{report.placement.position}")
print(f"距离桌子:{report.placement.distance_to_table}m")
print(f"工作空间覆盖:{report.workspace_coverage}")
print(f"稳定性评分:{report.stability_score}")
```
**预期输出**:
- 8 个候选位置 (围绕桌子 0.8m)
- 碰撞检测报告
- 可达性验证结果
- 稳定性评分 (0-1)
**状态**: [完成]
---
## 1. R1 Pro 相机图像生成
**目标**: 直接从 R1 Pro 机器人的相机中生成图像数据
**验证内容**:
- [ ] R1 Pro 相机内参正确配置
- [ ] 多相机视角同步渲染
- [ ] 图像分辨率可配置 (224x224, 512x512, 1024x1024)
- [ ] RGB/深度/语义分割图像对齐
- [ ] 相机位姿与机器人关节状态同步
**实现文件**:
- `simkit/simulators/maniskill/r1pro_camera_renderer.py`
- `test/simulators/maniskill/test_r1pro_camera.py`
**使用示例**:
```python
from simkit import R1ProCameraRenderer
# 创建 R1 Pro 相机渲染器
renderer = R1ProCameraRenderer(
robot_uid="r1pro",
scene="102343992",
cameras=["head_camera", "left_wrist", "right_wrist"]
)
# 渲染所有相机图像
images = renderer.render_all_cameras()
# 访问图像
head_rgb = images["head_camera"]["rgb"]
head_depth = images["head_camera"]["depth"]
left_wrist_rgb = images["left_wrist"]["rgb"]
```
**状态**: [计划]
---
## 2. ReplicaCAD 房间场景测试
**目标**: 验证 ManiSkill 自带的 ReplicaCAD 房间场景支持
**验证内容**:
- [ ] 统计支持的 ReplicaCAD 房间数量
- [ ] 每个房间的场景加载测试
- [ ] 房间布局验证 (家具、物体位置)
- [ ] 房间尺寸统计 (面积、高度)
- [ ] 生成房间场景清单文档
**实现文件**:
- `simkit/simulators/maniskill/replicacad_catalog.py`
- `test/simulators/maniskill/test_replicacad_rooms.py`
- `docs/maniskill/replicacad_rooms_catalog.md`
**使用示例**:
```python
from simkit import ReplicaCADManager
# 创建 ReplicaCAD 管理器
manager = ReplicaCADManager()
# 获取所有支持的房间
rooms = manager.get_all_rooms()
print(f"支持的房间数量:{len(rooms)}")
# 获取房间详情
room_info = manager.get_room_info("102343992")
print(f"房间面积:{room_info.area} m²")
print(f"家具数量:{len(room_info.furniture)}")
# 生成房间清单
manager.generate_catalog("docs/maniskill/replicacad_rooms_catalog.md")
```
**预期输出**:
- 房间总数统计
- 房间类型分布 (卧室、客厅、厨房、浴室等)
- 房间面积分布
- 家具配置统计
**状态**: [计划]
---
# 相关文档
- [API 手册](appendix-a-api.md) - 详细 API 参考
- [详细安装指南](appendix-b-install.md) - 环境配置
- [常见问题](appendix-d-faq.md) - 问题排查
---
**文档生成时间**: 2026-04-21
**SimKit 版本**: 0.1.0