AbudoriLab.

自律ロボットで誰でも遊べるよう試行錯誤するブログです。

つくばチャレンジ2023に参加しました

こんにちは。abudoriです。 今年はつくばチャレンジ2023に参加してきました。 個人的なロボット技術を大きく伸ばせた年にもなりましたので、様子を少し共有いたします。

つくばチャレンジ2023 シンポジウムで発表してきました。

つくばチャレンジの成果を見たい方はこちらのレポートをご覧ください。

github.com

不整地ロボット開発プラットフォーム CuGo

つくばチャレンジ2023では、不整地走行ロボットであるCuGoを使用しました。 CuGoは安価で走破性の高いクローラーユニットです。積載重量も高く、さまざまなシーンで使用されています。 たとえば、今月のトランジスタ技術には、「ニンジン運搬ロボット」や「cm級GPS自律走行ロボットの製作」が掲載されています! ぜひ読んでみて! toragi.cqpub.co.jp

これにセンサやコンピュータをつければ様々な環境で走行できるロボットができます。 なかでも、ROSを利用したロボットにすぐ応用できれば、ロボットがさまざまな場所で走行実験ができるはずです。 なので全部入りロボットキットを作りました。 prtimes.jp

機械や電子工作はまだ手が動きましたが、ROSをバリバリ活用した屋外ナビゲーションの知見がなかったので、 ROS開発キットをひっさげてつくばチャレンジ2023に参加したのでした。

スポンサードリンク

つくばチャレンジ、GNSSでクリアできるんじゃね?

つくばチャレンジ、だだっ広い屋外なので、正確なGNSSが取得できれば障害物避けさえできればいいセンいくのでは? そう思っていた時期がありました笑。 なので、まずはGNSS全振りでどこまで行けるか挑戦だ!と息巻いていました。

cuborex.com このブログにも書いた通り、ひっじょおに精度高く測定できたのでした。 数年前(10年前?)では、3桁万円するようなシステムで測定していた(もりすぎ?)精度を、 数万円で、しかも単独測位で実現するのはとてもアツいです。 個人勢でも開発できる手軽さ、今後応用例をいくつか提案したいものです。

GNSSで走行しよう

まずはGNSSを使ったNavigaitonはどうやって作るのか?その前にWheel Odometryと性質を比べてみましょう。

ROSでは、GNSSもWheel Odometryと同じように扱われます。 Wheel Odometryは原点からの車輪の回転を数え現在地を求めます。しかし、機械的誤差やスリップにより誤差が積算するため、 Wheel Odometryの値をそのまま自己位置として扱うケースは少ないです。 主に最近どのくらい動いた?という相対的な値はとても正確で、周波数も高く、周辺の環境の変化を受けにくいので、他の自己位置推定手法の補完として利用数ケースが多いです。

一方GNSSは地球上の緯度と経度がわかります。ロボットがどのような状態であるかはさておき、観測できれば緯度、経度の絶対的な値がわかります。 ただし、周波数が低く、たとえ正確であっても周囲の環境がどのような状態なのかわかりません。 ROSでの使用方法ですが、スタート地点の緯度、経度を記録しておき、現在の緯度、経度と引き算することでスタート地点との位置がわかります。

単純な環境であれば、GNSSで得られた位置に対して、Wheel Odometryで補完することでロボットの正確な位置を知ることができます。 あとは、向かうべきWaypointに対して現在の自己位置との相対位置を計算しWaypointに向かう、これを繰り返すことで走行します。

複数の自己位置を組み合わせる

「つくばチャレンジ、だだっ広い屋外なので」

今年から屋根が追加されました。

屋根区間も鬼調整でWheel Odometryで走行できまいか粘りましたが、確率が低すぎて断念。 地図作成は長年のカンと感覚的なパラメータチューニングと高性能な計算機が必要と思っていたので逃げ続けてきましたが、 地図を使ったLocalizationを取り入れました。

cuborex.com この記事で書いたように、Cartographerで2D Lidarのセンサデータを元に地図を作り、その地図のどこにいるかを計算します。 地図を用意することで、地図内で絶対的な位置を知ることができます。これでGNSSで位置を知ることができない屋根のある区間を 地図の絶対位置にバトンタッチすることで自律走行を継続することができたのです。

GNSSとMAP Localizationのハイブリッド

GNSSで走行しよう で図示したように、絶対位置を知るセンサと相対位置を知るセンサを組み合わせます。

絶対位置を知るセンサ(GNSS)は得られれば正確な値を知ることができます。しかし屋根があったり、ビルや森の影などの場所では人工衛星の信号を受信できずデータを得ることすらできません。

相対位置を知るセンサ(Wheel Odometry)はだんだん誤差が蓄積して正確なデータではなくなります。しかし、ロボット自体が破損しない限り屋根があろうが周囲に特徴点がなかろうがデータを得ることができ、高周期で位置を知ることができます。

ここでの問題は絶対位置を知るセンサであるGNSSが途中で正確な値ではなくなってしまうことです。 そこで今回は絶対位置を知る手段をGNSSからMap Localizationに切り替えることで解決しました。

絶対位置センサを切り替える

ROSでの具体的な処理は以下の通りです。 robot_localization パッケージのEKFでGNSSの位置とWheel Odometryの位置を組み合わせたものを自己位置とし、 Navigation2で走行指示を出していました。ここで、GNSSとMap Localizationを同時にしておいて、スイッチできるようにしておきます。 GNSSはOdometoryと同じように原点からの位置がわかります。Map Localizatoinの位置の原点とGNSSの原点の差を利用できるようにしておくことで、GNSSとMapの座標が同一に扱えるようにするとスイッチできるようになります。

GNSSとMAP Localizationのハイブリッド構成

今回は屋根がある区間ではGNSSをオフにしてMapをオンにする、屋根区間を出たらGNSSをオンにしてMapをオフにするというスイッチをして、 つくばチャレンジ2023のような複合的なシーンを走行したのでした。

ほんとは、こんな非連続なスイッチでするのではなく、自己位置をブレンドしてもっともらしい位置をスコアリングして評価するのが正しいような気がしますが、それはまた後のはなし…。

この切り替え機構は本走行の4日前の苦肉の策だったので、今後もっといいシステムを作りたいところです。

ともあれ、2D Lidar + GNSS(廉価CLAS)で作れたので、非常に安価(センサだけだと10万円程度)に実現できたので悪くない結果だったかと思います。

来年のつくちゃれは?

今年のつくちゃれはとにかく地図を作らない!という気持ちで出ていたので(まあつくったのですが…)、 * 足りなかった調整をして完走を目指す * がっつり地図作る * 地図を作らないけど走行できる方法を考える

のどれかをしたいなぁと思います。

地図を作りたくなかったのは、職人的な作業に土壇場で参入するのは非常に難しいと判断したためです。 ましてや、3Dの地図の作成と位置推定を2ヶ月で自由に扱えるとは思えません。それをやるのもよし。

それとDoogさんのサウザーのメモリトレースの真似っこをしてみたいと実物をみて思いました。 短いWaypoint間の移動にLidarとGNSSのいい方を選択するというのをグラフ構造にして、大きな地図を作成しない走行ができるのでは?と思った次第です。 今後もお勉強をつづけて検討したいと思います。