メインコンテンツ

receive

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

説明

msg = receive(sub) は、MATLAB® が指定のサブスクライバー sub からトピック メッセージを受信するのを待機し、それを msg として返します。あるいは、ROS ネットワークでのメッセージのパブリッシュに合わせて、より信頼性の高い方法で継続的にメッセージを受信するには、rossubscriber オブジェクトでコールバック関数を使用することを検討してください。

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

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

すべて折りたたむ

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

rosinit
Launching ROS Core...
Status before launching ros core :0
result before launching ros core: Microsoft.Management.Serv     2068 Services                   0    109,360 K
Microsoft.SharePoint.exe      9248 Console                    1    376,460 K

......Done in 7.1031 seconds.
* Inside getProcessPID function *
Process Name: rosmaster  - rosmaster  --core -p 54700 -w 3
Status before getting PID :0
Result before getting PID :Microsoft.Management.Serv     2068 Services                   0    109,328 K
Microsoft.SharePoint.exe      9248 Console                    1    376,460 K
WindowsTerminal.exe          10860 Console                    1     70,124 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     30,016 K

Result: 
WindowsTerminal.exe          10860 Console                    1     70,128 K

Status: 0
PID obtained: 10860
Status after getting PID :0
Result after getting PID :Microsoft.Management.Serv     2068 Services                   0    109,328 K
Microsoft.SharePoint.exe      9248 Console                    1    376,460 K
WindowsTerminal.exe          10860 Console                    1     70,128 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     30,016 K

* Exiting getProcessPID function *
Status after launching ros core :0
result after launching ros core: Microsoft.Management.Serv     2068 Services                   0    109,356 K
Microsoft.SharePoint.exe      9248 Console                    1    376,460 K
WindowsTerminal.exe          10860 Console                    1     70,128 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     30,016 K

Status before deleting node :0
Result before deleting node :Microsoft.Management.Serv     2068 Services                   0    109,360 K
Microsoft.SharePoint.exe      9248 Console                    1    376,460 K
WindowsTerminal.exe          10860 Console                    1     70,128 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     30,124 K
libmwros1server.exe          21352 Console                    1     29,488 K

Status after deleting node :0
Result after deleting node :Microsoft.Management.Serv     2068 Services                   0    109,356 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K
WindowsTerminal.exe          10860 Console                    1     70,128 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     30,084 K

Initializing ROS master on http://172.31.78.36:54700.
Initializing global node /matlab_global_node_41904 with NodeURI http://vdi-ah2wsp-001:64594/ and MasterURI http://localhost:54700.
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: [1×1 struct]
          AngleMin: -0.5467
          AngleMax: 0.5467
    AngleIncrement: 0.0017
     TimeIncrement: 0
          ScanTime: 0.0330
          RangeMin: 0.4500
          RangeMax: 10
            Ranges: [640×1 single]
       Intensities: []

status = logical
   1

statustext = 
'success'

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

exampleHelperROSShutDownSampleNetwork
Status before deleting node :0
Result before deleting node :Microsoft.Management.Serv     2068 Services                   0    109,360 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K
WindowsTerminal.exe          10860 Console                    1     70,132 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     30,316 K
libmwros1server.exe          12768 Console                    1     32,476 K
libmwros1server.exe          16724 Console                    1     33,272 K
libmwros1server.exe           8552 Console                    1     33,128 K
libmwros1server.exe          10272 Console                    1     32,844 K

Status after deleting node :0
Result after deleting node :Microsoft.Management.Serv     2068 Services                   0    109,328 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K
WindowsTerminal.exe          10860 Console                    1     70,132 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     30,276 K
libmwros1server.exe          12768 Console                    1     32,480 K
libmwros1server.exe           8552 Console                    1     33,128 K
libmwros1server.exe          10272 Console                    1     32,844 K

Status before deleting node :0
Result before deleting node :Microsoft.Management.Serv     2068 Services                   0    109,328 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K
WindowsTerminal.exe          10860 Console                    1     70,132 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     30,276 K
libmwros1server.exe          12768 Console                    1     32,500 K
libmwros1server.exe           8552 Console                    1     33,128 K
libmwros1server.exe          10272 Console                    1     32,844 K

Status after deleting node :0
Result after deleting node :Microsoft.Management.Serv     2068 Services                   0    109,356 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K
WindowsTerminal.exe          10860 Console                    1     70,132 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     30,236 K
libmwros1server.exe          12768 Console                    1     32,500 K
libmwros1server.exe          10272 Console                    1     32,844 K

Status before deleting node :0
Result before deleting node :Microsoft.Management.Serv     2068 Services                   0    109,356 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K
WindowsTerminal.exe          10860 Console                    1     70,132 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     30,236 K
libmwros1server.exe          12768 Console                    1     32,500 K
libmwros1server.exe          10272 Console                    1     32,844 K

Status after deleting node :0
Result after deleting node :Microsoft.Management.Serv     2068 Services                   0    109,356 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K
WindowsTerminal.exe          10860 Console                    1     70,132 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     31,448 K
libmwros1server.exe          12768 Console                    1     32,552 K

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

rosshutdown
Shutting down global node /matlab_global_node_41904 with NodeURI http://vdi-ah2wsp-001:64594/ and MasterURI http://localhost:54700.
Status before deleting node :0
Result before deleting node :Microsoft.Management.Serv     2068 Services                   0    109,356 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K
WindowsTerminal.exe          10860 Console                    1     70,132 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     31,448 K
libmwros1server.exe          12768 Console                    1     32,576 K

Status after deleting node :0
Result after deleting node :Microsoft.Management.Serv     2068 Services                   0    109,328 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K
WindowsTerminal.exe          10860 Console                    1     70,132 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     31,408 K

Shutting down ROS master on http://172.31.78.36:54700.
Status before deleting core :0
Result before deleting core :Microsoft.Management.Serv     2068 Services                   0    109,328 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K
WindowsTerminal.exe          10860 Console                    1     70,132 K
rosmaster.exe                21056 Console                    1      4,968 K
python.exe                   19980 Console                    1      4,736 K
python.exe                   13016 Console                    1     31,420 K

* Inside killROSProcess function *
Status after Process Killed: 0
Result after Process Killed: SUCCESS: Sent termination signal to the process with PID 10860.

Status after deleting core :0
Result after deleting core :Microsoft.Management.Serv     2068 Services                   0    109,328 K
Microsoft.SharePoint.exe      9248 Console                    1    376,580 K

* Exiting killROSProcess function *

入力引数

すべて折りたたむ

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

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

出力引数

すべて折りたたむ

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

メモ

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

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

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

メモ

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

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

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

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

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

ヒント

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

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

拡張機能

すべて展開する

バージョン履歴

R2019b で導入

すべて展開する