Main Content

rospublisher

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

R2019b 以降

説明

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

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

メモ

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

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

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

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

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

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

作成

説明

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,msg] = rospublisher(___,"DataFormat","struct") はオブジェクトではなくメッセージ構造体を使用します。詳細については、ROS メッセージ構造体を参照してください。

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

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

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

[pub,msg] = ros.Publisher(___,"DataFormat","struct") はオブジェクトではなくメッセージ構造体を使用します。詳細については、ROS メッセージ構造体を参照してください。

プロパティ

すべて展開する

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

このプロパティは、作成時に引数 TopicName によって設定されます。作成後に値を変更することはできません。

例: "/chatter"

データ型: char

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

このプロパティは、作成時に引数 MessageType によって設定されます。作成後に値を変更することはできません。

例: "std_msgs/String"

データ型: char

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

このプロパティは、作成時に引数 IsLatching によって設定されます。作成後に値を変更することはできません。

データ型: logical

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

このプロパティは、作成時に引数 NumSubscribers によって設定されます。作成後に値を変更することはできません。

データ型: double

メッセージ形式。"object" または "struct" として指定します。このプロパティは、作成時に名前と値の入力を使用して設定しなければなりません。詳細については、ROS メッセージ構造体を参照してください。

オブジェクト関数

sendROS メッセージをトピックにパブリッシュ
rosmessageROS メッセージの作成

すべて折りたたむ

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

rosinit
Launching ROS Core...
Done in 0.79122 seconds.
Initializing ROS master on http://172.30.241.81:56243.
Initializing global node /matlab_global_node_92672 with NodeURI http://dcc601040glnxa64:43053/ and MasterURI http://localhost:56243.

std_msgs/String メッセージ タイプの /chatter トピックのパブリッシャーを作成します。名前と値の引数 "DataFormat" を ROS メッセージ構造体に設定します。

chatpub = rospublisher("/chatter","std_msgs/String","DataFormat","struct");

送信するメッセージを作成します。文字ベクトルを使用して Data プロパティを指定します。

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

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

send(chatpub,msg);

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

rosshutdown
Shutting down global node /matlab_global_node_92672 with NodeURI http://dcc601040glnxa64:43053/ and MasterURI http://localhost:56243.
Shutting down ROS master on http://172.30.241.81:56243.

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

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

rosinit
Launching ROS Core...
Done in 0.71191 seconds.
Initializing ROS master on http://172.30.241.81:50088.
Initializing global node /matlab_global_node_13811 with NodeURI http://dcc601040glnxa64:35571/ and MasterURI http://localhost:50088.

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

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

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

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

sub = rossubscriber('/chatter','DataFormat','struct');
pause(1)

subCount = pub.NumSubscribers
subCount = 1

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

rosshutdown
Shutting down global node /matlab_global_node_13811 with NodeURI http://dcc601040glnxa64:35571/ and MasterURI http://localhost:50088.
Shutting down ROS master on http://172.30.241.81:50088.

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

ROS コアを起動します。

core = ros.Core;
Launching ROS Core...
.Done in 1.5852 seconds.

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

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

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

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

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

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

拡張機能

バージョン履歴

R2019b で導入

すべて展開する