| Up | IN・OUT : publish-subscribe の場合 | 作成: 2026-10-18 更新: 2026-10-22 |
self.create_publisher( 出荷データの型 流通名 ("自分のノード名/データ名"), 10 ) self.create_subscriber( 入荷データの型, 流通名 ("出荷元のノード名/データ名"), データを受け取る変数, 10 ) 例えば,視覚NNストアだと, self.create_publisher( VisualStatus, '/visual/status', 10 ) self.create_subscriber( CameraData, '/camera/data', self.camera_callback, 10 ) この文脈で,データは message と呼ばれる。 流通名の "自分のノード名/データ名" は,topic と呼ばれる。 この設定の中の 流通名 データ受け取り用変数 は,CPU 視点では,特定メモリ領域のポインタであり,実際その領域の先頭アドレを表す。
データの publish は,つぎのようになる: 1. つぎの変数を予め作成: msg = 出荷データの型() publish = self.create_publisher() msg.feature のメモリ領域に作成。 self.publisher.publish(msg) というわけで, 流通名 データ受け取り用変数 が指すメモリ領域が,それぞれストアの OUT と IN バッファということになる。 まとめ: OUT : 流通名がこれのポインタを表す IN : データ受け取り用変数がこれのポインタを表す ROS2 は,この2つのメモリ領域を OUT (出荷用倉庫)・IN (入荷用倉庫) として使う。 特に,ストアの IN, OUT は,ストアと ROS2 のどちらに属するかを問うというものではない。 ところで,1つのストアが subscribe, publish するデータは,一般に1つと限るものではない。 そして 「複数の流通名,複数のデータ受け取り用変数」 は,OUT, IN のつぎの絵図になる: トピックごとの棚で成る (棚:メモリ領域) そして,publish-subscribe のデータ流通は: 注意. データ流通を 「物流」 モデルで考えることのミスリーディングは,「距離」 の錯覚である。 ストアは,実行ファイル。 これを起動すると,いろいろなメモリ領域がつくられるが,IN・OUT はその中のもの。 「ストアA の IN・OUT」 の意味は,Aのプロセスが owner であるメモリ領域 IN・OUT」であり,「互いに近接」 ではない。 |