PhysiCar ROS 2¶
examples/physicar-ros.ipynb는 로봇의 두 프로그래밍 인터페이스 — ROS 2 토픽과
로컬 Web API — 를 셀 단위로 실행해 보는 투어입니다. 모든 센서를 읽고, 모든 제어를
퍼블리시하고, 모든 엔드포인트를 호출해 봅니다. 다른 예제들은 전부 이 노트북이 보여주는
것의 래퍼입니다 — 먼저 돌려 두면 어떤 예제도 마법처럼 보이지 않습니다.
노트북 구성¶
| 섹션 | 실행하는 것 |
|---|---|
| 1. ROS 2 Interfaces | rclpy 셋업, 이어서 모든 센서 토픽 — 카메라, 배터리, IMU, 오도메트리, 라이다 — 과 모든 제어 토픽: /cmd_vel, /speed, /steering, 카메라 팬·틸트 |
| 2. Web API | 같은 로봇을 HTTP로: 센서 조회(스트리밍 포함), 제어 — duration 주행과 WebSocket 데드맨 스위치 포함 — 그리고 오디오 재생 |
실행¶
- 작업 공간 파일 탐색기에서
examples/physicar-ros.ipynb를 여세요. - 커널을 물으면 Python 3 (PhysiCar AI) 를 선택하세요.
- 각 섹션의 셋업 셀을 먼저 실행하고, 그다음엔 관심 가는 곳부터 돌아다녀도 됩니다.
시뮬레이터와 실물 키트에서 똑같이 돌아갑니다 — 그게 핵심입니다: 토픽과 엔드포인트가 동일하므로, 이 노트북이 곧 Sim2Real 계약서입니다.
눈여겨볼 것¶
wait_for_message— 노드를 spin하지 않고 메시지 한 개만 수신하기; 노트북에서 ROS 2를 편하게 쓰는 패턴.- 센서 QoS — 라이다는 best-effort로 퍼블리시합니다;
qos_profile_sensor_data로 구독하지 않으면 아무것도 오지 않습니다. - 워치독 — 일반
/speed명령은 약 1초 뒤 만료됩니다. 소식이 끊긴 로봇은 멈추는 로봇입니다. POST /speed+duration— 서버가 속도를 유지하다가 끝나면 멈추고, 그제서야 응답합니다. 요청 하나 = 완결되고 안전한 기동 하나.- 단위 — 속도는 m/s;
/steering은 라디안, ±0.35(≈±20°); 카메라 팬·틸트 ±30°. - 오디오 —
POST /audio/play는 URL, 파일 경로, base64를 받습니다; 시뮬레이터에서는 브라우저 뷰어에서 소리가 납니다.
🛠 미션: Web API 호출만으로 (모서리가 둥근) 사각형을 그리며 주행해 보세요:
duration을 준 POST /speed 네 번, 그 사이마다 POST /steering 한 번.
더 알아보기
토픽과 노드, 차근차근 → ROS2 기초. 전체 토픽 목록 → ROS2 인터페이스 레퍼런스. 전체 엔드포인트 목록 → Web API.