Unityを用いたロボットシミュレーター環境の構築

# はじめに

2018年、経済産業省とNEDOの主催によりロボット国際大会である[World Robot Summit (WRS) ](https://worldrobotsummit.org/)が日本で開催された。



>WRSは、ロボットの活躍が期待されるさまざまな分野において、
>世界中から集結したチームがロボットの技術やアイディアを競う競技会「World Robot Challenge（WRC）」と、
>ロボット活用の現在と未来の姿を発信する展示会「World Robot Expo（WRE）」とで構成されています。
>ロボットをテーマに人々がつながり、未来を語り合う場となります。



WRCのタスクの一つとしてサービスカテゴリー部門のパートナーロボットチャレンジがある。トヨタ社が開発したHSRを用いて生活空間での人間の暮らしをサポートするタスクであり、与えられた課題を遂行してポイントを競う競技である。どんな感じは公式のイメージ動画で何となく掴めると思う。



[![ビデオが開けなかった場合に表示されるテキスト](https://img.youtube.com/vi/ktcfNfTYiVo/0.jpg)](https://www.youtube.com/watch?v=ktcfNfTYiVo)




今回はバーチャルスペースで使用されたシミュレータSIGVerseについて紹介する。本来は研究分野でのメリットが大きいのだが、研究に使いたいなら論文呼んだ方がいい。なので本記事ではイメージを掴むために読んでいただきたい。



一般ユーザにとってのメリットは、**Gazeboの代わりにUnityを用いた開発できる**という点である。Unityの様々なAssetを用いて住環境を構築できるため、Gazeboを使うよりも容易に任意の環境構築が可能である。



# SIGVerse

[公式wiki](http://www.sigverse.org/wiki/jp/)の引用。



> 人間とロボットが言語的・物理的・認知的インタラクションを行いながらタスクを達成するという状況を扱う研究分野はHuman-Robot Interactionと呼ばれ，近年のロボット研究の大きなトピックになっています．例えば，部屋の片付けをする家庭用サービスロボットなどが典型的な例になりますが，そのような研究を実施するには，研究室にリビングルームを設置し，ロボットを購入または開発し，長時間の被験者実験などを繰り返すなど，空間的・予算的・時間的コストが膨大にかかります．それを手軽にシミュレーションの世界で実現し，大学の研究者でなくとも研究を進めることが可能な環境を提供するのがSIGVerseです．仮想ロボットがシミュレータの中で動作するだけでなく，現実世界の人間がバーチャルリアリティーのデバイスを介して，ロボットと言語的・身体的・認知的インタラクションをリアルタイムで行うことが可能です．これにより，OpenAI GymやDeepMind Labなどのような，実機のロボットを使わずに機械学習アルゴリズムとシミュレータのみでロボットの運動スキルを獲得させるような研究を，Human-Robot Interactionの分野でも実施できる可能性が広がります．



要約すると「実機のロボットを用いて実験を行うのはコストがかかるため、容易に実験ができるようシミュレータ環境を作りました」です。



既存のシミュレータであるGazeboとの違いは

* Unityを使っているので既存のAssetを用いることが出来る

* VRを使ってアバターを操作することが出来るので、Human-Robot Interaction分野の実験が可能

が挙げられます。



# システムの構成

システムのイメージ図を以下に示す。

<img width="800" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531981/29d97294-4af6-270a-d87f-094c3e81b982.png">


Unity用にWindows、とROS用にUbuntuの2台を用意する必要がある。またROSのバージョンで動作が保証されているのがROS Kineticなので、Ubuntu16.04を使う必要がある。詳しいシステム要件は次の環境構築のリンク先で確認できる。



# 環境構築

UnityとROSを使う関係でWindowsとUbuntu16.04でそれぞれ環境を用意する必要があります。

[Windowsでの環境構築]([http://www.sigverse.org/wiki/jp/?Tutorial%20for%20ver.3#r972fb26](http://www.sigverse.org/wiki/jp/?Tutorial for ver.3#r972fb26))

[Ubuntuでの環境構築]([http://www.sigverse.org/wiki/jp/?Tutorial%20using%20ROS%20for%20ver.3](http://www.sigverse.org/wiki/jp/?Tutorial using ROS for ver.3))

環境構築が終わったらTurtleBot2、TurtleBot3、PR2、HSRの好きなサンプルシーンを実行して動作確認を行ってください。



# 実行

サンプルシーンを実行してもただの紹介記事になってしまうので、今回はWRS2018で実際に行ったHandymanタスクを実行する。環境構築に必要なものは[こちら](https://github.com/PartnerRobotChallengeVirtual)に上がっている。



Ubuntu側のプログラムを書き換えることでSlamやOpenmaniplatorの基本パッケージからOpenPoseなどのGPUを使うパッケージを組み込むことが出来る。



大会で実装したロボットの動作です。


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">handymanタスクの動画。前半がWindowsで後半がUbuntuの画面です。 <a href="https://t.co/yYCCjuXVwm">pic.twitter.com/yYCCjuXVwm</a></p>&mdash; 名探偵ナナチ (@dancing_nanachi) <a href="https://twitter.com/dancing_nanachi/status/1210072436323938305?ref_src=twsrc%5Etfw">December 26, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>




自動運転に必要な地図生成や自己位置推定機能を組み込んでいます。また物体認識を自前で学習したyoloのモデルで行い、depthカメラで物体との距離を取得し把持をしています。



さらっと書きましたがROSを勉強し始めて2か月でこれだけの機能を実装できたのはそれだけROSを使うと簡単に機能の実装が出来るということを示しているのではないでしょうか。



# おわりに

今回はSIGVerseを用いたシミュレータ環境の構築を行った。Unityを用いて提供された環境で実験ができることにより、容易にシミュレーションを行えるようになった。



Gazeboが重いと感じるPCを使っていてかつWindowsのPCを持っている人にとっては2台に処理を分散させることで快適な環境になると思う。さらにUnityは使ったことがあるという方は部屋の拡張が容易にできる。



もし、詳しく知りたいという方は論文も参考にしてください。

* [Learning multimodal representations for sample-efficient recognition of human actions](https://arxiv.org/abs/1903.02511)

# 補足

WRS2020では実機のみの開催となり、バーチャルは併催されるRoboCup Asia-Pacific 2020 Aichi Japanで競技が行われる。何が違うかというとRoboCupだと賞金が出ない。一応国際大会だがアジア・太平洋を対象としており、WRSの方が規模や参加団体が多い（と思う）。



筆者も興味はあるが、今回は見学だけしようと思っている。



もし、この競技に出てみたいけどノウハウがないという方がいれば連絡いただければアドバイスくらいはできます。賞金が復活したときは社会人チーム作ってもう一度出てみたいなぁ。