NTTドコモR&Dの技術ブログです。

ROS2で作るGPSナビ台車:LiDARなし・エッジコンピューティングで目的地まで向かえるか

サマリー

ROS2 *1のナビゲーションと言えば、2D LiDAR と地図を前提とした構成が一般的です。 Nav2 *2のチュートリアルや公式サンプルも、ほとんど全てが「LiDAR+地図ありき」で設計されています。

一方で、実際の現場では

  • コストや搭載スペースの制約で LiDAR を載せられない

  • 高性能な PC や GPU を積めない

  • 大規模なマップ(地図)作成や SLAM の事前準備ができない

  • それでも屋外である程度の自律移動をさせたい

というケースも少なくありません。

そこで今回は、

「Ubuntu 22.04 + ROS2 Humble 上で、GPS+IMU だけを使って Nav2 で自律走行させる」

という、公式サンプルにはない構成を自作で一から組み上げてみました。

1.はじめに

こんにちは! NTTドコモ R&D本部 クロステック開発部 複合価値創出担当の加藤翼です。

私のチームは画像処理やロボティクスの技術を研究開発し、農業や監視など様々な分野の課題を解決する取り組みをしております。

本記事では、LiDARを使わずに目的地まで走行する台車ロボットの技術開発について解説します。

2.ドコモのロボット事業

農業分野における除草ロボットや、獣害対策における巡回・監視ロボットの研究開発を行っています。

小型除草ロボットの走行の様子

www.docomo.ne.jp

獣害対策ロボット

news.ntv.co.jp

ロボティクスと通信技術を組み合わせて、自動化や遠隔制御の研究を行っています。

3.本ブログの目的

屋外の台車ロボットを『LiDAR やカメラに頼らず、シンプルなセンサ構成』で目的地へ向かわせる技術について、解説したいと思います。

一般的に Nav2 のチュートリアルやサンプルでは、

  • 2D LiDAR

  • 事前に作成した地図(もしくは SLAM)

を前提としたナビゲーション構成が紹介されています。

今回はあえてこの前提を外して

  • LiDAR なし

  • 地図生成なし

  • GPS+IMU だけ

  • 小さなエッジコンピュータ(高性能GPUなし)

という制約の中で、Nav2 Humble 上に自前の GPS ナビゲーションシステムを構成しました。

Nav2 の公式ドキュメントや GitHub リポジトリ*3には、「Humble で GPS+IMU だけを前提とした構成」はほぼ整っていないため、位置の扱い・経路の分割・Nav2 へのゴール指示などを自前で設計/実装しています。

LiDARやカメラを用いないことで複雑な処理をせず、クラウドや高性能サーバに依存しません。

必要最低限の計算資源しか持たないエッジコンピュータでも、目的地までの経路計画と走行制御ができる構成になっております。

4.使用する基本技術について

4-1.ROS 2 って何?——ロボットの世界の「Android」

ロボットを作るとき、こんなことを全部自前でやろうとすると大変です。

  • センサー(カメラやGPS、IMU)から値を読む

  • モーターを動かす

  • 障害物を避けながら走るルートを考える

  • シミュレーターや画面で動きを確認する

そこで出てくるのが ROS 2(Robot Operating System 2) です。

スマホの世界でいう「Android」みたいな存在が、ロボットの世界では「ROS 2」になります。

ROS 2を使うことで「ロボット開発のよくある部分」 を、世界中の人が共通のルールで作って・配って・再利用できるようになります。

4-2.ROS 2 Humble とは?

ROS 2 には、Ubuntu のように「バージョンの名前」がついています。

そのひとつが ROS 2 Humble Hawksbill(通称 Humble) です。

  • Ubuntu 22.04 LTS 用の ROS 2 正統派・安定版

  • 長期サポート (LTS) で、ライブラリも比較的落ち着いている

これらの理由から、Ubuntu 22.04 + ROS 2 Humbleは今の ROS 2 の中では王道の組み合わせとなっています。

4-3. Nav2 とは? ロボット用の「自動運転アプリ」

Nav2 は、ざっくりいうと次のような役割をまとめて引き受けてくれます。

  • 今どこにいるか を知る(自己位置推定)

  • どこに行けばいいか を考える(経路計画)

  • どう動けばいいか を決める(ハンドル・アクセル・ブレーキ係=コントローラ)

  • 障害物を避けるための地図 を作る(コストマップ)

普通の Nav2 は、

  • LiDAR(ぐるっと周りを見るレーザーセンサー)で障害物を検知

  • 地図(あらかじめ作ったマップ or SLAM で生成したマップ)

「地図の中のどこに自分がいるか」を推定して、高負荷な処理に基づいて目的地への走行を行います。

しかし、現実の現場では、

  • コストや搭載スペースの制約で LiDAR を載せられない

  • 高性能な PC や GPU を積めない

  • 大規模なマップ(地図)作成や SLAM の事前準備ができない

  • それでも屋外である程度の自律移動をさせたい

が課題となることがあります。

そこで、本ブログではシンプルなセンサ構成で目的地へ向かう走行システムを開発することで、これらの課題解決を行いました。

5.一般的な Nav2 構成と本技術構成の違い

技術構成の違いについて

今回は、Nav2 の既存機能(BasicNavigator, 行動ツリー, TF など)を最大限活かしつつ、

  • GPS 経路の生成

  • 緯度経度→map 座標の変換

  • ステップ分割による安定化

  • 充電ポイントへの割込み

を自作することで、Nav2 を “GPS ナビゲーションフレームワーク” として再利用できる形に構築しました。

GPS+IMU だけを頼りに、自前の大域経路生成ロジックと Nav2 のローカルプランナを組み合わせることで、低コストなエッジコンピュータ上でも目的地までの自律移動を実現しています。

5-1.センサ構成:GPS + IMU のみ

センサはあえて GPS と IMU のみに絞っています。

  • GPS からロボットの絶対位置(緯度経度)を取得し、

  • IMU からロボットの姿勢や加速度を取得して、

二つを組み合わせて「今どちらの方向に、どれくらい移動しているか」を推定しています。

5-2.位置基準:緯度経度(+そこから生成した map 座標)

自己位置の基準は、GPS の緯度経度 です。

最初に取得した /gps/fix を 基準点(datum_lat, datum_lon) として保存し、そこからの差分をメートル単位の ローカル座標(map フレーム) に変換しています。

地球上の絶対位置(lat/lon)と、Nav2 が扱うロボット座標(map フレーム)が一貫して結びつく構成になっています。

5-3.経路生成:GPS ウェイポイント列を自作で分割して Nav2 に連続送信

経路生成は、Nav2を組み合わせた自作ロジックで行っています。

  • 大域的な「どこへ向かうか」「どう分割するか」 は自前の GPS ナビゲータが担当

  • 局所的な障害物回避・制御・速度指令 は Nav2 のプランナ・コントローラが担当

という二段構えの構造 になっており、Nav2 を「ローカル追従エンジン」としてうまく再利用しています。

5-4.自己位置推定の方法:「GPS + IMU だけ」で、自分の位置を“地球座標 (緯度経度) 由来の map”の中で推定する方式

LiDAR や事前地図に頼らず、地球座標(緯度経度)を平面展開した map 座標系の中で自分の位置を推定しています。

「今ロボットがいるのは地球上のどの場所か?」が、常に 絶対座標(緯度経度ベース)でわかる のが大きな特徴です。

  • ロボットのログを Google Maps / GIS に重ねる

  • 農地や施設図面の座標と直接つき合わせる

  • 屋外の広いフィールドや、特徴的なものが周囲にない環境で動かせられる

という大きなメリットがあります。

5-5.地図:地図なし(相対座標系を自前構築)

今回の構成では 事前地図を一切使っていません。

  • 大規模なマップ作成や SLAM の事前準備が不要

  • 広い屋外や変化の多い環境でも、GPS が入る限りは地図更新なしで運用可能

というメリットがあります。

6.本技術の構成

  • 台車ロボット

  ☑GPSモジュール

GPSモジュール

  ☑IMUセンサ

IMUセンサ

  ☑モータ/エンコーダ

  • エッジコンピュータ   

  ☑Jetson Orin Nano Super Developer Kit

  • ソフトウェアスタック

  ☑Ubuntu22.04

  ☑ROS 2 Humble

  ☑Nav2

7.シミュレータ検証

7-1.複数目的地の巡回

Gazeboのサーバー上にTurtlebot3のモデル(動画中の赤い点)を構築し、GPSとIMUをもとに決められた3点のGPS座標の点(動画中の緑の点)に向かって走行する様子を検証しました。

シミュレータ環境はRVIZ*4を使用しています。

3地点の巡回の様子

7-2.複数目的地の巡回の際に、別の目的地へ向かう割り込み処理の追加

GPSナビ台車が複数地点を巡回する際に、最優先の割り込みで他の特定の場所へ向かう処理を開発しました。

これによって、電池がある閾値を下回ったら充電スポットへ向かうシチュエーションや、突発的にある地点に向かいたいシチュエーションなどに対応できるようになり、任意の目的地を任意のタイミングで指令を出し、向かわせることができるようになりました。

動画では目的地が緑の点突発的に向かわせたい地点を青の点で示しています。

途中で目的地変更有の巡回の様子

8.さいごに

高価な LiDAR や大きな計算機を用意しなくても、

  • そこそこの精度の GPS

  • IMU

  • 小さなエッジコンピュータ

というシンプルな組み合わせで、Nav2 を使った自律走行が可能であることを確認できました。

今回は屋外ロボットを想定していますが、「センサと計算資源が限られた現場で、Nav2 をどう活用するか」という視点は、農業ロボットや点検ロボットなど、様々なロボットの移動手段に応用できそうです。

シミュレータ上で想定した挙動を確認できたため、ドコモの持つ実機のロボットたちに搭載し、検証を行っていく予定です。