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