導入:ロボット開発のデファクトスタンダード
こんにちは。弊社では自律移動ロボットやセンサーネットワークの開発基盤として**ROS2 (Robot Operating System 2)**を採用しています。
「ROS」という名前は聞いたことがあるけれど、Web開発などと何が違うのか、なぜROS1からROS2への移行が進んでいるのか、疑問に思う方もいるかもしれません。今回は、ロボットの「神経網」とも言えるROS2の基本アーキテクチャについて解説します。
1. ROSの基本:小さなプログラム(ノード)の集合体
ロボットのソフトウェアは非常に複雑です。カメラから画像を読み込む処理、AIで障害物を認識する処理、タイヤのモーターを回す処理などを1つの巨大なプログラムで書くと、すぐに破綻してしまいます。
そこでROSでは、ノード (Node) と呼ばれる小さな独立したプログラムに分割し、それらが互いにメッセージをやり取りする分散アーキテクチャを採用しています。
- パブリッシャ (Publisher):情報を発信するノード(例:カメラノードが「画像」を発信)
- サブスクライバ (Subscriber):情報を受信するノード(例:AIノードが「画像」を受け取る)
- トピック (Topic):情報が行き交う経路の名前(例:
/camera/image_raw)
2. ROS1からROS2への進化:DDSの採用と脱マスター
従来のROS1は素晴らしいフレームワークでしたが、「ネットワークが不安定な環境に弱い」「リアルタイム性の保証がない」という、実運用上の課題がありました。また、「ROS Master」という中央管理ノードが落ちるとシステム全体が停止する単一障害点(SPOF)の概念もありました。
ROS2の最大の進化は、通信基盤に「DDS (Data Distribution Service)」という産業用の通信規格を採用したことです。
graph TD
subgraph ROS1 Architecture
Master((ROS Master))
Node1_ROS1[Node 1<br>Camera]
Node2_ROS1[Node 2<br>AI]
Node1_ROS1 -.登録.-> Master
Node2_ROS1 -.登録.-> Master
Node1_ROS1 --独自プロトコル--> Node2_ROS1
end
subgraph ROS2 Architecture
Node1_ROS2[Node 1<br>Camera]
Node2_ROS2[Node 2<br>AI]
Node3_ROS2[Node 3<br>Motor]
Node1_ROS2 <==DDS / 相互発見==> Node2_ROS2
Node2_ROS2 <==DDS / 相互発見==> Node3_ROS2
Node1_ROS2 <==DDS / 相互発見==> Node3_ROS2
end
DDSの採用により、ROS2では以下が実現されました。
- マスターレス: ノード同士が自動で発見し合う(P2P通信)ため、中央管理ノードが不要になりました。
- QoS (Quality of Service) の設定: 「データが一部欠損してもいいから最新の画像だけはとにかく早く送る(Sensor Data)」「確実に届ける(Reliable)」といった通信品質の細かなコントロールが可能になりました。
- セキュリティ向上: 通信の暗号化やノードの認証が標準でサポートされました。
3. モダンな環境との親和性(エッジAIとマイコン)
ROS2は、UbuntuなどのLinux環境だけでなく、macOSやWindows、さらにはリアルタイムOS(RTOS)上でも動作するように設計されています(micro-ROS)。
これにより、「重いAI推論はNVIDIA Jetson上のROS2ノードで行い、ミリ秒単位のモーター制御はESP32(マイコン)上のmicro-ROSノードで行う」といった、エッジからハードウェアまで一貫した通信アーキテクチャを構築できるようになりました。
弊社では、このROS2の堅牢な基盤の上に、最新のAI技術やWebフロントエンド技術(ROS 2 Web Bridgeを用いたReactとの連携など)を組み合わせてプロダクトを開発しています。