このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

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

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

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

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

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

ROS カスタム メッセージは、ROS パッケージ フォルダー内に指定されます。このフォルダーには package.xml ファイルと、オプションの msg および srv ディレクトリが含まれています。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 についてのページで説明されています。

すべてのパッケージでは、package.xml ファイルを定義しなければなりません。このファイルの内容は次のとおりです。

  • 名前 — custom_robot_msgs

  • バージョン — 1.1.01

  • 依存関係 — message_generation

  • メッセージ パッケージに対するその他の依存関係 (オプション) — geometry_msgsstd_msgs

以下に、前述の内容が含まれる package.xml のサンプル ファイルを示します。

<package>
	<name>custom_robot_msgs</name>
	<version>1.1.01</version>
	
	<build_depend>message_generation</build_depend>
	<build_depend>geometry_msgs</build_depend>
	<build_depend>std_msgs</build_depend>
</package>			

メモ

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

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

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

  • 次の両方の条件が満たされている場合、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 によって 2 つの主な作成ステップが処理されます。この関数はカスタム メッセージ ファイル (.msg.srvpackage.xml) を取り、それぞれのメッセージ タイプを、動作する MATLAB コードに変換します。関数 rosgenmsgmsg フォルダーで .msg ファイルを検索し、srv フォルダーで .srv ファイルを検索します。このコードは、新しいカスタム メッセージを作成するときにメッセージ プロパティを定義するクラスのグループです。基本的な手順としては、カスタム メッセージ ファイルを取り、.jar ファイルに変換してから、各トピックおよびサービスについて MATLAB プログラムを作成します。MATLAB で内部的に使用されるため、.jar ファイルを変更しないでください。

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

  1. ファイルの場所を javaclasspath.txt に追加: 指定されたパスを新しいテキスト行として javaclasspath.txt ファイルに追加します。このファイルが存在しない場合、コマンド ウィンドウに、ファイルを作成するように求めるメッセージが表示されます。このテキスト ファイルは、Java クラスの静的クラス パスを定義します。Java クラス パスの詳細については、Java クラス パス (MATLAB)を参照してください。

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

  3. MATLAB を再起動して、メッセージが使用可能であることを確認: MATLAB を再起動してから、rosmsg list または rosmessage を呼び出して、メッセージを想定どおりに使用できることを確認します。

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

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

ファイルのディレクトリが含まれる Java クラス パスと MATLAB パスを維持しなければなりません。MATLAB パスに、カスタム メッセージ アーティファクトが含まれるフォルダーが一度に 1 つだけ存在することを確認してください。また、プロンプトの指示に従い、javaclasspath.txt への正しいパスを必ず追加してください。パスを変更しないでください。このファイルは、各 MATLAB セッションの開始時に Java ファイルを読み込むのに使用されます。

カスタム メッセージの共有

カスタム メッセージ ファイルを作成したら、他のユーザーと共有できます。他のユーザーは、メッセージにアクセスするために rosgenmsg を呼び出す必要はありません。その代わりに、メッセージを共有するには、_matlab_gen フォルダーにアクセスし、前述のパスを指定するための 3 つの手順に従います。ネットワークまたは共有ドライブを介してこれらのファイルへのアクセス権がある場合、javaclasspath.txt ファイルに matlab_gen/jar フォルダー パスを追加し、MATLAB パスに matlab_gen/msggen パスを追加します。MATLAB を再起動すると、他のユーザーが、他の ROS メッセージと同じようにカスタム メッセージを使用できるようになります。

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

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

参考

|

関連するトピック