ROS (Robot Operating System)の基本1

目次

1.概要
 ROSはオープンソースで提供されるロボット向けのメタ・オペレーティングシステム(既存のOS上で動くミドルウェアやソフトウェアフレームワークの一種)でハードウェア抽象化、低レベルなデバイス制御、一般的な機能性、プロセス間通信、そしてパッケージ管理など一般的なオペレーティングシステムに要求されるサービスを提供します。
(引用:Wiki)

2.歴史
 ROSはSAIL(Stanford Artificial Intelligence Laboratory:スタンフォード人工知能研究所)が「STAIR(STanford AI Robot)」というロボットを生み出す際に開発され、アメリカのウィローガレージ社に開発が引き継がれてオープンソースとして共有・連携・再利用を促進する枠組みが構築された。
 現在はOSRFのオープンロボティクス(Open Robotics) が開発を引き継ぎ、2017年ROS 2正式版「Ardent Apalone」をリリース。(参考:Wiki)
ROS公式サイト
https://www.ros.org/
https://wiki.ros.org/ja

3.特徴
(1)plumbing(通信)
 ROSは迅速で容易に分散コンピューティングシステムを構築できるよう設計され、Publish/Subscribeメッセージングと呼ばれる通信モデルでノード(ソフトウェア)同士の通信基盤を提供する。

・MCU(Micro Controller Unit):
 MCUとは一つの集積回路の中にメモリ、I/Oなど周辺機能をコンピュータシステムとしてまとめた組み込み用のマイクロプロセッサのこと。
・MPU(Micro-Processing Unit):
 MPUとは、演算や制御などの機能を半導体チップに集積したものでコンピュータのCPU(中央処理装置)としても用いられる

(2)tools(ツール群)
 ROSは分散コンピューティングシステムの設定・起動・監視・デバッグ・可視化・ログ取得・テスト・停止を行う広範囲にわたるツールを提供する。

(3)capabilities(機能群)
 ROSは移動・マニピュレーション・知覚といった機能をロボットに実装する多様なライブラリ群を提供する。

(4)ecosystem(エコシステム)
 ROSは統合とドキュメンテーションに重点をおき、大規模なコミュニティにより支えられ進歩している。ROSのコミュニティサイトであるros.orgは、世界中の開発者から提供された大量のROSパッケージを取得し学習できるワンストップサービスである。
(参考:Wiki)

4.ROS環境構築
(1)インストールするマシン環境
 本稿ではWindows10pro上のVirtualBoxのゲストOS(Ubuntu16.04LTS)にROSをインストールします。
 Ubuntuのバージョンに対してインストールするROSのバージョンが決められいて、Ubuntu16.04LTSにはROS Kineticを下記の手順に沿ってインストールします。
 ・ROS Kinetic の Ubuntu へのインストール手順
 http://wiki.ros.org/ja/kinetic/Installation/Ubuntu

(2)Ubuntuレポジトリを構成する
 Ubuntuのレポジトリを”restricted”、 “universe”、 “multiverse”を許可する設定にします。

(3)sources.listの設定

(4)鍵の設定
・curlコマンドを使えるようにします。
 curlはURLで示されるネットワーク上の場所との間でデータの送受信を行うためのコマンド

・鍵を設定します。
 APTキーリング(/etc/apt/trusted.gpg)にリポジトリの鍵を登録します。

(5)インストール
・パッケージ・インデックスを最新のものにします。

・すべてのデスクトップ環境のインストール:(推奨):
 ROS、rqt、rviz、ロボットの一般的なライブラリ、2D/3Dシミュレータ、ナビゲーション、2D/3D認識が含まれます。

(6)rosdepの初期化
 rosdepはコンパイル対象となるソースのシステム依存のインストールを簡易化し、ROSの中でいくつかコアとなるコンポーネントを実行するために必須とされています。

(7)環境設定
 bashを起動したときにROSの環境変数が読み込まれるように.bashrcに追加します。

(8)rosinstallの準備
 膨大なROSパッケージのソースツリーを簡単にダウンロードできるようにツールをインストールします。

(9)インストールの確認
 roscore は ROSノードが通信するために実行しておく必要があり、ROS Master、ROS Parameter Server、ROS ロギングノードを立ち上げるコマンドです。

(10)Rizeのインストール
 ROSのデータの3次元の可視化を行うツール
  ・インストール

 ・起動

5.サンプルプログラム
 turtlesimというROS のサンプルプログラムを用いて ROSのノード間の通信などの動作を確認します。
http://wiki.ros.org/turtlesim

(1)ROSマスタの起動

(2)亀の軌跡を表示するノードの起動

(3)矢印キーの入力を受け付けるノードの起動
 矢印キーを押すと亀が移動します。

(4)起動しているノードの確認

・rosout
・teleop_turtle
・turtlesim
の3つのノードが起動しています。

(5)ノード情報の確認
 $ rosnode info /パッケージ名

①「rosout」ノード

②「teleop_turtle」ノード

③「turtlesim」ノード

(6)通信しているトピックの一覧の確認

(7)トピックが配信、受信しているメッセージの確認
 rostopic echo [topic]

(8)メッセージの型名の確認
 rostopic type [topic]

(9)rosmsg showコマンド
 rosmsg showコマンドでgeometry_msgs/Twistの情報を確認します。
 rosmsg show [options]

 linear及びangularは,それぞれ64ビットのfloat型の変数を3つ持っていることがわかります。

(10)rostopicコマンドでトピックを配信
 トピックを配信して亀を動かします。
 rostopic pub [topic] [msg_type] [args]

(11)グラフの表示

 ノード/teleop_turtleからノード/turtlesimにトピック/turtle1/cmd_vel を配信していることを表しています。
 楕円はノード,矢印はトピックを表わします。

6.ROSの通信
 前記5項のサンプルの動作で確認したように、ROSは下記のようにノード間でトピックを介して通信が行われます。

7.団体、コミュニティなど
・ROS開発者会議”ROSCon”の日本版
 https://roscon.jp/

The end