0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Isaac仿真平台搭建以及ROS试用教程

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 作者:NVIDIA英伟达企业解 2022-07-27 14:55 次阅读

机器人有助于为制造业、物流业、医疗保健业和服务业等行业创造新效率并提升人们的生活质量, NVIDIA Isaac 凭借改进的机器人开发、模拟和部署功能,可加速这一进程。

对于机器人领域的开发者而言,“Isaac 就是 Omniverse 平台里面,一个完全在 GPU 上实现,很好地将机器人相关的一些深度学习、强化学习、SLAM、图像处理等等的算法,融合在一个 GEMs 的高性能软件包中的炫酷仿真引擎。” 这是知乎大咖稚辉(知乎坐拥 130 多万粉丝的知名 KOL、AI 工程师)对于 Isaac 的评价。本期文章我们将分享稚辉 Isaac 仿真平台搭建以及 ROS 试用教程

Isaac 仿真平台搭建以及 ROS 试用教程

最近在搞一个机器人项目嘛,所以借着机会了解了一下之前 NVIDIA大力推广的 Omniverse 平台,Omniverse 是 NVIDIA 推出的一个元宇宙模拟平台,而 Isaac 是其中专门用于机器人环境模拟的一个引擎,试了一下还挺有意思的。

其实最早 Omniverse 设计的初衷是提供一个能让工程师们协作创作的虚拟工具,毕竟号称元宇宙引擎嘛,在数字世界里做基建必然是一个需要大量不同场景的工程师们配合实现的工作,后来该项目逐渐演变成了一个更加宏大的全行业框架。

发布会上提到会通过一种 USD(Universal Scene Description,这个缩写我直呼内行)的基础数据格式来打通各种不同的软件之间的配合。USD 不仅仅只是导入和导出的一种格式而已, USD 之于 Omniverse 就像 HTML(一种标记语言,可以将网络上的文档格式统一)之于网站。

而 Isaac 就是 Omniverse 平台里面,一个完全在 GPU 上实现,很好地将机器人相关的一些深度学习、强化学习、SLAM、图像处理等等的算法,融合在一个 GEMs 的高性能软件包中的炫酷仿真引擎。之前做机器人仿真的时候,最常用的是 VREP(现在叫 CoppeliaSim 了)、ROS 里面的 Gazebo、WeBot 等,这些仿真器用到的主要物理引擎都是开源的 Bullet 和 ODE。

与上面提到的这些仿真器相比,Isaac 的优势在于:

  • 超逼真的光照渲染效果:一个字,以假乱真。NVIDIA 做啥起家的大家都知道了,RTX ON 之后这渲染效果相比于前面提到的开源引擎有质的飞跃,直接来到照片级的逼真度。

  • 性能的提升:实时的光照渲染和物理引擎的算力需求都是很高的,Isaac 针对 NVIDIA 硬件(GPU)进行了优化,可以生成高效的平台优化的交叉编译应用程序。

  • 生态支持度好:Isaac 集成了其中许多 CUDA 加速的开源库,例如 NPP、OpenCV、ROS、PCL (wip)、Eigen 等。

  • 自带常用的算法库:Isaac SDK 附带了一系列高性能算法,这些算法被称为 GEM,此外除了机器人控制类的算法,Issac 还为主业打游戏副业炼丹的同学们准备了深度神经网络模块的集成,例如立体声深度估计、目标检测、 Tracking 算法等等。

当然了对我这种颜值狗来说,渲染效果美丽 + Modern UI 的软件界面就足够让我对其他软件 Say No 了。下图展示了 Isaac 的生态系统:

97535b22-0d69-11ed-ba43-dac502259ad0.png

那么接下来本文简单介绍一下 Issac 的安装流程以及使用记录。

准备的环境

使用的是我自己的台式机,硬件配置如下:

项目

概述

OS

Ubuntu 20.04 LTS

kernel

5.13.0-35-generic

CPU

英特尔 i7-12700F

MEM

64GB

GPU

GeForce RTX 3080

Driver Ver

470.103.01

CUDA Ver

11.4

按照 NVIDIA 官方 Omniverse 安装指南(链接如下):

https://docs.omniverse.nvidia.com/prod_install-guide/prod_install-guide/workstation.html

首先,下载 Omniverse 的启动器程序(需要注册一下,链接如下):https://www.nvidia.com/en-us/omniverse/

97a693d2-0d69-11ed-ba43-dac502259ad0.png

操作系统可以选择 Windows 或 Linux,这里我用的是 Ubuntu 所以选 Linux 版本,可以得到名为 omniverse-launcher-linux.AppImage 的文件,下载好之后需要授予它执行权限,并将其放在主页目录下,命令:


chmod+xomniverse-launcher-linux.AppImage./omniverse-launcher-linux.AppImage

运行此启动器程序将启动 Omniverse 窗口,但需要 NVIDIA 帐户登录才能使用,没有的话注册一下就行个人使用是免费的。

首次启动时,系统会提示是否要安装名为 “Cache” 的软件,这个是用于提供一种软件缓存机制,用于管理网络通信加载内容的,建议安装它。

97e6ade6-0d69-11ed-ba43-dac502259ad0.png

启动器的软件界面

顺便说一下,Omniverse会开启一个后台服务,你可以从浏览器访问 http://localhost:3080 来打开后台管理页面查看每个服务的操作状态。

9824d832-0d69-11ed-ba43-dac502259ad0.png

然后需要在启动器软件中安装 Nucleus 服务:

9846c9d8-0d69-11ed-ba43-dac502259ad0.png

Nucleus 就是个数据服务器,用于连接其他软件,同时在当多个人进行项目时,通过连接到此服务器进行协作开发。软件中也有很多有意思的 Tutorial 可以自己尝试学习:

986a269e-0d69-11ed-ba43-dac502259ad0.png

安装完成后用之前注册的账号登录即可,登录后将看到一个文件管理器,可以在其中管理项目内容。

98b0e19c-0d69-11ed-ba43-dac502259ad0.png

接下来,我们添加机器人模拟器环境 Isaac Sim。Isaac Sim 是一个机器人仿真工具包,在 Omniverse 上运行,Isaac Sim 具有构建虚拟机器人世界和实验的基本功能,还能通过渲染能力提供进行数据集合成的工具和工作流程。Isaac Sim 通过 ROS/ROS2 支持导航和操作应用程序。

Isaac 的架构图如下:

98d3ce64-0d69-11ed-ba43-dac502259ad0.png

由于渲染能力过猛,Isaac 对于硬件的配置要求有一丢丢高,推荐的配置为- RTX2070 及以上的显卡,内存至少 32GB,NVIDIA 的驱动程序版本需要 470.57.02 或更高版本。

参考以下安装指南安装 Isaac Sim:

https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/install_basic.html#isaac-sim-app-install-basic

从 EXCHANGE 选项卡中选择并安装:

98f97916-0d69-11ed-ba43-dac502259ad0.png

993ae64e-0d69-11ed-ba43-dac502259ad0.png

根据教程,Isaac Sim 应该有一个按钮来下载 Isaac Sim Assets(示例数据等)后启动,但可能是网络问题我这边无法下载,所以通过手动添加方式解决,参考:

https://forums.developer.nvidia.com/t/known-issue-error-checking-isaac-sim-assets/204522

具体解决方案是从主窗口的 mount 选项卡右键单击导航器的 localhost,创建具有以下参数的文件夹:

9960e8d0-0d69-11ed-ba43-dac502259ad0.png

项目

内容

Name

Isaac

Type

Amazon S3

Host

http://d28dzv1nop4bat.cloudfront.net

Service

s3

Redirection

https://d28dzv1nop4bat.cloudfront.net

下面的命令安装:

sudoaptinstall./code_1.51.1-1605051630_amd64.debsudoaptinstall-yapt-transport-httpssudoaptupdate

后我们安装一下 VS Code 来代替自带的编辑器,在官网下载 deb 安装包

https://code.visualstudio.com/Download

此外,从 Isaac Sim 打开 VSCode 时的配置文件(如 setting.json)使用的是 .vscode,该文件位于 Isaac Sim 的安装根目录~/.local/share/ov/pkg/isaac_simxxx 中。

安装 ROS 和 ROS2

在 Ubuntu 上安装要与配合的 ROS 和 ROS2,只需按照官方安装指南进行安装即可:https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/install_ros.html

然后,在 Isaac Sim 端启用 ROS Bridge 扩展,在窗口状态量菜单中 Window->Extensions 中搜索 “ROS”:

9982137a-0d69-11ed-ba43-dac502259ad0.png

启用 “ROS Bridge” 和 “ROS UI” :

99a8ac38-0d69-11ed-ba43-dac502259ad0.png

如果使用 ROS2,那就启用 ROS2 Bridge 而不是 ROS Bridge。

现在 ROS 就可以和 Isaac Sim 通信啦,接下来我们编写一个简单的程序进行测试。

Python代码测试

Isaac Sim 可以从官方自带的一些 python 脚本独立启动,启动脚本位于 Omniverse 中的 Isaac Sim 目录中,例如,启动作为示例提供的名为 “franka” 的制造机器人演示的命令如下所示:


cd~/.local/share/ov/pkg/isaac_sim-2021.2.1./python.shstandalone_examples/api/omni.isaac.franka/follow_target.py

99de15bc-0d69-11ed-ba43-dac502259ad0.png

打开的时间可能比较久需要有点耐心...

当然还有其他很多别的脚本可以供参考,接下来我们将自己编写 Python 脚本实现以下内容:

1、在场景中放置对象

2、在场景中放置一个机器人并用键盘控制运动

放置对象

我们可以使用 omni.isaac.core 对象模块放置对象,包含以下函数:

  • DynamicCuboid

  • DynamicCapsule

  • DynamicCone

  • DynamicCylinder

  • DynamicSphere

  • VisualCuboid

  • VisualCapsule

  • VisualCone

  • VisualCylinder

  • VisualSphere

  • FixedCuboid

这些函数允许我们在场景中放置立方体、胶囊、圆锥体、圆柱体和球体,Dynamic 开头的对象受到物理引擎的作用,比如重力,当把它们放置在空中时,它会直接掉落。Visual 开头的对象则只会用于外观,不会受到力的作用,也不会进行碰撞检测,因此其他对象可以直接穿过它。例如以下代码:


from omni.isaac.kit import SimulationAppimport numpy as np
simulation_app = SimulationApp({"headless": False})
from omni.isaac.core import Worldfrom omni.isaac.core.objects import DynamicCuboid, DynamicCapsule, DynamicConefrom omni.isaac.core.objects import DynamicCylinder, DynamicSphere, FixedCuboid
my_world = World(stage_units_in_meters=0.01)
d_cube = my_world.scene.add(    DynamicCuboid(        prim_path="/dynamic_cube",        name="dynamic_cube",        position=np.array([0, 0, 0.5]) * 100,        size=np.array([0.1, 0.1, 0.1]) * 100,        color=np.array([255, 255, 255]),    ))
d_cap = my_world.scene.add(    DynamicCapsule(        prim_path="/dynamic_capsule",        name="dynamic_capsule",        position=np.array([0.5, 0, 0.5]) * 100,        radius=0.05 * 100,        height=0.05 * 100,        color=np.array([255, 0, 0]),    ))
d_cone = my_world.scene.add(    DynamicCone(        prim_path="/dynamic_cone",        name="dynamic_cone",        position=np.array([-0.5, 0, 0.5]) * 100,        radius=0.05 * 100,        height=0.05 * 100,        color=np.array([0, 0, 255]),    ))
d_cyl = my_world.scene.add(    DynamicCylinder(        prim_path="/dynamic_cylinder",        name="dynamic_cylinder",        position=np.array([0, 0.5, 0.5]) * 100,        radius=0.05 * 100,        height=0.05 * 100,        color=np.array([0, 255, 0]),    ))
d_sph = my_world.scene.add(    DynamicSphere(        prim_path="/dynamic_sphere",        name="dynamic_sphere",        position=np.array([0.5, 0.5, 0.5]) * 100,        radius=0.05 * 100,        color=np.array([255, 0, 255]),    ))
f_cube = my_world.scene.add(    FixedCuboid(        prim_path="/fixed_cube",        name="fixed_cube",        position=np.array([-0.5, 0.5, 0.5]) * 100,        size=np.array([0.1, 0.1, 0.1]) * 100,        color=np.array([255, 255, 255]),    ))
my_world.scene.add_default_ground_plane()
my_world.reset()
while simulation_app.is_running():    my_world.step(render=True)
simulation_app.close()

效果是这样的:

9a273936-0d69-11ed-ba43-dac502259ad0.png

稍微修改一下,加入一些互动,比如用键盘控制一个小车:


from omni.isaac.kit import SimulationAppimport numpy as npimport carbimport omni.appwindow
simulation_app = SimulationApp({"headless": False})
from omni.isaac.jetbot import Jetbotfrom omni.isaac.jetbot.controllers import DifferentialController
from omni.isaac.core import World
my_world = World(stage_units_in_meters=0.01)
my_jetbot = my_world.scene.add(    Jetbot(        prim_path="/World/Jetbot",        name="my_jetbot",        position=np.array([0, 0.0, 2.0])    ) ) 
my_controller = DifferentialController(name="simple_control")
my_world.scene.add_default_ground_plane()
command_ = [0.0, 0.0]def sub_keyboard_event(event, *args, **kwargs):    """Handle keyboard events    w,s,a,d as arrow keys for jetbot movement
    Args:        event (int): keyboard event type    """    global command_    if(        event.type == carb.input.KeyboardEventType.KEY_PRESS        or event.type == carb.input.KeyboardEventType.KEY_REPEAT    ):        if event.input == carb.input.KeyboardInput.W:            command_ = [20, 0.0]        if event.input == carb.input.KeyboardInput.S:            command_ = [-20, 0.0]        if event.input == carb.input.KeyboardInput.A:            command_ = [0.0, np.pi / 5]        if event.input == carb.input.KeyboardInput.D:            command_ = [0.0, -np.pi / 5]    if(event.type == carb.input.KeyboardEventType.KEY_RELEASE):        command_ = [0.0, 0.0]
    return True
appwindow_ = omni.appwindow.get_default_app_window()input_ = carb.input.acquire_input_interface()keyboard_ = appwindow_.get_keyboard()sub_keyboard_ = input_.subscribe_to_keyboard_events(keyboard_,sub_keyboard_event)
my_world.reset()
while simulation_app.is_running():    my_world.step(render=True)    if my_world.is_playing():        my_jetbot.apply_wheel_actions(my_controller.forward(command=command_))
simulation_app.close()

效果如下,用键盘的 WASD 可以控制小车运动:

9a55c896-0d69-11ed-ba43-dac502259ad0.png

更多的 API 可以参考官方的文档,后续再补充更多内容。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    50

    文章

    4046

    浏览量

    133428
  • ROS
    ROS
    +关注

    关注

    1

    文章

    276

    浏览量

    16967
  • 深度学习
    +关注

    关注

    73

    文章

    5493

    浏览量

    120983

原文标题:Isaac “家族” 揭秘 | 知乎大咖深度解读系列(1)

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    EasyGo使用笔记丨分布式光伏集群并网控制硬件在环仿真应用

    进行控制;对于逆变器的控制,采用三相空间矢量脉宽调制(SVPWM)控制算法以及电压电流双闭环控制算法。最后构建了分布式光伏集群并网发电系统的综合仿真模型,并在MATLAB/Simulink平台上成功实现
    发表于 07-12 17:20

    如何搭建3d数字孪生平台

    搭建3D数字孪生平台是一项复杂且具有挑战性的任务,需要综合运用多种技术和步骤。实现这一目标需要进行需求分析、数据采集、建模与仿真、数据库设计、人机界面设计、数据分析与算法选择、平台
    的头像 发表于 07-04 15:23 357次阅读

    逐际动力携手英伟达Isaac平台, 助力通用机器人研发

    在近日举行的年度计算机视觉与模式识别会议(CVPR)上,英伟达发布了其最新版本的NVIDIA Isaac Sim。与此同时,逐际动力也宣布将采用这一升级版的Isaac平台,以强化学习和提升通用机器人的泛化能力为核心目标,推动机器
    的头像 发表于 06-21 09:34 2355次阅读

    8路GMSL视频注入回灌的自动驾驶半实物仿真平台

    8路GMSL视频注入回灌的自动驾驶半实物仿真平台
    的头像 发表于 04-17 11:33 790次阅读
    8路GMSL视频注入回灌的自动驾驶半实物<b class='flag-5'>仿真平台</b>

    【分享】基于Easygo仿真平台的三电机实时仿真测试应用

    算法效果的前期仿真评估及算法或控制器参数设计及仿真验证,可以很大程度上减少系统开发周期及成本。对多电机同步控制系统进行实时仿真可有效解决此问题,但目前业内基于FPGA纳秒级实时仿真平台
    发表于 04-09 16:49

    NVIDIA Isaac机器人平台升级,加速AI机器人技术革新

    NVIDIA Isaac机器人平台近期实现重大升级,通过引入最新的生成式AI技术和先进的仿真技术,显著加速了AI机器人技术的发展步伐。该平台正不断扩展其基础模型、机器人学习框架、AI工
    的头像 发表于 03-27 10:36 641次阅读

    NVIDIA入局人形机器人!Isaac平台迎来重要更新

    NVIDIA Isaac 机器人平台利用最新的生成式 AI 和先进的仿真技术,加速 AI 机器人技术的发展。
    的头像 发表于 03-26 09:07 1004次阅读
    NVIDIA入局人形机器人!<b class='flag-5'>Isaac</b><b class='flag-5'>平台</b>迎来重要更新

    NVIDIA Isaac将生成式AI应用于制造业和物流业

    NVIDIA Isaac 机器人平台利用最新的生成式 AI 和先进的仿真技术,加速 AI 机器人技术的发展。
    的头像 发表于 03-22 10:06 500次阅读
    NVIDIA <b class='flag-5'>Isaac</b>将生成式AI应用于制造业和物流业

    多电机仿真篇丨双电机实时仿真测试应用

    国内虚拟研究平台多基于单电机设计,而实际工业中多电机配合工作更为常见,如机器人、3D打印机等。多电机同步控制在工业自动化生产系统中广泛存在,但目前基于FPGA纳秒级实时仿真平台多为单电机设计,进行多
    发表于 03-19 16:13

    Easygo仿真平台双电机系统的实时仿真应用案例

    利用EasyGoMachine电机库中的模块,可以快速进行多电机系统程序的搭建,搭配EasyGoDeskSim软件将程序部署到FPGA中以不超过1.5us的步长进行实时运行,无需进行FPGA编译。
    发表于 03-19 11:28 511次阅读
    Easygo<b class='flag-5'>仿真平台</b>双电机系统的实时<b class='flag-5'>仿真</b>应用案例

    从MATLAB到MWORKS,科学计算与系统建模仿真平台的中国选项

    一、同元软控:敢担重任,研制中国自主的科学计算与系统建模仿真平台 “中国需要自主的科学计算与系统建模仿真平台。” 工业软件是所有复杂系统研发设计、仿真验证和数字制造的必备工具,已经成为衡量一个国家
    的头像 发表于 03-11 13:06 530次阅读

    使用VeriStand搭建MIL测试环境

    MIL(Model In The Loop)模型在环仿真试用于在实际系统搭建完成之前进行模型测试,使用VeriStand搭建MIL测试环境,可以在不需要硬件资源的情况下测试控制模型。
    的头像 发表于 01-05 10:42 4228次阅读
    使用VeriStand<b class='flag-5'>搭建</b>MIL测试环境

    自动化仿真系统搭建实践

    今天我们分享TIAV17+PLCSIM+PS+SIMIT:自动化仿真系统搭建实践。
    的头像 发表于 01-04 11:28 2003次阅读
    自动化<b class='flag-5'>仿真</b>系统<b class='flag-5'>搭建</b>实践

    使用 NVIDIA Isaac 仿真并定位 Husky 机器人

    如何使用 ROS 2 Husky 官方软件包将该机器人导入 NVIDIA Isaac Sim 并创建仿真。 本 Demo 中的 Husky 机器人配备了 NVIDIA Jetson Orin Nano 并在顶部安装
    的头像 发表于 12-26 18:05 1258次阅读
    使用 NVIDIA <b class='flag-5'>Isaac</b> <b class='flag-5'>仿真</b>并定位 Husky 机器人

    利用 NVIDIA Isaac Transport for ROS 提升自定义 ROS 图形性能

    NVIDIA Isaac Transport for ROS(NITROS) 是随 ROS 2 Humble 加入的两项硬件加速功能——类型适配和类型协商。 类型适配 使 ROS 节点
    的头像 发表于 11-30 19:35 601次阅读
    利用 NVIDIA <b class='flag-5'>Isaac</b> Transport for <b class='flag-5'>ROS</b> 提升自定义 <b class='flag-5'>ROS</b> 图形性能