主要内容

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

活性氧のパブリッシャーおよびサブスクライバーとのデータ交換

活性氧ノードがデータを交換するための主なメカニズムは、"メッセージ"を送受信することです。メッセージは "トピック"上で送信され、各トピックは 活性氧ネットワーク内で一意の名前をもちます。あるノードが情報を共有する場合、そのノードは "パブリッシャー"を使用してデータをトピックに送信します。その情報を受信するノードは、同じトピックの "サブスクライバー"を使用します。各トピックには一意の名前の他に "メッセージ タイプ"もあり、そのトピックで送信可能なメッセージのタイプが決まります。

このパブリッシャーとサブスクライバーの通信には、次のような特性があります。

  • トピックは多元多の通信に使パブリッシャーますトピック。

  • パブリッシャーとサブスクライバーはトピックささ,任意の顺序でないます。

トピック,パブリッシャーパブリッシャーおよびサブスクライバーの概念を次の図に示し示し

この例では、活性氧ネットワーク内でトピックにパブリッシュおよびサブスクライブする方法を説明します。また、次の方法も示します。

  • 新しいメッセージを受信するまで待機する

  • コールバックを使用して、新しいメッセージをバックグラウンドで処理する

前提条件:活性氧入門活性氧ネットワークへの接続

サブスクライブしてメッセージを待つ

罗斯尼特コマンドコマンド使用ししMATLAB®でROSマスターを起します。

罗斯尼特
启动ROS核心......在0.9817秒内完成。初始化ROS Master http://192.168.0.10:50042。使用nodeuri初始化全局节点/ matlab_global_node_90180 http:// bat1002609glnxa64:37457 /

提供された補助関数例如帮助错误创建SampleNetwork。を使用して、複数のパブリッシャーおよびサブスクライバーを含むサンプルの 活性氧ネットワークを作成します。

示例帮助错误创建SampleNetwork

叛逆列表をを用して,使用可能なを确认します。

叛逆列表
/姿势/旋转/扫描/tf

吻视信息を使用して、/扫描トピックにパブリッシュしているノードがあるかどうかをチェックします。以下のコマンドは、节点3がパブリッシュしていることを示しています。

叛逆信息/扫描
类型:传感器\ msgs/激光扫描发布服务器:*/节点\ 3(http://bat1002609glnxa64:36879/)订阅服务器:*/node_1(http://bat1002609glnxa64:39207/)*/node_2(http://bat1002609glnxa64:45459/)

罗丝订户をを用して/扫描トピックトピックをサブスクライブしますこのケースケースように,rosネットワーク内にトピックが既にする场场罗丝订户で自動的に検出されるため、指定する必要はありません。

激光订户(“/扫描”);暂停(2)

接收を使用して新しいメッセージを待ちます (2 番目の引数は秒単位のタイムアウト)。出力斯堪的数据に,诚信したメッセージが含まれます。

Scandata =接收(激光,10)
Scanda=ROS激光扫描消息,其属性为:MessageType:'sensor_msgs/LaserScan'头:[1x1头]角度最小值:-0.5216角度最大值:0.5243角度增量:0.0016时间增量:0扫描时间:0.0330范围最小值:0.4500范围最大值:10范围:[640x1单一]强度:[0x1单一]使用showdetails显示消息内容

一部のメッセージ タイプには、可視化機能が関連付けられています。激光扫描メッセージの場合は、罗斯普兰がスキャン データをプロットします。最大范围の名前と値のペアは、最大プロット範囲を指定します。

图情节(Scandata,'minimumerrange'7)

图包含轴。带标题激光扫描的轴包含类型线的物体。

コールバック関数を使用したサブスクライブ

接收をを用してデータを取得するににににににとき呼び出される受しとき呼び出される关键词指定できできますますますますますますますによりがにのをているににのmatlabコードを実の。のサブスクライバーを使使使する合并は,コールバックが不可能です。

コールバック関数示例HelpErrorSposeCallbackを使用して、/姿势トピックをサブスクライブします。

robotpose=rossubscriber(“/摆姿势”,@ExampleHelpErrorSposeCallback)
robotpose=具有以下属性的订户:TopicName:“/pose”最新消息:[0x1 Twist]消息类型:'geometry\u msgs/Twist'缓冲区大小:1 NewMessageFcn:@ExampleHelpErrorSpoSecCallback数据格式:'object'

メインのワークスペースとコールバック関数の間でデータを共有する方法の 1.つは、グローバル変数を使用することです。2.つのグローバル変数销售时点情报系统东方を定義します。

全球的销售时点情报系统全球的东方

グローバル変数销售时点情报系统および东方は,/姿势トピックで新しいメッセージ データが受信されたときに、関数示例HelpErrorSposeCallback内で代入されます。

数秒間待機して、サブスクライバーがメッセージを受信できることを確認します。変数销售时点情报系统および东方には、常に最新の位置と向きのデータが保存されます。

暂停(2)位置
位置=1×3-0.1187 -0.2222 0.0066
东方
定向=1×3-0.1811 0.2013 0.1295

コマンド ラインで销售时点情报系统东方を数回力量する,値が継続的に更新されることを确认できでき。

サブスクライバー変数をクリアして 姿势サブスクライバーを停止します。

清除机器人姿势

メモ: グローバル変数を使用する以外にも、コールバック関数から情報を抽出する方法があります。たとえば、ハンドル オブジェクトを追加の引数としてコールバック関数に渡すことができます。コールバック関数の定義の詳細については、コールバック定義ドキュメンテーションを参照してください。

メッセージのパブリッシュ

活性氧文字列メッセージを/喋喋不休トピックに送信するパブリッシャーを作成します (使用基本ROS消息を参照)。

chatterpub=rospublisher(“/喋喋不休”,“标准msgs/字符串”)
Chatterpub =具有属性的Publisher:主题名称:'/ Chatter'numsubScribers:0 islatching:1 MessageType:'std_msgs / string'dataformat:'对象'
暂停(2)%等待以确保已注册发布服务器

/喋喋不休トピックに送信する 活性氧メッセージを作成して入力します。

chattermsg = rosmessage(Chatterpub);chattermsg.data =“你好,世界”
chattermsg=ROS字符串消息,属性为:MessageType:'std_msgs/String'数据:'hello world'使用showdetails显示消息内容

罗斯托普列表を使用して、活性氧ネットワークで/喋喋不休トピックが使用可能であることを確認します。

叛逆列表
/颤振/姿势/旋转/扫描/tf

/喋喋不休トピックのサブスクライバーを定义します。新しいメッセージを受信すると示例HelpErrorSchatterCallbackが呼び出され、メッセージ内の文字列の内容が表示されます。

chattersub=rossubscriber(“/喋喋不休”,@exampleHelperROSChatterCallback)
Chattersub =具有属性的订阅者:主题名称:'/ chatter'最新名称:[0x1字符串] messageType:'std_msgs / string'buffersize:1 newmessagefcn:@examplehelperroschattercallback dataformat:'对象'

/喋喋不休トピックにメッセージをパブリッシュします。サブスクライバーのコールバックによって文字列が表示されます。

发送(Chatterpub,Chattermsg)暂停(2)
ans=‘你好,世界’

文字列メッセージをパブリッシュするとすぐに、関数示例HelpErrorSchatterCallbackが呼び出されました。

ROSネットワークのシャットダウン

サンプルノード,パブリッシャーおよびサブスクライバーをrosネットワークから削除し。销售时点情报系统および朝向をクリアします。

examplehelperrosshutdownsamplenetwork clear全球的销售时点情报系统东方

活性氧マスターをシャットダウンしてグローバル ノードを削除します。

罗斯赫顿
使用NodeURI关闭全局节点/matlab_全局节点_90180http://bat1002609glnxa64:37457/ 正在关闭上的ROS主机http://192.168.0.10:50042.

次のステップ