機(jī)器人有助于為制造業(yè)、物流業(yè)、醫(yī)療保健業(yè)和服務(wù)業(yè)等行業(yè)創(chuàng)造新效率并提升人們的生活質(zhì)量, NVIDIA Isaac 憑借改進(jìn)的機(jī)器人開(kāi)發(fā)、模擬和部署功能,可加速這一進(jìn)程。
對(duì)于機(jī)器人領(lǐng)域的開(kāi)發(fā)者而言,“Isaac 就是 Omniverse 平臺(tái)里面,一個(gè)完全在 GPU 上實(shí)現(xiàn),很好地將機(jī)器人相關(guān)的一些深度學(xué)習(xí)、強(qiáng)化學(xué)習(xí)、SLAM、圖像處理等等的算法,融合在一個(gè) GEMs 的高性能軟件包中的炫酷仿真引擎。” 這是知乎大咖稚輝(知乎坐擁 130 多萬(wàn)粉絲的知名 KOL、AI 工程師)對(duì)于 Isaac 的評(píng)價(jià)。本期文章我們將分享稚輝 Isaac 仿真平臺(tái)搭建以及 ROS 試用教程。
Isaac 仿真平臺(tái)搭建以及 ROS 試用教程
最近在搞一個(gè)機(jī)器人項(xiàng)目嘛,所以借著機(jī)會(huì)了解了一下之前 NVIDIA大力推廣的 Omniverse 平臺(tái),Omniverse 是 NVIDIA 推出的一個(gè)元宇宙模擬平臺(tái),而 Isaac 是其中專門用于機(jī)器人環(huán)境模擬的一個(gè)引擎,試了一下還挺有意思的。
其實(shí)最早 Omniverse 設(shè)計(jì)的初衷是提供一個(gè)能讓工程師們協(xié)作創(chuàng)作的虛擬工具,畢竟號(hào)稱元宇宙引擎嘛,在數(shù)字世界里做基建必然是一個(gè)需要大量不同場(chǎng)景的工程師們配合實(shí)現(xiàn)的工作,后來(lái)該項(xiàng)目逐漸演變成了一個(gè)更加宏大的全行業(yè)框架。
發(fā)布會(huì)上提到會(huì)通過(guò)一種 USD(Universal Scene Description,這個(gè)縮寫我直呼內(nèi)行)的基礎(chǔ)數(shù)據(jù)格式來(lái)打通各種不同的軟件之間的配合。USD 不僅僅只是導(dǎo)入和導(dǎo)出的一種格式而已, USD 之于 Omniverse 就像 HTML(一種標(biāo)記語(yǔ)言,可以將網(wǎng)絡(luò)上的文檔格式統(tǒng)一)之于網(wǎng)站。
而 Isaac 就是 Omniverse 平臺(tái)里面,一個(gè)完全在 GPU 上實(shí)現(xiàn),很好地將機(jī)器人相關(guān)的一些深度學(xué)習(xí)、強(qiáng)化學(xué)習(xí)、SLAM、圖像處理等等的算法,融合在一個(gè) GEMs 的高性能軟件包中的炫酷仿真引擎。之前做機(jī)器人仿真的時(shí)候,最常用的是 VREP(現(xiàn)在叫 CoppeliaSim 了)、ROS 里面的 Gazebo、WeBot 等,這些仿真器用到的主要物理引擎都是開(kāi)源的 Bullet 和 ODE。
與上面提到的這些仿真器相比,Isaac 的優(yōu)勢(shì)在于:
-
超逼真的光照渲染效果:一個(gè)字,以假亂真。NVIDIA 做啥起家的大家都知道了,RTX ON 之后這渲染效果相比于前面提到的開(kāi)源引擎有質(zhì)的飛躍,直接來(lái)到照片級(jí)的逼真度。
-
性能的提升:實(shí)時(shí)的光照渲染和物理引擎的算力需求都是很高的,Isaac 針對(duì) NVIDIA 硬件(GPU)進(jìn)行了優(yōu)化,可以生成高效的平臺(tái)優(yōu)化的交叉編譯應(yīng)用程序。
-
生態(tài)支持度好:Isaac 集成了其中許多 CUDA 加速的開(kāi)源庫(kù),例如 NPP、OpenCV、ROS、PCL (wip)、Eigen 等。
-
自帶常用的算法庫(kù):Isaac SDK 附帶了一系列高性能算法,這些算法被稱為 GEM,此外除了機(jī)器人控制類的算法,Issac 還為主業(yè)打游戲副業(yè)煉丹的同學(xué)們準(zhǔn)備了深度神經(jīng)網(wǎng)絡(luò)模塊的集成,例如立體聲深度估計(jì)、目標(biāo)檢測(cè)、 Tracking 算法等等。
當(dāng)然了對(duì)我這種顏值狗來(lái)說(shuō),渲染效果美麗 + Modern UI 的軟件界面就足夠讓我對(duì)其他軟件 Say No 了。下圖展示了 Isaac 的生態(tài)系統(tǒng):
那么接下來(lái)本文簡(jiǎn)單介紹一下 Issac 的安裝流程以及使用記錄。
準(zhǔn)備的環(huán)境
使用的是我自己的臺(tái)式機(jī),硬件配置如下:
項(xiàng)目 |
概述 |
OS |
Ubuntu 20.04 LTS |
kernel |
5.13.0-35-generic |
英特爾 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 的啟動(dòng)器程序(需要注冊(cè)一下,鏈接如下):https://www.nvidia.com/en-us/omniverse/
操作系統(tǒng)可以選擇 Windows 或 Linux,這里我用的是 Ubuntu 所以選 Linux 版本,可以得到名為 omniverse-launcher-linux.AppImage 的文件,下載好之后需要授予它執(zhí)行權(quán)限,并將其放在主頁(yè)目錄下,命令:
chmod+xomniverse-launcher-linux.AppImage
./omniverse-launcher-linux.AppImage
運(yùn)行此啟動(dòng)器程序?qū)?dòng) Omniverse 窗口,但需要 NVIDIA 帳戶登錄才能使用,沒(méi)有的話注冊(cè)一下就行個(gè)人使用是免費(fèi)的。
首次啟動(dòng)時(shí),系統(tǒng)會(huì)提示是否要安裝名為 “Cache” 的軟件,這個(gè)是用于提供一種軟件緩存機(jī)制,用于管理網(wǎng)絡(luò)通信加載內(nèi)容的,建議安裝它。
啟動(dòng)器的軟件界面
順便說(shuō)一下,Omniverse會(huì)開(kāi)啟一個(gè)后臺(tái)服務(wù),你可以從瀏覽器訪問(wèn) http://localhost:3080 來(lái)打開(kāi)后臺(tái)管理頁(yè)面查看每個(gè)服務(wù)的操作狀態(tài)。
然后需要在啟動(dòng)器軟件中安裝 Nucleus 服務(wù):
Nucleus 就是個(gè)數(shù)據(jù)服務(wù)器,用于連接其他軟件,同時(shí)在當(dāng)多個(gè)人進(jìn)行項(xiàng)目時(shí),通過(guò)連接到此服務(wù)器進(jìn)行協(xié)作開(kāi)發(fā)。軟件中也有很多有意思的 Tutorial 可以自己嘗試學(xué)習(xí):
安裝完成后用之前注冊(cè)的賬號(hào)登錄即可,登錄后將看到一個(gè)文件管理器,可以在其中管理項(xiàng)目?jī)?nèi)容。
接下來(lái),我們添加機(jī)器人模擬器環(huán)境 Isaac Sim。Isaac Sim 是一個(gè)機(jī)器人仿真工具包,在 Omniverse 上運(yùn)行,Isaac Sim 具有構(gòu)建虛擬機(jī)器人世界和實(shí)驗(yàn)的基本功能,還能通過(guò)渲染能力提供進(jìn)行數(shù)據(jù)集合成的工具和工作流程。Isaac Sim 通過(guò) ROS/ROS2 支持導(dǎo)航和操作應(yīng)用程序。
Isaac 的架構(gòu)圖如下:
由于渲染能力過(guò)猛,Isaac 對(duì)于硬件的配置要求有一丟丟高,推薦的配置為- RTX2070 及以上的顯卡,內(nèi)存至少 32GB,NVIDIA 的驅(qū)動(dòng)程序版本需要 470.57.02 或更高版本。
參考以下安裝指南安裝 Isaac Sim:
https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/install_basic.html#isaac-sim-app-install-basic
從 EXCHANGE 選項(xiàng)卡中選擇并安裝:
根據(jù)教程,Isaac Sim 應(yīng)該有一個(gè)按鈕來(lái)下載 Isaac Sim Assets(示例數(shù)據(jù)等)后啟動(dòng),但可能是網(wǎng)絡(luò)問(wèn)題我這邊無(wú)法下載,所以通過(guò)手動(dòng)添加方式解決,參考:
https://forums.developer.nvidia.com/t/known-issue-error-checking-isaac-sim-assets/204522
具體解決方案是從主窗口的 mount 選項(xiàng)卡右鍵單擊導(dǎo)航器的 localhost,創(chuàng)建具有以下參數(shù)的文件夾:
項(xiàng)目 |
內(nèi)容 |
Name |
Isaac |
Type |
Amazon S3 |
Host |
http://d28dzv1nop4bat.cloudfront.net |
Service |
s3 |
Redirection |
https://d28dzv1nop4bat.cloudfront.net |
下面的命令安裝:
sudoaptinstall./code_1.51.1-1605051630_amd64.deb
sudoaptinstall-yapt-transport-https
sudoaptupdate
然后我們安裝一下 VS Code 來(lái)代替自帶的編輯器,在官網(wǎng)下載 deb 安裝包
https://code.visualstudio.com/Download
此外,從 Isaac Sim 打開(kāi) VSCode 時(shí)的配置文件(如 setting.json)使用的是 .vscode,該文件位于 Isaac Sim 的安裝根目錄~/.local/share/ov/pkg/isaac_simxxx 中。
安裝 ROS 和 ROS2
在 Ubuntu 上安裝要與配合的 ROS 和 ROS2,只需按照官方安裝指南進(jìn)行安裝即可:https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/install_ros.html
然后,在 Isaac Sim 端啟用 ROS Bridge 擴(kuò)展,在窗口狀態(tài)量菜單中 Window->Extensions 中搜索 “ROS”:
啟用 “ROS Bridge” 和 “ROS UI” :
如果使用 ROS2,那就啟用 ROS2 Bridge 而不是 ROS Bridge。
現(xiàn)在 ROS 就可以和 Isaac Sim 通信啦,接下來(lái)我們編寫一個(gè)簡(jiǎn)單的程序進(jìn)行測(cè)試。
Python代碼測(cè)試
Isaac Sim 可以從官方自帶的一些 python 腳本獨(dú)立啟動(dòng),啟動(dòng)腳本位于 Omniverse 中的 Isaac Sim 目錄中,例如,啟動(dòng)作為示例提供的名為 “franka” 的制造機(jī)器人演示的命令如下所示:
cd~/.local/share/ov/pkg/isaac_sim-2021.2.1
./python.shstandalone_examples/api/omni.isaac.franka/follow_target.py
打開(kāi)的時(shí)間可能比較久需要有點(diǎn)耐心...
當(dāng)然還有其他很多別的腳本可以供參考,接下來(lái)我們將自己編寫 Python 腳本實(shí)現(xiàn)以下內(nèi)容:
1、在場(chǎng)景中放置對(duì)象
2、在場(chǎng)景中放置一個(gè)機(jī)器人并用鍵盤控制運(yùn)動(dòng)
放置對(duì)象
我們可以使用 omni.isaac.core 對(duì)象模塊放置對(duì)象,包含以下函數(shù):
-
DynamicCuboid
-
DynamicCapsule
-
DynamicCone
-
DynamicCylinder
-
DynamicSphere
-
VisualCuboid
-
VisualCapsule
-
VisualCone
-
VisualCylinder
-
VisualSphere
-
FixedCuboid
這些函數(shù)允許我們?cè)趫?chǎng)景中放置立方體、膠囊、圓錐體、圓柱體和球體,Dynamic 開(kāi)頭的對(duì)象受到物理引擎的作用,比如重力,當(dāng)把它們放置在空中時(shí),它會(huì)直接掉落。Visual 開(kāi)頭的對(duì)象則只會(huì)用于外觀,不會(huì)受到力的作用,也不會(huì)進(jìn)行碰撞檢測(cè),因此其他對(duì)象可以直接穿過(guò)它。例如以下代碼:
from omni.isaac.kit import SimulationApp
import numpy as np
simulation_app = SimulationApp({"headless": False})
from omni.isaac.core import World
from omni.isaac.core.objects import DynamicCuboid, DynamicCapsule, DynamicCone
from 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():
True) =
simulation_app.close()
效果是這樣的:
稍微修改一下,加入一些互動(dòng),比如用鍵盤控制一個(gè)小車:
from omni.isaac.kit import SimulationApp
import numpy as np
import carb
import omni.appwindow
simulation_app = SimulationApp({"headless": False})
from omni.isaac.jetbot import Jetbot
from 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 可以控制小車運(yùn)動(dòng):
更多的 API 可以參考官方的文檔,后續(xù)再補(bǔ)充更多內(nèi)容。
審核編輯 :李倩
-
仿真
+關(guān)注
關(guān)注
52文章
4283瀏覽量
135808 -
ROS
+關(guān)注
關(guān)注
1文章
288瀏覽量
17740 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5561瀏覽量
122793
原文標(biāo)題:Isaac “家族” 揭秘 | 知乎大咖深度解讀系列(1)
文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
NVIDIA Isaac Sim和Isaac Lab現(xiàn)已推出早期開(kāi)發(fā)者預(yù)覽版
正式上線:MotoSim智能電機(jī)仿真平臺(tái)

NVIDIA Isaac Sim 4.5.0與lsaac Lab 2.0的安裝教程

NVIDIA Isaac Sim與NVIDIA Isaac Lab的更新
盤點(diǎn)#機(jī)器人開(kāi)發(fā)平臺(tái)
電力電子教學(xué)新范式:EasyGo半實(shí)物仿真平臺(tái)賦能高校創(chuàng)新實(shí)踐

NVIDIA Isaac 是英偉達(dá)推出的綜合性機(jī)器人開(kāi)發(fā)平臺(tái)
英偉達(dá)GTC2025亮點(diǎn):NVIDIA與GE醫(yī)療合作 引入物理AI推進(jìn)自主診斷成像開(kāi)發(fā)
芯來(lái)科技攜手芯芒科技發(fā)布RISC-V CPU系統(tǒng)仿真平臺(tái)
智元機(jī)器人基于NVIDIA Isaac GR00T打造高效仿真數(shù)據(jù)采集方案

名單公布!【書籍評(píng)測(cè)活動(dòng)NO.58】ROS 2智能機(jī)器人開(kāi)發(fā)實(shí)踐
簡(jiǎn)述NVIDIA Isaac的重要更新

使用myCobot 280機(jī)械臂結(jié)合ROS2系統(tǒng)搭建機(jī)械分揀站

評(píng)論