第五章、遥操作及模仿学习(Teleoperation and Imitation Learning)

发布于:2025-06-22 ⋅ 阅读:(12) ⋅ 点赞:(0)

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)。

  1. 创建数据集目录:mkdir -p datasets
  2. 收集数据:通过指定遥操作设备运行 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
  3. 回放验证:使用 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

网站公告

今日签到

点亮在社区的每一天
去签到