第十五讲、Isaaclab中在机器人上添加传感器

0 前言

官方教程:https://isaac-sim.github.io/IsaacLab/main/source/tutorials/04_sensors/add_sensors_on_robot.html

Isaacsim+Isaaclab安装:https://blog.csdn.net/m0_47719040/article/details/146389391?spm=1001.2014.3001.5502

传感器有助于智能体感受不同的环境信息,包括本体感受及外部感受。例如,可以使用摄像头传感器获取环境的视觉信息、可以使用接触传感器获取机器人与环境的接触信息。

在本教程中,我们将学习如何为机器人添加不同的传感器。本教程将使用 ANYmal-C机器人,该机器人是一个四足机器人,拥有12个自由度(四条腿每条腿3个自由度)。该机器人配备以下传感器:

  • 机器人头部的摄像头传感器可以提供RGB-D图像
  • 提供地形高度信息的高度扫描仪传感器
  • 机器人脚上的接触传感器提供接触信息

教程对应的脚本为add_sensors_on_robot.pyscripts/tutorials/04_sensors目录下。

运行该程序:

  • 进入安装 isaac lab 时创建的conda虚拟环境
  • 在该环境下进入 isaac sim文件夹中运行source setup_conda_env.sh
  • 终端中输入./isaaclab.sh -p scripts/tutorials/04_sensors/add_sensors_on_robot.py --num_envs 2 --enable_cameras运行你的代码。
    与之前的教程类似,我们将资源和传感器添加到场景中。所有传感器都继承自sensors.SensorBase类,并通过各自的配置类进行配置。每个传感器实例都可以定义自己的更新周期,即传感器更新的频率。更新周期以秒为单位,通过sensors.SensorBaseCfg.update_period属性指定。

1 场景配置

将地面、灯光、机器人及传感器添加到场景中,该处使用 第七讲、在Isaaclab中使用交互式场景 中的方法创建场景。

python 复制代码
# 使用配置类装饰器定义场景配置
@configclass
class SensorsSceneCfg(InteractiveSceneCfg):
    """配置带传感器的机器人场景"""
    
    # 地面配置(继承自基础资产配置)
    ground = AssetBaseCfg(
        prim_path="/World/defaultGroundPlane",  # USD场景中的prim路径
        spawn=sim_utils.GroundPlaneCfg()  # 使用预定义的地面平面配置
    )

    # 环境光源配置
    dome_light = AssetBaseCfg(
        prim_path="/World/Light",  # 光源prim路径
        spawn=sim_utils.DomeLightCfg(
            intensity=3000.0,      # 光照强度(流明)
            color=(0.75, 0.75, 0.75)  # RGB颜色值(归一化)
        )
    )

    # 机器人配置(使用ANYMAL-C的预设配置)
    robot: ArticulationCfg = ANYMAL_C_CFG.replace(  # 继承并修改基础配置
        prim_path="{ENV_REGEX_NS}/Robot"  # 使用正则表达式命名空间动态生成路径
    )

    # ---------- 传感器配置部分 ----------
    
    # 前视RGB-D相机配置
    camera = CameraCfg(
        prim_path="{ENV_REGEX_NS}/Robot/base/front_cam",  # 相机安装位置
        update_period=0.1,         # 更新周期0.1秒(10Hz)
        height=480, width=640,     # 图像分辨率640x480
        data_types=["rgb", "distance_to_image_plane"],  # 采集RGB和深度数据
        spawn=sim_utils.PinholeCameraCfg(  # 针孔相机模型参数
            focal_length=24.0,        # 焦距(毫米)
            focus_distance=400.0,      # 对焦距离(单位米)
            horizontal_aperture=20.955,# 水平孔径(毫米)
            clipping_range=(0.1, 1.0e5)# 可视范围(0.1m~100km)
        ),
        offset=CameraCfg.OffsetCfg(   # 安装位姿偏移
            pos=(0.510, 0.0, 0.015),   # 位置偏移(X,Y,Z)米
            rot=(0.5, -0.5, 0.5, -0.5), # 四元数旋转(ROS坐标系约定)
            convention="ros"           # 使用ROS坐标系规范
        )
    )

    # 地形高度扫描仪配置(基于射线投射)
    height_scanner = RayCasterCfg(
        prim_path="{ENV_REGEX_NS}/Robot/base",  # 安装基座位置
        update_period=0.02,          # 50Hz高速更新
        offset=RayCasterCfg.OffsetCfg(
            pos=(0.0, 0.0, 20.0)     # 扫描仪安装高度20米
        ),
        attach_yaw_only=True,        # 仅跟随机器人偏航角旋转,无需考虑机器人的横滚和俯仰
        pattern_cfg=patterns.GridPatternCfg(  # 扫描模式配置
            resolution=0.1,          # 0.1米点间距
            size=[1.6, 1.0]          # 扫描范围1.6m X 1.0m
        ),
        debug_vis=True,              # 启用调试可视化
        mesh_prim_paths=["/World/defaultGroundPlane"]  # 扫描目标地面
    )

    # 足端接触力传感器配置
    contact_forces = ContactSensorCfg(
        prim_path="{ENV_REGEX_NS}/Robot/.*_FOOT",  # 正则匹配所有足部关节
        update_period=0.0,           # 每物理步都更新(200Hz)
        history_length=6,            # 保留最近6次接触数据
        debug_vis=True               # 显示接触力矢量
    )

2 相机传感器

相机传感器可以通过sensors.CameraCfg进行配置。官方文档:https://isaac-sim.github.io/IsaacLab/main/source/api/lab/isaaclab.sensors.html#isaaclab.sensors.CameraCfg

摄像机传感器的配置包括以下参数:

  • spawn:要创建的 USD 相机类型。可以是PinholeCameraCfgFisheyeCameraCfg
  • offset:相机传感器与父级图元的偏移量。
  • data_types:要捕获的数据类型。可以是rgb、distance_to_image_plane、normals或 USD 相机传感器支持的其他类型。

为了将 RGB-D 摄像头传感器安装到机器人头部,我们需要指定相对于机器人基座的偏移量(CameraCfg.OffsetCfg)。

python 复制代码
 # 前视RGB-D相机配置
    camera = CameraCfg(
        prim_path="{ENV_REGEX_NS}/Robot/base/front_cam",  # 相机安装位置
        update_period=0.1,         # 更新周期0.1秒(10Hz),这意味着相机传感器以 10Hz 的频率更新
        height=480, width=640,     # 图像分辨率640x480
        data_types=["rgb", "distance_to_image_plane"],  # 采集RGB和深度数据
        spawn=sim_utils.PinholeCameraCfg(  # 针孔相机模型参数
            focal_length=24.0,        # 焦距(毫米)
            focus_distance=400.0,      # 对焦距离(单位米)
            horizontal_aperture=20.955,# 水平孔径(毫米)
            clipping_range=(0.1, 1.0e5)# 可视范围(0.1m~100km)
        ),
        offset=CameraCfg.OffsetCfg(   # 安装位姿偏移
            pos=(0.510, 0.0, 0.015),   # 位置偏移(X,Y,Z)米
            rot=(0.5, -0.5, 0.5, -0.5), # 四元数旋转(ROS坐标系约定)
            convention="ros"           # 使用ROS坐标系规范
        )
    )

3 高度扫描仪传感器

高度扫描仪传感器使用NVIDIA Warp光线投射内核实现虚拟传感器。通过sensors.RayCasterCfg可以指定透射光线模式等。官方文档:https://isaac-sim.github.io/IsaacLab/main/source/api/lab/isaaclab.sensors.html#isaaclab.sensors.RayCasterCfg

在本教程中,基于射线投射的高度扫描仪安装在机器人的基座框架上。射线的图案使用pattern属性指定。对于均匀的网格图案,我们使用 指定图案网格(GridPatternCfg)。

debug_vis参数是控制是否可以可视化射线击中网格的点。

python 复制代码
    # 地形高度扫描仪配置(基于射线投射)
    height_scanner = RayCasterCfg(
        prim_path="{ENV_REGEX_NS}/Robot/base",  # 安装基座位置
        update_period=0.02,          # 50Hz高速更新
        offset=RayCasterCfg.OffsetCfg(
            pos=(0.0, 0.0, 20.0)     # 扫描仪安装高度20米
        ),
        attach_yaw_only=True,        # 仅跟随机器人偏航角旋转,无需考虑机器人的横滚和俯仰
        pattern_cfg=patterns.GridPatternCfg(  # 扫描模式配置
            resolution=0.1,          # 0.1米点间距
            size=[1.6, 1.0]          # 扫描范围1.6m X 1.0m
        ),
        debug_vis=True,              # 启用调试可视化
        mesh_prim_paths=["/World/defaultGroundPlane"]  # 扫描目标地面
    )

debug_vis参数改为False,可以看到网格状消失。

4 接触式传感器

通过sensors.ContactSensorCfg,我们可以指定想要获取接触信息的prim。官方文档:https://isaac-sim.github.io/IsaacLab/main/source/api/lab/isaaclab.sensors.html#isaaclab.sensors.ContactSensorCfg

在本教程中,我们将接触式传感器连接到机器人的脚上。机器人的脚分别命名为"LF_FOOT"、"RF_FOOT"、"LH_FOOT""RH_FOOT"。我们传递一个正则表达式".*_FOOT"来简化prim路径的指定。

python 复制代码
# 足端接触力传感器配置
    contact_forces = ContactSensorCfg(
        prim_path="{ENV_REGEX_NS}/Robot/.*_FOOT",  # 正则匹配所有足部关节
        update_period=0.0,           # 每物理步都更新(200Hz)
        history_length=6,            # 保留最近6次接触数据
        debug_vis=True               # 显示接触力矢量
    )

5 运行模拟循环

该部分基本与之前的代码是一致的,具体详解可以参考
第六讲、Isaaclab中与可变物体交互

相关推荐
OceanBase数据库官方博客15 分钟前
向量检索新选择:FastGPT + OceanBase,快速构建RAG
人工智能·oceanbase·分布式数据库·向量数据库·rag
ghjhjjjbjibh18 分钟前
AI大模型 —— 国产大模型 —— 华为大模型
人工智能·华为
清风序来1 小时前
一,开发环境安装
人工智能·深度学习
nuclear20113 小时前
Python 从PPT文档中提取图片和图片信息(坐标、宽度和高度等)
python·powerpoint·ppt图片提取·提取ppt背景图片·提取pp所有图片
WaitWaitWait014 小时前
LeetCode每日一题4.20
算法·leetcode
蒟蒻小袁4 小时前
力扣面试150题--有效的括号和简化路径
算法·leetcode·面试
樱花穿过千岛湖4 小时前
第六章:Multi-Backend Configuration
人工智能·python·gpt·学习·ai
FACELESS VOID5 小时前
llama-factory微调报错:
python
前进的程序员5 小时前
深度学习:人工智能的核心驱动力
人工智能