Tech Sketch Bucket of Technical Chips by TIS Inc.

クラウドベースのロボットシミュレータでのシミュレーション①

Pocket

 ロボット自体の作成、あるいは、ロボットを利用したシステムを作る際のシミュレータ活用は、一般によく行われていることかと思います。実機での動作確認と違ってコンピュータ上に環境、ロボット双方を仮想的に再現することによる様々な制限がかかる場合もあるでしょうが、物理的な動作が伴うロボット用のアプリケーションを、いきなり実機で動かすのは、色々とコワイですし、例えば他システムとの連携を試す場合などもいったんシミュレータ上で実行してみると安心です。

 筆者はもともとロボットが専門の人間ではありませんが、今まで作ってきて、馴染みのあるWebやモバイルのアプリケーションのようなテスト環境が、ロボットに関わる開発でも、同じようにできることが理想ではないかと考えています。その要素として、シミュレータは重要な役割を果たすものになります。

 という前置きの上で、これから数回にわたって、実際にシミュレータを使ってみたいと思います。今回取り上げるのは、クラウド環境ベースでシミュレータを利用することができるサービスである、The Constructです。

シミュレータの実行環境としてのクラウドサービス

 最近のロボット開発で馴染みのあるシミュレータと言えば、Gazeboではないでしょうか?ロボットミドルウェアのデファクトになりつつあるROSでも、desktop-fullの構成でインストールすると、デフォルトで連携できるようになっています。Gazebo以外にも、例えばWebotや、国産ですと産総研のOpenRTM関連で作成、公開されているシミュレータ群など、無償・有償のシミュレータが多数存在しています。以前からロボットに取り組まれている方達には、ずっと使い続けている馴染みのシミュレータなどもあるのではないかと思います。

 これらシミュレータは、開発用のローカルのコンピュータにインストールする形で利用するものがほとんどですが、近年のクラウド環境の充実と、そこで利用可能な潤沢なコンピュータリソースを考えると、シミュレータもクラウド上で実行できるサービス型のものが活用されるようになるというのは、一つの自然な選択と言えます。シミュレータをクラウド上に持っていくことに関する利点はいくつかありますが、筆者としては、主に以下の2点が大きいと考えています。

  1. 手元にある環境の能力に縛られることがない
  2. シミュレーションの共有が容易にできる

 シミュレータはロボットとそれが動作する環境の双方をコンピュータ上に再現するという性格上、それなりのコンピューティングリソースを消費することになります。特にロボットも環境も3次元で構成されている場合や、ロボットが複数台同時に動作していたり、ロボット自体が複雑な動きをするものなどの場合は顕著です。これら要求されるコンピューティングリソースへの対応が、クラウド上であれば柔軟に行うことができます。
 
 また、ローカルでのシミュレーションと違って、ネットの向こう側であるクラウド上でのシミュレーションは、ネットに接続できる環境があれば共有することが可能となります。開発を一人で行っているような場合は別ですが、例えば拠点自体もバラバラで複数の人が関わって開発を行っているような場合には、クラウド上で共有可能なシミュレーション環境はとても有用です。

 今回は実際にクラウドサービスで提供されいてるシミュレーション環境を使ってみるところまでやってみます。

The Constructとは

 今回使ってみるThe Constructはスペインのバルセロナを拠点としているスタートアップで、クラウド上でロボットのシミュレーションが実行できるサービスを提供しています。細かいサービスの内容やサービスの利用料などは公式サイトを参照いただくとして、主な特徴としては、以下が挙げられます。

  • インストールレスなWebベースのシミュレーション実行
  • PCだけでなく、様々なデバイス上でのシミュレーションに対応
  • 代表的なシミュレータから選択して利用可能
  • ROSのサポート

 シミュレーション環境自体はクラウド上で構築され、それらの操作や実際の実行状況はWebGLに対応したWebブラウザがあれば、他に特に何もインストールしなくても、シミュレーションを実行することが可能です。また、WebGL対応のブラウザが使えるデバイスであれば、PCに限らず、例えばタブレット上でシミュレーションの実行や実行状況を見ることが可能です。

 シミュレータ自体は一般的によく利用されているものが用意されており、その中から選択してシミュレーション環境を作成することができるようになっています。現在のところ用意されているのは、Gazebo、WebotとDARPA Robotics ChallengeのシミュレータであるDRC Simとなっています。今後さらに拡充されるようです。

 先述のROSに関してもサポートされており、普段ROSで開発を行っている人は、特に戸惑うことなく利用することができるはずです。

 利用可能なコンピューティングリソースは、プランによって異なります。今回は試しに使ってみるということで、無料プランを利用します。無料プランの場合は2 vCPUで利用時間が月10時間に制限されています。サービスの利用方法自体は変わりません。

 それでは、実際にシミュレーションが実行可能な状態にしていきます。

シミュレーションの準備

 最初にシミューレションが実行できるように、いくつか準備を行います。
 アカウントの登録が必要となりますので、事前に登録しておきます。登録については、ごく普通のアカウント登録ですので、説明は割愛します。以下アカウントが登録できている状態として説明します。

world fileのアップロード

 今回はシミュレータとしてGazeboを利用します。Gazebo単独での利用も可能ですが、ROSと連携して利用できる形での環境を準備したいと思います。シミュレータを選択してサービス上で起動した状態で、Gazeboで用意されているオブジェクトなどを配置してシュミレーションを作成していくことも可能ですが、ここでは、手元のファイルをアップロードして動かすようにしてみます。

 アカウント登録してログインした状態になると、以下のようにシミュレータの選択画面になります。

the_const_sim13

 左ペインのメニューの中から、Worldsを選択してworld fileを登録します。

the_const_sim14_trim

 world fileはGazeboで利用される、シミュレーションを行うロボットや環境に関する定義情報が書かれたファイルです。ここでのworld fileのアップロード方法としては、world fileのみを上げるやり方とROSのパッケージも含めて、zip形式で圧縮したファイルを上げる方法の二通りあります。Gazebo単独の場合は前者のアップロードで利用可能です。今回はROS連携しますので、後者で行います。zipに含まれていなければならないのは以下のROSパッケージとなります。

 こちらの構成はGazeboのROSパッケージを作成する際の基本的な構成と同様です。シミュレーションで動かすロボットの定義が格納されているディレクトリと、Gazeboでの実行に必要なworldファイルやlaunchファイルがまとめられたディレクトリの2つが最低限含まれている必要があります。また、Gazeboのディレクトリのlaunchファイルにはmain.launchが含まれている必要があります。これはThe Constructが実行時に利用します。その他必要なlaunchファイルがあれば、一緒にディレクトリ内に配置しておきます。ここでは、kobukiでシミュレーションを行ってみますので、kobukikobuki_gazeboのGithub上のリポジトリからソースをクローンしてきて、zipで固めます。依存関係のあるパッケージも一緒にzipで固めて起きます。含めるのは、kobuki_description、kobuki_gazebo、kobuki_gazebo_plugin、kobuki_random_walker、kobuki_safety_controllerです。なお、今回はplaygroundを利用しますので、kobuki_gazebo下のlaunchファイルのうち、kobuki_playgraound.launchのファイル名をmain.launchに変更しておきます。各構成や中に含まれるファイルについての詳細な説明は割愛しますので、適宜本家のサイト等を参照してください。

 アップロード画面の赤い背景枠の部分にファイルをドラッグ&ドロップするか、枠内をクリックしてファイル選択画面を開き、アップロードしたいworld fileを選択し、アップロードボタンを押下すると、アップロードが完了します。ファイルを選択した時点で、赤枠の中にアップロードしようとするファイル表示が追加され、アップロードが正常に完了すると、ファイル表示にシミュレーションのイメージ(アップロードしたworld fileとは関係なく、すべて同じ画像)が表示されます。

the_const_sim15

シミュレータの選択

 アップロードしたworld fileを使ってシミュレーションを行うには、先にシミュレータを選択し、シミュレータのインスタンスを実行状態にしておく必要があります。ログイン時に表示されたシミュレータ選択画面に、左ペインのHomeを選択して戻ります。表示されるシミュレータ一覧から利用したいシミュレータを選びます。

 今回はGazebo4.0+ROS(Indigo)を利用します。該当するシミュレータのアイコンをクリックするとシミュレータの説明と起動ボタンのある画面が表示されます。CPUサイズが選べるようになっていますが、FreeプランではSのみ利用のようですので、こちらの選択はできません。シミュレータ実行ボタン(Run This Simulator!)を押下してシミュレータを実行します。

the_const_sim13_select

the_const_sim9

 起動までにはしばらく時間がかかることがあります。正常に起動が終了すると、以下のようなシミュレータの画面が表示されます。うまく表示されない場合は、ブラウザのWebGLの設定を確認してみる必要があるかもしれません。もしWebGLが無効化されているなどしていたら、一度シミュレータを停止して、ブラウザの設定を有効にしてから、再度実行します。シミュレータの停止は、先ほどのシミュレータ選択したメニュー部に、起動中はTerminateボタンが表示されるようになりますので、そちらで停止します。

the_const_sim16

world fileを選択

 シミュレータの選択と実行が終了したら、先ほどアップロードしたworld fileを選択してシミュレーション環境を立ち上げます。world fileの選択はシミュレータ画面の右上に表示されているプルダウンメニューから行います。

the_const_sim17

 プルダウンで表示されるアップロード済みのworld fileのリストから、立ち上げたいものを選択し実行ボタン(Run Selected World)を押下します。立ち上げにはしばらく時間がかかります。立ち上げが終了すると、終了した旨のメッセージが表示され、自動的にシミュレーション画面にリダイレクトします。 

the_const_sim18

 今回立ち上げたkobukiのシミュレーション環境ですが、テクスチャがうまく表示できていません。もっと単純なworld fileや、Gazeboで配置可能な別のオブジェクト(本棚など)も配置してみましたが、そちらもテクスチャが表示されませんでした。exampleで提供されているzipをアップロードしてみたところ、そちらはテクスチャが反映されているものもあり、まだ、いくつか不具合もあるようです(一応Contactから、テクスチャ出ない旨、メッセージを送ってみましたが、free planですし、回答があるかは分かりません)。解消方法等判明したら、続きの回で追記します。今回はこのままで動かしみますが、見にくい場合は、ライティングの値を適宜調整するとよいかもしれません。ライティングの調整はシミュレータ画面の左側に表示されているツリー表示タブ(上から3番目のディレクトリ階層を示しているようなアイコンのタブ)からライティングの項目(デフォルトだとSun)を選択して調整できます。

実際にロボットを動かしてみる

 環境が整ったら、実際にROSでコードを書いてロボットを動かしてみます。シミュレータが起動している状態だと、Webベースのコンソールでshellが利用できるのと、Pythonのコードを書いて動かす場合には、IPython Notebookが利用できます。今回はPythonを使いますので、IPython Notebookを使ってみます。(IPython Notebookが利用できるのは、Pythonのコードを共有していく上で、とてもメリットがあります。Webベースで実行されているシミュレータとの相性という面でも、IPython Notebookというのはよい選択です。)

 IPython Notebookはシミュレータ画面の上部に表示されているPythonマークのボダンを押下することで起動します。起動すると別ウィンドウが開いてIPython Notebookが表示されます。使い方は全く通常のIPython Notebookと同様です。実行してみたいコードを記述して、実行ボタンを押せば、シミュレータ上のロボットをすぐに動作させることが可能です。

the_const_sim19

 ここでは試しに簡単な動作をさせてみます。ちゃんと整理して書けていない部分もあるんで、コードがイケてない部分はご容赦を。

 
 rospyを使って、いったん直進して、来た方向に180度方向転換して戻り、また向きを変えて直進するを一定周期で繰り返すというだけの単純なPublisherを作っています。今回はコードの細かい説明はしませんが、やっていることは無限ループの中で、一定の速度で、それぞれ一定の距離の前進と回転をさせているだけです。速度0.5で距離1.0、角速度1.0で180度(ラジアンなのでPiで計算してます)で、それぞれ繰り返し処理の中で動かしています。メッセージの実行周期は50Hrzにしています。何気なくrospyを使っていますが、サービスがROS環境もまるごと用意してくれているので、手元に何もインストールしなくてもROSでの実装を試せているイメージがつかめてもらえるかと思います。

 一通りコードを記述し、IPython Notebookの実行ボタンを押してみて、ロボットがウロウロと繰り返し動作をすれば、とりあえずちゃんと動作していることが確認できます。IPython Notebookを利用する以外に、Webコンソールを立ち上げて、コマンドラインから操作してみることも可能ですが、コンソールをWebブラウザでエミュレートしている分、反応性がイマイチなので、手元で書いたものをworldのアップロードの時に一緒に固めて上げておいて、それを実行する、という以外は、IPython Notebookを使った方が快適です。

まとめ

 今回は、The Constructを使ってみることができるようにするところまでやってみました。フリープランだと、一月当たり10時間までの利用制限があるので、のんびり試行錯誤とまでは行かないかもしれませんが、まずは動きを試してみるというレベルで、他のロボットのモデルや、worldも続けて試していきます。

エンジニア採用中!私たちと一緒に働いてみませんか?