独自のメッセージファイルの作り方
ROSチュートリアルの流れ
独自のメッセージファイルの作り方 ←今ここ
はじめに
この章では、独自のメッセージファイルを作成し、ROSで使用する方法を解説します。
独自のメッセージファイルをROSで使用するためには、 CMakeLists.txtとpackage.xmlというファイルを編集します。
この2つのファイルは、ROSチュートリアルのROSパッケージの作り方でパッケージを作成したときに自動で出来たファイルです。 package.xmlはパッケージの設定が書いてあり、CMakeLists.txtはビルドする際の設定が書いてあります。
トピックの書き方ではUNIX時間を配信しましたが、この章では現在日時を送るものに改良したいと思います。
まず、現在日時を送るためのメッセージファイルから作成します。
メッセージファイルの作り方
メッセージファイルはmsgディレクトリに置きます。 無い場合はmsgディレクトリを作りましょう。
日付と時間を送るためのメッセージをDate.msgとします。
Date.msgの中は以下のように書きます。
1行目はint型32ビットのdateで、2行目はFloat型のtimeという名前にしています。
ここからが重要です。
まずpackage.xmlを編集します。
package.xmlを編集します。40行目の<build_depend>message_generation</build_depend>と、46行目の<exec_depend>message_runtime</exec_depend>のコメントアウトを外します。

次にCMakeLists.txtを編集します。
CMakeLists.txtを編集します。10行目のfind_packageに、14行目ようにmessage_generationを追加します。

51行目のadd_message_filesのコメントアウトを外し、53行目にDate.msgを追加する。

71行目から74行目のgenerate_massagesのコメントアウトを外します。

108行目のcatkin_packageのCATKIN_DEPENDSのコメントアウトを外し、message_runtimeを追加します。

catkin_wsに移動しcatkin_makeを行います。
これで、ビルドが通れば正常にDate.msgが作成されたはずです。
確認してみましょう。 以下のように打ち込み、
以下のように表示されたら完了です。
プログラムを改良
先程作成したメッセージファイルを使用して、プログラムを改良しましょう。 まずros_tutorialに移動します。
パブリッシャ
time_pub2.pyという名前にします。
実行権限を与えます。
コード解説
新たに、先程作成したDateをインポートしています。また現在日時を取得するために必要なモジュールdatetimeもインポートしています。
talkerという名前の関数を定義しています。
l = []はリストの初期化を行っています。
d = Date()はメッセージのDateをdという名前でインスタンス化しています。
シャットドウンされるまで10Hzでwhile内のコードを実行します。
Date.msgのdateとtimeを初期化しています。
現在日時を取得し、配列にしてlに渡しています。
for文で配列の0~10番目を日付としてdateに渡しています。同様に配列の11~25番目を時間としてtimeに渡しています。
しかし、このままだと-や:の文字が含まれているため、
replaceを用いて-や:の文字を取り除き、int型とfloat型にしてパブリッシュしています。
サブスクライバ
サブスクライバはほとんど変わらないため、time_sub.pyをコピーし、time_sub2.pyという名前で保存しましょう。
3行目と6行目、10行目に変更を加えます。
コード解説
変更点だけ解説していきます。
Dateをインポートしています。
dateはint型のため%d、timeはfloat型のため%fで表示しています。
トピック名をメッセージの型をDateに変更しています。
実行方法
それぞれ別のターミナルで実行しましょう。
実行結果
2018年11月08日の22時49分49.95257秒を指しています。
Last updated
Was this helpful?