Note: This tutorial assumes that you have completed the previous tutorials: ROSのサービスとパラメータを理解する. |
Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
rqt_console と roslaunch を使う
Description: このチュートリアルでは, ROSのデバッグで使うrqt_consoleやrqt_logger_levelと, 一度に複数のnodeを起動するroslaunchの使い方を学びます。ROS fuerte, もしくは, それ以前のrqtが完全な状態で提供されていないディストリビューションを使用している場合, 古いrxベースのツールを使用しているこちらのページを参照してください.Tutorial Level: BEGINNER
Next Tutorial: ROSでrosedを使ってファイルを編集する
Contents
rqt と turtlesim パッケージの設定
このチュートリアルでは, rqtと turtlesim パッケージの両方を使用します. 必要なパッケージの設定がまだ済んでいない場合は, このチュートリアルを進めるために両方のパッケージをインストールしてください.
$ sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim
<distro>を使っているROSのディストリビューション名に置き換えてください(例えば, hydro,Indigo).
NOTE:前節のチュートリアルで rqt と turtlesim はビルド済みとなっているかもしれません.もし確証が無い場合は,もう一度ビルドしても特に問題は生じません.
rqt_console と rqt_logger_level の使い方
rqt_console はノードからの出力を表示する機能をROS のログ収集フレームワークに付加するパッケージです。rqt_logger_levelはノード実行時のログ詳細レベル(DEBUG, WARN, INFO, and ERROR)の変更を可能にするパッケージです.
ではturtlesim を起動する前に,2つの新しいターミナルで rqt_console と rqt_logger_levelをそれぞれ起動しましょう。:
$ rosrun rqt_console rqt_console
$ rosrun rqt_logger_level rqt_logger_level
ウィンドウが2つポップアップします:
turtlesim を新しいターミナルで起動しましょう:
$ rosrun turtlesim turtlesim_node
既定のログ出力レベルはINFOなので, turtlesimの起動時に発行されるすべての情報が見えていますから, 画面はこのようになります:
ログ出力レベルを Warn に変更してみましょう.rqt_logger_levelのウィンドウの中でノードの読込を更新し,以下のように Warn を選択します:
ではturtleを壁に向かって突っ込ませて, rqt_consoleに何が表示されるか確認してみましょう(非hydro):
rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 0.0
hydroでは:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 0.0]'
ロガー レベルについての簡単な説明
ログ出力レベルは, 以下の順序で優先度付けされています:
Fatal Error Warn Info Debug
Fatalが最高優先度を持ち, Debugが最低優先度を持っています. ログ出力レベルを設定することで, その優先順位より上位のメッセージを全て確認することができます. 例えば, Warnにレベルを設定すると, 全てのWarn, Error, そして, Fatalのログ出力メッセージを確認できるでしょう.
Ctrl-Cでturtlesimを強制終了し, 片方のノードがもう片方のノードの動きをコピーして動作が生じるように複数のturtlesimノードをroslaunchを使って立ちあげてみましょう.
roslaunch を使う
roslaunch はlaunchファイルで定義されたノードを起動します.
使い方:
$ roslaunch [package] [filename.launch]
まずは既に構築してある, beginner_tutorials パッケージに移動しましょう:
$ roscd beginner_tutorials
もしroscdの実行結果が_roscd: No such package/stack 'beginner_tutorials'_のような出力になる時は、ワークスペース作成時のチュートリアルの最後で行った環境設定ファイルをsourceコマンドで実行する必要があるでしょう。
$ cd ~/catkin_ws $ source devel/setup.bash $ roscd beginner_tutorials
それでは, launch ディレクトリを作成してみましょう:
$ mkdir launch $ cd launch
launchファイル
turtlemimic で呼び出されるlaunch ファイルを作りましょう。turtlemimic.launch というファイルを作成し、以下の内容をコピーして貼り付けてください:
1 <launch>
2
3 <group ns="turtlesim1">
4 <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
5 </group>
6
7 <group ns="turtlesim2">
8 <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
9 </group>
10
11 <node pkg="turtlesim" name="mimic" type="mimic">
12 <remap from="input" to="turtlesim1/turtle1"/>
13 <remap from="output" to="turtlesim2/turtle1"/>
14 </node>
15
16 </launch>
launchファイルの説明
launchファイルを xmlのタグごとに細かく解析していきましょう。
1 <launch>
launchファイルはlaunchタグから始めることで, launchファイルとしてファイルが識別されます..
turtlesim1とturtlesim2という名前スペースを持った二つのグループをsimという名前のturtlesimノードで起動します. こうすることで, 2つのシミュレータが名前衝突を生じさせることなく, 起動させることができます.
ここはトピックのinputとoutputの機能をturtlesim1とturtlesim2に割り当てた、模倣動作を行うmimicノードを起動します。この新たな割り当てで、turtlesim2がturtlesim1の動作を模倣します。
16 </launch>
ここはlaunchファイルの xml タグを閉じています。
roslaunch してみる
launchファイルを roslaunch から使ってみましょう:
$ roslaunch beginner_tutorials turtlemimic.launch
2つのturtlesimを起動し, 新しいターミナルででrostopicコマンドを送ります(非hydro):
$ rostopic pub turtlesim1/turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 -1.8
hydroでは:
$ rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
turtlesim1だけにコマンドを送っているのにも関わらず, 2つのturtlesimが動き出すのを確認できます。
launchファイルが何をしたかをさらに理解するのに, rqt_graphを使用することもできます. rqtのメインウインドウを実行し, rqt_graphを選択しましょう:
$ rqt
もしくは, シンプルに以下のように起動します:
$ rqt_graph
ここまでで, rqt_consoleとroslaunchをうまく使うことが出来ましたね. 次は ROSのエディタオプションについて学習しましょう. 次節のチュートリアルではturtlesimは使いませんので, それらをCtrl-Cで全て終了させて構いません.