仿真数据生成与转换#
本页对应软件仓库的 alohamini_sim/,与 一代 ROS 2 可视化 是两套用途不同的流程。前者生成场景和数据,后者查看 URDF 与关节结构。
1. 先理解三个环节#
环节 |
输入与输出 |
运行环境 |
|---|---|---|
video2sim |
手机视频 → 场景外观、碰撞体与 Isaac USD |
独立 GPU 工具链 |
数据引擎 |
任务、机器人和环境 → episode 字典 |
ManiSkill / SAPIEN 等执行环境 |
LeRobot bridge |
episode 字典 → LeRobotDataset v3 |
|
场景重建完成不会自动生成抓取演示。需要在数据引擎里准备任务、控制器、技能和相机,生成轨迹,再交给 bridge 转换。
2. 当前机器人与维度限制#
重要
当前 lerobot_bridge.py 使用 SIM_ARM_PROFILE = "so-arm-5dof",输出 16 维 state/action。输入仿真 qpos 的 18 个值不等于 AlohaMini 2 / 2 Pro 的 18 维接口。它不能直接作为二代整机的混合训练数据。
数据 |
原始含义 |
转换后 |
|---|---|---|
|
18 维仿真状态 |
取对应关节、夹爪、底盘与升降,生成 16 维状态 |
|
16 维控制目标 |
转换为 16 维动作 |
双臂关节 |
弧度 |
当前保持原值,需要自行与真机归一化或角度语义对齐 |
夹爪 |
指关节位移,单位米 |
默认保留;可用闭合/张开范围转换到 0–100 |
底盘 x/y |
世界坐标位置或目标 |
转为机体坐标系速度,单位 m/s |
底盘旋转 |
yaw 或目标角度 |
转为角速度,单位 deg/s |
升降 |
米 |
转为毫米 |
即使特征名称相同,也要检查单位、夹爪范围、相机、动作时序和校准。输出数据集可被读取,仅说明格式成立。
3. 准备执行环境和模型资产#
数据引擎目录包含 aspire_engine、intern_engine 和机器人 agent。执行 rollout 需要外部 ManiSkill、SAPIEN、Torch、GPU 与 Vulkan;本站的软件安装环境不自动具备这些条件。
示例使用的 aloha_mini_pro_v2.urdf、aloha_mini_pro_v3.urdf、maniskill_so100_version.urdf 未随当前版本提供。先补齐与 agent 匹配的模型及网格;必要时通过 ALOHAMINI_URDF_DIR 指定模型目录。不要把“Pro”文件名直接等同于当前 2 Pro 的 AM 从臂配置。
技能组织、触发和元数据见 技能库。不同任务需要按实际环境注册和任务定义配置执行器。
4. 准备 bridge 环境#
在软件仓库根目录运行:
uv sync --locked --extra test --extra dataset
uv run pytest tests/test_alohamini_sim_bridge.py tests/test_alohamini_sim_engine_imports.py -svv
这些测试用小型合成 episode 检查转换、特征和读写。没有安装 ManiSkill 时,执行器导入测试可能跳过;这不代表真实仿真 rollout 已验证。
5. 核对 episode 结构#
episode = {
"steps": [
{
"qpos": qpos, # float32[18]
"action": action, # float32[16]
"rgb": {"front": image}, # uint8[H, W, 3],RGB
}
],
"annotation": "Pick up the object and place it in the tray",
}
上面是结构示意,qpos、action、image 需由引擎提供真实数组。同一个数据集中的相机名称、分辨率和字段要一致,FPS 与生成轨迹的时间间隔保持一致。
6. 转成 LeRobotDataset#
将自己生成的可信 episode 保存为列表形式的 pickle 文件后,在软件仓库根目录执行:
uv run python -m alohamini_sim.data_engine.lerobot_bridge \
--episodes out/episodes.pkl \
--repo-id local/alohamini_sim_pick \
--root out/lerobot_ds \
--fps 20
pickle 会在加载时执行对象反序列化,只读取你自己生成或确认可信的文件。root 指向本次输出位置,不要覆盖已有实验。
也可以在同一环境中调用:
from alohamini_sim.data_engine.lerobot_bridge import write_episodes
write_episodes(
episodes,
repo_id="local/alohamini_sim_pick",
root="out/lerobot_ds",
fps=20,
)
仿真种子、技能 traces、command 和 final 等信息不会全部写入 LeRobot 标准字段;保留引擎原始结果,便于复现与排错。
7. 转换后的检查#
uv run lerobot-dataset-viz \
--repo-id local/alohamini_sim_pick \
--root out/lerobot_ds \
--episode-index 0 \
--display-compressed-images
逐项检查任务描述、帧数、相机颜色、动作连续性、关节顺序和单位。若目标是二代混训,需要先完成桥接器的 18 维适配,并验证真机校准映射;单纯修改 robot_type 标签不会改变数据结构。