ROS 1とROS 2の混在環境#
概要#
本演習ではROS 1(ROS-O)とROS 2(Jazzy)の両方を使用する.これは現実のロボット開発現場を反映した実践的な環境である.本ページではなぜROS 1とROS 2が混在しているのかその理由と背景およびros1_bridgeによる統合方法について解説する.
なぜROS 1とROS 2が混在しているのか#
ロボティクス分野では現在ROS 1からROS 2への移行期にあり多くの研究室や企業で両方のバージョンが共存している状況である.
1. 既存資産の活用#
ROS 1は2007年の登場以来10年以上にわたって開発されてきたため膨大な資産が蓄積されている.
具体的な資産:
パッケージとライブラリ:ROS 1で開発された豊富なパッケージやライブラリが存在する
ノウハウとドキュメント:長年蓄積されたノウハウやサンプルコードが利用可能である
ハードウェアサポート:特定のハードウェア(センサやアクチュエータ)のドライバがROS 1でしか提供されていない場合がある
例:
rosserial:ArduinoとROSを接続するための安定したパッケージ
MoveIt!:マニピュレータの動作計画ライブラリ(ROS 2版も開発中)
各種センサドライバ:LiDAR,カメラ,IMUなど
これらの資産をすべて捨ててROS 2に移行することは現実的ではない.
ハードウェア資源の問題#
ROS 2への移行においてはソフトウェアだけでなくハードウェアの制約も重要な問題となる.
Arduinoとの通信の例:
ROS 1ではrosserialを使用してArduino Nano(Seeeduino Nano含む)とPCを容易に接続できた.rosserialは軽量でメモリやCPU資源が限られたマイコンでも動作する.
一方ROS 2ではmicro_ros_arduino(GitHub)がArduinoとの通信手段として提供されているがROS 2の通信プロトコル(DDS)を実装するために要求されるハードウェアスペックが大幅に上がっている.
具体的な問題:
メモリ不足:Arduino Nano(SRAM 2KB,Flash 32KB)ではmicro_ros_arduinoを動作させることができない
CPU性能不足:DDS通信のオーバーヘッドにより処理能力が不足する
対応ボードの制限:ESP32やTeensy 4.xなどの高性能なマイコンボードが必要になる
影響:
これまでROS 1 + rosserialで動作していた既存のArduino Nanoベースのシステムは:
そのままではROS 2に移行できない
ハードウェアを高性能なマイコンに交換する必要がある
回路設計やプログラムの大幅な変更が必要になる可能性がある
このようなハードウェア資源の制約もROS 1とROS 2が混在する理由の一つである.既存のArduino Nanoを使い続けるためにはROS 1のrosserialを使用しros1_bridgeでROS 2システムと統合する方法が現実的な解決策となる.
2. 段階的な移行#
大規模なロボットシステムをすべて一度にROS 2に移行することは困難である.
段階的移行のアプローチ:
システムの一部をROS 2に移行しながら他の部分はROS 1を使い続ける
新しい機能はROS 2で開発し既存の機能はROS 1のまま運用する
移行の優先順位を決めて段階的に進める
このアプローチにより:
システムの動作を維持しながら移行できる
開発リソースを分散して移行作業を進められる
問題が発生した場合にROS 1に戻すことができる
3. 技術的な選択#
ROS 1とROS 2にはそれぞれ得意分野があり適材適所で使い分けることが有効である.
ROS 1の強み:
成熟したエコシステム
豊富なドキュメントとコミュニティサポート
安定した動作実績
ROS 2の強み:
リアルタイム性の向上
セキュリティ機能の強化
通信プロトコル(DDS)による柔軟性
マルチプラットフォーム対応
ROS 1で安定動作している部分はそのまま使用し新しい機能やリアルタイム性が必要な部分はROS 2で実装するという戦略が実践的である.
本演習での具体例#
メカトロボット#
メカトロボットの製作とプログラミングで扱うメカトロボットは以下のような混在システムの例である:
ROS 1側:
rosserialを使用したArduino(Seeeduino Nano)との通信
rosserialはROS 1で長年使われてきた安定したパッケージである
Arduinoのシリアル通信を介してセンサデータの取得やモータ制御を行う
ROS 2側:
ros2_controlを使用したモータ制御
rviz2を使用した可視化
ros2_controlは次世代のロボット制御フレームワークである
統合:
ros1_bridgeを使用してROS 1とROS 2の間でtopicをブリッジする
rosserialで取得したセンサデータをROS 2側で利用できる
ROS 2で生成した制御指令をROS 1経由でArduinoに送信できる
なぜROS 1のrosserialを使用するのか:
本演習ではSeeeduino Nano(Arduino Nano互換)を使用する.Seeeduino NanoはメモリやCPU資源が限られているためROS 2のmicro_ros_arduinoを動作させることができない.
Seeeduino NanoのスペックではDDS通信のオーバーヘッドに対処できない
micro_ros_arduinoを使用するにはESP32やTeensy 4.xなどの高性能マイコンが必要
既存のSeeeduino Nanoハードウェアを活用するためにROS 1のrosserialを使用する
このシステム構成により:
既存のハードウェア資源(Seeeduino Nano)を有効活用できる
安定したrosserialを活用しながら最新のros2_controlを使用できる
ROS 1とROS 2の両方の利点を享受できる
ハードウェアの交換や回路の再設計が不要である
ros1_bridgeによる統合#
ROS 1とROS 2を連携させるためにros1_bridgeというパッケージを使用する.
ros1_bridgeとは#
ros1_bridgeはROS 1とROS 2の間でtopicやserviceを相互に変換するブリッジ機能を提供するパッケージである.
主な機能:
ROS 1のtopicをROS 2のtopicに変換
ROS 2のtopicをROS 1のtopicに変換
serviceやactionのブリッジ(一部)
自動的なメッセージ型の変換
ros1_bridgeの利点#
既存資産の活用
ROS 1で開発されたパッケージをそのまま使用できる
ROS 2の新機能を導入しながらROS 1の資産を活かせる
段階的な移行
システム全体を一度に書き換える必要がない
部分的な移行が可能である
移行のリスクを最小限に抑えられる
両方のエコシステムへのアクセス
ROS 1とROS 2の両方のパッケージを同時に使用できる
それぞれの強みを活かしたシステム構築が可能である
柔軟な開発
新しい機能はROS 2で開発
既存の機能はROS 1のまま維持
開発チームのスキルセットに応じて使い分けられる
詳細情報#
ros1_bridgeのインストール方法や使用方法の詳細についてはROS 1 Bridgeを参照すること.
将来の展望#
ROS 2への移行#
ROS 2は以下の点でROS 1より優れており今後はROS 2が主流になっていくと考えられる:
リアルタイム性の向上
DDS(Data Distribution Service)による効率的な通信
リアルタイムOSへの対応
セキュリティ機能の強化
DDSのセキュリティ機能(認証,暗号化)
より安全なロボットシステムの構築が可能
通信プロトコルの柔軟性
DDSによる高度なQoS(Quality of Service)設定
ネットワーク環境に応じた最適化が可能
マルチプラットフォーム対応
Windows,macOS,組み込みシステムへの対応強化
より広い範囲での利用が可能
当面の状況#
しかし当面は以下の理由から両方のバージョンが共存する状況が続くと考えられる:
既存のROS 1システムが多数稼働している
一部のパッケージはまだROS 2に移植されていない
開発者のスキルセットの移行には時間がかかる
重要なスキル:
両方のバージョンを理解し使い分けるスキルが実践的なロボット開発において重要である.本演習を通じてROS 1とROS 2の両方を学びros1_bridgeによる統合手法を習得することで現実のロボット開発現場で即戦力となる知識を身につけることができる.
まとめ#
ロボティクス分野ではROS 1からROS 2への移行期にあり両方が共存している
既存資産の活用,段階的な移行,技術的な選択により混在環境が生まれている
ros1_bridgeを使用することでROS 1とROS 2を統合できる
本演習のメカトロボットはrosserial(ROS 1)とros2_control(ROS 2)の混在システムの実例である
両方のバージョンを理解し使い分けるスキルが実践的なロボット開発において重要である
参考資料#
ROS 1 Bridge - ros1_bridgeの詳細なインストール方法と使用方法
ROS 2 Documentation - ROS 2の公式ドキュメント
ROS 1 Documentation - ROS 1の公式ドキュメント