当前位置: 首页 > 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中与可变物体交互

http://www.xdnf.cn/news/85789.html

相关文章:

  • linux基础14--dns和web+dns
  • 【SAP-CO】生产的成本流转和成本分析
  • Gmail收取POP3邮件总是出错:服务器返回错误“Error in RETR command: Received an empty line”的解决方法
  • 基于国产 FPGA+ 龙芯2K1000处理器+翼辉国产操作系统继电保护装置测试装备解决方案
  • 0基础 | 51单片机 | Proteus仿真
  • 使用Nginx搭建Web服务
  • 黑马商城(六)RabbitMQ
  • 使用达梦官方管理工具SQLark快速生成数据库ER图并导出
  • ProxySQL 在路由层的核心作用
  • 深入理解CSS中的`transform-origin`属性
  • day30 学习笔记
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第三模块·面向对象深度进化 —— 第十章 继承:超越C结构体嵌套的维度
  • 实时监测+远程管控:ADW300解锁阳台光伏运维新维度
  • 音视频学习 - MP3格式
  • 如何选择正确的PCB材料
  • 为什么家电主板采用GND走线而不是整面铺GND铜
  • [特殊字符]fsutil命令用法详解
  • Kotlin 的 suspend 关键字
  • 【文献分享】Model-based evaluation提供了数据和代码
  • synchronized锁
  • 为啥低速MCU单板辐射测试会有200M-1Ghz的辐射信号
  • ZYNQ笔记(十二):SD卡读写txt
  • 【Git】Fork和并请求
  • 《MySQL 核心技能:SQL 查询与数据库概述》
  • CentOS笔记本合上盖子不休眠
  • WeakSet:JavaScript 中容易被忽视的“弱集合”
  • 2025年4月22日第一轮
  • 本地部署DeepSeek-R1模型接入PyCharm
  • Java常用正则表达式及使用方法
  • 【屠龙勇士】BIT睿信书院屠龙勇士心得分享