ここらでスピードアップ!
ROSさんお手やわらかに:ROS入門編
あまりチンタラやっていると飽きてきそうなので、ここらでスピードアップする。
■「サービス」と「パラメータ」
「サービス」はcなどの関数呼び出しみたいなもの。目的のノードの特定のサービスをコールすると、例えば初期化したり、何かを計算して値を返すことなどが出来る。発行と引用との違いは、直接相手のノードに働きかけることだ。サービスを要求するとすぐさまレスポンスするので、タイミングが重要な、移動コマンドなどには有効ではないか。発行と引用はセンサの値を渡したりするのにむいているのかも知れない。
パラメータは共用メモリのようなもの。数値や文字列を「パラメータサーバ」に書き込んだり読み出したりすることが出来る。グローバル変数みたいな感じだ。発行と引用との違いは内容が書き換わったときに通知がないということか。YAMLマークアップ言語を使っているということだが、これも今はわからない。
これで、サービスとパブリッシュ(発行)/サブスクライブ(引用)とパラメータというノード間通信の基本はおしまい。
■ rqt_consoleとroslunch
rqt_consoleはデバッグコンソールのようだ。使うときに読めばいいので飛ばす。
roslunchはいくつかのノードを定義して実行するバッチのように見える。サンプルでは二つのturtlesimを別々のネームスペースで実行させ、さらにroslunch上で片方のアウトプットを片方のインプットに接続するノードmimicを定義して、全部をいっぺんに起動する。
あらたにノードを定義できるのがミソなのか? コンセプトが良くわからないが、まとまった働きをするシステムを起動するのに必要なのはわかる。
■ rosed ROSファイルを一発オープン
これはroscdなんかと同じで、rosのファイルを指定してエディタを開くコマンド。パスを細かく指定する必要はなく、
rosed [package_name] [filename]
でOK。まあGUIから操作するならあまり恩恵ははないかも。なおデフォルトのエディタはvinだそうだ。
■ msgファイルとsrvファイル
この辺からいよいよパッケージを作るハナシになってくる。
msgとsrvはc言語のプロトタイプ宣言のようなものだ。msgは発行・引用されるメッセージを変数か構造体の形で定義し、srvはサービスを呼び出すときの引数と返り値を定義する。
msgはパッケージディレクトリの直下にmsgというディレクトリをつくり、その中に拡張子が.msgのテキストファイルの形で保存する。例えばPersonというメッセージを定義したければPerson.msgというファイルに(例えば)下記のように記述する。
string first_name
string last_name
uint8 age
uint32 score
忘れてはいけないこと→パッケージディレクトリのCMakeLists.txt をひらいて"# rosbuild_genmsg()"のコメントを外しておくこと。
こうしないとビルドのときにmsgを参照しないようだ。
同様にsrvディレクトリを作り、.srvの拡張子のファイルを作る。内容見本はこんな感じ。
int64 a
int64 b
---
int64 sum
---の前が引数で、後が返り値の定義。チュートリアルにはどこかからコピーして持ってくる方法が書いてある。cpのros版、roscpを使ってる。こういう風にコピーすることも多いのだろうか。
それからsrvもCMakeLists.txtの"# rosbuild_gensrv()"をアンコメントしておかなければならない。
定義したらMakeする。これ↓(パッケージbeginner_tutorialsの場合)
rosmake beginner_tutorials
するとc++,Lisp,Pytonのメッセージハンドラがsrcディレクトリに作成される。
■ここまでのまとめ
チュートリアルのこのページの最後にはまとめがある。
・コマンドのヘルプを見るには → -h をつける
コマンドまとめ
・rospack = ros+pack(age) : provides information related to ROS packages
・rosstack = ros+stack : provides information related to ROS stacks
・roscd = ros+cd : changes directory to a ROS package or stack
・rosls = ros+ls : lists files in a ROS package
・roscp = ros+cp : copies files from/to a ROS package
・rosmsg = ros+msg : provides information related to ROS message definitions
・rossrv = ros+srv : provides information related to ROS service definitions
・rosmake = ros+make : makes (compiles) a ROS package
ようやくコードを書く準備ができた。
« rostopicコマンドあれこれ | トップページ | 【昔語り2】紙テープに未来を託そう »
「ROSさんお手やわらかに」カテゴリの記事
- 3Dプリンターで作る簡単turtlebot(おしまい)(2017.01.07)
- 3Dプリンターで作る簡単turtlebot(raspberry pi3の取り付け)(2017.01.03)
- 3Dプリンターで作る簡単turtlebot(kinectの取り付け)(2017.01.02)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て2)(2016.12.29)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て1)(2016.12.25)
コメント