receive
説明
[
は、上記構文の任意の引数を使用して、メッセージが正常に受信されたかどうかを示す msg
,status
,statustext
] = receive(___)status
と、status
に関する追加情報を取得する statustext
を返します。指定したタイムアウト内にメッセージが受信されないなどのエラー条件が発生した場合、status
は false
となり、この関数はエラーを表示しません。
例
サブスクライバーを作成して ROS からデータを取得
ROS ネットワークに接続します。サンプルの ROS ネットワークを設定します。'/scan'
トピックはネットワーク上でパブリッシュされています。
rosinit
Launching ROS Core... Done in 0.72523 seconds. Initializing ROS master on http://172.30.241.81:51573. Initializing global node /matlab_global_node_35713 with NodeURI http://dcc601040glnxa64:41253/ and MasterURI http://localhost:51573.
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_35713 with NodeURI http://dcc601040glnxa64:41253/ and MasterURI http://localhost:51573. Shutting down ROS master on http://172.30.241.81:51573.
入力引数
sub
— ROS サブスクライバー
Subscriber
オブジェクト ハンドル
ROS サブスクライバー。Subscriber
オブジェクト ハンドルとして指定します。サブスクライバーは rossubscriber
を使用して作成できます。
timeout
— メッセージ受信のタイムアウト
スカラー (秒単位)
メッセージ受信のタイムアウト。秒単位のスカラーとして指定します。
出力引数
msg
— ROS メッセージ
Message
オブジェクト ハンドル | 構造体
ROS メッセージ。Message
オブジェクト ハンドルまたは構造体として返されます。
メモ
将来のリリースでは、ROS Toolbox は ROS メッセージ用のオブジェクトではなくメッセージ構造体を使用します。
現時点でメッセージ構造体を使用する場合、名前と値の引数 "DataFormat"
を "struct"
に設定します。詳細については、ROS メッセージ構造体を参照してください。
status
— メッセージ受信のステータス
logical
スカラー
メッセージ受信のステータス。logical
スカラーとして返されます。メッセージが受信されない場合、ステータスは false
となります。
メモ
コード生成で receive を使用する場合は、status
出力引数を使用します。これにより実行時エラーが回避され、代わりにステータスが出力されますが、これは呼び出しコードでの対処が可能です。
statustext
— メッセージ受信ステータスに関連付けられたステータス テキスト
文字ベクトル
メッセージ受信に関連付けられたステータス テキスト。以下のいずれかとして返されます。
'success'
— メッセージは正常に受信されました。'timeout'
— メッセージは指定したタイムアウト内に受信されませんでした。'unknown'
— 原因不明のエラーによりメッセージは受信されませんでした。
ヒント
コード生成では以下を行います。
エントリポイント関数で
receive
を呼び出す場合は、status
出力引数を使用します。これにより実行時エラーが回避され、代わりにメッセージ受信のステータスが出力されますが、これは呼び出しコードでの対処が可能です。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用に関するメモと制限:
struct
メッセージでのみサポートされます。メッセージ受信ステータスを監視して呼び出しコードで対処するには、
status
出力引数を使用します。これにより、メッセージが受信されない場合に実行時エラーを回避することができます。
バージョン履歴
R2019b で導入R2021a: ROS メッセージ構造体
これで、メッセージ オブジェクトのプロパティと一致するフィールドをもつ構造体としてメッセージを作成できます。通常、構造体を利用すると 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 コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)