rclpy에서 rate.sleep()이 멈추거나 주기가 안 맞을 때: Rate가 타이머 콜백의 이벤트를 기다린다는 점으로 executor 구성과 루프 주기 계산하기
rate.sleep()이 첫 반복 뒤 멈추는 이유와 루프가 목표 Hz보다 느려지는 이유는 다르다. Jazzy rclpy 소스, 8 Hz 계산 예제, 8가지 구성의 컨테이너 실측으로 둘을 구분하고 spin 스레드·MultiThreadedExecutor·create_timer 중 무엇을 쓸지 정한다.