반응형

ROS2 Foxy Fitzroy

 

패키지 노드(publisher) 만들기



1) 파이썬 파일 생성

~/robot_ws/src/test1234/test1234
  1. 위 경로에 hello_sub.py 생성

 

2) 전체코드

import rclpy
from rclpy.node import Node
from rclpy.qos import QoSProfile
from std_msgs.msg import String


class HelloworldSubscriber(Node):

    def __init__(self):
        super().__init__('Helloworld_subscriber')
        qos_profile = QoSProfile(depth=10)
        self.helloworld_subscriber = self.create_subscription(
            String, #메세지 타입
            'helloworld', #토픽 이름
            self.subscribe_topic_message, #콜백 함수
            qos_profile)  #QoS 설정

    def subscribe_topic_message(self, msg):
        self.get_logger().info('Received message: {0}'.format(msg.data))

def main(args=None):
    rclpy.init(args=args)
    node = HelloworldSubscriber()  #HelloworldSubscriber 클래스 생성
    try:
        rclpy.spin(node)
    except KeyboardInterrupt:
        node.get_logger().info('Keyboard Interrupt (SIGINT)')
    finally:
        node.destroy_node()
        rclpy.shutdown()


if __name__ == '__main__':
    main()

코드 출처 : 오로카 카페 - 024 ROS프로그래밍 기초(python)_표윤석)

    def __init__(self):
        super().__init__('Helloworld_subscriber')
        qos_profile = QoSProfile(depth=10)
        self.helloworld_subscriber = self.create_subscription(
            String, #메세지 타입
            'helloworld', #토픽 이름
            self.subscribe_topic_message, #콜백 함수
            qos_profile)  #QoS 설정
  1. self.helloworld_subscriber = self.create_subscription ~
    1. String : 메세지 타입
    2. 'helloworld' : 가져다 쓸 토픽 이름, 앞서 만든 publisher와 이름을 맞춰주어야 함
    3. self.subscribe_topic_message : 콜백 함수
    4. qos_prifile : QoS 설정
    def subscribe_topic_message(self, msg):
        self.get_logger().info('Received message: {0}'.format(msg.data))
  1. self.get_logger().info('Received message: {0}'.format(msg.data))
    1. 데이터가 들어오면 'msg.data'의 값을 '{0}'에 넣어 콘솔창에 출력
def main(args=None):
    rclpy.init(args=args)
    node = HelloworldSubscriber()  #HelloworldSubscriber 클래스 생성
    try:
        rclpy.spin(node)
    except KeyboardInterrupt:
        node.get_logger().info('Keyboard Interrupt (SIGINT)')
    finally:
        node.destroy_node()
        rclpy.shutdown()
  1. node = HelloworldSubscriber() : HelloworldSubscriber 클래스 생성
  2. rclpy.spin(node) : ROS에 노드 spin

 

3) 결론

  1. 특별한 것 없음
  2. publisher와의 차이는 12행에서 'create_publisher', 'create_subscription'만 다르다

 

반응형

+ Recent posts