ROSとは?ROSを学ぶモチベーションが上がる事例を紹介

UnsplashのMagdalena Kula Mancheeが撮影した写真 ROS

はじめに

なんだか、Robot operating system (ROS)に興味があるけど、はじめ方がわからないな。実際、ROSプログラミングができるようになると、どんなことができるんだろう?

こんな疑問に答えます。

大学生の頃、ぼくも、「まあ、別に使わなくてもロボット動かせるじゃん。うーん、けど、ROSってなんだかカッコいいんだよなー。かといって、勉強するのはだるいんだよね。。」。2年くらいモヤモヤを抱えておりました。

そんなぼくですが、大学院の2年間、移動ロボットの知能を作る研究室に所属して、少しROSプログラミングを習得することができました。この経験をとおして、わかったことを書き残します。この記事を読んでくれた方の中で、一人でも多くの方がROSを使いこなせるようになることを願って。

⚡ ROSをはじめるさいに、シェルやC++/Pythonの知識があると便利です。

ROSなら、こんなことだってできちゃう

GUIのロボットシミュレーションを行いたい。ルンバみたいに、移動ロボットにSimultaneous Localization and Mapping (SLAM)させて、家中を走らせたい。ROSを使うと、比較的少ないプログラミングで、こんなことができちゃいます。

ROSを使わない場合、GUIのロボットシミュレーションを行うためには、シミュレーション環境のプログラムを作成して、例えば、物理法則をフルスクラッチしたり、Pybulletなどのライブラリを使ったりして、ようやくロボットのシミュレーションを行うことができるようになります。

他方、ROSを使う場合、GUIのロボットシミュレーション環境として、Gazeboを使うことができたり、頑張ればUnityを使うことができたりします。

また、ROSで扱われることを前提に、各社がロボットの3Dモデルを公開しており、自作したROSアプリケーションを使って、GazeboやUnityでそのロボットを動作させることができます。すごいですよね。シミュレーション環境ではありますが、数百万する6軸多関節のロボットアームや、移動ロボットを自分のプログラムで動作させることができるのは嬉しいものです。

ROSでは、同じ種類のロボットの場合、入力(ROSの用語で、トピック)が同じであることが多く、プログラムを変更することなく、A社のロボットを試したあとに、B社のロボットを試してみようといったこともできます。トピック名は、貼り替える必要がありますが。

ROSとは?

これまでROSとはなんぞや?の話を飛ばして、何ができるのかを紹介してきました。ここからは、そもそもROSとは?について説明していきます。

ROSと聞いても、よくわからないですよね。ぼくは、音の響きからロボットのOSかな?とか考えていました。ros.orgは、次のように説明しています。

The Robot Operating System (ROS) is a set of software libraries and tools that help you build robot applications. From drivers to state-of-the-art algorithms, and with powerful developer tools, ROS has what you need for your next robotics project. And it’s all open source.(ros.org n. d.)

日本語に訳すと、「ロボットオペレーティングシステム(ROS)は、ロボットアプリケーションの構築に役立つソフトウェアライブラリとツールのセットです。ドライバーから最先端のアルゴリズムまで、そして強力な開発者ツールを備えたROSには、次のロボット工学プロジェクトに必要なものがあります。そして、それはすべてオープンソースです。」です。

この文章が全てなのですが、これだけでは、抽象的でわかりにくいので、もう少し具体に落としてみます。

上記の、「ロボットアプリケーションの構築に役立つソフトウェアライブラリとツール」(ros.org n. d.)とは、例えば、Gazeboであったり、ビルドコマンド、C++/Pythonのライブラリなどではないでしょうか。

また、「ドライバーから最先端のアルゴリズムまで」(ros.org n. d.)は、低レベルのハードウェア制御のプログラムから、研究者が作成した本当に最先端のアルゴリズムのアプリケーションまで、Github上に揃っているということではないでしょうか。

ぼくなりにまとめると、ROSとは、「

  • ros.orgが提供する素晴らしいツールとライブラリ、
  • ユーザが作成するGithub上に漂うアプリケーション群

の2つで、私たちのロボット制作に欠かせないもの」です。

ROSを使うメリット

ぼくが感じたROSの嬉しところは、

  • プロセス間通信が簡単なところと、
  • すごい人が書いたプログラムを簡単に自分のシステムに組み込むことができるところ

です。

上記の、「ロボットアプリケーションの構築に役立つソフトウェアライブラリ」(ros.org n. d.)を使っているからこそ、ぼくが感じた嬉しいところも、プログラムを繋げる・構築する点なのだと思います。

ROSのソフトウェアライブラリを使わない場合、複数のプログラムを繋げるためには、まず、情報をやり取りするための通信を確立する必要があります。例えば、プロセス間通信のプログラムや、TCP通信など。

次に、やり取りするデータも取り決める必要があります。データを送受信するバイト数を決め、順番に意味を持たせる必要があります。また、複数スレッドで動作させるなどする必要もありそうです。ましてや、他人が作成したプログラムの入出力関係は、コードを読んで理解する必要があります。一方、ROSプログラミングなら、入出力が一目でわかり、かつやり取りするデータの型もわかります。便利ですね。

このように、ロボットアプリケーションの本質でないプログラムを作成しないで済むというのが、ROSを使うメリットではないかなと思います。

ROSアプリケーションの実例

ロボットアームを簡単に動作させることができるアプリケーション、MoveItの写真を掲載します。(MoveIt n. d.)MoveItは、ロボットアームの先端部分の座標をしていすると、ロボットアームの逆運動学を計算、関節角度をそれぞれ出力してくれます。すごい便利ですね。

巨人の肩にのる

最後に、ROSを使うと論文の実装も試すことができることを紹介します。ここでは、LiDARだけでSLAMを実現した、ZhangさんのLidar Odometry and Mapping (LOAM)を取り上げます。

論文(Zhang 2014)とGithubリンクは次のとおりです。このように、まだ産業現場で使われていないような技術に触れることもできます。感動ですね。論文の英語だけを読むのではなく、英語とコードとを読み進めることで、理解を一層深めることもできそうです。

おわりに

この記事では、ROSを使うと良いことを紹介したあと、ROSとは何かについて説明しました。また、なんだかすごいことができそうというのを感じて頂ければと、ROSアプリケーションの実例や先行研究のアプリケーションを見てきました。

この記事をお読みいただいた皆さんのROSを学ぶモチベーションが高まり、ROSへの第一歩を踏み出すきっかけになることを願って。

  1. ros.org(n. d.).ROS – Robot Operating System.https://www.ros.org(閲覧日2024/10/12)
  2. MoveIt (n. d.).Moving robots into the future.https://moveit.ai(閲覧日2024/10/12)
  3. Ji Zhang and Sanjiv Singh(2014).LOAM: Lidar Odometry and Mapping in Real-time.in Robotics: Science and Systems Conference.pp.161–195.2014.

コメント

タイトルとURLをコピーしました