<> [[Nodes | ノード(node)]] は、'''メッセージ(messages)'''を[[Topics|トピック(topics)]]にパブリッシュすることでお互いに通信をすることができます。メッセージは、とてもシンプルな構造になっており、型の決まった変数を持っています。標準的な型(integer, floating, booleanなど)をサポートしており、それらの配列もサポートしております。メッセージは、任意にネスト構造や配列を含むことができます。 ノードは、ROSの[[Services|service]]の呼び出しによって、''リクエスト''と''レスポンス''をやり取りすることもできます。これらのリクエストとレスポンスのメッセージは、[[srv|srv ファイル]]に定義されています。 == msg ファイル == [[msg]]ファイルは、メッセージのデータ構造を記述するのに単純なテキストファイルとなっています。これらのファイルは、パッケージの`msg`サブディレクトリの中に蓄えられています。タイプの宣言など含めこれらのファイルについては、[[msg|msg format]]をご覧ください. == メッセージ タイプ == メッセージのタイプは、標準のROSの[[Names|名前]]規則に則っています。:パッケージ名+/+`.msg`ファイル名でできています。例えば、`std_msgs/msg/String.msg` は、 `std_msgs/String`というメッセージタイプとなります. メッセージタイプに加え、メッセージは、`.msg`ファイルのMD5合計値によってバージョン付けされています。ノードは、メッセージタイプとそのMD5の合計値が一致したときにメッセージのやりとりを行うことができます。 == ビルド == ROSの[[Client Libraries|クライアントライブラリ]]は、.msgファイルをソースコードに変換するメッセージジェネレータを実行します。これらのメッセージジェネレータは、ビルドスクリプトから実行されるべきですが、血みどろな詳細のほとんどは、いくらかの一般的なビルドルールを含むことで面倒を見てもらえます。約束として、すべてのmsgファイルは、"msg"と呼ばれるパッケージのなかのディレクトリに蓄えます。もし、その中に定義しているなら、[[CMakeLists|CMakeLists.txt]]に`rosbuild_genmsg()`の行を加えるだけで準備できます。以下が例です。 {{{ cmake_minimum_required(VERSION 2.6) include(rosbuild) rosbuild_init() rosbuild_genmsg() }}} == ヘッダー == メッセージが、'Header'と呼ばれる特別なメッセージのタイプをインクルードしているかもしれませんが 、それは、いくらかの一般的なタイムスタンプやフレームIDなどのメタデータの変数をインクルードするためのものです。ROSの[[Client Libraries]]は、望むなら、自動的にこれらの値をセットします。ですので、これらの使用はとても便利です。 ヘッダーメッセージの中には以下に示すように3つの変数があります。seq変数は、メッセージが与えられたパブリッシャから送信されるにつれて自動的に増えてくidと一致します。stamp変数は、メッセージのデータが一致すべき時間情報を保持します。例えばレーザスキャンの例では、スタンプは、いつスキャンがされたかの時間と一致します。frame_idの変数は、メッセージのデータが一致すべきフレーム情報を保持します。レーザスキャンの例では、いつスキャンが行われたかのフレームがセットされます。 {{{ #Standard metadata for higher-level flow data types #sequence ID: consecutively increasing ID uint32 seq #Two-integer timestamp that is expressed as: # * stamp.secs: seconds (stamp_secs) since epoch # * stamp.nsecs: nanoseconds since stamp_secs # time-handling sugar is provided by the client library time stamp #Frame this data is associated with # 0: no frame # 1: global frame string frame_id }}} == rosmsg == [[rosmsg]]は、メッセージについての情報を表示する、例えば、`.msg`のデータ構造などを表示したりするためのコマンドラインツールです。このツールを使う方法は[[rosmsg]]をご覧ください。