はじめに
こんにちは、東日本計算センターです。
今年で創業61年を迎える当社は、福島県いわき市に本社ならびに「ながとイノベーションセンター」(廃校を活用したR&D施設)を置き、東京/日立/横浜、県内は会津若松市、郡山市にオフィスを設けております。
近年は、R&Dセンターが中心となり、各事業部と連携して、ロボット・ドローン、水中ロボット、Spot、草刈ロボット等のソフトウェア研究および開発を行っております。
本コラムでは、会津大学との取り組み(産学連携ロボット研究開発支援事業)で研究開発を進めているクラウドロボティクスインターネット分散システム(The Distributed Cloud Robotics System on the Internet:以下、DCRシステム)で得られた、ROS2の自律移動フレームワーク「Navigation2(以下、Nav2)」のカスタマイズ技術をご紹介します。標準のNav2をどのように活用し、どのような考え方で拡張したのかを通して、ROS2を用いたロボットシステム開発の一例をお伝えします。
DCRシステムとは
サービスロボットへの期待が高まる一方で、完全な自律走行や完全な遠隔操作だけでは、多様な現場で安定した運用を実現することは容易ではありません。また、人手不足や高齢化が進む現在、少人数で複数の現場を効率的に管理・運用できる仕組みが求められています。
DCRシステムは、この課題を解決するために研究開発しているクラウドロボティクスシステムです。ロボットの自律動作と遠隔操作を組み合わせることで、1人の管理者が複数拠点に配置されたロボットをインターネット経由で統合的に管理・運用できることを目指しています。
システムは、ロボットを操作する端末、経路計画や運行管理を担う上位系システム、走行・センシング・安全制御を行うロボット、データを管理するRDR(Robot Data Repository)、物体認識システム、メッセージングサーバー(Zenoh、MQTT)の要素で構成されています(図1)。
それぞれの構成要素が役割を分担しながら連携することで、複数拠点・複数ロボットを効率的に運用できる分散型ロボットシステムを実現しています。

図1. DCRシステムのアーキテクチャ図
なぜNav2をカスタマイズしたのか
DCRシステムでは、自律移動機能としてNav2を採用しています。
Nav2は標準では、ロボット自身が地図やセンサー情報を基に経路を計画し、その経路に沿って走行することを前提として設計されています。この構成は、単一のロボットが自律的に目的地へ向かう用途に適しています。
一方、DCRシステムでは、複数ロボットを統合的に管理するため、経路計画はクラウド上の上位系システムが担当します。上位系システムが各ロボットの位置や周辺状況を考慮して経路を生成し、ロボットはその経路に沿って走行します。
このように役割分担が異なるため、Behavior Tree(以下、BT)の拡張機能を利用して、「経路計画は上位系システム」「経路追従はロボット」という構成を実現しました(図2)。

図2. Nav2標準とDCRシステムの自律移動の違い
Behavior TreeによるNav2の拡張
Nav2では、経路計画や経路追従だけでなく、障害物回避やリカバリー処理など、一連の動作をBTによって制御しています。
BTは、処理を表すノードをツリー構造で組み合わせ、ロボットの動作フローを表現する仕組みです。各ノードの組み合わせはXMLで記述されており、ツリー構成を変更することで、プログラム本体のソースコードを変更することなくロボットの動作を柔軟に変更できます。
DCRシステムでは、このBTを独自の構成に変更しています。
標準のBTでは、ロボット自身が目的地までの経路を計画する処理が組み込まれています。一方、DCRシステムでは、この処理を上位系システムから経路を取得する処理へ変更し、ロボットは受け取った経路に沿って走行します(図3)。
このように、BTを独自構成へ変更することで、Nav2の標準機能を活かしながら、DCRシステムに必要な機能を役割分担しています。

図3. Nav2標準BTとDCRシステムBTの比較
Nav2へ独自機能の実装
DCRシステムでは、独自のBTを構成するために、BehaviorTree.CPP(BT を C++ で扱うライブラリ)を利用した独自ノードを実装しています。
独自ノードはプラグインとして登録できるため、Nav2本体のソースコードを変更することなく利用できます。
上位系システムから経路を取得するノード、経路追従状態を監視するノード、走行失敗時に後退経路を生成するノードなど、分散ロボットシステムに必要な独自ノード群を実装しています。
表1. 独自ノード機能概要
| 分類 |
独自ノードが担う役割 |
| 経路の取得 |
上位系システムから配信された経路を受け取り、Nav2 が追従できる形で BT に引き渡す。
最新の経路への更新要求と、その応答の待ち受けも担う。
|
| 走行の監視 |
走行中に経路から外れていないか、自分の位置を見失っていないかを常時チェックし、
異常を検知すると立て直し処理へ引き渡す。
|
| 立て直し |
障害物などで走行できなくなったとき、走ってきた軌跡をもとに後退用の経路を生成し、
行き詰まりから抜け出す。
|
| 状態の通知 |
目的地への到着や失敗といったナビゲーションの結果を、
上位系システムへ通知する。
|
※実装した独自ノードを役割ごとに整理したもの。個々のノードは小さな部品だが、BT 上で組み合わせることで「クラウドの経路を、現場の状況に応じて確実に走り切る」振る舞いを形づくっている。
上位系システムの経路がロボットへ届くまで
図4は上位系システムで生成した経路がロボットへ反映される流れを示しています。
上位系システムで生成された経路は、ロボット内の仲介ノードを経由してNav2のNavigateToPoseアクションを開始すると、独自BTが起動し上位系システムから経路を取得し、ロボットはその経路に沿って走行します。
走行中に障害物や環境変化によって経路追従が困難になった場合は、独自BTが上位系システムへ経路の再計画を要求します。新たな経路が生成されるとロボットはその経路へ切り替え、走行を再開します。
この仕組みにより、環境変化に応じて経路を更新しながら柔軟な自律走行を実現しています。

図4. ロボットが上位系システムから経路を受け取ってから目的地まで走行する処理の流れ
まとめと今後の展望
本コラムでは、DCRシステムにおけるNav2のカスタマイズについて紹介しました。
DCRシステムでは、「経路計画は上位系システム」「経路追従はロボット」という役割分担を実現するために、Behavior Treeと独自ノードを活用しました。Nav2標準の拡張ポイントを利用することで、高い保守性と拡張性を維持しています。
このような「標準機能を活かしながら必要な機能だけを拡張する」という考え方は、Nav2に限らず、ROS2を用いたロボットシステム開発全般に応用できるアプローチです。
今後は、より複雑な環境での検証を進めるとともに、通信環境の変化への対応や複数ロボットの協調制御など、さらなる機能拡張を進めていく予定です。本コラムが、ROS2やNav2を活用したロボットシステム開発の参考になれば幸いです。
東日本計算センター
研究開発担当:菊地