Part 1. 객관식 (1~10)
문제 1. 카메라 읽기·모터 제어처럼 기능 단위로 나누어 실행하는 프로그램은?
- A) 토픽(Topic) — 데이터가 흐르는 통신 채널일 뿐, 실행 단위가 아님.
- B) 서비스(Service) — 요청/응답 통신 방식, 실행 단위가 아님.
- C) 노드(Node) — 하나의 기능을 수행하는 기본 실행 단위. 정답.
- D) 액션(Action) — 장시간 작업용 통신 방식, 실행 단위가 아님.
✅ 정답: C
💡 로봇 SW를 하나의 거대 프로그램이 아니라 여러 노드로 쪼개 토픽·서비스·액션으로 연결 — 관리·장애격리·재사용에 유리.
문제 2. ROS 2 Python 패키지의 공식 빌드 도구는?
- A) Catkin — ROS 1의 빌드 시스템.
- B) CMake — C++ 범용 빌드 시스템(colcon이 내부에서 호출하긴 하지만 "ROS 2 빌드 도구"는 아님).
- C) Colcon — ROS 2 표준 빌드 도구. 정답.
- D) Make — 범용 빌드 도구.
✅ 정답: C
💡 워크스페이스 루트에서
colcon build. ROS 1=Catkin / ROS 2=Colcon 이 핵심 대비.
문제 3. 센서 데이터·상태·속도 명령처럼 지속적으로 흐르는 발행/구독 통신은?
- A) 노드(Node) — 실행 단위.
- B) 토픽(Topic) — Publisher→Subscriber로 계속 흐르는 데이터. 정답.
- C) 서비스(Service) — 요청/응답(필요할 때 한 번).
- D) 액션(Action) — 오래 걸리는 목표 작업.
✅ 정답: B
💡 "계속 흘러가는 데이터인가? → 토픽". 카메라·LiDAR·
/cmd_vel·로봇 상태가 대표.
문제 4. 토픽 통신 설명으로 올바르지 않은 것은? ⚠️
- A) 데이터를 지속적으로 흘려보내는 통신 채널이다. — 맞음(O).
- B) Publisher 노드와 Subscriber 노드는 서로 직접 연결되어 통신한다. — 틀림(✗).
- C) 발행자와 구독자는 같은 토픽 이름과 메시지 타입을 기준으로 연결된다. — 맞음(O).
- D) 1개의 토픽에 여러 발행자·구독자가 연결될 수 있다. — 맞음(O).
✅ 정답: B (올바르지 않은 설명)
💡 토픽의 핵심은 느슨한 연결(decoupling). 발행자는 구독자가 누구인지 몰라도 되고, 둘은 같은 토픽 이름 + 메시지 타입으로만 이어집니다. "직접 연결"이라는 표현이 함정.
문제 5. 설정 변경·계산 요청·상태 조회처럼 요청을 보내고 즉시 응답받는 동기식 통신은?
- A) 토픽(Topic) — 단방향 스트림(응답 개념 없음).
- B) 서비스(Service) — Request→Response 동기 통신. 정답.
- C) 액션(Action) — 오래 걸리는 작업용.
- D) 파라미터(Parameter) — 노드 설정값(내부적으론 서비스 기반이지만, "요청/응답 동기 통신"의 대표 답은 서비스).
✅ 정답: B
💡 "요청하면 바로 응답받나? → 서비스". 단, 작업이 오래 걸리면 서비스보다 액션이 적절.
문제 6. 오래 걸리고 Feedback·Cancel이 필요한 작업(목표 이동·로봇팔)에 적합한 통신은?
- A) 토픽(Topic) — 단방향 스트림.
- B) 서비스(Service) — 응답까지 블로킹, 중간 상황·취소 불리.
- C) 액션(Action) — Goal·Feedback·Result·Cancel. 정답.
- D) 노드(Node) — 실행 단위.
✅ 정답: C
💡 "시간이 오래 걸리고 중간 진행이 필요한가? → 액션". 서비스는 끝날 때까지 기다려야 하고 취소가 어렵습니다.
문제 7. 액션 통신의 3가지 핵심 데이터에 포함되지 않는 것은? ⚠️
- A) Goal(목표) — 포함(O).
- B) Request(요청) — 포함 안 됨(✗). Request/Response는 서비스의 용어.
- C) Feedback(피드백) — 포함(O).
- D) Result(결과) — 포함(O).
✅ 정답: B (포함되지 않는 것)
💡 액션 3요소 = Goal · Feedback · Result (+ Cancel 기능). Request는 서비스 것이라는 점이 함정. 4번처럼 "아닌 것"을 고르는 문제.
문제 8. --build-type ament_python 패키지에서 실행 노드를 등록하려면 수정할 파일은?
- A) package.xml — 패키지 정보·의존성 기록(실행 등록 아님).
- B) setup.py —
entry_points의console_scripts에 등록. 정답. - C) CMakeLists.txt — C++(ament_cmake) 용 빌드 설정.
- D) setup.bash — 환경을 불러오는(source) 스크립트(편집 대상 아님).
✅ 정답: B
💡 Python =
setup.py의entry_points, C++ =CMakeLists.txt의add_executable+install.
문제 9. 노드 생성·토픽·서비스 API를 제공하는 Python 클라이언트 라이브러리는?
- A) rclpy → ❌ 함정: 정답은 맞지만 이건 C++용이 아니라… 잠깐, A는
rclcpp임. A) rclcpp — C++용. - B) rclpy — Python용 ROS 2 클라이언트 라이브러리. 정답.
- C) std_msgs — 기본 메시지 타입 패키지(라이브러리 아님).
- D) rosbase — 존재하지 않는 이름(함정).
✅ 정답: B
💡 Python=
rclpy, C++=rclcpp.std_msgs는 메시지(String 등) 제공 패키지로 역할이 다릅니다.
문제 10. rclpy 노드가 종료되지 않고 타이머·콜백을 계속 실행하도록 루프를 유지하는 함수는?
- A) rclpy.init() — ROS 2 초기화(시작 시 1회).
- B) rclpy.shutdown() — 종료.
- C) rclpy.spin() — 노드를 계속 살려 콜백·타이머를 처리. 정답.
- D) rclpy.create_node() — 노드 생성(보통 Node 상속으로 대체).
✅ 정답: C
💡 흐름:
init()→ 노드 생성 →spin()(여기서 계속 돔) →destroy_node()→shutdown().
Part 2. 단답 · 서술 (11~20)
문제 11. '노드(Node)'의 개념을 간단히 서술하시오.
✅ 답: 노드는 ROS 2에서 하나의 기능을 수행하는 기본 실행 단위다. 센서 처리·인식·계획·제어 같은 기능을 각각 독립적으로 실행하며, 토픽·서비스·액션을 통해 다른 노드와 데이터를 주고받는다.
💡 핵심 키워드: "기능 단위", "독립 실행", "통신으로 연결".
문제 12. 연속 센서 데이터(카메라·LiDAR) 송수신에 주로 쓰는 통신 방식은?
✅ 답: 토픽(Topic)
💡 계속 흐르는 데이터 = 토픽(Pub/Sub).
문제 13. 토픽에서 데이터를 발행하는 주체와 구독하는 주체의 명칭(영어)은?
✅ 답: 발행 = Publisher, 구독 = Subscriber
💡 코드:
create_publisher(...)/create_subscription(...).
문제 14. 서비스 통신의 동기식 양방향 두 단계는?
✅ 답: Request(요청) 와 Response(응답)
💡 Client가 Request → Server가 처리 → Response 반환(7번의 액션 Goal/Feedback/Result와 헷갈리지 말 것).
문제 15. 오래 걸리는 작업에서 서비스 대신 액션을 쓸 때의 대표 장점 두 가지는?
✅ 답:
- 작업 중간 진행 상황(Feedback) 을 받을 수 있다.
- 작업 도중 취소(Cancel) 가 가능하다.
💡 (보너스) 오래 걸려도 결과를 기다리며 블로킹되지 않고 비동기로 처리된다는 점도 장점.
문제 16. 노드 내부에서 주기적으로 함수를 호출할 때 쓰는 타이머 생성 메서드는?
✅ 답: create_timer() — 예: self.create_timer(1.0, self.publish_message)
💡 첫 인자=주기(초), 둘째=콜백 함수.
문제 17. 현재 실행 중인 활성 노드 목록을 보는 CLI 명령어는?
✅ 답: ros2 node list
💡 특정 노드 상세는
ros2 node info /노드이름.
문제 18. 특정 토픽(/robot_status)의 메시지를 실시간 출력하는 CLI 명령어는?
✅ 답: ros2 topic echo /robot_status
💡 타입 확인은
ros2 topic type, 주기는ros2 topic hz.
문제 19. 워크스페이스 루트에서 패키지를 빌드하는 Colcon 명령어는?
✅ 답: colcon build (특정 패키지만: colcon build --packages-select <패키지>)
💡 반드시 워크스페이스 루트(
~/..._ws)에서 실행.
문제 20. 빌드 후 실행 환경을 현재 셸에 반영하려고 source 하는 파일의 상대 경로는?
✅ 답: install/setup.bash — source install/setup.bash
💡 ROS 2 기본(
/opt/ros/humble/setup.bash)을 먼저, 그다음 내 워크스페이스의install/setup.bash. (ROS 1은devel/setup.bash였다는 점이 대비 포인트.)
한 장 정리 — 헷갈리면 이것만
| 구분 | 핵심 |
|---|---|
| 노드 | 기능 단위 실행 프로그램 |
| 토픽 | 계속 흐르는 데이터(Pub/Sub, 느슨한 연결) |
| 서비스 | 요청/응답(Request·Response), 동기·즉시 |
| 액션 | 장시간 작업(Goal·Feedback·Result+Cancel) |
| Python/C++ | rclpy / rclcpp |
| 실행 등록 | setup.py(entry_points) / CMakeLists.txt |
| 루프 유지 | rclpy.spin() |
| 빌드·반영 | colcon build → source install/setup.bash |
단골 함정 3개: ① 토픽은 "직접 연결"이 아니라 이름·타입으로 느슨하게(4번) ② 액션 3요소에 Request 없음(7번, Request는 서비스) ③ ROS 2 빌드는 Catkin이 아니라 Colcon(2번).
📚 함께 보기 — Week1 Day2 본편
- 3/6 ROS 2 통신 4종 개념 — 노드·토픽·서비스·액션
- 4/6 토픽 Pub/Sub 직접 만들기
- 5/6 서비스·액션 구현
- 6/6 패키지 빌드 — Python·C++·colcon
'피지컬AI' 카테고리의 다른 글
| [Physical AI W2D2] 2/7 — 운동학 개념 ②: 역운동학·작업공간·자코비안·특이점 (0) | 2026.06.21 |
|---|---|
| [Physical AI W2D2] 1/7 — 운동학 개념 ①: 정운동학(링크·관절·자유도·2축 팔·동차변환행렬) (0) | 2026.06.21 |
| [Physical AI W2D1] 6/6 — 좌표 변환 실습: Python 변환 + TF Publisher + RViz (0) | 2026.06.20 |
| [Physical AI W2D1] 3/6 — RViz2 실습: GCP VM 헤드리스 GUI로 센서·TF 시각화 (0) | 2026.06.20 |
| [Physical AI W2D1] 5/6 — 좌표계와 동차 변환 행렬 ②: 3D·TF·Quaternion·기구학 (0) | 2026.06.20 |