μ•„μ£Ό κ°„λ‹¨ν•œ ros subscriber λ§Œλ“€μ–΄λ³΄μž!

λ°”λ‘œ 직전 포슀트인 ros subscriber 이은 κΈ€μ΄λ‹ˆ 잘 λ™μž‘ν•˜μ§€ μ•ŠμœΌλ©΄ 직전 포슀트λ₯Ό μ°Έκ³ ν•˜μž


Simple ROS Subscriber

1. 폴더 생성

νŒŒμΌμ„ λ§Œλ“€ 폴더λ₯Ό ν•˜λ‚˜ λ§Œλ“€κ³  κ·Έ 경둜둜 μ΄λ™ν•˜μž

$ mkdir ~/rospy_tutorial
$ cd ~/rospy_tutorial

2. Subscriber.py 파일 생성

Sublisherλ₯Ό λ§Œλ“€κΈ° μœ„ν•˜μ—¬ μ•„λž˜μ™€ 같이 νŒŒμΌμ„ λ§Œλ“€μ–΄μ€€λ‹€

$ gedit sub.py

3. 전체적인 μ½”λ“œ

전체적인 μ½”λ“œλ₯Ό 보고 ν•˜λ‚˜ν•˜λ‚˜ λ‚˜λˆ μ„œ 보자

In sub.py,

#! /usr/bin/env python

import rospy
from std_msgs.msg import String
  
def msg_callback(msg):
  print(msg)
  
if __name__ == '__main__':
  rospy.init_node('topic_sub_node')
  sub = rospy.Subscriber('/bigbigpark', String, msg_callback, queue_size=1)
  
  rospy.spin()

μ—¬κΈ°κΉŒμ§€λ§Œ 보고도 μ½”λ“œμ˜ ꡬ쑰가 μ΄ν•΄λ˜λŠ” μ‚¬λžŒμ€ λ°”λ‘œ 5번으둜 λ„˜μ–΄κ°€μž

4. μ½”λ“œ λ‚˜λˆ μ„œ 보기

μ € λ¬Έμž₯을 셔뱅이라고 λΆ€λ₯΄λŠ”데 μžμ„Έν•œ μ„€λͺ…은 μ—¬κΈ°λ₯Ό μ°Έμ‘°ν•˜μž

#! /usr/bin/env python


rospy 라이브러리λ₯Ό λΆˆλŸ¬μ˜¨λ‹€
std_msgsλΌλŠ” 메세지 νŒ¨ν‚€μ§€μ—μ„œ Stringμ΄λΌλŠ” 헀더 νŒŒμΌμ„ λΆˆλŸ¬μ˜¨λ‹€

import rospy
from std_msgs.msg import String


callback은 λ‹€μ‹œ λΆ€λ₯Έλ‹€? 이런 λ‰˜μ•™μŠ€μΈλ° 말 κ·ΈλŒ€λ‘œ νŠΉμ • μ΄λ²€νŠΈκ°€ 듀어왔을 λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜ μ •λ„λ‘œλ§Œ μ•Œκ³  있자
ν•¨μˆ˜μ˜ λœ»μ€ callback ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œ μˆ˜μ‹ λœ 메세지λ₯Ό printν•˜κ² λ‹€λŠ” λœ»μ΄λ‹€

def msg_callback(msg):
  print(msg)


λ…Έλ“œλ₯Ό μ„ μ–Έν•΄μ€€ ν›„ Subscriberλ₯Ό μ„ μ–Έν•΄μ€€λ‹€
μ•ˆμ— λ“€μ–΄κ°€λŠ” μΈμžλŠ” μ•„λž˜μͺ½μ— λ‚˜μ™€μžˆλŠ” μˆœμ„œλŒ€λ‘œ ν† ν”½λͺ…, νƒ€μž…, μ½œλ°±ν•¨μˆ˜, 큐 μ‚¬μ΄μ¦ˆ 이닀
λ‹€μ‹œ λ§ν•΄μ„œ bigbigparkμ΄λΌλŠ” μ΄λ¦„μ˜ String νƒ€μž…μ˜ 토픽을 subscribeν•˜κ² λ‹€λŠ” 것이고, κ·Έ λ•Œ 큐 μ‚¬μ΄μ¦ˆλŠ” 1둜 ν•˜κ² λ‹€λŠ” λœ»μ΄λ‹€
특히 토픽이 μˆ˜μ‹ λ  λ•Œλ§ˆλ‹€ msg_callbackμ΄λΌλŠ” μ½œλ°±ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ² λ‹€λŠ” μ˜λ―Έλ‹€
이 κΈ€μ—μ„œλŠ” queue_size에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ 닀루지 μ•Šκ² λ‹€

rospy.init_node('topic_sub_node')
sub = rospy.Subscriber('/bigbigpark', String, msg_callback, queue_size=1)


rospy.spin()은 ν˜„μž¬κΉŒμ§€ μ„ μ–Έλœ λͺ¨λ“  subscriber에 λŒ€ν•œ callback ν•¨μˆ˜λ₯Ό λ™μž‘μ‹œν‚€κ² λ‹€λŠ” μ˜λ―Έλ‹€
이 뢀뢄은 λ¬΄ν•œλ£¨ν”„λ‘œ λ™μž‘μ„ ν•˜λ‹ˆ 이 μ„ μ–Έ μ•„λž˜μͺ½μ— μžˆλŠ” μ½”λ“œλŠ” λ™μž‘μ„ ν•˜μ§€ μ•ŠλŠ”λ‹€

rospy.spin()

5. μ‹€ν–‰ν•˜κΈ°

νŒŒμΌμ€ μ €μž₯ν•˜κ³  터미널 μ°½μ—μ„œ λ‹€μŒκ³Ό 같이 μ‹€ν–‰ν•΄λ³΄μž

$ roscore
$ python pub.py
$ python sub.py


6. κ²°κ³Ό

μ„±κ³΅μ μœΌλ‘œ μˆ˜μ‹ λ¨μ„ ν™•μΈν–ˆλ‹€

Leave a comment