Main Content

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

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

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

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

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

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

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

メモ

どの時点でも、MATLAB パス上のカスタム メッセージ フォルダーは 1 つのみでなければなりません。このフォルダーには複数のパッケージを含めることができます。すべてのパッケージを 1 つの固有のフォルダーに維持することを推奨します。

msg フォルダーには、すべてのカスタム メッセージ タイプ定義が含まれています。また、srv フォルダーには、すべてのカスタム サービス タイプ定義を追加しなければなりません。たとえば、パッケージ custom_robot_msgs のフォルダーとファイルの構造は次のとおりです。

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

メモ

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

  • どの時点でも、MATLAB パス上のカスタム メッセージ フォルダーは 1 つのみでなければなりません。このフォルダーには複数のパッケージを含めることができます。すべてのパッケージを 1 つの固有のフォルダーに維持することを推奨します。

  • ROS アクションはサポートされておらず、カスタム メッセージ生成の際に無視されます。

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

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) を取り、それぞれのメッセージ タイプを、動作する MATLAB コードに変換します。関数 rosgenmsgmsg フォルダーで .msg ファイルを検索し、srv フォルダーで .srv ファイルを検索します。このコードは、新しいカスタム メッセージを作成するときにメッセージ プロパティを定義するクラスのグループです。この関数によって、さまざまなメッセージ クラスに必要な 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 パスを維持しなければなりません。MATLAB パスに、カスタム メッセージ アーティファクトが含まれるフォルダーが一度に 1 つだけ存在することを確認してください。

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

カスタム メッセージ タイプとカスタム サービス タイプを ROS Simulink ブロックとともに使用して、スタンドアロン ROS ノード用の C++ コードを生成できます。生成されたコード (.tgz archive) には、カスタム メッセージの Simulink 定義が含まれますが、ROS カスタム メッセージ パッケージは含まれません。生成されたコードが生成先の Linux システム内でビルドされる際には、カスタム メッセージ パッケージが catkin ワークスペースまたは ROS_PACKAGE_PATH 上で使用できる必要があります。生成されたコードをビルドする前に、Linux システムにカスタム メッセージ パッケージを確実にインストールまたはコピーします。

参考

|

関連するトピック