在即將蓬勃發(fā)展的機(jī)器人行業(yè)中,仿真器會(huì)是核心的生產(chǎn)力工具和極大提升用戶體驗(yàn)的產(chǎn)品。
“Isaac Sim 的這些特性讓它在目前成為市面上性能最好的機(jī)器人仿真器。相信隨著用戶的增多、版本的繼續(xù)迭代,Isaac Sim 可以成為徹底改變機(jī)器人行業(yè)的核心生產(chǎn)力工具。” 這是知乎大咖 YY碩(知乎粉絲 9.7 萬+,機(jī)器人工程師)對(duì)于 Isaac Sim 特性的評(píng)價(jià)和展望。本期文章我們將分享 YY碩的深度文章《機(jī)器人仿真技術(shù)淺淡和 NVIDIA Omniverse Isaac Sim 介紹》。
去年 6 月到今年 5 月我都在 NVIDIA 總部的機(jī)器人仿真團(tuán)隊(duì)參與開發(fā) Omniverse 中的機(jī)器人仿真工具 Isaac Sim。在 5 月底的時(shí)候 Isaac Sim 發(fā)布了 2022 年的最新一個(gè)版本,作為參與了這個(gè)版本全開發(fā)過程的工程師我來給大家介紹一下這個(gè)產(chǎn)品。
機(jī)器人行業(yè)的核心生產(chǎn)力工具——仿真器
很早以前在開發(fā)多軸飛行器的時(shí)候,我們就在大疆花了很大的功夫做仿真器,一共做了兩套,一套自用,另一套半自用半對(duì)外。自用的仿真器用來幫助內(nèi)部研發(fā)團(tuán)隊(duì)開發(fā),除了基本的飛行器動(dòng)力學(xué)以外還進(jìn)行了 GPS 和 IMU 的仿真、自動(dòng)邏輯和模塊故障注入、支持硬件在環(huán)仿真等等,依托仿真器我足不出戶地重構(gòu)優(yōu)化了 DJI 飛行器所有的基于 GPS 的航跡規(guī)劃功能。另一套半對(duì)外的仿真器我們用了 unreal engine 實(shí)現(xiàn)精細(xì)的場(chǎng)景圖形仿真和相機(jī)圖像生成,內(nèi)部可以用來測(cè)試視覺系統(tǒng),對(duì)外則讓用戶更好地練習(xí)飛行。
后來微軟 Redmond 研究院的幾位朋友也利用 unreal engine 開發(fā)了飛行器的仿真軟件 AirSim,適配幾款 DJI 的飛機(jī),也適配一些開源飛控,一時(shí)間受到很多關(guān)注。
?
Air Sim 仿真飛行
近年來隨著自動(dòng)駕駛的蓬勃發(fā)展,仿真器在機(jī)器人系統(tǒng)開發(fā)過程中的地位越來越重要。在仿真中驗(yàn)證機(jī)器人的程序邏輯是否準(zhǔn)確是一個(gè)歷久彌新的需求,此外近年來基于深度學(xué)習(xí)技術(shù)的控制器設(shè)計(jì)需要大量的訓(xùn)練數(shù)據(jù)來支持,這些訓(xùn)練數(shù)據(jù)在真實(shí)世界中并不好獲得,使用能夠渲染精細(xì)場(chǎng)景的仿真器來模擬真實(shí)駕駛場(chǎng)景來收集數(shù)據(jù)逐漸成為了業(yè)界的主流技術(shù)。除了一些能夠自研仿真器的大廠以外,其他從業(yè)者多半會(huì)采用已有的游戲引擎和仿真引擎來制作自己的開發(fā)平臺(tái),也有一些專用的商業(yè)自動(dòng)駕駛仿真器成為了兵家必爭(zhēng)之軍火。比如說老牌仿真器 CarSim 就在近期被收購了。
除了自動(dòng)駕駛以外,部署在家庭環(huán)境的機(jī)器人需要先在仿真的家居場(chǎng)景里測(cè)試、工廠產(chǎn)線和工業(yè)機(jī)械臂可以用仿真來調(diào)度、實(shí)驗(yàn)室自動(dòng)化也需要仿真驗(yàn)證來避免機(jī)器人在部署后破壞重要設(shè)備……任何一個(gè)商業(yè)化的機(jī)器人要在某個(gè)場(chǎng)景中工作,不管是開發(fā)人員和用戶都有在實(shí)際接觸機(jī)器人之前先通過仿真了解機(jī)器人的行為和性能的必要。因此,在即將蓬勃發(fā)展的機(jī)器人行業(yè)中,仿真器會(huì)是核心的生產(chǎn)力工具和極大提升用戶體驗(yàn)的產(chǎn)品。
但是在今日包含自動(dòng)駕駛的更廣泛的機(jī)器人行業(yè)中,成熟的商業(yè)仿真器產(chǎn)品并不存在,已有的仿真解決方案大多數(shù)都有這樣那樣的不足。一個(gè)完善的仿真器產(chǎn)品應(yīng)該具有哪些特性呢?我們可以從當(dāng)代已有的一些成熟機(jī)器人應(yīng)用出發(fā)來思考一下。
首先,機(jī)器人仿真器必須能夠比較真實(shí)地仿真機(jī)器人本身的動(dòng)力學(xué)物理定律,此外還能夠高效地解算機(jī)器人和環(huán)境交互時(shí)產(chǎn)生的碰撞。相同的需求在游戲行業(yè)中也存在,但游戲引擎通常會(huì)簡(jiǎn)化被仿真的物體的物理模型和碰撞模型以追求實(shí)時(shí)性,而機(jī)器人仿真器的使用者可以接受仿真器解算得比真實(shí)時(shí)間慢,但是不能接受仿真器錯(cuò)誤計(jì)算機(jī)器人本身的物理性質(zhì)。一個(gè)典型的例子是 Dzhanibekov 效應(yīng),能夠正確仿真這個(gè)物理過程的游戲引擎少之又少。
其次,機(jī)器人仿真器需要能夠仿真 IMU、相機(jī)、GPS、激光雷達(dá)等傳感器,這些傳感器普遍應(yīng)用于成熟的無人機(jī)、掃地機(jī)器人、工業(yè)機(jī)器人系統(tǒng)當(dāng)中。其中最復(fù)雜的是相機(jī),因?yàn)榉抡婵雌饋碚鎸?shí)的相機(jī)場(chǎng)景是游戲行業(yè)三十年來不懈追求的主要功能。比游戲更難的地方在于,通常游戲中我們只用仿真一個(gè)相機(jī)鏡頭(就是用戶操作的視角),而一臺(tái)機(jī)器人(比如一輛無人駕駛汽車)可能會(huì)安裝有十個(gè)以上的相機(jī)作為傳感器,仿真器需要能夠同時(shí)給這十個(gè)相機(jī)進(jìn)行圖像渲染。我們?cè)试S機(jī)器人仿真引擎可以運(yùn)行的比游戲引擎慢,但是也不希望它慢到不可接受的地步。顯然地相機(jī)渲染需要使用 GPU,于是機(jī)器人仿真器必須能夠整合 GPU 資源,在快速解算真實(shí)物理模型之外同步渲染相機(jī)圖像和其他傳感器信息。
另外,機(jī)器人仿真器要能夠和 ROS 的生態(tài)系統(tǒng)進(jìn)行對(duì)接。ROS 作為當(dāng)今最完善的機(jī)器人軟件系統(tǒng),已經(jīng)成為了標(biāo)準(zhǔn)的開發(fā)機(jī)器人應(yīng)用的主流工具。在 ROS 生態(tài)中成長起來的仿真器 Gazebo 可以非常流暢地接收和發(fā)送ROS的消息包,讓用戶使用自己的程序控制 Gazebo 當(dāng)中的機(jī)器人,因此成為大部分當(dāng)代的機(jī)器人公司在開發(fā)項(xiàng)目時(shí)的首選。但是 Gazebo 的圖形渲染能力非常羸弱,只能夠用 CPU 資源仿真簡(jiǎn)單的相機(jī),一旦場(chǎng)景變復(fù)雜,仿真運(yùn)行速度會(huì)急劇降低。
Gazebo 使用界面
最后,機(jī)器人仿真器需要提供一種通用的機(jī)器人和場(chǎng)景描述文件,方便用戶構(gòu)建不同的環(huán)境、導(dǎo)入不同的機(jī)器人進(jìn)行測(cè)試。ROS 的開發(fā)團(tuán)隊(duì)提出的 urdf(UnifiedRobot Description Format)是一種非常有效的機(jī)器人表示方法,但是這種格式不能表示除了剛體系統(tǒng)之外的復(fù)雜場(chǎng)景。Gazebo 的開發(fā)團(tuán)隊(duì)提出了 SDF(SimulationDescription Format)來表示機(jī)器人之外的環(huán)境,但是這種格式的表現(xiàn)力非常有限。另外由于 ROS 和 Gazebo 始終由開源社區(qū)開發(fā)運(yùn)營,缺乏良好的項(xiàng)目組織管理機(jī)制,sdf和urdf逐漸出現(xiàn)了多個(gè)版本并存、語法互相沖突等問題,限制了它們的進(jìn)一步發(fā)展。
機(jī)器人行業(yè)的科研和開發(fā)人員面對(duì)這些問題,目前只能各顯神通拼湊仿真技術(shù),比如說無人機(jī)通常不需要和環(huán)境進(jìn)行交互,動(dòng)力學(xué)仿真不精確影響不大,因此直接使用游戲引擎也可以;自動(dòng)駕駛則把汽車動(dòng)力學(xué)仿真和復(fù)雜傳感器仿真解耦開,用 Simulink 專門分析汽車本身,用游戲引擎只收集傳感器數(shù)據(jù);多足和人形機(jī)器人研究者則通常會(huì)自研物理仿真引擎,如 MuJoCo、RaiSim 和 DART 等,然后想辦法把自己的物理引擎與 Unity 或者 Unreal 整合,很多這方面的工作都處在非常早期的階段,所以大家的仿真場(chǎng)景都看起來和玩具似的,仿真出來的圖像也遠(yuǎn)遠(yuǎn)達(dá)不到實(shí)際的相機(jī)傳感器的質(zhì)量。
Bullet 仿真引擎中的相機(jī)圖像仿真
Isaac Sim
在連續(xù)賭對(duì) GPU 的通用科學(xué)計(jì)算能力和 AI 的價(jià)值之后,2021 年的英偉達(dá)已經(jīng)是公認(rèn)的世界一流科技公司,時(shí)代把英偉達(dá)推到了一個(gè)非常好的位置來開發(fā)一款優(yōu)秀的機(jī)器人仿真器:主流游戲引擎 unreal 和 unity 以及其他不少游戲公司自研的引擎通常都基于英偉達(dá)的 PhysX 作為物理引擎,雖然前代的 PhysX 采用了簡(jiǎn)化物理模型,但是正在開發(fā)的 PhysX 5 提升了物理仿真的性能。除了調(diào)集公司內(nèi)的工程師提升 PhysX 以外,英偉達(dá)還挖來了著名物理仿真引擎 Bullet 的作者 Erwin Coumans 參與物理仿真的開發(fā)。前面說相機(jī)傳感器的仿真是個(gè)難點(diǎn),但這個(gè)技術(shù)正是英偉達(dá)的強(qiáng)項(xiàng)—— RTX 實(shí)時(shí)光線追蹤技術(shù)已經(jīng)成熟地應(yīng)用在了游戲和電影特效工業(yè)中。深耕游戲和電影特效多年,英偉達(dá)能夠從這些領(lǐng)域找到各種對(duì)仿真有幫助的技術(shù)方案。
在機(jī)器人領(lǐng)域,英偉達(dá)也進(jìn)行了大手筆的布局,除了深度參與大大小小的自動(dòng)駕駛公司的各層級(jí)業(yè)務(wù)以外,英偉達(dá)聘請(qǐng)了世界上最好的一些機(jī)器人學(xué)家到公司兼職工作,比如 Dieter Fox 和 Marco Hutter 等人,這些科學(xué)家利用英偉達(dá)的生態(tài)進(jìn)行科研,同時(shí)也給機(jī)器人仿真器的開發(fā)提供思路和方向。在物理仿真、圖形渲染、自動(dòng)駕駛和機(jī)器人研究的積累之上,Isaac Sim 應(yīng)運(yùn)而生。
針對(duì)上述的機(jī)器人仿真器的問題,Isaac Sim 整合了最新的 PhysX 和 RTX 引擎進(jìn)行物理仿真和圖像仿真,其次引入了 Pixar 公司開發(fā)的 USD(UniversalScene Description)描述格式作為機(jī)器人和復(fù)雜場(chǎng)景的描述方式。這種格式被 Pixar 應(yīng)用于動(dòng)畫電影場(chǎng)景的描述已經(jīng)有很多年時(shí)間,現(xiàn)在拿來處理機(jī)器人仿真場(chǎng)景的表示可以說是降維打擊,效果非常好,許多機(jī)器人運(yùn)轉(zhuǎn)于極其復(fù)雜的場(chǎng)景中,這些場(chǎng)景都是通過 USD 表示和載入的。另外 Isaac Sim 還投入了巨大的資源與 ROS 生態(tài)進(jìn)行整合,Isaac Sim 能夠與 ROS1 和 ROS2 系統(tǒng)進(jìn)行自由通信。由于英偉達(dá)的業(yè)界地位,Pixar 和 ROS 生態(tài)圈對(duì)于 IsaacSim 提供了很大的支持。
接下來我想用四足機(jī)器人仿真談?wù)?Isaac Sim 如何解決上面說到的幾個(gè)仿真器的問題。
Isaac Sim 四足機(jī)器人仿真
四足機(jī)器人是當(dāng)代有商業(yè)應(yīng)用的機(jī)器人中最復(fù)雜的一種,和一般的移動(dòng)機(jī)器人相比,它會(huì)較快地移動(dòng)和旋轉(zhuǎn),還會(huì)與環(huán)境發(fā)生頻繁的碰撞和交互。四足機(jī)器人基本的控制需要用到 IMU、關(guān)節(jié)傳感器和足端力傳感器;如果想讓機(jī)器人具有更智能的行為,還需要安裝相機(jī)、激光雷達(dá)等傳感器進(jìn)行定位和地圖重建。由于直接調(diào)試實(shí)際機(jī)器人比較危險(xiǎn),仿真器能夠極大加速四足機(jī)器人的程序開發(fā)過程。
在最新的 Isaac Sim 官方文檔中有一個(gè)和四足機(jī)器人相關(guān)的頁面,其中包括了若干個(gè)和四足機(jī)器人相關(guān)的示例,有三種機(jī)器人可以選擇:Unitree A1,Unitree Go1 和 Anybotics Anymal??梢栽诶讨姓业?standalone_examples/api/omni.isaac.quadruped 路徑下的幾個(gè)例子,每個(gè)例子的詳細(xì)介紹都在下面的文檔中:
2.1 - 在例程 standalone_examples/api/omni.isaac.quadruped/go1_ros1_standalone.py 中,我們演示如何把 Isaac Sim 中的機(jī)器人傳感器數(shù)據(jù)發(fā)布到 ROS 中。這個(gè)例程初始化一個(gè) Unitree Go1 機(jī)器人,然后對(duì)它進(jìn)行基本的運(yùn)動(dòng)控制,此外還會(huì)把機(jī)器人的 IMU 和足端力傳感器發(fā)布成 ROS topic,然后我們就可以使用 ROS 中的可視化工具如 rqt_plot 或 plotjuggler 查看這些數(shù)據(jù)。力傳感器的仿真得益于 PhysX 改進(jìn)的物理計(jì)算能力和借助顯卡實(shí)現(xiàn)的碰撞檢測(cè)功能。
2.2 - 例程 standalone_examples/api/omni.isaac.quadruped/anymal_standalone.py 包含的是由蘇黎世聯(lián)邦理工學(xué)院開發(fā)的 Anymal 機(jī)器人的仿真和它備受關(guān)注的神經(jīng)網(wǎng)絡(luò)控制器,相關(guān)工作曾經(jīng)發(fā)表在 Science Robotics 上。和 A1 / Go1 上基于模型的控制器相比,Anymal 的控制器程序異常地簡(jiǎn)單,只有兩個(gè)神經(jīng)網(wǎng)絡(luò)的輸入和輸出。當(dāng)然它的缺點(diǎn)也非常明顯,用戶可以自行調(diào)整 A1 / Go1 上基于模型的控制器的參數(shù)來改變機(jī)器人運(yùn)動(dòng)速度、動(dòng)腿頻率等參數(shù),但是沒法直接去修改 Anymal 的神經(jīng)網(wǎng)絡(luò)來產(chǎn)生新的行為(必須重新訓(xùn)練網(wǎng)絡(luò))。
2.3 - 例程 standalone_examples/api/omni.isaac.quadruped/a1_direct_ros1_standalone.py 提供了直接從 ROS1 系統(tǒng)內(nèi)獲取力控指令的程序框架,這個(gè)框架可以配合我前段時(shí)間開源的四足機(jī)器人 C++ 控制器來使用:
https://link.zhihu.com/?target=https%3A//github.com/ShuoYangRobotics/A1-QP-MPC-Controller
2.4 - 例程 standalone_examples/api/omni.isaac.quadruped/a1_vision_ros1_standalone.py 是我最喜歡的一個(gè)工作,在這個(gè)例子中我們演示如何在四足機(jī)器人上安裝額外的相機(jī)傳感器來進(jìn)行基于視覺的定位。我們使用的是 VINS-Fusion,由香港科技大學(xué)沈劭劼教授的團(tuán)隊(duì)開發(fā)的機(jī)器人定位算法。例程的詳細(xì)指南在下面的文檔中:
https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/tutorial_ros_quadruped_vio.html
在這個(gè)例程中我們仿真了三個(gè)相機(jī),一個(gè)是用戶查看仿真的主視角(右下),另外兩個(gè)是機(jī)器人上安裝的相機(jī)所看到的圖像(右上)。相機(jī)圖像以及機(jī)器人上的 IMU 的數(shù)據(jù)在 Isaac Sim 中打包成 ROS 消息發(fā)布到 ROS 當(dāng)中,ROS 中運(yùn)行的視覺慣導(dǎo)里程計(jì) VINS-Fusion 接收到圖像后進(jìn)行特征點(diǎn)檢測(cè)和匹配(左下),然后把通過圖像和 IMU 信息計(jì)算出的機(jī)器人位姿和點(diǎn)云地圖發(fā)布到 Rviz 當(dāng)中可視化(左上)。
由于 Isaac Sim 仿真出來的圖像非常真實(shí),VINS-Fusion 的特征點(diǎn)提取和匹配算法工作得非常穩(wěn)定,定位效果極佳。這個(gè)同時(shí)渲染三個(gè)相機(jī)的例程在僅有一塊 RTX2070 顯卡的情況下即可流暢地運(yùn)行。值得一提的是,例程具有很好的擴(kuò)展性,我們不難基于這個(gè)例程加入更多的相機(jī)和激光雷達(dá)傳感器,因?yàn)?Isaac Sim 底層能夠動(dòng)態(tài)調(diào)用系統(tǒng)的顯存資源,把相機(jī)的渲染任務(wù)分配給所有可用的顯卡,增加相機(jī)不會(huì)太多降低仿真運(yùn)行的速度。
Isaac Sim的其他特性
Isaac Sim 提供了足夠多的功能支持進(jìn)行四足機(jī)器人的仿真,這些功能也可以被用于仿真其他的機(jī)器人,比如機(jī)械臂和移動(dòng)機(jī)器人等等,在如下文檔中可以找到其他機(jī)器人的例程:
https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/manual_omni_isaac_demos.html
除此以外,Isaac Sim 還有非常多其他激動(dòng)人心的新特性是一般模擬器不具備的。
3.1 - 便利的調(diào)試方式
Isaac Sim 提供了 VSCode 的環(huán)境配置文件,使得用戶可以直接對(duì)任何 Python 腳本例程進(jìn)行調(diào)試運(yùn)行:
https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/tutorial_advanced_python_debugging.html
很多其他的仿真器是獨(dú)立運(yùn)行的,沒有辦法把仿真器每一幀的運(yùn)行都暫停下來然后查看仿真的輸出。然而 Isaac Sim 的調(diào)試運(yùn)行可以讓用戶精細(xì)地查看仿真器的每一個(gè)運(yùn)行的 step 的所有細(xì)節(jié):
3.2 - Isaac Gym 并行強(qiáng)化學(xué)習(xí)訓(xùn)練
Isaac Sim 中有一個(gè)功能叫做 Isaac Gym,它早期是一個(gè)獨(dú)立的實(shí)驗(yàn)性程序,后來在 Isaac Sim 最新發(fā)布的版本中合并進(jìn)入 Isaac Sim 成為一個(gè)插件,這個(gè)插件可以讓用戶同時(shí)仿真大量相同的機(jī)器人,同時(shí)獲得這些機(jī)器人的運(yùn)行數(shù)據(jù)來進(jìn)行強(qiáng)化學(xué)習(xí)控制器的訓(xùn)練,例程的介紹在這里:
https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/tutorial_gym_external_rl_examples.html
前面所說的 Anymal 神經(jīng)網(wǎng)絡(luò)控制器有一部分也是通過 Isaac Gym來訓(xùn)練的。
3.3 - 豐富的相機(jī)信息輸出
Isaac Sim 中的相機(jī)除了能輸出基本的 RGB 圖像和深度圖像以外,還可以輸出圖像的語義分割表示、特征輪廓等等其他信息,這些都來自于各種英偉達(dá)開發(fā)的 GPU 圖像識(shí)別工具包。更豐富的圖像信息能夠幫助用戶整合 AI 技術(shù)進(jìn)入機(jī)器人的控制器,幫助開發(fā)更多的智能機(jī)器人應(yīng)用。
總結(jié)
Isaac Sim 的這些特性讓它在目前成為市面上性能最好的機(jī)器人仿真器。相信隨著用戶的增多、版本的繼續(xù)迭代,Isaac Sim 可以成為徹底改變機(jī)器人行業(yè)的核心生產(chǎn)力工具。
評(píng)論
查看更多