하루의 쉼터

[ROS] Publishers and Subscribers Queue 에 관하여 본문

프로그래밍 - 개발/ROS

[ROS] Publishers and Subscribers Queue 에 관하여

Changun An 2021. 7. 22. 18:15
반응형

| Publisher, Subscriber Queue 에 관하여

0. 서론

ROS 개발을 하다보면 Publishers 와 Subscribers를 자주 사용하게 된다.

ros::Publisher pub = nodehandler.advertise<std_msgs::String>("topic_name", 5);
ros::Subscriber sub = nodehandler.subscribe("topic_name", 5, callback);

위 코드는 publish ,subscribe에 예제 이다.

 

0.1 사용 예제 및 레퍼런스

그럼 여기서 뜻하는 숫자 5는 무엇이며 어떠한 의미를 나타내는지에 대한 의문이 생긴다.

Reference 참고를 하면 아래와 같이 나와 있다.

ros::Publisher advertise(const std::string& topic, uint32_t queue_size, bool latch = false);
ros::Subscriber subscribe(const std::string& topic, uint32_t queue_size, <callback, which may involve multiple arguments>, const ros::TransportHints& transport_hints = ros::TransportHints());

 

예제와 레퍼런스를 참고하면 아래와 같이 볼 수 있다.

 

1. What is uint32_t queue_size?

그럼 여기서 나오는 queue_size는 무엇인지 궁금해진다.

Queue Size는 발행되는 메세지를 얼마나 가지고 있을지에 관련된 변수이며 신규 데이터가 들어오는 경우 오래된 데이터부터 삭제하게 된다.

다양한 환경에 따라 ROS가 임의로 지정해주기 보다 어플리케이션에 가장 적합한 대기열(큐)의 크기를 도출하는 것이 개발자의 몫이다.

 

1.1 Reference 권장 지침.

1.1.1 일정한 속도로 하나의 메세지를 보내는 경우 작은 대기열(큐)사이즈 추천

1.1.2 여러 메세지를 보내는 경우 대기열(큐)가 작으면 데이터 손실 발생 하므로 사이즈를 크게 

1.2.3 너무 작은 사이즈를 선택하는 경우 메모리가 더 사용되므로 적당한 사이즈를 찾는 것이 중요

 

2. Queue Size

2.1 Queue Size 생략

인수를 생략하는 경우, 배포판에 따라 다른 결과가 발생 None이 전될 되는 경우도 존재함.

Groovy 및 이전 ROS 배포판의 경우 동기적 으로 처리

Indigo 경고 발생 및 콘솔창 출력

 

2.2 Queue Size None 

퍼블리쉬가 동기적으로 처리됨.

 

2.3 Queue Size 0 

값이 0이면 무한하게 수용하나 메모리가 증가하여 Overflow 발생 되므로 권장하지 않음.

 

2.4 Queue Size (1~3)

1의 경우 새로운 데이터를 퍼블리쉬 하기 전에 이전 값이 삭제 되는 것을 방지 하기 위해 사용됨.

* 새값이 있기 전까지 이전 값을 보내지 안되는 경우. 

1~3의 크기는 10 Hz 에서 사용 하면 좋음.

 

2.5 Queue Size 10 이상

메세지를 많이 가져야하는 경우 사용 데이터를 기록하는 경우 사용.

 

Reference Site

http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers#Choosing_a_good_queue_size

 

rospy/Overview/Publishers and Subscribers - ROS Wiki

Publishing to a topic See also: rospy.Publisher Code API You can create a handle to publish messages to a topic using the rospy.Publisher class. The most common usage for this is to provide the name of the topic and the message class/type of the topic. You

wiki.ros.org

 

반응형
Comments