ROS カスタム メッセージのサポート
カスタム メッセージの概要
カスタム メッセージは、ROS Toolbox で現在サポートされているメッセージ タイプのセットの拡張に使用できる、ユーザー定義のメッセージです。サポートされているメッセージ タイプを送受信する場合は、カスタム メッセージを使用する必要はありません。サポートされているメッセージ タイプのリストを表示するには、MATLAB® コマンド ウィンドウで rosmsg list
を呼び出します。
カスタム メッセージの作成には ROS パッケージが必要です。ROS パッケージの詳細については、ROS Wiki の Packages で説明しています。カスタム メッセージ用の有効な ROS パッケージがあることを確認したら、カスタム メッセージ パッケージのフォルダーがある場所のファイル パスを指定して rosgenmsg
を呼び出し、カスタム メッセージの使用に必要な MATLAB コードを生成します。MATLAB で ROS カスタム メッセージを生成する方法の例については、ROS パッケージからのカスタム メッセージの作成を参照してください。
ROS カスタム メッセージをはじめて使用する場合は、ROS システム要件を確認してください。
カスタム メッセージの内容
ROS カスタム メッセージは、msg
、srv
、および action
ディレクトリを含む ROS パッケージ フォルダー内に指定されます。
メモ
どの時点でも、MATLAB パス上のカスタム メッセージ フォルダーは 1 つのみでなければなりません。このフォルダーには複数のパッケージを含めることができます。すべてのパッケージを 1 つの固有のフォルダーに維持することを推奨します。
msg
フォルダーには、すべてのカスタム メッセージ タイプ定義が含まれています。また、srv
フォルダーには、すべてのカスタム サービス タイプ定義を追加し、action
フォルダーにはすべてのカスタム アクション タイプ定義を追加する必要があります。たとえば、パッケージ custom_robot_msgs
のフォルダーとファイルの構造は次のとおりです。
このパッケージでは、1 つのカスタム メッセージ タイプが RobotTopic.msg
に含まれ、1 つのカスタム サービス タイプが RobotService.srv
に含まれ、1 つのカスタム アクション タイプが RobotAction.action
に含まれています。MATLAB はこれらのファイルを使用して、パッケージに含まれるカスタム メッセージを使用するために必要なファイルを生成します。msg
および srv
ファイル作成の詳細については、ROS Wiki の Creating a ROS msg and srv と Defining Custom Messages を参照してください。これらのファイルの構文は、msg
と srv
についてのページで説明されています。ROS アクションの詳細については、ROS Actions Overviewを参照してください。
メモ
カスタム メッセージ フォルダーに対する書き込みアクセス権限がなければなりません。
どの時点でも、MATLAB パス上のカスタム メッセージ フォルダーは 1 つのみでなければなりません。このフォルダーには複数のパッケージを含めることができます。すべてのパッケージを 1 つの固有のフォルダーに維持することを推奨します。
メッセージ フィールドからのプロパティの命名
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 コードに変換します。関数 rosgenmsg
は msg
フォルダーで .msg
ファイルを検索し、srv
フォルダーで .srv
ファイルを検索し、action
フォルダーで .action
ファイルを検索します。このコードは、新しいカスタム メッセージを作成するときにメッセージ プロパティを定義するクラスのグループです。この関数によって、さまざまなメッセージ クラスに必要な MATLAB M ファイルが作成されます。
関数 rosgenmsg
によってこれらのファイルが作成された後、クラス ファイルを MATLAB パスに追加しなければなりません。これらの手順は、MATLAB コマンド ウィンドウのプロンプトとして示されます。
クラス ファイルの場所を MATLAB パスに追加:
addpath
を使用して、.m 拡張子のファイルの新しい場所を MATLAB パスに追加し、savepath
を使用して変更を保存します。すべてのメッセージ クラス定義を更新します。これには、以下のとおりワークスペースをクリアする必要があります。
clear classes rehash toolboxcache
メッセージが使用可能であることを確認:
または関数rosmsg
listrosmessage
を使用して、新しいカスタム メッセージが使用可能であることを確認します。
この手順の例については、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 システムにカスタム メッセージ パッケージを確実にインストールまたはコピーします。
組み込みメッセージ定義のカスタム定義との置き換え
MATLAB は、多くの組み込み ROS メッセージ タイプを提供しています。これらのメッセージ タイプの定義を、上記で詳述した同じカスタム メッセージ作成ワークフローを使用して、新しい定義と置き換えることができます。組み込みのメッセージ パッケージの定義を置き換える場合は、カスタム メッセージ パッケージ フォルダーに、対応する組み込みメッセージ パッケージのすべてのメッセージ タイプに対する新しい定義 (.msg
ファイル) が含まれていることを確認する必要があります。