ROS의 공부 제3탄:배달자와 구독자의 혼합
4976 단어 SubscriberROS파이썬Publishertopic
# 프로그래밍 ROS < 배달자와 구독자 혼합 >
소개
하나의 참고서에 따라 ROS(Robot Operating System)를 어려움 없이 다루는 것이 목적이다. 다시 처음부터 배우고, 복습도 겸하면서 학습을 진행해 나가기로 한다. 제 3 탄으로서 배달자와 구독자의 혼합을 다룬다.
환경
가상 환경
소프트
VMware Workstation 15
실장 RAM
2GB
OS
우분투 64비트
ISO 파일
ubuntu-mate-20.04.1-desktop-amd64.iso
컴퓨터
장치
MSI
프로세서
Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 2.50GHz
실장 RAM
8.00GB(7.89GB 사용 가능)
OS
Windows (Windows 10 Home, 버전: 1909)
ROS
Distribution
noetic
프로그래밍 언어
파이썬 3.8.5
배달자와 구독자의 혼합이란?
말 그대로, 하나의 노드에 전달자와 구독자의 기능을 갖게하는 것이다. 단일 파일 내에서 배포자와 구독자 코드를 작성할 수 있습니다. 따라서 ROS는 하나의 노드에서 여러 배달과 구독을 수행 할 수 있습니다.
어떤 시점에 하나의 노드에 배달자와 구독자의 기능을 갖게 할 것인가?
데이터에 어떠한 처리를 더해 변환할 때 등.
예를 들어 카메라의 이미지가 포함 된 주제를 구독하여 이미지에서 얼굴을 감지하고 얼굴의 위치를 다른 주제로 전달할 수 있습니다. 이 경우 "구독"하고 "배달"합니다.
구현
여기서 우리는 숫자를 얻었을 때 그것을 두 배로 한 값을 전달하는 예제를 다룹니다. 아래에 소스 코드가 나와 있습니다.
소스 코드
doubler.py#! /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
의 두 가지가 다루어지고있다. 여기서 전자는 배포이고 후자는 구독 대상입니다. 여기서는 구독 대상으로 rostopic pub
를 사용하여 값을 입력하고 그 때의 출력을 살펴 보겠습니다. 이하에 3개의 터미널(단말)을 나타낸다. 위에서부터 순서대로 "프로그램 실행", "구독 대상에 값 입력"및 "배포 정보 관찰"입니다.
2, 3이 입력되면 4, 6이 전달되었음을 알 수 있습니다. 그러나 입력하지 않으면 배달되지 않습니다. 왜냐하면 위의 소스 코드에서 publish()
가 callback()
에 있고 Subscriber()
가 움직일 때마다 전달하기 때문입니다. 이것은, 이 노드의 목적이 데이터 변환하는 (여기에서는, 구독하고 있는 토픽으로부터 온 수를 2배로 하는) 것이므로, 새로운 데이터가 들어왔을 때만 데이터를 전달하고 싶다고 하는 생각이 배경 에 있다.
감상
이번에는 주제 학습이 끝났습니다. 마지막으로 혼합에 의한 데이터 변환을 배웠지만, 정확히 라디오 컨트롤 등에서 PS4의 컨트롤러를 사용할 때 joy
에서 얻은 데이터를 cmd_vel
을 사용하면 좋을까와 힌트를 얻을 수 있다고 생각한다. 실제로 해보지만, 그 결과는 또 따로 정리하는 것으로 한다.
참고문헌
프로그래밍 ROS Python으로 로봇 애플리케이션 개발
Morgan Quigley, Brian Gerkey, William D.Smart
河田 卓志
마츠다 아키히로, 후쿠지 마사키, 유타니 테츠오
오일러리 재팬 발행
Reference
이 문제에 관하여(ROS의 공부 제3탄:배달자와 구독자의 혼합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yuya-Shimizu/items/e59ac7501ff5e0ae0da6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#! /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()
Reference
이 문제에 관하여(ROS의 공부 제3탄:배달자와 구독자의 혼합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Yuya-Shimizu/items/e59ac7501ff5e0ae0da6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)