ここでは AWS Robot Delivery Challenge カスタマイズ部門の予選にエントリーするための手順を説明します。
まずは、コンテストに参加するための作業環境を用意します。今回コンテストでは AWS RoboMaker という AWS のサービスを作業環境として活用します。AWS RoboMaker はロボットのアプリケーションを開発する方に向けた様々な機能を提供しています。これはロボット工学の研究者や、開発者が実際に利用をしているサービスですが、これから説明する手順にしたがって作業をすすめれば皆さんも利用をすることができます。是非この機会に最新のロボット工学の一端に触れてみましょう。カスタマイズ部門ではサンプルプログラムを一部独自にカスタマイズして競技に望みます。
AWS RoboMaker 開発環境はロボットアプリケーションを開発するための開発環境をクラウドに提供したものです。次の手順でコンテスト向けの開発環境を用意します。
-
AWS マネジメントコンソール https://console.aws.amazon.com/ を開きます。(AWS Educate アカウントからの AWS マネジメントコンソールへの入り方は AWS Educate での AWSマネジメントコンソールへのログインの仕方を確認してください)
-
サービス一覧から 「AWS RoboMaker」を見つけて開きます。URL: https://console.aws.amazon.com/robomaker から直接 AWS RoboMaker を開くこともできます。
-
AWS RoboMaker の機能の一覧から [開発] → [開発環境] を選びます。機能の一覧は画面左側に表示されていますが、これが表示されていない場合は、左上に「≡」ボタンが表示されていると思うので、これをクリックします。
-
開発環境の一覧が開かれます。リスト右上の [環境の作成] ボタンをクリックします。開発環境の作成のための入力画面が開始します。
-
開かれた 「AWS RoboMaker 開発環境を作成する」 ウインドウでは「名前」は開発環境の名前を任意に設定します(例:deliverychallenge2021) 。「 プリインストールされた ROS ディストリビューション 」は 「Melodic」 を選びます。「インスタンスタイプ」は 「m5.large」 を選択、「VPC」 はリストから (デフォルト) と表示されているものを選び「サブネット」は任意の1つを選びます。一通り入力したら右下の [作成] ボタンをクリックして、開発環境の作成を開始します。
-
開発環境の作成が開始されます。作成の完了には数分かかります。
開発環境作成、接続中
作成、接続完了
※ 開発環境はブラウザーを閉じてもファイルの内容などについては以前の状況を維持しています。ブラウザーを閉じた後、再び同じ開発環境に戻るためには AWS RoboMaker の機能の一覧から [開発] → [開発環境] を選び、出てきた開発環境一覧の中から該当の項目を選んで開きます。
開発環境にコンテスト用の素材をダウンロードしてきて、利用可能にしていきます。次の手順にしたがって作業を行ってください。
-
AWS RoboMaker 開発環境の画面右下のターミナル領域をクリックします。
-
ターミナル領域に次のコマンドを実行します。これはインターネットからコンテストの素材をダウンロードしてきています。
git clone https://github.com/aws-samples/aws-robomaker-sample-application-delivery-challenge.git
-
続いて次のコマンドを実行します。
cd aws-robomaker-sample-application-delivery-challenge/contest/expert
-
さらに次を入力して実行します。コンテストの環境の構築が開始されます。これは完了まで 10分ほどかかります。完了までしばらくお待ちください。
./ws_setup.sh
コマンド完了後の表示
-
(注:この操作は先に実行したコマンドが正常に完了したことを確認してから行います) ロボットを遠隔操作するための Webインターフェースをご自身の PC にダウンロードします。画面左側のファイルツリーで aws-robomaker-sample-application-delivery-challenge を開き、この中の browser フォルダーを右クリックして、メニューを開きます。現れたメニューから Download を選択します。
-
フォルダーの内容は一つのアーカイブファイルとしてご自身の PC にダウンロードされてきます。アーカイブファイルは展開してそれぞれのファイルを開けるようにしておいてください。後ほど使います。
これで準備は完了です。コンテスト用のロボットアプリケーションが利用可能になりました。標準で提供されているサンプルアプリケーションの使い方を説明していきます。
サンプルアプリケーションはロボットアプリケーション開発のためのソフトウェアフレームワークである ROS (Robot Operating System) を使って作られています。サンプルアプリケーションでは次の2つの機能を提供しています。
- ROSのナビゲーションスタックを使った自律走行機能
- ナビゲーションスタックで活用できる地図を作る機能
自律走行をさせるために必要な環境の地図を作り、次にこの地図を活用して自律走行を試すというのが基本的な利用方法になります。地図作成、ナビゲーション、それぞれの作業手順を見ていきましょう。
地図の作成には SLAM (Simultaneous Localization And Mapping) という技術を利用します。これはロボットのセンサーで周辺の地図を作り、ロボットが移動することで周辺地図の中での自身の位置を更新しながら、地図の範囲を拡張していく技術です。ロボットを環境内に移動させることで環境全体の地図を作ることができます。
次の作業を行って地図を作っていきましょう。
-
AWS RoboMaker 開発環境のメニューから Run → Launch Simulation → Delivery Challenge SLAM を選択します。シミュレーションの開始が要求されます。
-
シミュレーションは開始まで数分かかります。メニューの Simulation の表示が Simulation (Preparing) となったらこのメニューを開いてください。中の View Simulation Job Details という項目が選択できるはずです。これを選択します。要求されたシミュレーション(シミュレーションジョブといいます)の詳細画面が開かれます。
-
シミュレーションジョブ詳細画面では「ステータス」が「実行中」となるまでお待ちください。「実行中」に変わるとシミュレーションジョブの中で使えるツール機能のパネルが表示されてきます。
-
「シミュレーションアプリケーションツール 」の中にある[GZClient] の [Connect] ボタンをクリックしてください。シミュレーションの画面が開かれてきます。画面右下に見えているがあなたが操作するロボットです。
-
視点の変え方などの操作に慣れてください。マウスホイールで拡大、縮小ができます。マウスを左クリックしながらドラッグすることで表示を平行移動できます。[Shift] キーを押しながらマウスを左クリックしてドラッグすることで表示を回転させることができます。
-
「ロボットアプリケーションツール 」の中にある[Robot Application] の [Connect] ボタンをクリックしてください。ここでは Rviz というツールによってロボットが認識している情報を視覚化した画面が開かれてきます。GZClient はシミュレーションの世界であるのに対し Rviz はロボットが周辺をどう理解しているかを視覚化したものです。Rviz は設定により表示項目を変更することができますが、現在表示されているのはロボット周辺 360度の障害物を捉えることができる LiDAR センサーの情報と、SLAM が作成している地図です。センサーが捉えたロボット周辺の障害物は緑色の点で表示されています。地図は画面灰色の部分がオープンスペースで、黒色の部分を障害物、つまりロボットが走行できない場所として表示しています。
-
これからロボットを移動させて地図を完成させていきますが、その前に Rviz についても少し操作に慣れておきましょう。Rviz では マウスホイールで拡大、縮小ができます。[Shift] キーを押しながらマウスを左クリックしてドラッグすることで表示を平行移動できます。(GZClient とは少し操作方法が異なっています)
-
ロボットを動かし地図を作っていきましょう。今回のアプリケーションでは専用の Webインターフェースを提供しています。先ほど 「1.2 AWS RoboMaker 開発環境にコンテスト用の素材を取り込み、利用可能にする」でダウンロード、展開したご自身の PC の中にある browser フォルダーを開き、この中にある robot_controller.html というファイルをブラウザーで開いてください。ロボットをコントロールするための Webインターフェースが開かれます(Webブラウザーは Google Chrome を推奨します)
-
それぞれ操作に慣れてください
-
矢印ボタンを押すことでロボットを移動させることができます。矢印の真ん中の「・」を押すことで停止させることができます。またキーボードの矢印キーでも操作できます。矢印キーは押している間その方向に移動し、離すと停止します。
-
右上の Location の下の表示は現在のロボットの位置を示しています。シミュレーション画面を開いた最初の表示で ロボットの直進方向が x、左右の方向が y、ロボットの向きが反時計回りで heading で表示されています。床に格子状にひかれている線はひとつのマスが 1 (m) になります。
-
-
ロボットを移動させることで地図を完成させていきます。作成された地図は自律走行の際の経路計画に使われます。より正確な地図はより正確な経路計画の助けになります。なお、地図は後から画像編集ファイルなどで加工、編集することも可能です。
-
地図が完成したらWebインターフェースの [Save Map] ボタンをクリックします。地図情報は Amazon S3 に保存されます。保存に成功すると Upload map file succeeded! と表示されます。保存先は contest/expert/robot_ws/src/delivery_robot_sample/settings/settings.yaml で確認することができます
-
シミュレーションでの作業が一通り終わったらシミュレーションジョブの詳細画面 [アクション] -> [キャンセル] を選んでシミュレーションジョブを終了させます。 シミュレーションは使った時間と処理の重さに応じた従量課金(処理の重さにも依存しますが、1時間使って約 $3)です。不要に長くシミュレーションを起動したままにして、クレジットを使い果たさないように気をつけてください! なお明示的にキャンセル操作をしなくともシミュレーション起動後 1時間30分で自動的に停止するように設定されています。
地図が無事作れたら、今度はその地図を使って経路計画、自律走行が可能になります。サンプルアプリケーションが提供する自律走行の機能を試してみましょう。
-
AWS RoboMaker 開発環境のメニューから Run → Launch Simulation → Delivery Challenge Navigation を選択します。シミュレーションの開始が要求されます。
-
シミュレーションは開始まで数分かかります。メニューの Simulation の表示が Simulation (Preparing) となったらこのメニューを開いてください。中の View Simulation Job Details という項目が選択できるはずです。これを選択します。要求されたシミュレーション(シミュレーションジョブといいます)の詳細画面が開かれます。
-
シミュレーションジョブ詳細画面では「ステータス」が「実行中」となるまでお待ちください。「実行中」に変わるとシミュレーションジョブの中で使えるツール機能のパネルが表示されてきます。
-
「シミュレーションアプリケーションツール 」の中にある[GZClient] の [Connect] ボタンをクリックしてください。シミュレーションの画面が開かれてきます。画面右下に見えているがあなたが操作するロボットです。
-
視点の変え方などの操作方法は「地図の作成」で GZClient をあつかった際と同様です。今回はコースの途中にいくつか移動オブジェクトがみられるかと思います。
-
「ロボットアプリケーションツール 」の中にある[Robot Application] の [Connect] ボタンをクリックしてください。Rviz というロボットが認識している情報を視覚化した画面が開かれてきます。今回開かれる Rviz は地図作成の際の Rviz とは少しだけ表示される内容が異なっています。ここで開かれる Rviz では地図と地図の中でロボットがどこに位置しているかを表示し、また周辺の領域が走行可能かどうかの判定を青は安全、赤は危険で表示し、センサーが捉えている周辺の障害物の情報を緑色の点で表示、緑色の矢印は地図の中でどこにいるかを判定する際の基準を表示しています。ロボットが正常に動作している間はシミュレーションワールドと Rviz の表示はかなり連動していますが、ロボットが転倒するなど不測な状況が発生することにより両者の間に大きな差が生じる場合もあります。画面の左下にはロボットに搭載されたカメラからの画像も確認することができます。
-
Rviz についても視点の変え方などの基本操作については「地図の作成」で確認した際と同様です。
-
ロボットを動かしてみましょう。「地図の作成」で用いたのと同じ Webインターフェースを通じてロボットを操作することができます。「1.2 AWS RoboMaker 開発環境にコンテスト用の素材を取り込み、利用可能にする」でダウンロード、展開したご自身の PC の中にある browser フォルダーを開き、この中にある robot_controller.html というファイルをブラウザーで開いてください。ロボットをコントロールするための Webインターフェースが開かれます(Webブラウザーは Google Chrome を推奨します)
-
矢印ボタンを押すことでロボットを移動させることができます。「地図の作成」の際と同様の方法でロボットを移動させることができます。
-
右上の Location の下の表示は現在のロボットの位置を示しています。これも「地図の作成」の際と同様の情報が表示されています。
-
Goal は自律走行の際に使う入力フィールドになります。ここにロボットを移動せる目標地点を設定します。右上 Location の値と同じ座標系でロボットを到達させたい場所の座標と向きを設定します。
-
[[G]o To] ボタンをクリックするか、キーボードの [G] ボタンを押すことで Goal で設定された地点への自律走行を開始します。サンプルプログラムの自律走行機能は今回のシミュレーション環境用に特別なチューニングは行っておらず、ロボットの標準パラメータを使っています。このため通路の細い場所などではスムーズに通過できない場合があります。これかサンプルプログラムをカスタマイズすることで改善できる可能性のあるポイントの一つです。自律走行でうまく走行できない場合にマニュアル操作に切り替えて走行を継続させるのも一つの手です。矢印キーボードまたは矢印ボタンでマニュアル操作を開始すると自律走行はキャンセルされます。自律走行を再開させるには再度 [[G]o To] ボタンをクリックするか、キーボードの G を押します。
-
自動走行をさせている時の rviz の表示を確認してみてください。ロボットの走行計画が黒い線でひかれて、これに沿ってロボットは移動を試みます。ロボットには周辺の障害物を捉える LiDAR センサーが搭載されており、周辺 360度の障害物を捉えています。移動の途中で障害物が検出された場合、障害物を避ける走行ルートを作成し、ルートを調整して走行を試みます。Rviz はロボットがどういう計画で動作をしているのかを理解し、予測するのに役に立つでしょう。
- マニュアル操作は自動運転と比べて遅い走行速度に設定されており、この速度は変更することはできません。ロボットをいかに早く目的地に到達させるかは、自動運転をいかに有効に活用できるかに関わっています。
-
-
シミュレーションでの作業が一通り終わったらシミュレーションジョブの詳細画面 [アクション] -> [キャンセル] を選んでシミュレーションジョブを終了させます。 シミュレーションは使った時間と処理の重さに応じた従量課金(処理の重さにも依存しますが、1時間使って約 $3)です。不要に長くシミュレーションを起動したままにして、クレジットを使い果たさないように気をつけてください! なお明示的にキャンセル操作をしなくともシミュレーション起動後 30分で自動的に停止するように設定されています。
Robot Delivery Challenge 予選はシミュレーションを利用したタイムトライアルです。指定された場所にいかに短時間で到達できるかを競います。専用の測定ツールが用意され、結果は自動通知されます。ここではシミュレーション予選でのタイム計測の方法について説明します。
まずチェックポイントを説明します。チェックポイントは次の図に示した場所になります。これは座標で示すと x: 7.2, y: 2.3 のあたりになります。
ここではシミュレーション予選のタイム計測方法を説明します。 シミュレーションのタイム計測は何度でも行うことができます。一番良いタイムがチームのタイムとして採用されます。
-
まず自律走行のシミュレーションを開始して、Webインターフェースから操作可能な状態を整えておいてください。
-
Webインターフェースを開始したのと同じフォルダーの中にある game_console.html というファイルをブラウザーで開いてください。予選タイム計測ツールが開かれます。
-
「チーム代表の Emailアドレス」にチーム登録を行った際の代表者の Email アドレスを入力して [Enter] キーを押してください。正しい メールアドレスであれば、ステータスが Ready となり計測を開始することができます。
(コンテストへの参加申請をいただいてから計測システムに情報が反映されるまで1日程度時間がかかります。もし申請から数日経過してもメールアドレスで認証されないようであれば事務局([email protected])まで状況確認の連絡をしてください)
-
[Start] ボタンをクリックすることで計測を開始することができます。ステータスは Running に変わります。(ロボットは [Start] ボタンをクリックすると同時に強制的にスタート地点に戻されます。ロボットがスタート地点以外にいる場合、このロボットの位置の強制リセットによりロボットがスタート地点以外にいた場合、ロボットの内部地図との間にズレがでてきてしまう可能性があります。[Start] ボタンを押す前に、ロボットはスタート位置につかせておくことが推奨されます)
-
Webインターフェースを使ってロボットをコントロールしチェックポイントを目指してください。経過時間とゴールまでの距離は計測ツールに表示されます。
-
チェックポイントに到達すると計測が終了し、結果が自動的に通知されます。結果の通知が無事終了するとステータスは Reported となります。この画面は記録のためにスクリーンショットなどを取っておくことを推奨します。最新の順位は AWS Robot Delivery Challenge Webページで報告されます。
(計測後に表示されるランキングは全ての計測結果の中でのランキングです。チーム順位はAWS Robot Delivery Challenge Webページで確認してください)
コンテストで扱うサンプルアプリケーションは contest/expert/robot_ws/src/delivery_robot_sample と contest/expert/robot_ws/src/turtlebot3 配下にあり、この箇所の変更は自由です。contest/expert/robot_ws/src/aws_game_manager 配下はコンテストの計測などに関わるコードが含まれていますので変更禁止です。 simulation_ws 配下にはコンテストで扱うシミュレーヨンワールドなどの情報が入っておりこれも変更禁止です。
サンプルアプリケーションの中身の概要については アプリケーションコードの詳細と改良の方法(Detail) のドキュメントを参照してください。
カスタマイズ対象となる主なファイル
- contest/expert/robot_ws/src/delivery_robot_sample 配下
- contest/expert/robot_ws/src/turtlebot3 配下
変更禁止箇所
- contest/expert/robot_ws/src/aws_game_manager 配下
- contest/expert/simulation_ws 配下
- robot_ws/src/aws_game_manager
※ contest/expert/robot_ws は実際のところ robot_ws フォルダーのシンボリックリンクになっており、robot_ws 配下の同様のファイルを変更することによってもこれらのファイルを変更することはできます。
ソースコードを変更した時、これをシミュレーションの実行に反映させるには「ビルド」と「バンドル」という操作を行う必要があります。これは RoboMaker 開発環境のメニューから行う場合 Run -> Delivery Challenge Robot app build -> bundle を選択します。コマンドラインから行う場合、robot_ws ディレクトリで次のコマンドを実行します。
colcon build && colcon bundle
地図画像の中で黒い場所が障害物で、無色の箇所は未知の領域です。地図はロボットに搭載されている LiDAR センサーからの情報をもとに作成されます。LiDARセンサーは周囲360度の障害物までの距離を測定することができるセンサーです。地図を作るために全てのルートを通過しなければならないというわけではありません。LiDAR センサーが壁を障害物として認識できれば、通過していない場所でもその場所の地図情報は形成されます。例えば狭くて通過が難しいルートがあった時、無理してそこを通過する必要はないかもしれません。その狭い道につながる別のルートがあれば、その別ルートから反対側に移動することにより、狭い通路を挟む周辺の地図をつくることができます。 ブラウザーインターフェースで [Save Map] ボタンをクリックするとファイルは一度 /tmp 配下に保存され、次に Amazon S3 に保存されます。 Amazon S3 での保存先は contest/expert/robot_ws/src/delivery_robot_sample/settings/settings.yaml ファイルで設定されています。 保存されるファイルは map.pgm と map.yaml ファイルの2つです。 map.pgm ファイルはグレースケールの画像ファイルで、作成された地図データになります。これは画像ファイルなので、画像編集ソフトで編集することも可能です。画像データの中で、黒い箇所が障害物として認識されます。例えば地図の中でロボットを走行させたくない領域がある場合、その周辺を黒く塗りつぶすことで、ロボットにそこに障害物があると解釈させることができます。大幅に変更するとロボットのセンサーが捉えた情報と地図が一致しなくなり、ロボットが自身の位置を判断することができなくなるので、行きすぎた編集には注意が必要です。
狭い道を通れずにロボットがスタックするなど、ナビゲーションがうまく行かない場合、例えば次のチューニングが考えられます。
-
ナビゲーションの各パラメータを調整する
-
ナビゲーションスタックを起動する際、障害物からどこまでの範囲を通過できないエリアとして処理するかなどをパラメータ値で与えています。これらの値を調整することで、例えば狭い道を経路の候補から外させたり、通れるようにさせることができると考えられます。パラメータは contest/expert/robot_ws/src/turtlebot3/turtlebot3_navigation/param/costmap_common_param_burger.yaml の中にあります。
-
チューニングについて詳しくは次の ROBOTIS 社のサイトを参考にしてください。http://emanual.robotis.com/docs/en/platform/turtlebot3/navigation/#tuning-guide
-
ファイルを変更したらビルド、バンドル作業をおこない、変更内容を反映さます。
-
-
地図ファイルを編集する
-
地図ファイルを画像編集ファイルなどで編集、更新して、ナビゲーションを最適化できる可能性があります。地図ファイルとして保存されているのは map.pgm と map.yaml ファイルの2つです。 map.pgm ファイルはグレースケールの画像ファイルで、作成された地図データになります。これは画像ファイルなので、画像編集ソフトで編集することも可能です。画像データの中で、黒い箇所が障害物として認識されます。例えば地図の中でロボットを走行させたくない領域がある場合、その周辺を黒く塗りつぶすことで、そこに障害物があると解釈させることができます。あまり大きく編集すると、ロボットのセンサーが捉えた情報と地図が一致しなくなり、ロボットが自身の位置を判断することができなくなるので、行きすぎた編集には注意が必要です。
-
contest/expert/robot_ws/src/delivery_robot_sample/settings/settings.yaml の s3_bucker の値が S3 で保存されているバケットの名前で、バケット内 s3_prefix で指定された場所に地図が保存されています。 https://s3.console.aws.amazon.com/s3 から該当するバケットにアクセス、ダウンロードと、アップロード、更新を行うことができます。地図はリアルタイムでロボットアプリケーションに反映させるわけではありません。更新したら、再度アプリケーションを起動して最新の地図でのナビゲーションを開始します。
-
カスタマイズ部門は走行方法を自由にカスタマイズすることができますが。走行速度について制限があります。
- 自律走行はロボットの速度を超えたスピードで走行させてはなりません。これは 0.22m/s です。
- 直接ロボットの進行方向を操作するリモート操作においては制限速度 0.1m/s です。
予選の測定結果はタイムと同時にテレメトリ情報が事務局に送られます。速度違反が確認された場合、タイムは無効になります。
決勝に進めるのは上位5チームとなります。決勝では実際のロボットを操作します。決勝はフィールドに2チームが入り、複数あるチェックポイントをどれだけ通過することができるかを競うポイント競技になります。ぜひみなさん、決勝目指して頑張ってください!