最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

rospublisher

メッセージをトピック上にパブリッシュ

説明

rospublisher を使用して、ROS ネットワーク経由でメッセージを送信するための ROS パブリッシャーを作成します。ROS メッセージを作成するには、rosmessage を使用します。これらのメッセージを、関数 send を使用して ROS パブリッシャー経由で送信します。

この関数によって作成される Publisher オブジェクトは、ROS ネットワーク上のパブリッシャーを表します。このオブジェクトは、指定されたトピック上に特定のメッセージ タイプをパブリッシュします。Publisher オブジェクトがこのトピックに対してメッセージをパブリッシュすると、そのトピックのすべてのサブスクライバーがこのメッセージを受信します。同じトピックが、複数のパブリッシャーとサブスクライバーをもつことができます。

パブリッシャーは、ROS マスター上のトピック リストからトピックのメッセージ タイプを取得します。MATLAB® グローバル ノードがそのトピック上にメッセージをパブリッシュすると、そのトピックをサブスクライブしている ROS ノードがそれらのメッセージを受信します。トピックが ROS マスターのトピック リスト上にない場合、この関数はエラー メッセージを表示します。ROS マスターのトピック リストに一致するトピックが既に含まれている場合、ROS マスターは、そのトピックのパブリッシャーのリストに MATLAB グローバル ノードを追加します。使用可能なトピック名のリストを確認するには、MATLAB コマンド プロンプトで、rostopic list と入力します。

Publisher オブジェクトは、関数 rospublisher を使用するか、robotics.ros.Publisher を呼び出すことによって作成できます。

  • rospublisher は、rosinit を使用しているグローバル ノードでのみ機能します。引数としてノード オブジェクト ハンドルは必要ありません。

  • robotics.ros.Publisher は、robotics.ros.Node を使用して作成された追加のノードで機能します。最初の引数としてノード オブジェクト ハンドルが必要です。

作成

構文

pub = rospublisher(topicname)
pub = rospublisher(topicname,msgtype)
pub = rospublisher(___,Name,Value)
[pub,msg] = rospublisher(___)
pub = robotics.ros.Publisher(node,topicname)
pub = robotics.ros.Publisher(node,topicname,type)
pub = robotics.ros.Publisher(___, "IsLatching",value)

説明

pub = rospublisher(topicname) は、特定のトピック名のためのパブリッシャーを作成し、TopicName プロパティを設定します。トピックは、確立された MessageType と共に ROS マスターのトピック リスト上に既に存在しなければなりません。

pub = rospublisher(topicname,msgtype) は、トピックのためのパブリッシャーを作成し、そのトピックを ROS マスターのトピック リストに追加します。入力は、パブリッシャーの TopicName プロパティと MessageType プロパティに設定されます。トピックが既に存在し、msgtype が ROS マスターのトピック リスト上のトピック タイプと異なる場合、この関数はエラー メッセージを表示します。

pub = rospublisher(___,Name,Value) は、これまでの構文のいずれかの引数を使用して 1 つ以上の Name,Value ペア引数によって指定された追加オプションを提供します。Name はプロパティ名で、Value は対応する値です。

[pub,msg] = rospublisher(___) は、メッセージ msg を返します。このメッセージはパブリッシャー pub を使用して送信できます。メッセージは既定値で初期化されます。関数 rosmessage を使用して ROS メッセージを取得することもできます。

pub = robotics.ros.Publisher(node,topicname) は、topicname という名前のトピックのパブリッシャーを作成します。node は、このパブリッシャーの接続先の robotics.ros.Node オブジェクト ハンドルです。node[] として指定されている場合、パブリッシャーはグローバル ノードに接続しようとします。

pub = robotics.ros.Publisher(node,topicname,type) は、指定されたメッセージ タイプ type でパブリッシャーを作成します。トピックが既に存在する場合、MATLAB はメッセージ タイプをチェックして、入力タイプが異なる場合はエラーを表示します。ROS マスターのトピック リストに一致するトピックが既に含まれている場合、ROS マスターは、そのトピックのパブリッシャーのリストに MATLAB グローバル ノードを追加します。

pub = robotics.ros.Publisher(___, "IsLatching",value) は、パブリッシャーがラッチしているかどうかを boolean value で指定します。ラッチしている場合、パブリッシャーは、最後に送信されたメッセージを保存して、新しいサブスクライバーに送信します。既定では、IsLatching が有効になっています。

プロパティ

すべて展開する

このプロパティは読み取り専用です。

パブリッシュされるトピックの名前。string スカラーまたは文字ベクトルとして指定します。トピックが存在しない場合、オブジェクトは、関連付けられているメッセージ タイプを使用してトピックを作成します。

例: "/chatter"

データ型: char

このプロパティは読み取り専用です。

パブリッシュされるメッセージのメッセージ タイプ。string スカラーまたは文字ベクトルとして指定します。このメッセージ タイプとトピックとの関連付けは維持されるため、新しくパブリッシュされるメッセージに使用しなければなりません。

例: "std_msgs/String"

データ型: char

このプロパティは読み取り専用です。

パブリッシャーがラッチしているかどうかのインジケーター。true または false として指定します。ラッチしているパブリッシャーは、最後に送信されたメッセージを保存し、それを新しいサブスクライバーに再送信します。

データ型: logical

このプロパティは読み取り専用です。

パブリッシュされるトピックのサブスクライバーの数。整数として指定します。

データ型: double

オブジェクト関数

sendPublish ROS message to topic
rosmessageCreate ROS messages

すべて折りたたむ

ROS ネットワークに接続します。

rosinit
Initializing ROS master on http://bat6310glnxa64:36599/.
Initializing global node /matlab_global_node_84635 with NodeURI http://bat6310glnxa64:34303/

'std_msgs/String' メッセージ タイプの '/chatter' トピックのパブリッシャーを作成します。

chatpub = rospublisher('/chatter','std_msgs/String');

送信するメッセージを作成します。Data プロパティを指定します。

msg = rosmessage(chatpub);
msg.Data = 'test phrase';

パブリッシャー経由でメッセージを送信します。

send(chatpub,msg);

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

rosshutdown
Shutting down global node /matlab_global_node_84635 with NodeURI http://bat6310glnxa64:34303/
Shutting down ROS master on http://bat6310glnxa64:36599/.

ROS パブリッシャーを作成して、robotics.ros.Publisher オブジェクトの関連プロパティを表示します。サブスクライバーを追加して、更新されたプロパティを表示します。

ROS マスターを起動します。

rosinit
Initializing ROS master on http://bat5225glnxa64:35703/.
Initializing global node /matlab_global_node_58982 with NodeURI http://bat5225glnxa64:42423/

パブリッシャーを作成して、そのプロパティを表示します。

pub = rospublisher('/chatter','std_msgs/String');

topic = pub.TopicName
topic = 
'/chatter'
subCount = pub.NumSubscribers
subCount = 0

パブリッシャー トピックをサブスクライブして、NumSubscribers プロパティ内の変更内容を表示します。

sub = rossubscriber('/chatter');
pause(1)

subCount = pub.NumSubscribers
subCount = 1
rosshutdown
Shutting down global node /matlab_global_node_58982 with NodeURI http://bat5225glnxa64:42423/
Shutting down ROS master on http://bat5225glnxa64:35703/.

ROS ネットワークに接続します。

rosinit
Initializing ROS master on http://bat800212glnxa64:35317/.
Initializing global node /matlab_global_node_27168 with NodeURI http://bat800212glnxa64:37207/

送信するメッセージを作成します。Data プロパティを指定します。

msg = rosmessage('std_msgs/String');
msg.Data = 'test phrase';

'/chatter' トピック経由でメッセージを送信します。

rospublisher('/chatter',msg)
ans =

     []

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

rosshutdown
Shutting down global node /matlab_global_node_27168 with NodeURI http://bat800212glnxa64:37207/
Shutting down ROS master on http://bat800212glnxa64:35317/.

クラス コンストラクターを使用して Publisher オブジェクトを作成します。

ROS マスターを起動します。

master = robotics.ros.Core;

マスターに接続する ROS ノードを作成します。

node = robotics.ros.Node('/test1');

パブリッシャーを作成して string データを送信します。パブリッシャーは、最初の引数のノード オブジェクトに接続します。

pub = robotics.ros.Publisher(node, '/robotname', 'std_msgs/String');
msg = rosmessage('std_msgs/String');
msg.Data = 'robot1';
send(pub,msg);

パブリッシャーと ROS ノードをクリアします。ROS マスターをシャットダウンします。

clear('pub','node')
clear('master')

R2015a で導入