当前位置: 首页 > news >正文

第十五讲、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中使用交互式场景 中的方法创建场景。

# 使用配置类装饰器定义场景配置
@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,     # 图像分辨率640x480data_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)。

 # 前视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,     # 图像分辨率640x480data_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参数是控制是否可以可视化射线击中网格的点。

    # 地形高度扫描仪配置(基于射线投射)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路径的指定。

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

5 运行模拟循环

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

相关文章:

  • # 利用迁移学习优化食物分类模型:基于ResNet18的实践
  • 【Java面试笔记:基础】6.动态代理是基于什么原理?
  • pip的源管理和包管理
  • 黑马点评之Feed流技术实现关注推送与滚动分页查询
  • 光谱相机在肤质检测中的应用
  • strings.ToUpperSpecial 使用详解
  • Java中链表的深入了解及实现
  • Linux信号的产生
  • 安卓投屏软件QtScrcpy
  • 基于nlohmann/json 实现 从C++对象转换成JSON数据格式
  • 麒麟V10安装MySQL8.4
  • AT24C02芯片简介:小巧强大的串行EEPROM存储器
  • 音视频学习 - MP3格式
  • 鸿蒙开发:Swiper轮播图
  • 【Rust】基本概念
  • Anaconda3使用conda进行包管理
  • 支持AVX2指令的计算机,ONNX推理量化模型比推理浮点模型慢?
  • 基于javaweb的SSM教材征订与发放管理系统设计与实现(源码+文档+部署讲解)
  • 携程-酒旅-数据研发面经【附答案】
  • go语言中defer使用指南
  • 新东方:2025财年前三季度净利增29%,第四财季海外业务将承压
  • 工程院院士应汉杰不再担任苏州大学校长
  • 洛阳白马寺内的狄仁杰墓挂上公示牌争论尘埃落定?瀍河区文旅局称已确认
  • 金发科技去年净利增160%,机器人等新领域催生材料新需求
  • 《哪吒2》延长放映至5月31日,当前全球票房已超157亿
  • 中国墨西哥商会副执行主席:深耕中国市场18年,对未来充满信心