Main Content

receive

新しい ROS メッセージを待機

説明

msg = receive(sub) は、MATLAB® が指定のサブスクライバー sub からトピック メッセージを受信するのを待機し、それを msg として返します。

msg = receive(sub,timeout) は、メッセージを待機する秒数を timeout で指定します。タイムアウトの制限内にメッセージが受信されない場合、この関数はエラーを表示します。

[msg,status,statustext] = receive(___) は、上記構文の任意の引数を使用して、メッセージが正常に受信されたかどうかを示す status と、status に関する追加情報を取得する statustext を返します。指定したタイムアウト内にメッセージが受信されないなどのエラー条件が発生した場合、statusfalse となり、この関数はエラーを表示しません。

すべて折りたたむ

ROS ネットワークに接続します。サンプルの ROS ネットワークを設定します。'/scan' トピックはネットワーク上でパブリッシュされています。

rosinit
Launching ROS Core...
Done in 1.0867 seconds.
Initializing ROS master on http://172.30.86.63:60249.
Initializing global node /matlab_global_node_12669 with NodeURI http://dcc724612glnxa64:45795/ and MasterURI http://localhost:60249.
exampleHelperROSCreateSampleNetwork

メッセージ構造体を使用して、'/scan' トピックのサブスクライバーを作成します。サブスクライバーがマスターに登録するまで待機します。

sub = rossubscriber('/scan','DataFormat','struct');
pause(1);

サブスクライバーから ROS メッセージ構造体としてデータを受信します。10 秒のタイムアウトを指定します。

[msg2,status,statustext] = receive(sub,10)
msg2 = struct with fields:
       MessageType: 'sensor_msgs/LaserScan'
            Header: [1x1 struct]
          AngleMin: -0.5467
          AngleMax: 0.5467
    AngleIncrement: 0.0017
     TimeIncrement: 0
          ScanTime: 0.0330
          RangeMin: 0.4500
          RangeMax: 10
            Ranges: [640x1 single]
       Intensities: []

status = logical
   1

statustext = 
'success'

サンプル ネットワークで使用されているタイマーをシャットダウンします。

exampleHelperROSShutDownSampleNetwork

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

rosshutdown
Shutting down global node /matlab_global_node_12669 with NodeURI http://dcc724612glnxa64:45795/ and MasterURI http://localhost:60249.
Shutting down ROS master on http://172.30.86.63:60249.

入力引数

すべて折りたたむ

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

メッセージ受信のタイムアウト。秒単位のスカラーとして指定します。

出力引数

すべて折りたたむ

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

メモ

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

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

メッセージ受信のステータス。logical スカラーとして返されます。メッセージが受信されない場合、ステータスは false となります。

メモ

コード生成のエントリポイント関数で receive を使用する場合は、status 出力引数を使用します。これにより実行時エラーが回避され、代わりにステータスが出力されますが、これは呼び出しコードでの対処が可能です。

メッセージ受信に関連付けられたステータス テキスト。以下のいずれかとして返されます。

  • 'success' — メッセージは正常に受信されました。

  • 'timeout' — メッセージは指定したタイムアウト内に受信されませんでした。

  • 'unknown' — 原因不明のエラーによりメッセージは受信されませんでした。

ヒント

コード生成では以下を行います。

  • エントリポイント関数で receive を呼び出す場合は、status 出力引数を使用します。これにより実行時エラーが回避され、代わりにメッセージ受信のステータスが出力されますが、これは呼び出しコードでの対処が可能です。

拡張機能

バージョン履歴

R2019b で導入

すべて展開する