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) 정보도 아래에 이어서 나옵니다.
다음 편