読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

自律ロボット開発にROSを使うべきいくつかの理由

Robot

はじめに

近年、ロボットの機能が増大し、

その結果、ロボット用のソフトウェアも巨大化&複雑化してきているため、

ロボット用ソフトウェアフレームワークを

使用することが一般的になってきています。


その中でも世界的に最も広く使用されている

ロボット用ソフトウェアフレームワークが、

Robot Operating System (ROS)です。


今回はこのROSの概要と、

使うことのメリット、

そしてROSを学ぶためのおすすめ資料を紹介したいと思います。

Robot Operating System (ROS)

Robot Operating System(ROS)は、

米国のロボットベンチャー企業であるWillow Garage社が開発を開始し、

現在はOpen Source Robotics FoundationというNPOが

開発・無料公開しているロボット用フレームワークのことです。


ROSは世界中の研究機関などで使用されており、

おそらくロボット用のソフトウェアフレームワークとしては、

最も広く使われています。
 

ロボット開発にROSを使うべき理由

これまで実際に自分でROSを

使ってみた経験を活かして、

ROSを使ってロボット用のソフトウェアを

開発することの利点をいくつか上げてみたいと思います。

利点1: オープンソースで無料で使用できる

ROSはオープンソース・ソフトウェアで、

基本的に無料で使用することができます。


Ubuntuが動くPCさえあれば、

すぐにROSを利用することができます。


また、ROSソフトのほとんどがBSDライセンスなので、

営利・非営利でも無料で使用することができます。


無料なので、簡単にROSを試すことができますし、

ちょっと使いたい人でも気軽に試すことができます。

利点2: 簡単に分散型システムを構築することができる。

ROSは基本的にそれぞれの機能を有したソフトウェアを

ノードとして複数同時に実行し、

それらのノードがお互いにデータをやり取りするシステムになっています。


なのでそれぞれのノードが独立しているため、

ソフトウェアの再利用性が高いという利点があります。


また、この分散型システムにより、

簡単にハードウェア構成を変えることができます。

例えば、一台のコンピュータで動かしていたソフトを、

複数のコンピュータで分散処理したくなった時でも、

それぞれのコンピュータのIPアドレスなどの設定を実施するだけで、

メインのソフトを一行も変えずに複数のコンピュータ上で、

システムを動かすことができます。


ROSの通信モデルに関しては

下記の資料も参考にしてもらえるとわかりやすいかと思います。

利点3. 複数のプログラミング言語に対応している

ROSはC++, Python, Java, octave, Lispなど

複数の言語をサポートしています。

(メインはC++とPython)


先ほど説明した通り、

ROSは複数のノードソフトを協調動作させて

一つのシステムを構成するため、

それぞれのノードを、

別々のプログラミング言語で作成することができます。


例えば、あるノードにおいてスピードを重視したいときはC++を使用し、

Pythonの強力なライブラリを使用して、通信や文字列解析をしたいときは、

Pythonを使用してノードを作成することができます。


また、

この機能は多言語に対応したコードジェネレータによって実現されているため、

このコードジェネレータを改良することで、

独自にその他の言語を対応させることも可能です。

利点4. 強力な可視化ツール rvizを使うことができる

ロボットを開発している時に

一番重要なのはソフトウェアの状態を可視化することです。


ロボットの位置や姿勢、

レーザやカメラの情報など

様々なセンサの値や計算結果を

リアルタイムに三次元空間上などに可視化することが

効率的な開発には重要になってきます。


ROSでは強力な可視化ツールであるrvizが提供されています。

rvizは基本となるROS上のメッセージを

三次元空間上に可視化する機能を有しています。


よって、通常通り、

他のノードがそれらのデータを使用するように

データを送信すれば、

可視化用のコードを一行も書かずに

データのリアルタイムな可視化をすることができます。


また、自分用のデータフォーマットで可視化したい時も、

rvizのプラグインを作成することにより、

簡単に可視化作業を自動化することができます。

利点5. 複雑なノード構成を管理・可視化できるツールも付随している

ロボットのソフトウェアは複雑になりがちです。


ROSのノードとして、

それぞれのロボットの機能を分割していった場合、

最終的に一台のロボットを構成するノードは

数十個にもなることがあります。


しかし、そのような時でも

ROSはそれらの複数のノードを管理したり、

可視化するツールが複数提供されています。


まず初めにlaunchファイルというものを使うと、

複数のノードの実行やパラメータの設定などを

一度にまとめて行うことができます。

またそのlaunchファイルで起動したノードに

専用のnamespaceを与えることができるので

他のノードとのメッセージの二重化などを防ぐことができ、

複雑なノードを一行のコマンド入力で

同時起動することができるようになります。


もう一つのツールはrqtgraphというものです。

このツールを起動すると、下記の写真のように

現在起動しているノードとメッセージのやり取りの状況を

可視化することができます。

それぞれのノードが

どのノードのどのデータを使用しているかなどが

ひと目でわかるようになるので非常に便利です。

f:id:meison_amsl:20150817135333p:plain

利点6. 座標変換ライブラリtfが使える

ロボットのソフトウェアの開発をしていると一番大変なのは

座標変換だと思います。


GPSデータの座標系から、

ロボットの進行方向を正面とした座標系、

そして、それぞれのセンサの位置を中心とした座標系、

ロボットアームの各関節の座標系など、

一台のロボットには複数の座標系が混在している状況であり、

ロボットのソフトウェアの開発者は

あるデータを頻繁に

様々な座標系の値に座標変換しなくてはなりません。


この作業は非常に退屈な作業ですし、

バグが入りやすく、一度バグが入ると直しにくいものです。


ROSではこの問題を解決するためにtfという

座標管理&座標変換ツールが提供されています。

一度このtfで必要な座標系を指定してあげれば、

あとの変換は自動的にクオータニオンベースで

座標系の名前を指定するだけで変換してくれます。

非常に便利です。


tfに関する詳しい説明は下記の資料を参照下さい

myenigma.hatenablog.com


利点7. 高機能なデータロギング&解析ツールが提供されている。


ロボットの開発をする時に、

非常に重要な機能の一つが

データのロギング&解析機能です。


一般的にロボットは、

複数のセンサを有していることが多く、

それらのセンサの情報を統合して制御を行います。


そのような制御のソフトウェアを開発する時には、

毎回ロボットを動かすのは大変なので、

一度保存したデータを元に

それを何度も再生してソフトウェアの開発を実施します。


その際には、それぞれのセンサは

時間の同期ができていなければならないので、

これまでは、

データを保存する時にはタイムスタンプも同時に保存し、

そのタイムスタンプに基づいて、

データを再生させるようなソフトウェアを

作成しなければなりませんでした。


一方、ROSでは

rosbagというデータロギングツールが提供されています。

このツールを使用すると、

ROSのストリーム上で送信されたすべてのトピックが

自動的にタイムスタンプと共に保存され、

一つの.bagというファイルに保存されます。

画像でも、レーザの点群でもすべてバイナリファイルに保存されます。


また、そのデータを再生させるときは、

普通にrosbagでも再生させることができますが、

rqtbagというログ再生ツールを使うと非常に便利です。


上記の動画の通り、

rxbagを使う事でGUIを使って簡単にログの再生を制御することができますし、

カメラ画像や、生データ、グラフ化されたデータなど、

同時に確認することができます。

また上記の可視化ツールrvizを使うと

現在のロボットの状態を簡単に確認することができます。


複雑なソフトウェアを開発する際には

非常に便利なツールです。

利点8. 世界中の研究者が作成したソフトウェアを使用できる。

個人的に、ROSを使う事の最大のメリットは、

世界中のROSユーザが作成したソフトを使用できることであると思います。


Willow GarageはROSで作成されたソフトウェアを

ROS Repositoryという形で公開することを推奨しており、

現在2000以上のソフトウェアが公開されています。


その中には、

自律ロボットで使用される

代表的なセンサ

(レーザセンサ、カメラ、IMU、トルクセンサなど)

の通信用ソフトウェアなども多数公開されています。


それだけでなく、

代表的な自律移動ロボットのアルゴリズムのソフトウェアや

最新の研究のソフトウェアまで、

さまざまなソフトウェアが公開されているのです。


自分が個人的に一番驚いたのは、

自律移動自動車の大会で有名な

DARPA Urban Challengeの完走チームのひとつである

University of Texas at Austinの自律移動車Marvin

のすべてのソフトウェアが公開されていることです!!



世界の最先端の技術を、

ソースコードを解析する事で学ぶことができるので、

新しく自律移動の研究を始める人には非常に便利だと思います。

ROSを学ぶための資料

自分が、ROSを学ぶために参考にした資料を

いくつか紹介したいと思います。

ROS.org

自分が一番利用しているのは、ROSの公式サイトとwikiです。

ROSの一般的な内容なROS.orgで、

ソフトウェアの使い方に関しては、ROS Wikiを見ればわかると思います。


ROSの基礎的な内容に関しては、

ROS WikiのTutorialを一通り実施すると理解できると思います。


またROSのQ&Aサイトである ROS Answerは、

初心者が躓きやすい内容をまとめてあるので、

何か問題にぶつかった場合は、こちらも見てみると良いかと思います。


このROSの公式サイトは非常によく出来ているので、

ある程度、英語がわかればROSの公式サイトだけで

十分ROSについて勉強できると思います。

『ROSではじめるロボットプログラミング』小倉 崇

ROSの公式サイトはよく出来ていますが、

やはりすべて英語なので、人によってはちょっと敷居が高いかもしれません。


そのような人におすすめなのが、

『ROSではじめるロボットプログラミング』です。


この本は2015年8月現在、唯一存在するROSの日本語解説書です。

ROSの基礎的な部分から、実際のコードを使って説明しているので、

わかりやすいと思います。


またROS以外にも、

ロボットシミュレータであるGazeboや、

画像処理ライブラリであるOpenCVとの連携の説明されているのは良い点だと思います。

無料のROS本 『詳説 ROSロボットプログラミング』

『詳説 ROSロボットプログラミング』は

無料で公開されているROS本です。


元々書籍として発売しようとしていたものを無料公開しているとのことで、

無料でありながら非常に有益な情報が沢山説明されています。


この本の詳細に関しては下記の記事を参照下さい。

myenigma.hatenablog.com

ROSのコンセプト論文: "ROS: an open-source Robot Operating System"

上記のリンク先の論文は、

開発当初のROSのフレームワークの概念を説明した論文です。

ROSのフレームワークとしての概念を知りたい人にはおすすめです。

参考資料

Programming Robots With ROS

Programming Robots With ROS

  • 作者: Morgan Quigley,Brian Gerkey,William D. Smart
  • 出版社/メーカー: Oreilly & Associates Inc
  • 発売日: 2015/12/25
  • メディア: ペーパーバック
  • この商品を含むブログを見る

Learning ROS for Robotics Programming: A Practical, Instructive, and Comprehensive Guide to Introduce Yourself to Ros, the Top-notch, Leading Robotics Framework

Learning ROS for Robotics Programming: A Practical, Instructive, and Comprehensive Guide to Introduce Yourself to Ros, the Top-notch, Leading Robotics Framework

myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com
myenigma.hatenablog.com