User's voice
2023.12.13
GNSSとマップを切り替えて自律走行!「ROS開発キット」開発レポート③
こんにちは。ロボティクスエンジニアの中村です。
本記事は、ROS開発キットを”ハードウェアを気にせず、いきなりソフトウェア開発ができる!” 製品とすることを目的に、「つくばチャレンジ」という技術チャレンジへの参加を通してROS開発キットをブラッシュアップするプロジェクトの開発レポートとなります。
3回目の本記事では、地図によるロボットの自己位置推定とGNSSとの切替についてご紹介します。
屋根エリアの攻略
つくばチャレンジ2023で走行コースが変わりました。このようにつくば市庁舎の北のエリアを回るコースとなっています。北エリアには屋根があるためGNSSの測位精度が急激に悪化し、これだけではロボットの自律走行ができません。この屋根エリアではGNSS以外の方法でナビゲーションする必要があります。
今回はROS開発キットに搭載されている2DLIDARを使って地図を作成し、地図に対して自己位置推定してこの屋根エリアを攻略しました。
SLAMでつくば市庁舎周辺の地図を作成
SLAM(Simultaneous Localization And Mapping)は、ロボットのセンサデータを使って地図を作成し、その地図の中でロボット自身がどこにいるのかを推定する技術です。今回はCartographerを使ってつくば市庁舎周辺の地図を作ってみました。
(参考)クローラロボットでSLAM! CartographerでSLAMしてみた:https://cuborex.com/news/?id=54
現地では、2DLIDARをオンにした状態でラジコン操作で走行しデータを記録します。記録したデータをもとに、計算能力の高いPCでSLAMアルゴリズムを動かし地図を得ます。データを記録する時、走行データはコースを1周するだけでは終わらず、一度通った道のデータをしばらく取り続けます。
データ取りで走行した経路
作成した地図
このような巨大な地図を作るには、コツが必要です。こちらを参考にしてCartographerのチューニングをしました。
参考:Cartographer ROS Tuning methodology
Cartographerの大まかな原理を簡単に説明します。2DLIDARのいくつかのスキャンをつなぎ合わせて小さな周辺地図を作ります。これをサブマップといいます。このサブマップの中で正確に自己位置を推定するタスクをLocalLocalizationと呼びます。サブマップを作ることができたら、サブマップ同士をつなぎ合わせます。すべてのサブマップがどこにくっつくと破綻がないか確認しながらつなぎ合わせます。このタスクをGlobalLocalizationと呼びます。この2つのLocalizationを続けることで破綻のない精度の高い地図を作成することができます。
引用:Abudori Lab. SLAMを理解する - 自己位置の推定と地図の作成 -
走行中に同じ場所を重複して記録したのは、Global Localizationでスタート位置に戻ったことを認識させ、最初に作ったサブマップと戻ってきた時に作成されたサブマップを結合させるためです。どんなに正確なサブマップが作成されても、誤差は徐々に蓄積します。同じ場所に戻ることで、座標が同じであることが確認でき、累積した誤差を把握し、修正して正確な地図を作成することができます。これを一般的にLoop Closeと呼びます。
引用:Abudori Lab. SLAMを理解する - 累積誤差の最小化 -
チューニングのコツは、Global LocalizationとLocal Localizationのバランスを最適化することです。Global LocalizationではLoop Closeが起こりやすいように閾値を調整します。低い閾値では頻繁にLoop Closeが発生し、地図作成が容易になりますが、精度が低下します。逆に高い閾値では精度は高まりますが、Loop Closeが起きない場合、地図に蓄積した誤差が残ります。よって、ギリギリLoopCloseは発生するけれど、なるべく高い閾値を設定するとよいです。
Local Localizationでは、累積誤差がなるべく蓄積しないように設定します。GlobalLocalizationの閾値を0に設定すると絶対にLoopCloseが発生しなくなるので、その条件で最も地図がきれいになるように設定します。両方の設定するパラメータがわかってきたら、本番用にSLAMを回しましょう。ここまでに数時間のSLAMを何回も回して調整しました。
AMCLで自己位置推定
AMCLはROSで標準的な自己位置推定アルゴリズムです。2DLIDARのスキャンデータとホイールオドメトリがあれば、地図上の位置を推定してくれます。また、ROS 2のNavigation2では標準アルゴリズムとして実装されているので、インストール後、起動するだけで簡単に利用できます。
動画のように、最初に地図上の初期位置を与えます。与えた位置から、地図とのマッチングする位置を計算し、自己位置を尤もらしい位置に補正します。本来、オドメトリだけでは累積誤差によって走れば走るほど正確な位置から外れていきますが、地図とのマッチングをかけて補正し続けることでナビゲーションに耐えうる位置推定にします。
前項で作成した地図に対して、AMCLで位置推定をすることで動画のようにつくば市庁舎の北エリアの位置推定をすることができました。
GNSSとAMCLの切替システム
GNSSでは地図を作らずとも、正確な位置を知ることができます。今回はみちびきによる補正情報を使用しているため、基準基地局を使わずロボットのアンテナ単体で数センチメートル級の値を取得することができます。しかし、ひとたび建物の影や屋根に入ってしまうと位置が大幅にずれていきます。
一方、地図を作成するとそうした場所でも、正確な位置を知ることができます。ただし、地図を作成するためには地図作成アルゴリズムの理解や豊富な計算資源が必要であったり、そもそも原っぱのようなだだっ広い空間では地図に記載する構造物がないため地図を作成すること自体が難しい空間もあります。
そこで今回は、屋根のあるところ以外はGNSSで走行し、屋根のあるエリアだけ地図を作成しAMCLで自己位置を推定するシステムにしました。このようにGNSSとAMCLを切り替えて自己位置を取得することで、地図を作る範囲を限定的にして、ほとんどのエリアで地図を作成しなくとも走行できるナビゲーションになりました。
つくばチャレンジでの走行結果
つくばチャレンジでは、次の動画のようにだだっ広いつくば市庁舎エリアを走行しつつ、建物の裏側も自己位置推定をAMCLに切り替えることで走行しきることができました。
切替システムの応用先
今回のナビゲーションシステムでは、GNSSと地図の自己位置推定を切り替えて走行しました。地図の作成は室内環境では高確率でうまくいっても、屋外になると途端に難易度が跳ね上がります。このシステムのようにGNSSを活用すれば、そもそも地図を作成しなくても走行できるエリアはたくさんあるはずです。必要に応じてセンサを使い分けることができればロボットが活躍できるエリアはもっと広くなっていくでしょう。
例えば、運搬の仕事をするロボットが屋外ではGNSSを使い、屋内の充電ステーションに戻ってきたときに地図による自己位置推定を利用して自動充電、という使い方が考えられます。
お問い合わせ
CuboRexでは、いままでロボットがうまく立ち入れなかった不整地環境で役に立つロボットを開発しています。より詳しい情報を知りたい方は以下までお気軽にお問い合わせください。
ROS開発キットの詳細情報についてはこちらをご覧ください。
お求めの場合は、上記お問い合わせにお願いいたします。
https://prtimes.jp/main/html/rd/p/000000057.000022568.html
その他、クローラロボット製品はこちらのWebShopからもお求め頂けます。