0 前言
官方文档:https://isaac-sim.github.io/IsaacLab/main/source/overview/teleop_imitation.html
1 遥操作
isaaclab中提供了SE(2) 和 SE(3) 空间的接口用于描述刚体运动的指令。
- SE(2) 空间的指令接口:SE(2) 描述的是 二维平面内的刚体运动(如移动机器人、AGV)。
- 返回的指令: [ v x , v y , ω z ] [v_x, v_y, ω_z] [vx,vy,ωz]
- v x v_x vx:沿 x 轴 的线速度(前进/后退)。
- v y v_y vy:沿 y 轴 的线速度(左右平移)。
- ω z ω_z ωz:绕 z 轴 的角速度(偏航速率,即转向速度)。
- SE(3) 空间的指令接口:SE(3) 描述的是 三维空间中的刚体运动(如无人机、机械臂)。
- 返回的指令: [ v x , v y , v z , ω x , ω y , ω z ] [v_x, v_y, v_z, ω_x, ω_y, ω_z] [vx,vy,vz,ωx,ωy,ωz]
- v x , v y , v z v_x, v_y, v_z vx,vy,vz:沿 x/y/z 轴 的线速度。
- ω x , ω y , ω z ω_x, ω_y, ω_z ωx,ωy,ωz:绕 x/y/z 轴 的角速度(滚转、俯仰、偏航)。
要使用键盘设备进行反向运动学 (IK) 控制:
./isaaclab.sh -p scripts/environments/teleoperation/teleop_se3_agent.py --task Isaac-Lift-Cube-Franka-IK-Rel-v0 --num_envs 1 --teleop_device keyboard
同样的可以使用 SpaceMouse等专业的 6 自由度(6-DoF)输入设备进行控制。变化--teleop_device spacemouse
./isaaclab.sh -p scripts/environments/teleoperation/teleop_se3_agent.py --task Isaac-Lift-Cube-Franka-IK-Rel-v0 --num_envs 1 --teleop_device spacemouse
NVIDIA Isaac Lab 结合 CloudXR 和 手部追踪 技术,提供了一种 沉浸式机器人遥操作方案,适用于需要高精度空间控制的任务(如装配、抓取、堆叠等)。
./isaaclab.sh -p scripts/environments/teleoperation/teleop_se3_agent.py --task Isaac-Stack-Cube-Franka-IK-Abs-v0 --teleop_device handtracking_abs --device cpu
键盘控制的指令映射(SE(3) 空间)
操作类型 | 按键 | 功能说明 |
---|---|---|
重置指令 | R | 将所有速度/位姿指令归零(急停)。 |
夹爪控制 | K | 切换夹爪的打开/关闭状态。 |
平移控制 | ||
x 轴(前后) | W/S | 沿机器人基坐标系的 x 轴正/负向移动。 |
y 轴(左右) | A/D | 沿 y 轴正/负向移动。 |
z 轴(上下) | Q/E | 沿 z 轴正/负向移动。 |
旋转控制 | ||
绕 x 轴(滚转) | Z/X | 正/负方向旋转(如机械臂“侧翻”)。 |
绕 y 轴(俯仰) | T/G | 正/负方向旋转(如机械臂“点头”)。 |
绕 z 轴(偏航) | C/V | 正/负方向旋转(如机械臂“水平转向”)。 |
SpaceMouse 控制的指令映射(SE(3) 空间)
操作类型 | 输入方式 | 功能说明 |
---|---|---|
重置指令 | 右键点击 | 将所有指令归零。 |
夹爪控制 | 左键点击 | 切换夹爪状态。 |
平移控制 | ||
x/y 轴(平面) | 倾斜 SpaceMouse 手柄 | 沿 x/y 轴平移(灵敏度由倾斜幅度决定)。 |
z 轴(上下) | 推/拉 SpaceMouse 手柄 | 沿 z 轴升降。 |
旋转控制 | 扭转 SpaceMouse 手柄 | 绕各轴旋转(自然映射到机器人姿态)。 |
2 模仿学习
通过遥操作设备(如键盘或 SpaceMouse)收集人类示范数据,是 Learning from Demonstrations (LfD) 的核心步骤。NVIDIA Isaac Lab 提供工具将数据存储为 HDF5 格式,便于后续训练策略网络。
Collecting Demonstrations(收集数据)
案例:为任务 Isaac-Stack-Cube-Franka-IK-Rel-v0(机械臂堆叠方块:按顺序堆叠方块(蓝→红→绿)。)收集人类示范数据,存储为 HDF5 格式,用于后续模仿学习(LfD)。
- 创建数据集目录:
mkdir -p datasets
- 收集数据:通过指定遥操作设备运行
record_demos.py
可选择的设备类型:spacemouse, keyboard, handtracking, handtracking_abs, dualhandtracking_abs
./isaaclab.sh -p scripts/tools/record_demos.py --task Isaac-Stack-Cube-Franka-IK-Rel-v0 --teleop_device <teleop_device> --dataset_file ./datasets/dataset.hdf5 --num_demos 10
- 回放验证:使用 replay_demos.py 检查数据质量。
./isaaclab.sh -p scripts/tools/replay_demos.py --task Isaac-Stack-Cube-Franka-IK-Rel-v0 --dataset_file ./datasets/dataset.hdf5
高质量示范的要点:
- 单次示范时长建议 10-30秒,避免冗余动作。
- 机械臂路径应 直线接近目标,减少曲折运动。
- ❌ 绕远路调整姿态 → ✅ 直接移动至目标上方再下降。
- 操作时避免停顿,保持流畅的轨迹。(策略难以学习“何时暂停”的隐含逻辑。)
- 按 R 键可 丢弃当前示范 并重置环境,重新开始录制。
Pre-recorded Demonstrations(预录制示范数据集)
我们提供了一个预先录制的dataset.hdf5包含 10 个真人演示的数据Isaac-Stack-Cube-Franka-IK-Rel-v0 集。如果您不想收集自己的演示,可以下载此数据集并在后续教程步骤中使用。
Generating additional demonstrations(Isaac Lab Mimic 自动生成额外示范数据)
Isaac Lab Mimic是一种基于少量人类示范自动扩展数据集 的工具,通过算法模拟生成更多样化的示范数据,提升模仿学习策略的泛化能力。
Mimic 的两种环境模式
环境类型 | 输入数据 | 输出策略 | 适用算法 |
---|---|---|---|
Isaac-Stack-Cube-Franka-IK-Rel-Mimic-v0 | 机器人状态(关节角度、末端位姿等) | 状态控制(State-Based) | 行为克隆(BC)、GAIL |
Isaac-Stack-Cube-Franka-IK-Rel-Visuomotor-Mimic-v0 | 视觉输入(摄像头图像) | 视觉运动策略(Visuomotor) | CNN+BC、强化学习 |
- 第一步:标注原始数据
./isaaclab.sh -p scripts/imitation_learning/isaaclab_mimic/annotate_demos.py \
--device cuda \
--task Isaac-Stack-Cube-Franka-IK-Rel-Mimic-v0 \
--auto \
--input_file ./datasets/dataset.hdf5 \
--output_file ./datasets/annotated_dataset.hdf5
#--auto 启用自动标注模式(无需手动标记)
#--task 必须与后续生成环境一致(此处为状态控制任务)
- 自动分割子任务:将连续示范数据拆解为逻辑单元(如“抓取蓝色方块”→“移动到目标位置”→“放置”)。
- 添加语义标签:为每段数据标记其所属的子任务阶段,供 Mimic 针对性生成变体。
- 第二步:使用 Isaac Lab Mimic 小批量生成一些额外的演示(检查辅助)
./isaaclab.sh -p scripts/imitation_learning/isaaclab_mimic/generate_dataset.py \
--device cuda --num_envs 10 --generation_num_trials 10 \
--input_file ./datasets/annotated_dataset.hdf5 --output_file ./datasets/generated_dataset_small.hdf5
#--num_envs 并行环境数(GPU 内存不足时需调低)
#--generation_num_trials 总生成数据量(此处仅生成10条用于验证)
- 测试生成效果:检查生成的数据是否物理合理(如无碰撞、轨迹平滑)。
- 调试参数:调整噪声强度、初始位姿扰动等超参数。
- 第三步:全量生成
./isaaclab.sh -p scripts/imitation_learning/isaaclab_mimic/generate_dataset.py \
--device cuda --headless --num_envs 10 --generation_num_trials 1000 \
--input_file ./datasets/annotated_dataset.hdf5 --output_file ./datasets/generated_dataset.hdf5
#GPU 较弱(如笔记本) --num_envs 5,降低并行数
#GPU 强大(如台式机) --num_envs 20,加速生成
- 规模化生成:生产足够数据(1000条)供策略训练。
- 性能优化:--headless 禁用渲染,--num_envs 最大化利用 GPU。
Robomimic框架
Robomimic 是由 NVIDIA 和伯克利联合开发的 模仿学习(Imitation Learning)开源框架,支持行为克隆(BC)、GAIL 等算法,专为机器人任务设计。
要安装 robomimic 框架,请使用以下命令:
# install the dependencies
sudo apt install cmake build-essential
# install python module (for robomimic)
./isaaclab.sh -i robomimic
Training an agent(训练一个智能体)
使用Mimic 生成的数据可以训练一个状态基 BC 策略Isaac-Stack-Cube-Franka-IK-Rel-v0
,或者视觉运动 BC 策略Isaac-Stack-Cube-Franka-IK-Rel-Visuomotor-v0
./isaaclab.sh -p scripts/imitation_learning/robomimic/train.py \
--task Isaac-Stack-Cube-Franka-IK-Rel-v0 --algo bc \
--dataset ./datasets/generated_dataset.hdf5
./isaaclab.sh -p scripts/imitation_learning/robomimic/train.py \
--task Isaac-Stack-Cube-Franka-IK-Rel-Visuomotor-v0 --algo bc \
--dataset ./datasets/generated_dataset.hdf5