Main Content

rosmessage

ROS メッセージの作成

R2019b 以降

説明

msg = rosmessage(messagetype) は、メッセージ タイプをもつ空の ROS メッセージ オブジェクトを作成します。messagetype string スカラーでは、大文字と小文字が区別され、部分一致は受け入れられません。rosmsg("list") を呼び出すことで与えられたリスト上のメッセージと一致していなければなりません。

メモ

将来のリリースでは、ROS Toolbox は ROS メッセージ用のオブジェクトではなくメッセージ構造体を使用します。

現時点でメッセージ構造体を使用する場合、名前と値の引数 "DataFormat""struct" に設定します。詳細については、ROS メッセージ構造体を参照してください。

msg = rosmessage(pub) は、pub によってパブリッシュされたトピックで決定される空白のメッセージを作成します。

msg = rosmessage(sub) は、sub のサブスクライブされるトピックで決定される空白のメッセージを作成します。

msg = rosmessage(client) は、client のサービス タイプまたはアクション タイプで決定される空白のメッセージを作成します。

msg = rosmessage(server) は、server のサービス タイプまたはアクション タイプで決定される空白のメッセージを作成します。

msg = rosmessage(___,"DataFormat","struct") は、前述の構文にある任意の引数を指定して、空のメッセージをメッセージ構造体として作成します。詳細については、ROS メッセージ構造体を参照してください。

すべて折りたたむ

ROS メッセージを std_msgs/String メッセージ タイプの構造体として作成します。

strMsg = rosmessage("std_msgs/String","DataFormat","struct")
strMsg = struct with fields:
    MessageType: 'std_msgs/String'
           Data: ''

ROS マスターを起動します。

rosinit
Launching ROS Core...
Done in 0.79122 seconds.
Initializing ROS master on http://172.30.241.81:56243.
Initializing global node /matlab_global_node_92672 with NodeURI http://dcc601040glnxa64:43053/ and MasterURI http://localhost:56243.

std_msgs/String メッセージ タイプの /chatter トピックのパブリッシャーを作成します。名前と値の引数 "DataFormat" を ROS メッセージ構造体に設定します。

chatpub = rospublisher("/chatter","std_msgs/String","DataFormat","struct");

送信するメッセージを作成します。文字ベクトルを使用して Data プロパティを指定します。

msg = rosmessage(chatpub);
msg.Data = 'test phrase';

パブリッシャー経由でメッセージを送信します。

send(chatpub,msg);

ROS ネットワークをシャットダウンします。

rosshutdown
Shutting down global node /matlab_global_node_92672 with NodeURI http://dcc601040glnxa64:43053/ and MasterURI http://localhost:56243.
Shutting down ROS master on http://172.30.241.81:56243.

複数のメッセージを保存する構造体配列を作成できます。配列は他の配列と同様にインデックス可能です。各オブジェクトのプロパティを変更するか、ドット表記を使って各要素から特定のプロパティにアクセスすることができます。

2 つのメッセージの配列を作成します。名前と値の引数 DataFormat を指定して、ROS メッセージ構造体を使用します。

blankMsg = rosmessage("std_msgs/String","DataFormat","struct")
blankMsg = struct with fields:
    MessageType: 'std_msgs/String'
           Data: ''

msgArray = [blankMsg blankMsg]
msgArray=1×2 struct array with fields:
    MessageType
    Data

データを配列の個々のメッセージ フィールドに代入します。

msgArray(1).Data = 'Some string'; 
msgArray(2).Data = 'Other string';

メッセージのすべての Data フィールドを cell 配列に読み取ります。

allData = {msgArray.Data}
allData = 1x2 cell
    {'Some string'}    {'Other string'}

ROS メッセージをオブジェクトとして使用して配列に事前割り当てを行うには、関数 repmat の代わりに関数 arrayfun または cellfun を使用します。これらの関数は、ハンドル クラスのオブジェクトまたは cell 配列を正しく作成します。

メモ: 将来のリリースでは、ROS メッセージ オブジェクトは削除されます。ROS メッセージを構造体として使用し、構造体配列を利用するには、関数 rosmessage を呼び出すときに名前と値のペア DataFormat を指定します。

ROS メッセージのオブジェクト配列に事前割り当てを行います。

msgArray = arrayfun(@(~) rosmessage("std_msgs/String"),zeros(1,50));

ROS メッセージの cell 配列に事前割り当てを行います。

msgCell = cellfun(@(~) rosmessage("std_msgs/String"),cell(1,50),"UniformOutput",false);

入力引数

すべて折りたたむ

メッセージ タイプ。string スカラーまたは文字ベクトルとして指定します。string は大文字と小文字が区別され、部分一致は受け入れられません。rosmsg("list") を呼び出すことで与えられたリスト上のメッセージと一致していなければなりません。

ROS パブリッシャー。Publisher オブジェクト ハンドルとして指定します。rospublisher を使用してオブジェクトを作成できます。

ROS サブスクライバー。Subscriber オブジェクト ハンドルとして指定します。rossubscriber を使用してオブジェクトを作成できます。

ROS サービス クライアントまたはアクション クライアント。ServiceClient または ActionClient オブジェクト ハンドルとして指定します。それぞれ rossvcclient またはrosactionclient を使用して、サービス クライアント オブジェクトまたはアクション クライアント オブジェクトを作成できます。

ROS サービス サーバーまたはアクション サーバー。ServiceServer または ActionServer オブジェクト ハンドルとして指定します。それぞれ rossvcserver またはrosactionserver を使用して、サービス サーバー オブジェクトまたはアクション サーバー オブジェクトを作成できます。

出力引数

すべて折りたたむ

ROS メッセージ。Message オブジェクト ハンドルまたは構造体として返されます。

拡張機能

バージョン履歴

R2019b で導入

すべて展開する