Code 스튜디오 연습문제 정답
시행일·최종 수정일: 2026년 9월 1일
정답을 보기 전에
먼저 각 문제에 자신의 말로 답해본 뒤 해설과 비교해 보세요. 표현이 달라도 핵심 개념과 계산 과정이 맞으면 정답으로 볼 수 있습니다.
1. ROS 2 Node Code를 30초 안에 읽는 순서를 설명하세요.
정답과 해설
Node 이름을 찾고 Subscription·Publisher로 입력과 출력을 확인합니다. 이어 Timer·Service·Action Trigger, Parameter, 상태 변수, Callback 로직과 마지막으로 main의 Executor·종료 방식을 확인합니다.
2. Code 설명에서 Python 문법, ROS 2 의미와 Robot 의미를 분리해야 하는 이유는 무엇인가요?
정답과 해설
문법은 언어의 실행 규칙, ROS 2 의미는 Entity와 Executor 동작, Robot 의미는 실제 주기·속도·안전 결과를 설명합니다. 세 층을 구분해야 코드를 번역하는 수준을 넘어 실제 System 동작과 위험을 예측할 수 있습니다.
3. SafeDriver의 입력·출력·Parameter·상태와 Trigger를 표로 정리하세요.
정답과 해설
입력은 /scan: LaserScan, 출력은 /cmd_vel: Twist입니다. Parameter는 stop_distance와 cruise_speed, 상태는 nearest와 last_scan_time이며 Scan 도착과 0.1초 Timer가 Callback을 Trigger합니다.
4. SafeDriver가 첫 Scan 전과 Scan Timeout 후에 정지해야 하는 이유를 설명하세요.
정답과 해설
환경을 관측하지 못한 상태에서 전진 가능하다고 가정하면 장애물과 충돌할 수 있습니다. 첫 유효 Data와 최신성이 확인될 때만 움직이는 Fail-safe 정책이므로 Data 부재와 Timeout에서는 정지해야 합니다.
5. create_timer(0.1, self.tick)에서 0.1과 self.tick의 의미를 각각 설명하세요.
정답과 해설
0.1은 Timer Period인 0.1초이며 약 10 Hz를 목표로 합니다. self.tick은 실행 결과가 아니라 Executor가 Timer Event마다 호출할 Method 자체이므로 괄호를 붙이지 않습니다.
6. LaserScan.ranges에서 양수만 고르는 방식이 충분하지 않은 이유와 개선 방법을 쓰세요.
정답과 해설
양수 중에도 양의 무한대와 Sensor 범위 밖 값이 있을 수 있고 NaN 비교는 직관적이지 않습니다. math.isfinite와 range_min <= r <= range_max를 함께 검사하고 유효 Sample이 없으면 정지 상태로 처리합니다.
7. use_sim_time이 Sensor Age와 Watchdog 계산에 미칠 수 있는 영향을 설명하세요.
정답과 해설
Node Clock이 /clock을 따르므로 Bag 재생을 Pause하면 ROS Time도 멈춰 Data Age가 증가하지 않을 수 있습니다. Algorithm 재현에는 적합하지만 실제 안전 Watchdog가 Wall Time을 요구하는지는 별도로 결정해야 합니다.
8. 실행 중 ros2 param set이 성공해도 SafeDriver 동작이 바뀌지 않을 수 있는 이유는 무엇인가요?
정답과 해설
예제는 Parameter를 생성 시 한 번 읽어 self.stop_distance에 복사합니다. Parameter Server 값만 바뀌고 내부 변수는 자동 갱신되지 않으므로 Parameter Callback에서 검증·반영하거나 사용할 때 다시 읽어야 합니다.
9. BadNode에서 Timer Callback에 괄호를 붙였을 때 실제 실행 순서를 설명하세요.
정답과 해설
생성 중 self.tick()이 즉시 한 번 실행되고 그 반환값 None이 create_timer로 전달됩니다. 따라서 Timer 등록 단계에서 오류가 나거나 정상 Callback이 등록되지 않습니다.
10. 자기 발행 Topic을 다시 구독하는 Feedback Loop를 CLI로 찾는 방법을 설명하세요.
정답과 해설
ros2 topic info /topic --verbose에서 Publisher와 Subscriber Node가 같은지 확인하고 ros2 node info로 양 Endpoint를 교차 확인합니다. topic hz와 Process CPU도 비정상 증가하는지 측정합니다.
11. GoodNode가 time.sleep()을 Timer와 상태로 바꾼 이유는 무엇인가요?
정답과 해설
기본 Single-threaded Executor에서 Sleep은 다른 Subscription과 Timer까지 막습니다. Callback은 상태와 시각만 저장하고 즉시 반환하며 Timer가 경과 시간을 확인하면 Node 전체의 응답성을 유지할 수 있습니다.
12. Counter 예제에서 Publisher의 10이 뜻하는 것과 뜻하지 않는 것을 설명하세요.
정답과 해설
10은 기본 Keep Last History의 Queue Depth입니다. 10 Hz 발행 주기를 뜻하지 않으며 실제 발행률은 0.5초 Timer가 정하는 약 2 Hz입니다.
13. Callback을 Data·상태·부작용으로 나누어 읽으면 어떤 문제가 잘 보이나요?
정답과 해설
입력 검증과 계산, 다음 Callback에 영향을 주는 공유 상태, Publish·Log·I/O 같은 외부 효과가 분리됩니다. Race Condition, 오래된 상태, 반복 Log, Blocking I/O와 예상치 못한 출력 위치를 쉽게 찾을 수 있습니다.
14. 처음 보는 Node의 코드를 열지 않고 Interface와 실행 주기를 확인하는 명령을 쓰세요.
정답과 해설
ros2 node info /node로 Publisher·Subscription·Service를 보고 ros2 param list로 설정을 확인합니다. ros2 topic info --verbose, ros2 topic hz와 rqt_graph로 연결·QoS·실제 주기를 확인합니다.
15. Python Node를 C++로 옮기기 전에 측정해야 할 항목과 판단 기준을 설명하세요.
정답과 해설
목표 대비 실제 주기, Callback 실행 시간, End-to-End Latency와 Jitter, CPU·Memory와 Data 크기를 측정합니다. Python이 요구 조건을 지속적으로 위반하고 Algorithm·I/O 최적화로 해결되지 않는 병목 Node만 C++로 옮깁니다.
학습 마무리
틀린 문제는 강의의 관련 장을 다시 읽고, 용어뿐 아니라 각 개념이 실제 로봇에서 어떤 역할을 하는지 설명해 보세요.