独自のメッセージファイルの作り方

ROSチュートリアルの流れ

はじめに

この章では、独自のメッセージファイルを作成し、ROSで使用する方法を解説します。

独自のメッセージファイルをROSで使用するためには、 CMakeLists.txtpackage.xmlというファイルを編集します。

この2つのファイルは、ROSチュートリアルのROSパッケージの作り方でパッケージを作成したときに自動で出来たファイルです。 package.xmlはパッケージの設定が書いてあり、CMakeLists.txtはビルドする際の設定が書いてあります。

トピックの書き方ではUNIX時間を配信しましたが、この章では現在日時を送るものに改良したいと思います。

まず、現在日時を送るためのメッセージファイルから作成します。

メッセージファイルの作り方

メッセージファイルはmsgディレクトリに置きます。 無い場合はmsgディレクトリを作りましょう。

日付と時間を送るためのメッセージをDate.msgとします。

Date.msgの中は以下のように書きます。

1行目はint型32ビットのdateで、2行目はFloat型のtimeという名前にしています。

ここからが重要です。

まずpackage.xmlを編集します。

40行目の<build_depend>message_generation</build_depend>と、46行目の<exec_depend>message_runtime</exec_depend>のコメントアウトを外します。

次にCMakeLists.txtを編集します。

10行目のfind_packageに、14行目ようにmessage_generationを追加します。

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

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

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

catkin_wsに移動しcatkin_makeを行います。

これで、ビルドが通れば正常にDate.msgが作成されたはずです。

確認してみましょう。 以下のように打ち込み、

以下のように表示されたら完了です。

プログラムを改良

先程作成したメッセージファイルを使用して、プログラムを改良しましょう。 まずros_tutorialに移動します。

パブリッシャ

time_pub2.pyという名前にします。

実行権限を与えます。

コード解説

新たに、先程作成したDateをインポートしています。また現在日時を取得するために必要なモジュールdatetimeもインポートしています。

talkerという名前の関数を定義しています。

l = []はリストの初期化を行っています。

d = Date()はメッセージのDatedという名前でインスタンス化しています。

シャットドウンされるまで10Hzでwhile内のコードを実行します。

Date.msgdatetimeを初期化しています。

現在日時を取得し、配列にしてlに渡しています。

for文で配列の0~10番目を日付としてdateに渡しています。同様に配列の11~25番目を時間としてtimeに渡しています。

しかし、このままだと-:の文字が含まれているため、

replaceを用いて-:の文字を取り除き、int型とfloat型にしてパブリッシュしています。

サブスクライバ

サブスクライバはほとんど変わらないため、time_sub.pyをコピーし、time_sub2.pyという名前で保存しましょう。

3行目と6行目、10行目に変更を加えます。

コード解説

変更点だけ解説していきます。

Dateをインポートしています。

dateはint型のため%dtimeはfloat型のため%fで表示しています。

トピック名をメッセージの型をDateに変更しています。

実行方法

それぞれ別のターミナルで実行しましょう。

実行結果

2018年11月08日の22時49分49.95257秒を指しています。

Last updated

Was this helpful?