QoS란

토픽 이름도 타입도 맞는데, 왜 메시지가 안 올까?

화면을 누르면 다음 장으로 넘어갑니다

증상

다 맞는데 조용할 때가 있습니다

3강에서 토픽 이름과 메시지 타입이 같으면 퍼블리셔와 서브스크라이버가 이어진다고 했습니다. ROS 2에는 맞춰야 할 것이 하나 더 있습니다. 메시지를 어떻게 전할지 정한 규칙입니다.

/talker, /listener, /chatter는 설명을 위해 붙인 이름입니다.

QoS

전달 규칙을 묶은 것이 프로필입니다

QoS(Quality of Service, 서비스 품질)는 메시지 전달 방식을 정하는 설정입니다. 하나하나의 설정을 정책(policy), 정책을 묶은 한 벌을 프로필(profile)이라고 합니다.

QoS는 퍼블리셔와 서브스크라이버가 저마다 따로 정합니다. 서비스 서버와 클라이언트에도 있습니다.

왜 필요한가

데이터마다 원하는 것이 다릅니다

라이다는 1초에 여러 번 측정값을 보냅니다. 하나쯤 잃어도 곧 새 값이 오니, 늦게라도 옛 값을 받는 것보다 지금 값이 중요합니다. 지도는 다릅니다. 한 번 보낸 것을 꼭 받아야 합니다.

그래서 ROS 2는 TCP처럼 확실하게도, UDP처럼 가볍게도 보낼 수 있게 QoS를 고르게 합니다.

이 강에서

입문에서는 네 가지만 봅니다

정책은 더 있지만 입문에서는 이 네 가지면 충분합니다. 2~4편에서 하나씩 보고, 5편에서는 양쪽 설정이 어긋나면 왜 끊기는지 봅니다.

Deadline, Lifespan, Liveliness는 이름만 알아 둡니다.

기본값

늘 쓰던 10이 사실 QoS였습니다

6강에서 create_publisher의 셋째 인자로 넣은 10이 QoS입니다. 숫자만 주면 대기열 크기(Depth)가 10이고, 나머지는 기본값이 됩니다. 기본값은 확실하게 보내고(Reliable), 지난 메시지는 남기지 않는(Volatile) 설정입니다.

따라 하기

토픽의 QoS는 -v로 봅니다

거북이와 키보드 노드를 띄운 채 ros2 topic info /turtle1/cmd_vel -v를 실행해 보세요. 노드마다 어떤 QoS로 발행·구독하는지 보입니다. 메시지가 안 올 때 가장 먼저 볼 곳입니다.

출력 일부만 보였습니다. 구독 쪽(/turtlesim) 정보도 아래에 이어서 나옵니다.

다음 편

먼저 볼 규칙은 꼭 받아야 하나입니다

2편꼭 받아야 하나, 최신만 보면 되나 11강 목록