ロボットシステム開発のためのフレームワーク Robot Operating System (ROS) の環境構築および簡単な使い方について記載します。ここでは Debian9 を利用することにします。ROS は現行バージョン1 の Melodic Morenia ディストリビューションを扱います。
インストール
contrib
と non-free
をソースリストに追加します。
ros-melodic
をソースリストに追加します。
ros-melodic
をインストールして初期化します。
環境変数等を bash 起動時に自動で読み込むようにします。
その他必要になりそうなパッケージをインストールしておきます。
以下のような ROS コマンドが利用できることを確認します。roscd
は ROS の作業用ディレクトリに移動するためのコマンドです。/opt/ros/melodic/share/rosbash/rosbash
内で定義されています。
用語
- Node 何らかの機能を持ったプロセスです。
- Master Node 情報を管理します。
- Parameter Server Node 間でパラメータ情報等を共有するための保管場所です。Master が提供します。
- Services ある Node で提供することで別の Node から同期的に RPC を受け付けます。
- Topics 多対多で非同期に Node 間通信するための Pub-Sub のトピックです。
- Messages Node 間で情報をやり取りするためのデータ単位です。
- Bags メッセージをファイルに保存するためのフォーマットです。
ワークスペースとパッケージ
ワークスペースの初期化
パッケージの追加
ROS ではパッケージとよばれる単位でプログラムを管理します。
ROS をインストールすると以下のようなパッケージがインストールされます。
ワークスペースからは複数のパッケージを利用します。新規にパッケージを作る場合は以下のようにします。rospy
と roscpp
に依存した mypkg
が作成されます。
ワークスペースにパッケージを追加したら必要となるソフトウェアをシステムにインストールします。
ワークスペースに追加したパッケージは以下のようにビルドできます。内部的に cmake と make が実行されます。
基本的なコマンド
パッケージの情報を取得 (rospack)
名前だけ一覧、パス情報込み
パス情報
直接依存するパッケージ、間接的にでも依存するパッケージ
指定したパッケージに直接依存するパッケージ、指定したパッケージに間接的にでも依存するパッケージ
ディレクトリ移動 (roscd)
パッケージ名を指定してディレクトリ移動できます。
ROS プログラムのログは $HOME/.ros/log
に保存されています。以下のコマンドで移動できます。
パッケージ内のファイルを確認して編集、コピー、実行 (rosls,rosed,roscp,rosrun)
Master、Parameter Server (roscore)
前述の Master プロセスを起動します。既定では $ROS_MASTER_URI
でサービスを開始します。-p
オプションでポート番号を変更できます。
Parameter Server 操作 (rosparam)
一覧取得、すべての値を取得
特定の値を設定、取得、削除
すべての値をファイルに保存、ファイルから読み出し
起動したプロセスの情報を取得 (rosnode)
トピック情報を取得 (rostopic)
サービス情報を取得 (rosservice)
メッセージとサービスの型情報を取得 (rosmsg,rossrv)
Pub-Sub 非同期通信
こちらのチュートリアルに記載されている、Pub-Sub Python パッケージのサンプルをもとにしています。rospy
に依存したパッケージを作成します。
パッケージ内の実行ファイル置き場として scripts
ディレクトリを作成します。
talker.py
listener.py
実行例
RPC Service 通信
こちらのチュートリアルに記載されている、Service の Python パッケージのサンプルをもとにしています。rospy に依存したパッケージを作成します。
パッケージ内の実行ファイル置き場として scripts
ディレクトリを作成します。
server.py
client.py (Master に登録する必要がないため init_node は不要です)
Service でやり取りするメッセージの型の情報は、こちらのチュートリアルと同様に以下のようにして設定します。
srv/AddTwoInts.srv
CMakeLists.txt (追記)
実行例
複数の ROS ノードをまとめて起動 (roslaunch)
rosrun によって個別の Node を起動する方法以外に、設定ファイルをもとに roslaunch によってまとめて複数の Node を起動する方法があります。関連チュートリアルはこちらです。XML の書き方についてはこちらに記載があります。
talker.launch
listener.launch
main.launch
実行
動作確認
デバッグツール
ROS で開発を行うときによく利用されるツールには以下のようなものがあります。rqt は Qt をもとにした ROS における GUI 開発フレームワークです。
rosbag
トピックからパブリッシュされた情報を一定期間分だけファイルに保存して、後から再生することができます。-l
は保存した情報をループして再生するためのオプションです。GUI ツールとして rqt_bag があります。
rqt_plot
トピックにパブリッシュされたメッセージをグラフ化することができます。geometry_msgs/Twist は速度情報を格納するための型です。
rqt_graph
Node 等の状態を可視化できます。
その他のツール
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。
関連記事
- ROS/tf による座標変換ロボットを制御する際に複数の座標系を扱う必要があります。これら複数の座標系間の変換等を行うためのライブラリに tf2 (transform2) があります。C++ と Python がサポートされていますが、ここでは Python を用いて簡単な使い方を把握します。 tf2 チュートリアルと同様に動作検証のためのパッケージを用意します。ROS ノードのスクリプトを格納
- ロボットシミュレータ Gazebo の簡単な使い方 (ROS)ロボットシミュレータ Gazebo を ROS開発で利用するための簡単な手順を記載します。ここでは Debian9 を利用します。個別にインストールすることもできますが、ROS を ros-melodic-desktop-full でインストールすれば gazebo もインストールされます。 [URDF モデルの作成](http://wiki.ro
- STL ファイルに Blender でテクスチャを適用して COLLADA を作成ROS による開発で必要となる 3D モデルは STL や COLLADA データとして作成できます。FreeCAD と Blender を用いて直方体のデータを作成してみます。いずれの場合も、ROS 等で扱うために単位はメートルで出力します。 FreeCAD による直方体 STL の作成 STL はフェイスに三角形を利用した 3D モデルを表現するためのファイルフォーマットの一つです。多くのソフ...
- 輪郭に関連した画像処理 (OpenCV3 C++)cv::Canny などで検出したエッジをもとに cv::findContours で輪郭を計算できます。輪郭に関連した処理の例を記載します。 輪郭の描画 #include <opencv2/opencv.hpp> #in
- Qt for Python (PySide2) の基本的な使い方QT を Python から利用するためのライブラリには PyQt や PySide 等が存在します。PySide は元々 QT4 向けのライブラリでしたが、QT5 に対応するために新たに PySide2 が開発されました。PySide2 は Qt for Python ともよばれています。 Q: PySide? Qt for Python? what is the name?A: The nam...