メインコンテンツ

MATLAB での ROS カスタム メッセージの生成

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

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

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

ROS custom messages folder structure

このパッケージにはカスタム メッセージ タイプ 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 custom messages creation