Main Content

ROS カスタム メッセージのサポート

カスタム メッセージの概要

カスタム メッセージは、ROS Toolbox で現在サポートされているメッセージ タイプのセットの拡張に使用できる、ユーザー定義のメッセージです。サポートされているメッセージ タイプを送受信する場合は、カスタム メッセージを使用する必要はありません。サポートされているメッセージ タイプのリストを表示するには、MATLAB® コマンド ウィンドウで rosmsg list を呼び出します。

カスタム メッセージの作成には ROS パッケージが必要です。ROS パッケージの詳細については、ROS Wiki の Packages で説明しています。カスタム メッセージ用の有効な ROS パッケージがあることを確認したら、カスタム メッセージ パッケージのフォルダーがある場所のファイル パスを指定して rosgenmsg を呼び出し、カスタム メッセージの使用に必要な MATLAB コードを生成します。MATLAB で ROS カスタム メッセージを生成する方法の例については、ROS パッケージからのカスタム メッセージの作成を参照してください。

ROS カスタム メッセージをはじめて使用する場合は、ROS Toolbox システム要件を確認してください。

カスタム メッセージの内容

ROS カスタム メッセージは、msgsrv、および action ディレクトリを含む ROS パッケージ フォルダー内に指定されます。

メモ

ROS Toolbox では、任意の時点で MATLAB パス上に複数のカスタム メッセージ フォルダーが存在できます。これらのフォルダーには複数のカスタム メッセージ パッケージを含めることができます。

msg フォルダーには、すべてのカスタム メッセージ タイプ定義が含まれています。また、srv フォルダーには、すべてのカスタム サービス タイプ定義を追加し、action フォルダーにはすべてのカスタム アクション タイプ定義を追加する必要があります。たとえば、パッケージ custom_robot_msgs のフォルダーとファイルの構造は次のとおりです。

Custom message folder structure. The top level package custom_robot_msgs contains three folders. Msg, srv, and action which contain the generated custom messages, services and actions respectively.

このパッケージでは、1 つのカスタム メッセージ タイプが RobotTopic.msg に含まれ、1 つのカスタム サービス タイプが RobotService.srv に含まれ、1 つのカスタム アクション タイプが RobotAction.action に含まれています。MATLAB はこれらのファイルを使用して、パッケージに含まれるカスタム メッセージを使用するために必要なファイルを生成します。msg および srv ファイル作成の詳細については、ROS Wiki の Creating a ROS msg and srvDefining Custom Messages を参照してください。これらのファイルの構文は、msgsrv についてのページで説明されています。ROS アクションの詳細については、ROS Actions Overviewを参照してください。

メモ

カスタム メッセージ フォルダーに対する書き込みアクセス権限がなければなりません。

メッセージ フィールドからのプロパティの命名

ROS メッセージ定義が MATLAB に変換されると、フィールド名がメッセージ オブジェクトのプロパティに変換されます。オブジェクト プロパティは常に大文字で始まり、アンダースコアは含まれません。フィールド名はこの命名規則に従って変更されます。最初の文字と、アンダースコアの直後の文字が大文字になり、アンダースコアは削除されます。たとえば、sensor_msgs/Image メッセージには、ROS では次のフィールドがあります。

header
height
width
encoding
is_bigendian
step
data

変換された MATLAB プロパティは次のようになります。

Header
Height
Width
Encoding
IsBigendian
Step
Data

これは、ROS メッセージを Simulink® で使用するときにも反映されます。ROS メッセージ バスは、MATLAB と同じプロパティ名を使用します。

カスタム メッセージ作成ワークフロー

前の節で説明したとおりにカスタム メッセージ構造を設定したら、これらのカスタム メッセージを使用するために必要なコードを作成できます。まず、カスタム メッセージ ファイルへの既知のパスを使用して rosgenmsg を呼び出し、MATLAB コードを作成します。

関数 rosgenmsg は、カスタム メッセージ ファイル (.msg.srv、および .action) を取り、それぞれのメッセージ タイプを、動作する MATLAB コードに変換します。関数 rosgenmsgmsg フォルダーで .msg ファイルを検索し、srv フォルダーで .srv ファイルを検索し、action フォルダーで .action ファイルを検索します。このコードは、新しいカスタム メッセージを作成するときにメッセージ プロパティを定義するクラスのグループです。この関数によって、さまざまなメッセージ クラスに必要な MATLAB M ファイルが作成されます。

関数 rosgenmsg によってこれらのファイルが作成された後、クラス ファイルを MATLAB パスに追加しなければなりません。これらの手順は、MATLAB コマンド ウィンドウのプロンプトとして示されます。

  1. クラス ファイルの場所を MATLAB パスに追加: addpath を使用して、.m 拡張子のファイルの新しい場所を MATLAB パスに追加し、savepath を使用して変更を保存します。

  2. すべてのメッセージ クラス定義を更新します。これには、以下のとおりワークスペースをクリアする必要があります。

    clear classes
    rehash toolboxcache

  3. メッセージが使用可能であることを確認: rosmsg list または関数 rosmessage を使用して、新しいカスタム メッセージが使用可能であることを確認します。

この手順の例については、ROS パッケージからのカスタム メッセージの作成を参照してください。この例では、サンプル カスタム メッセージ ファイルを使用して MATLAB でカスタム メッセージを作成しています。

この手順は、カスタム メッセージの特定のセットに対して 1 回だけ実行する必要があります。その後、新しいカスタム メッセージを MATLAB の他の ROS メッセージと同様に使用し、ROS Toolbox が提供する ROS のフル機能を活用することができます。メッセージ タイプを更新する場合や、新しいメッセージ タイプを作成する場合は、この生成手順を繰り返します。

ファイルのディレクトリが含まれる MATLAB パスを維持しなければなりません。

カスタム メッセージを使用したコード生成

カスタム メッセージ タイプ、カスタム サービス タイプ、およびカスタム アクション タイプを ROS Simulink ブロックおよび MATLAB 関数とともに使用して、スタンドアロン ROS ノード用の C++ コードを生成できます。生成されたコード (.tgz アーカイブ) には、カスタム メッセージ定義および ROS カスタム メッセージ パッケージが含まれます。生成されたコードが生成先の Linux システム内でビルドされると、それによってカスタム メッセージ パッケージが catkin ワークスペースで自動的に使用可能になります。

アプリケーション用にカスタム メッセージ定義を MATLAB で変更した場合は、生成先の Linux システム上のカスタム メッセージ パッケージを削除し、C++ コードを再生成して、再展開する必要があります。

組み込みメッセージ定義のカスタム定義との置き換え

MATLAB は、多くの組み込み ROS メッセージ タイプを提供しています。これらのメッセージ タイプの定義を、上記で詳述した同じカスタム メッセージ作成ワークフローを使用して、新しい定義と置き換えることができます。組み込みのメッセージ パッケージの定義を置き換える場合は、カスタム メッセージ パッケージ フォルダーに、対応する組み込みメッセージ パッケージのすべてのメッセージ タイプに対する新しい定義 (.msg ファイル) が含まれていることを確認する必要があります。

参考

|

関連するトピック