## For instruction on writing tutorials ## http://www.ros.org/wiki/WritingTutorials #################################### ##FILL ME IN #################################### ## links to any required tutorials ## note = This tutorial assumes you are comfortable with using roscpp, and have gone through the [[ROS/Tutorials|ROS Tutorials]] ## descriptive title for the tutorial ## title = マーカ: 基本立体を送る(C++) ## multi-line description to be displayed in search ## description = 基本立体をrvizに送るための<>メッセージの使い方を紹介します ## the next tutorial description (optional) ## next = ## links to next tutorial (optional) ## next.0.link= [[ja/rviz/Tutorials/Markers: Points and Lines|Markers: Points and Lines]] ## next.1.link= ## what level user is this tutorial for ## level= BeginnerCategory #################################### <> <> <> <> == イントロ == 他のディスプレイと違い、[[rviz/DisplayTypes/Marker|Marker Display]]は、rvizがデータを解釈すること以外について何も知らずに、データを可視化することができます。その代わり、初等的なオブジェクトは、<>のメッセージを通して送られ、矢や箱や、円や、直線を描画することができます。 このチュートリアルは、いかにして基本立体(箱、球、シリンダ、矢) を送るかについて紹介します。新しいマーカを毎秒送り、常に異なった形にしていくプログラムを作成します。 == スクラッチパッケージを作る == 始める前に、パッケージパスのどこかに`using_markers`と呼ばれるスクラッチパッケージを作成します。 {{{{{#!wiki buildsystem catkin {{{ catkin_create_pkg using_markers roscpp visualization_msgs }}} }}}}} {{{{{#!wiki buildsystem rosbuild {{{ roscreate-pkg using_markers roscpp visualization_msgs }}} }}}}} == マーカを送る == === コード === `src/basic_shapes.cpp`に以下のものをコピー&ペーストしてください。 ##<> <> `using_markers`のパッケージの中のCMakeLists.txt`を編集してください。 以下を最終行に加えます: {{{{{#!wiki buildsystem rosbuild {{{ rosbuild_add_executable(basic_shapes src/basic_shapes.cpp) }}} }}}}} {{{{{#!wiki buildsystem catkin {{{ add_executable(basic_shapes src/basic_shapes.cpp) target_link_libraries(basic_shapes ${catkin_LIBRARIES}) }}} }}}}} === コードの解説 === さて、少しずつコードを読み解いていきましょう。: <<> 今までにROSのインクルードを見たことはあるでしょう。他に<>からメッセージの定義もインクルードしておきます。 <>これもおなじみの行ですね。ROSを初期化して、`visualization_marker`のtopicに`ros::Publisher`を作成しています。 <>ここで、何の形の立体を描画するかを保存しておくint型の変数を用意します。使う予定の4つの立体は、同じようにして<>のメッセージを利用するので、異なる立体を表す形のタイプを変えるのみで描画する立体を変えることができます。 <> このプログラムの大事な部分がここから始まります。まず、<>を作り、必要な設定を施します。`header`はここでは、[[tf]] [[ja/tf/Tutorials|tutorials]]に触れたことがあれば、よく知っていると思われる<>を指します。例として`frame_id`を`/my_frame`に指定します。実行されているシステムの中では、markerの形を解釈させたいものに依ってframeを指定する必要があります。 <>名前空間(`ns`)と`id`はこのマーカ特有の名前を作るために使用します。もし、マーカのメッセージが同じ`ns`と`id`で受け取ったなら、古いものを新しいマーカで置き換えます。 <> この`type`の変数は、どのような種類のマーカを送るかを特定するためのものです。利用できる型は<>のメッセージの中に列挙されています。ここでは、ループのたびに変わる`shape`変数をセットします。 <> `action`変数は、マーカをどのようにするかを指定します。オプションは、`visualization_msgs::Marker::ADD` and `visualization_msgs::Marker::DELETE`です。`ADD`は、不適切な名称で、実際は、"create or modify"(作成または修正)を意味します。 <> A new `action` has been added to delete all markers in the particular Rviz display, regardless of ID or namespace. The value is `3` and in future ROS version the message will change to have value `visualization_msgs::Marker::DELETEALL`. <> ここで、マーカのポーズを設定します。<>のメッセージは、位置を特定する<>と角度を指定する<>で構成されます。原点に位置を設定し、基本姿勢に角度を設定しています。(注意`w`のみ1にする). <> マーカのスケールを設定します。基本立体を1のスケールに指定したときはサイドが1mあることを示します。 <> マーカの色を<>として指定します。どのメンバも、0から1の間の数であるべきで、(`a`)の値が0であることは、完全に透明であることを示し、1で不透明であることを示します。 <> `lifetime`の変数は、自動的に削除されるまでマーカがあるべきかを特定します。`ros::Duration()`の値は、いつまでも消えないことを意味します。 もし`lifetime`が期限に到達する前に、新しいマーカのメッセージが来た場合は、`lifetime`は新しいマーカのメッセージの値にリセットされます。 <>これで、マーカが配信されました。 <> このコードは一つのマーカのメッセージを配信するだけで、すべての4つの形を見ることができるものです。現在の形に基づいて、次の形を何にするかを決定しています。 <>sleepとloop backをします。 === コードをビルドする === コードを以下のコマンドでビルドできます。: {{{{{#!wiki buildsystem catkin {{{ $ cd %TOP_DIR_YOUR_CATKIN_WORKSPACE% $ catkin_make }}} }}}}} {{{{{#!wiki buildsystem rosbuild {{{ rosmake using_markers }}} }}}}} === コードを実行します === コードを以下のコマンドとともに実行できます。: {{{ rosrun using_markers basic_shapes }}} == マーカを可視化する == マーカを配信しているので、rvizにそれらを見えるように設定する必要があります。まず, rivzがビルドされていることを確認し: {{{ rosmake rviz }}} rvizを実行します: {{{ rosrun using_markers basic_shapes rosrun rviz rviz }}} もし、rvizを今までに使ったことがなければ、[[rviz/UserGuide|User's Guide]]を見て、はじめてください。 {{{#!wiki version indigo ##The first thing to do, because we don't have any [[tf]] transforms setup, is to set the [[rviz/UserGuide#Frames|Fixed Frames]] to the frame we set the marker to above, `/my_frame`. In order to do so, set the Fixed Frame field to "/my_frame". まず初めにすることは、[[tf]]のtransformが準備できていないため、[[rviz/UserGuide#Frames|Fixed Frames]]を上でマーカをセットしたframe(ここでは、`/myframe`)に設定することです。これを実行するために、Fixed Frameの領域に"/my_frame"を設定してください。 }}} {{{#!wiki version hydro ##The first thing to do, because we don't have any [[tf]] transforms setup, is to set the [[rviz/UserGuide#Frames|Fixed Frames]] to the frame we set the marker to above, `/my_frame`. In order to do so, set the Fixed Frame field to "/my_frame". まず初めにすることは、[[tf]]のtransformが準備できていないため、[[rviz/UserGuide#Frames|Fixed Frames]]を上でマーカをセットしたframe(ここでは、`/myframe`)に設定することです。これを実行するために、Fixed Frameの領域に"/my_frame"を設定してください。 }}} {{{{{#!wiki version groovy まず初めにすることは、[[tf]]のtransformが準備できていないため、[[rviz/UserGuide#Frames|Fixed Frames]]を上でマーカをセットしたframe(ここでは、`/myframe`)に設定することです。それをするために、Fixed Frameの変数を見るために"Displays"エリアの".Global Options" を広げる必要があります。 "/my_frame"をタイプしてください。 }}}}} {{{{{#!wiki version electric まず初めにすることは、[[tf]]のtransformが準備できていないため、[[rviz/UserGuide#Frames|Fixed and Target Frames]]を上でマーカをセットしたframe(ここでは、`/myframe`)に設定することです。それをするために、Fixed Frameの変数を見るために"Displays"エリアの".Global Options" を広げる必要があります。 "/my_frame"をタイプしてください。 }}}}} {{{{{#!wiki version fuerte まず初めにすることは、[[tf]]のtransformが準備できていないため、[[rviz/UserGuide#Frames|Fixed and Target Frames]]を上でマーカをセットしたframe(ここでは、`/myframe`)に設定することです。それをするために、"{ Fixed, Target } Frame"の両方を見るために"Displays"エリアの".Global Options" を広げる必要があります。 "/my_frame"をタイプしてください。 }}}}} 次に、[[rviz/DisplayTypes/Marker|Markers]] displayを追加します。デフォルトで指定されている`visualization_marker`は配信されているものと同じであることに注意してください。 そうすると、以下のような毎秒形が変わるものが見えるでしょう。 {{attachment:basic_shapes_tutorial.png|Basic Shapes|width="768"}} == さらに詳しく == ここで紹介した以外のマーカの異なる型についての情報は、[[rviz/DisplayTypes/Marker|Markers Display Page]]で参照してください。 ## AUTOGENERATED DO NOT DELETE ## BeginnerCategory ## FILL IN THE STACK TUTORIAL CATEGORY HERE