目次
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の設定
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
(4)鍵の設定
・curlコマンドを使えるようにします。
curlはURLで示されるネットワーク上の場所との間でデータの送受信を行うためのコマンド
$ sudo apt install curl
・鍵を設定します。
APTキーリング(/etc/apt/trusted.gpg)にリポジトリの鍵を登録します。
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
(5)インストール
・パッケージ・インデックスを最新のものにします。
$ sudo apt-get update
・すべてのデスクトップ環境のインストール:(推奨):
ROS、rqt、rviz、ロボットの一般的なライブラリ、2D/3Dシミュレータ、ナビゲーション、2D/3D認識が含まれます。
$ sudo apt-get install ros-kinetic-desktop-full
(6)rosdepの初期化
rosdepはコンパイル対象となるソースのシステム依存のインストールを簡易化し、ROSの中でいくつかコアとなるコンポーネントを実行するために必須とされています。
$ sudo rosdep init
$ rosdep update
(7)環境設定
bashを起動したときにROSの環境変数が読み込まれるように.bashrcに追加します。
$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
(8)rosinstallの準備
膨大なROSパッケージのソースツリーを簡単にダウンロードできるようにツールをインストールします。
$ sudo apt-get install python-rosinstall
(9)インストールの確認
roscore は ROSノードが通信するために実行しておく必要があり、ROS Master、ROS Parameter Server、ROS ロギングノードを立ち上げるコマンドです。
$ roscore
(10)Rizeのインストール
ROSのデータの3次元の可視化を行うツール
・インストール
# apt install rviz
・起動
# rviz
5.サンプルプログラム
turtlesimというROS のサンプルプログラムを用いて ROSのノード間の通信などの動作を確認します。
http://wiki.ros.org/turtlesim
(1)ROSマスタの起動
$ roscore
(2)亀の軌跡を表示するノードの起動
$ rosrun turtlesim turtlesim_node
(3)矢印キーの入力を受け付けるノードの起動
矢印キーを押すと亀が移動します。
$ rosrun turtlesim turtle_teleop_key
(4)起動しているノードの確認
$ rosnode list
・rosout
・teleop_turtle
・turtlesim
の3つのノードが起動しています。
(5)ノード情報の確認
$ rosnode info /パッケージ名
①「rosout」ノード
$ rosnode info /rosout
②「teleop_turtle」ノード
$ rosnode info /teleop_turtle
③「turtlesim」ノード
$ rosnode info /turtlesim
(6)通信しているトピックの一覧の確認
$ rostopic list
(7)トピックが配信、受信しているメッセージの確認
rostopic echo [topic]
$ rostopic echo /turtle1/cmd_vel
(8)メッセージの型名の確認
rostopic type [topic]
$ rostopic type /turtle1/cmd_vel
(9)rosmsg showコマンド
rosmsg showコマンドでgeometry_msgs/Twistの情報を確認します。
rosmsg show [options]
$ rosmsg show geometry_msgs/Twist
linear及びangularは,それぞれ64ビットのfloat型の変数を3つ持っていることがわかります。
(10)rostopicコマンドでトピックを配信
トピックを配信して亀を動かします。
rostopic pub [topic] [msg_type] [args]
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -1 -- '[1.0, 0.0, 0.0]' '[0.0, 0.0, 2.0]'
(11)グラフの表示
$ rosrun rqt_graph rqt_graph
ノード/teleop_turtleからノード/turtlesimにトピック/turtle1/cmd_vel を配信していることを表しています。
楕円はノード,矢印はトピックを表わします。
6.ROSの通信
前記5項のサンプルの動作で確認したように、ROSは下記のようにノード間でトピックを介して通信が行われます。
7.団体、コミュニティなど
・ROS開発者会議”ROSCon”の日本版
https://roscon.jp/
The end