드디어 시작된 로봇 부트캠프! 첫날과 둘째 날은 당장 복잡한 알고리즘을 짜기보다, 로봇 제어의 기초가 되는 탄탄한 환경을 구축하는 데 집중했다. 1일차의 '인프라 구축'부터 2일차의 '로봇 시각 구현'까지의 과정을 정리해 본다.
첫날은 팀 프로젝트를 위한 환경 세팅의 연속이었다. 로봇이 내리는 명령을 정확히 수행하기 위해서는 PC와 로봇 사이의 통신이 무엇보다 중요하기 때문이다.
시뮬레이션과 딥러닝 구동을 위해 NVIDIA 그래픽 드라이버를 퍼포먼스 모드로 세팅하고, ROS2 Humble 버전을 설치했다.
환경 설정: Locale 설정(UTF-8)과 .bashrc 환경변수 등록 등 기초적인 세팅을 완료했다.
유틸리티: 화면 녹화용 Peek, 스크린샷 편집용 Flameshot을 설치해 개발 효율을 높였다.
교육장에는 수많은 로봇이 있기에, 내 PC가 우리 팀 로봇만 정확히 제어할 수 있도록 Discovery Server를 구성했다.
네트워크 분리: 공유기를 허브로 PC와 로봇(Raspberry Pi)을 동일 Wi-Fi 대역으로 묶어 DDS 통신을 안정화했다.
고유 ID 부여: 팀별 ROS_DOMAIN_ID를 설정해 통신 채널을 완벽하게 격리했다.

💡 로봇의 상태 확인 (LED)
TurtleBot4 상단의 5개 LED(MTR, Comm, WiFi/Battery, Power)가 모두 초록색인지 확인하자. 하나라도 꺼져 있다면 모터 전원, 네트워크 연결, 배터리 상태 등 해당 항목에 문제가 있다는 신호다.
🚀 첫 주행과 커스텀 패키지
/cmd_vel 토픽을 활용한 키보드 제어부터 Action 통신을 이용한 거리/각도 기반 주행까지 성공했다. 마지막에는 turtlebot4_beep라는 커스텀 패키지를 빌드하며 ROS2 노드 구성 방식을 익혔다. 첫날은 실수로 Ctrl+C를 눌러 세팅이 꼬이는 바람에 밤 10시까지 고군분투했지만, 덕분에 환경 세팅의 중요성을 뼈저리게 배울 수 있었다.
2. 2일차: 로봇에게 눈을 달아주다 (Depth 카메라)
2일차에는 로봇이 주변 환경을 인지하게 만드는 '시각' 기술을 배웠다. 우리 팀의 첫 프로젝트 주제인 'SLAM 기반 자율주행'의 핵심인 Depth(깊이) 카메라를 다루는 날이었다.
👁️ 시차(Disparity)의 원리
로봇이 거리를 인식하는 핵심은 스테레오 카메라(OAK-D)이다. 두 개의 렌즈에 찍힌 물체의 '위치 차이(시차)'가 클수록 가까운 물체이고, 차이가 작을수록 먼 물체라는 원리를 통해 거리를 역산한다.
🛠️ 실전: Depth 데이터 추출
기본적으로 TurtleBot4는 대역폭 보호를 위해 Depth 데이터를 전송하지 않는다.
드라이버 수정: 로봇 내부 SSH에 접속해 oakd_pro.yaml 파라미터를 수정하여 RGBD 모드를 활성화했다.
토픽 확인: ros2 topic list를 통해 /oakd/stereo/image_raw와 같은 깊이 관련 토픽들이 발행되는 것을 확인했다.
노드 구현 (rokey_pjt): * depth_checker: 카메라 영상에서 실시간으로 거리 값을 출력하는 노드.
depth_checker_click: 특정 픽셀을 마우스로 클릭해 해당 지점의 거리를 측정하는 노드.
💡 2일차의 성과
단순히 화면을 보는 것을 넘어, "내 앞 0.5m에 장애물이 있다"는 수치 데이터를 직접 추출했다. 로봇 자율주행의 가장 기초적이면서도 필수적인 데이터를 손에 넣은 것이다.
어제 ROS2 세팅에서 고생한 보람이 있었는지, 오늘은 빌드(colcon build) 성공 메시지가 유독 반가웠다. oakd_pro.yaml 설정 오타로 드라이버가 로드되지 않아 헤매기도 했지만, 결국 로봇 뷰어에 정확한 거리 값이 찍히는 것을 확인했을 때의 쾌감은 이루 말할 수 없었다.
이제 로봇이 세상을 수치로 인식할 수 있게 되었으니, 내일은 이 재료들을 활용해 본격적인 지도 작성(Mapping)에 도전할 예정이다. 3일차는 또 얼마나 흥미로울지 기대된다! 🚀