Main Content

rosgenmsg

ROS 定義からのカスタム メッセージの生成

説明

rosgenmsg(folderpath) は、指定されたフォルダー パスで ROS カスタム メッセージ、サービス定義、アクション定義を読み取ることにより、ROS カスタム メッセージを生成します。この関数のフォルダーには、1 つ以上の ROS パッケージ フォルダーが含まれている必要があります。これらのパッケージでは、メッセージ定義が .msg ファイルに、サービス定義が .srv ファイルに、アクション定義が .action ファイルに含まれています。

生成したカスタム メッセージは、サポートされている他のすべてのメッセージと同様に、MATLAB® で送受信できます。これらのメッセージは rosmessage を使用して作成するか、MATLAB コマンド ウィンドウで「rosmsg list」と入力してメッセージのリストを表示することもできます。

メモ

  • ROS 用のカスタム メッセージを生成するには、ROS パッケージを作成しなければなりません。このプロセスでは、ご使用のプラットフォーム用の CMake ソフトウェアと C++ コンパイラにアクセスできる必要があります。詳細については、ROS Toolbox システム要件を参照してください。

  • ROS 定義からのカスタム メッセージは、MATLAB の新しいリリースごとに再生成する必要があります。

rosgenmsg(folderpath,Name=Value) は、1 つ以上の名前と値の引数を使用して追加のオプションを指定します。

すべて折りたたむ

カスタム メッセージはユーザー定義のメッセージです。カスタム メッセージを使用して、ROS で現在サポートされているメッセージ タイプのセットを拡張します。サポートされているメッセージ タイプを送受信する場合は、カスタム メッセージを使用する必要はありません。サポートされているメッセージ タイプのリストを表示するには、MATLAB コマンド ウィンドウで「rosmsg list」と入力します。サポートされている ROS メッセージの詳細については、Work with Basic ROS Messagesを参照してください。

ROS カスタム メッセージをはじめて取り扱う場合は、ROS Toolbox システム要件を参照してください。

ROS カスタム メッセージは、msg という名前のフォルダーを含む ROS パッケージ フォルダー内に指定されます。msg フォルダーには、すべてのカスタム メッセージ タイプ定義が含まれています。たとえば、rosCustomMessages フォルダーにある simple_msgs パッケージのフォルダーとファイルの構造は次のとおりです。

このパッケージにはカスタム メッセージ タイプ Num.msg が含まれています。MATLAB はこれらのファイルを使用して、パッケージに含まれるカスタム メッセージを使用するために必要なファイルを生成します。

この例では、MATLAB で ROS カスタム メッセージを作成し、共有可能な ZIP アーカイブに圧縮します。必要な msg ファイルが含まれる ROS パッケージがなければなりません。

カスタム メッセージ パッケージ フォルダーを準備したら、親フォルダーへのパスを指定し、指定したパスで rosgenmsg を呼び出します。

新しい MATLAB セッションを開き、カスタム メッセージ パッケージ フォルダーをローカル フォルダーに作成します。Windows マシン上でカスタム メッセージを生成する場合は、フォルダー パスの文字数の制限を回避するために、短いフォルダー パスを選択します。次に例を示します。

genDir = fullfile('C:/test/rosCustomMessages')

genDir = fullfile(pwd,'rosCustomMessages');
packagePath = fullfile(genDir,'simple_msgs');
mkdir(packagePath)

カスタム メッセージ パッケージ フォルダー内に msg という名前のフォルダーを作成します。

mkdir(packagePath,'msg')

msg フォルダー内に .msg という名前のファイルを作成します。

messageDefinition = {'int64 num'};

fileID = fopen(fullfile(packagePath,'msg', ...
               'Num.msg'),'w');
fprintf(fileID,'%s\n',messageDefinition{:});
fclose(fileID);

カスタム メッセージ パッケージ フォルダー内に srv という名前のフォルダーを作成します。

mkdir(packagePath,'srv')

srv フォルダー内に .srv という名前のファイルを作成します。

serviceDefinition = {'int64 a'
                     'int64 b'
                     '---'
                     'int64 sum'};
 
fileID = fopen(fullfile(packagePath,'srv', ...
               'AddTwoInts.srv'),'w');
fprintf(fileID,'%s\n',serviceDefinition{:});
fclose(fileID);

カスタム メッセージ パッケージ フォルダー内に action という名前のフォルダーを作成します。

mkdir(packagePath,'action')

action フォルダー内に .action という名前のファイルを作成します。

actionDefinition = {'int64 goal'
                    '---'
                    'int64 result'
                    '---'
                    'int64 feedback'};
 
fileID = fopen(fullfile(packagePath,'action', ...
               'Test.action'),'w');
fprintf(fileID,'%s\n',actionDefinition{:});
fclose(fileID);

.msg ファイル、.srv ファイル、および .action ファイル内の ROS 定義からカスタム メッセージを生成します。名前と値の引数 CreateShareableFile を使用して、生成したカスタム メッセージの共有可能な ZIP アーカイブを作成します。

この ZIP アーカイブを使用してカスタム メッセージを別のマシンに登録する方法の詳細については、rosRegisterMessagesを参照してください。

rosgenmsg(genDir,CreateShareableFile=true)
Identifying message files in folder 'C:/test/rosCustomMessages'.Done.
Creating a Python virtual environment.Done.
Adding required Python packages to virtual environment.Done.
Copying include folders.Done.
Copying libraries.Done.
Validating message files in folder 'C:/test/rosCustomMessages'.Done.
[1/1] Generating MATLAB interfaces for custom message packages... Done.
Running catkin build in folder 'C:/test/rosCustomMessages/matlab_msg_gen_ros1/win64'.
Build in progress. This may take several minutes...
Build succeeded.build log
Generating zip file in the folder 'C:/test/rosCustomMessages'.Done.
 
To use the custom messages, follow these steps:
 
1. Add the custom message folder to the MATLAB path by executing:
 
addpath('C:\test\rosCustomMessages\matlab_msg_gen_ros1\win64\install\m')
savepath
 
2. Refresh all message class definitions, which requires clearing the workspace, by executing:
 
clear classes
rehash toolboxcache
 
3. Verify that you can use the custom messages. 
   Enter "rosmsg list" and ensure that the output contains the generated
   custom message types.
 

rosmsg list」と入力して、新しいカスタム メッセージの作成を確認します。

入力引数

すべて折りたたむ

ROS メッセージ パッケージへのパス。string スカラーまたは文字ベクトルとして指定します。親フォルダーはパッケージ フォルダーを含む必要があります。これらのフォルダーには、メッセージ定義用の .msg ファイルがある /msg という名前のフォルダー、サービス定義用の .srv ファイルがある /srv という名前のフォルダー、アクション定義用の .action ファイルがある /action という名前のフォルダーがあります。

例: 'C:/test/rosCustomMessages'

データ型: char | string

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。

R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name引用符で囲みます。

例: BuildConfiguration='fasterruns'

ビルド構成。次の値のいずれかとして指定します。

  • 'fasterbuilds' — ビルド時間を短縮するためにコンパイラを最適化して、メッセージ ライブラリをビルドします。これは既定の設定です。

  • 'fasterruns' — 実行速度を高速化するためにコンパイラを最適化して、メッセージ ライブラリをビルドします。

例: rosgenmsg('C:/test/rosCustomMessages',BuildConfiguration='fasterruns')

データ型: char | string

共有可能な ZIP アーカイブを生成するオプション。数値あるいは logical の 1 (true) または 0 (false) として指定します。

この引数を 1 (true) として指定した場合、この関数は、インストール フォルダーを matlab_msg_gen_ros1 フォルダーに圧縮して ZIP アーカイブを作成します。このファイルは、同じプラットフォームで実行されていて同じ MATLAB バージョンを使用している別のマシンで使用できます。

この引数を 0 (false) として指定した場合、この関数は ZIP アーカイブを作成しません。

例: rosgenmsg('C:/test/rosCustomMessages',CreateShareableFile=true)

データ型: logical

制限

MATLAB Compiler™ ソフトウェアでは、ROS カスタム メッセージと関数 rosgenmsg はサポートされません。

バージョン履歴

R2019b で導入