ROSの勉強 第3弾:配信者と購読者の混合
#プログラミング ROS< 配信者と購読者の混合 >
はじめに
1つの参考書に沿って,ROS(Robot Operating System)を難なく扱えるようになることが目的である.改めて初めから学び,復習も兼ねながら学習を進めていくこととする.その第3弾として,配信者と購読者の混合を扱う.
環境
仮想環境
ソフト | VMware Workstation 15 |
実装RAM | 2 GB |
OS | Ubuntu 64 ビット |
isoファイル | ubuntu-mate-20.04.1-desktop-amd64.iso |
コンピュータ
デバイス | MSI |
プロセッサ | Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 2.50GHz |
実装RAM | 8.00 GB (7.89 GB 使用可能) |
OS | Windows (Windows 10 Home, バージョン:1909) |
ROS
Distribution | noetic |
プログラミング言語 | Python 3.8.5 |
配信者と購読者の混合とは?
文字通り,1つのノードに配信者と購読者の機能を持たせることである.1つのファイル内で,配信者と購読者のコードを記述できる.このようにROSでは複数の配信と購読を1つのノードで行うことができる.
どんなときに1つのノードに配信者と購読者の機能を持たせるのか?
データに何らかの処理を加えて変換するときなど.
例えば,カメラの画像を含むトピックを購読して,その画像から顔を検出し,顔の位置をほかのトピックとして配信するかもしれない.このような場合,「購読」してさらに「配信」することとなる.
実装
ここでは,何かしら数値を得た時に,それを2倍にした値を配信する例を扱う.以下にソースコードを示す.
ソースコード
#! /usr/bin/env python3
import rospy
from std_msgs.msg import Int32
rospy.init_node('doubler') #doublerという名前でノード作成
def callback(msg):
""" データ変換のように,新たなデータを受け取ったときのみに変換するために,この関数内で配信する """
doubled = Int32() #データにアクセスするためにインスタンス作成
doubled.data = msg.data * 2 #受け取ったデータを2倍にする
pub.publish(doubled) #callback関数実行するときのみ配信
sub = rospy.Subscriber('number', Int32, callback) #numberというトピックを購読
pub = rospy.Publisher('doubled', Int32, queue_size = 10) #配信準備
rospy.spin()
以下にプログラムを実行後,今扱われているトピックをrostopic list
により表示させたターミナル(端末)を示す.
確かに/doubled
,/number
の2つが扱われている.ここでは,前者が配信で,後者が購読対象である.では,ここで購読対象にrostopic pub
を使って,値を入力し,そのときの出力を見てみる.以下に3つのターミナル(端末)を示す.上から順に,「プログラム実行」,「購読対象に値を入力」,「配信情報の観察」である.
2, 3が入力されると,結果として4,6が配信されていることが分かる.ただし,入力されないと配信はされない.なぜなら,上のソースコードにおいて,publish()
がcallback()
内にあり,Subscriber()
が動くたびのみに,配信するためである.これは,このノードの目的がデータ変換する(ここでは,購読しているトピックからやってきた数を2倍にする)ことなので,新しいデータが入ってきたときにだけデータを配信したいという考えが背景にある.
感想
今回で,トピックの学習は終わりである.最後に混合によるデータ変換を学んだが,まさにラジコンなどでPS4のコントローラを使うときにjoy
から得られるデータをcmd_vel
に変換したいときが出てくると思うが,そのときの変換はこれを使えばよいのかなとヒントが得られた気がする.実際にやってみるが,その結果はまた別にまとめることとする.
参考文献
プログラミングROS Pythonによるロボットアプリケーション開発
Morgan Quigley, Brian Gerkey, William D.Smart 著
河田 卓志 監訳
松田 晃一,福地 正樹,由谷 哲夫 訳
オイラリー・ジャパン 発行
Author And Source
この問題について(ROSの勉強 第3弾:配信者と購読者の混合), 我々は、より多くの情報をここで見つけました https://qiita.com/Yuya-Shimizu/items/e59ac7501ff5e0ae0da6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .