receive
新しい ROS メッセージを待機
説明
は、MATLAB® が指定のサブスクライバー msg = receive(sub)sub からトピック メッセージを受信するのを待機し、それを msg として返します。あるいは、ROS ネットワークでのメッセージのパブリッシュに合わせて、より信頼性の高い方法で継続的にメッセージを受信するには、rossubscriber オブジェクトでコールバック関数を使用することを検討してください。
[ は、上記構文の任意の引数を使用して、メッセージが正常に受信されたかどうかを示す msg,status,statustext] = receive(___)status と、status に関する追加情報を取得する statustext を返します。指定したタイムアウト内にメッセージが受信されないなどのエラー条件が発生した場合、status は false となり、この関数はエラーを表示しません。
例
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出力引数を使用します。これにより実行時エラーが回避され、代わりにメッセージ受信のステータスが出力されますが、これは呼び出しコードでの対処が可能です。
拡張機能
使用上の注意および制限:
structメッセージでのみサポートされます。メッセージ受信ステータスを監視して呼び出しコードで対処するには、
status出力引数を使用します。これにより、メッセージが受信されない場合に実行時エラーを回避することができます。
バージョン履歴
R2019b で導入これで、メッセージ オブジェクトのプロパティと一致するフィールドをもつ構造体としてメッセージを作成できます。通常、構造体を利用すると ROS メッセージの作成、更新、使用のパフォーマンスが向上しますが、設定時にメッセージのフィールドが検証されなくなります。メッセージ タイプと、構造体から取得した対応するフィールド値は、ネットワーク経由で送信されたときに検証されます。
ROS メッセージを構造体として使用するには、パブリッシャー、サブスクライバー、またはその他の ROS オブジェクトの作成時に名前と値の引数 "DataFormat" を使用します。これらのオブジェクトから生成されたすべてのメッセージで構造体が利用されます。
pub = rospublisher("/scan","sensor_msgs/LaserScan","DataFormat","struct") msg = rosmessage(pub)
また、メッセージを直接構造体として作成することもできますが、パブリッシャー、サブスクライバー、またはその他の ROS オブジェクトについても必ずデータ形式を "struct" として指定してください。現時点では、ROS オブジェクトは既定でメッセージ オブジェクトを使用します。
msg = rosmessage("/scan","sensor_msgs/LaserScan","DataFormat","struct") ... pub = rospublisher("/scan","sensor_msgs/LaserScan","DataFormat","struct")
将来のリリースでは、ROS メッセージは既定で構造体を使用し、ROS メッセージ オブジェクトは削除されます。
詳細については、Improve Performance of ROS Using Message Structuresを参照してください。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)