ROSとは
ROS1の概要と基本的な機能について解説します。
ROS1とROS2
ROSには「ROS1」と、その後継として開発された「ROS2」があります。ライトローバーはROS1を使用していますので、本ドキュメントでもROS1を前提として解説を行います。
ROS1とROS2には次のような違いがあります。
ROS1
- 学術的な用途を目的として開発
- 単体のロボットを想定
- 豊富な計算資源が前提
- リアルタイム性は無し
- 有線などの十分なネットワーク帯域環境を想定
ROS2
- 商用利用も視野に開発
- 群ロボットにも対応
- 組込みレベルも想定
- リアルタイムシステム
- 低品質なネットワークも想定
様々なロボットがROS1からROS2へ移行していっていますが、ドキュメントの豊富さや、バージョンアップに伴う変更の少なさから、ROS1も依然として多く使用されています。
ROS1とROS2には共通している部分も多く、ROS1についての理解を深めることは、ROS2を学ぶ上でも大きく役に立つでしょう。
概要
ROS(Robot Operation System)は、Open Roboticsによって開発・メンテナンスされているロボット用のミドルウェアです。分散処理が求められる複雑なロボットシステムを制御できる性能を備えており、世界中の研究者や開発者が作成した豊富なライブラリを使用することができます。ロボット制御システムの作成を効率化できることから、人型ロボットから車両型ロボット、水上・水中ロボットやドローンに至るまで、幅広い分野で活用されています。
ROSの特徴のひとつが、BSDライセンスに基づくオープンソースとして公開されており、誰でも開発に参加し貢献できることです。ROSには強力な開発者コミュニティが存在し、誰でも使用可能な数千個のライブラリのほとんどは、Open Roboticsではなくコミュニティによって開発・メンテナンスされています。
ROS本体がBSDライセンスによって提供されているため、ROSを用いて開発した成果物は、商用利用することが可能です。ROSを用いて動作する様々なロボットが発売されており、ライトローバーもそのひとつです。ヴイストンでは他にも、メガローバーやメカナムローバーといったより大型の研究開発用台車から、Robovie-Zのような二足歩行ロボットまで、様々な分野でROS対応を進めています。ただし、ライブラリによってはBSDではないライセンスによって提供されているものも存在するため、商用利用ではご注意ください。
なおROS2からはライセンスがAppach2.0に変更となりました。
ROSが提供する基本機能
ROSによって提供される主要な機能について、説明します。
メッセージ通信
ROSを用いて構成されるロボットシステムは分散処理が基本となっており、ユーザーは「ノード」と呼ばれるプログラムを複数立ち上げることでロボットを制御するためのシステムを構成します。例えば、ゲームパッドで操作できる台車ロボットであれば、「ゲームパッドの入力値を取得するノード」、「入力値に従って移動指令を出すノード」、「移動指令をもとにモータを回転させるノード」などが必要となります。当然、ノード間で情報を通信する仕組みが求められます。各ノード間で、センサ入力値の情報やカメラの映像、制御指令値といったデータをやり取りするために、ROSではPub/Sub方式によるメッセージ通信が提供されています。開発者はわずか数行のコードにより、任意の情報をパブリッシュ(配信)したり、サブスクライブ(購読)したりすることができます。メッセージには、構造体のような型が定められているため、ROSノード同士であれば互換性を気にする必要はありません。また、型は自作することもできます。
パッケージ管理
ROSのライブラリやプログラムは、パッケージという単位で管理されています。パッケージの中にはノードやその設定ファイル、起動スクリプトなどが含まれており、ユーザは使用したい機能を持つパッケージをインターネット上からダウンロードし、ローカル環境に組み込むことができます。パッケージの追加や削除といった操作は非常に簡単に行う事ができます。また、ユーザーが独自の制御プログラムを開発する際には、まずパッケージを作成し、その中で開発を行う事になります。
デバイスドライバ
センサーからアクチュエーターまで、様々なデバイスのドライバーがパッケージの形式で提供されています。対応しているデバイスであれば、パッケージを導入し、デバイスを接続するだけで使用することができます。
ハードウェア抽象化
ROSによる制御システムは複数のノードによる分散処理によって動作します。これにより、ハードウェアが異なるロボットでも、上流の制御システムは同じものが使用できます。例えば未知環境の地図を作成するSLAM機能を提供するパッケージ「gmapping」では、周囲の障害物の情報をレーザー光を用いた測距センサであるLRFで取得することになっています。このLRFから情報を取得する部分は、LRFの種類に応じて異なるパッケージが提供されているため、ユーザは使用したいLRFを自由に選択することが可能です。そして開発者は、デバイス毎の違いを意識しなくても汎用的に使用可能な制御システムを作成することができます。
視覚化ツール
ROSには、いくつかの視覚化ツールが存在しており、ロボットの操縦UIやデバッグ等のために活用されています。中でも「Rviz」は強力なツールです。3D表示機能を持つこのツールは、実に多くのパッケージで情報を表示するために使われています。表示情報のカスタマイズが容易ですので、ユーザオリジナルのUIを作成することも容易です。
ロギング
「rosbag」はロボットを開発する上で大変有用なログ記録ツールです。rosbagを用いることで、その時にROS上でやり取りされていたメッセージを記録することができます。これにより、ロボットを動作させた後にその挙動について細かく分析したりすることが可能です。他にも、カメラ映像やLRFセンサの信号を記録しておき、後からSLAMによる地図作成など負荷の大きな作業を実行するといったこともできます。
ROSに関する情報の集め方
ROSを用いた開発を行う際には、使用するパッケージの情報など、様々な情報が必要になります。ROSやその開発に関する情報は書籍から集めることもできますが、ここではインターネットから情報を集める際に参考になるサイトをいくつかご紹介します。
ROS Wiki - http://wiki.ros.org/
ROSの公式Wikiです。ROSのインストール方法からチュートリアル、各公開パッケージの情報まで、様々な情報が公開されています。ただ、パッケージの情報などが更新されないまま古くなっていることもありますので、ご注意ください。
ROS Wiki(ja) - http://wiki.ros.org/ja
ROSWikiの日本語訳版です。精力的な翻訳作業が行われていますが古い情報も多いので、英語版とあわせて確認した方がよいでしょう。
ROS Answers - https://answers.ros.org/questions/
ROSのQ&Aフォーラムです。パッケージを使用した際のエラーの解消法など、様々な情報が蓄えられています。
ROS Japan UG - https://rosjp.connpass.com/
日本のROSROSユーザーの会。勉強会などが積極的に開催されており、どなたでも参加することができます。こういったユーザーコミュニティの活発さもROSの特徴のひとつです。