일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 그랑사가
- 프로그래밍
- 우분투
- mariaDB
- C언어
- 마리아 DB
- 오늘도 우라라 펫 공략
- 토픽
- install opencv-4.4.0 on ubuntu 22.04
- 오늘도 우라라 공략
- LeetCode
- 데이터 베이스
- 반복문
- JungOl
- 오늘도 우라라 펫
- 등차수열
- mysql
- 오늘도 우라라
- 환경설정
- topic
- 리눅스
- C++
- 기초
- publish
- Subscribe
- Linux
- while
- ros
- ubuntu
- MSG
- Today
- Total
하루의 쉼터
[ROS] Publishers and Subscribers Queue 에 관하여 본문
| 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