안녕하세요! Mana’s Lab입니다.
소형 RC카나 자율주행 로봇(AGV) 프로젝트를 진행할 때 가장 기본적이면서도 까다로운 과제가 바로 ‘장애물 회피(Obstacle Avoidance)’입니다.
보통 입문용으로 초음파 센서(HC-SR04)를 가장 먼저 떠올리지만, 실제 주행을 시켜보면 의자 다리나 책상 기둥에 그대로 충돌하는 문제에 봉착하게 됩니다.
이번 글에서는 초음파 센서가 왜 의자 다리를 감지하지 못하는지 물리적 한계를 짚어보고, 이를 해결하기 위한 VL53L0X ToF 레이저 센서 활용법 및 최적의 시스템 제어 알고리즘을 정리해 보겠습니다.
1. 초음파 센서는 왜 의자 다리를 놓칠까?
초음파 센서 3개를 좌/정면/우에 배치하면 벽이나 큰 상자 같은 장애물은 잘 피합니다. 하지만 방 안의 의자 다리나 얇은 철제 기둥을 만나면 어김없이 충돌합니다.
Plaintext
🛠️ 물리적 한계 원인
- 음파 산란(Diffuse Reflection): 초음파 빔 폭은 약 15°~30°로 넓게 퍼집니다. 가느다란 원통형 기둥에 맞은 음파는 센서로 되돌아가지 못하고 옆으로 꺾여 나가버려, 센서는 전방이 뚫려있다고 오인합니다.
- 낮은 각도 분해능: 서보모터에 초음파 센서를 달아 회전시켜도, 넓은 빔 특성 때문에 얇은 기둥의 정밀한 위치를 짚어낼 수 없습니다.
2. 해결책: ToF(Time-of-Flight) 레이저 센서의 도입
이 문제는 직진성이 매우 강하고 빔이 가느다란 VL53L0X ToF 레이저 센서를 사용하면 깔끔하게 해결됩니다.
💡 ToF(Time-of-Flight)란?
빛(적외선)을 쏘아 목표물에 맞고 되돌아오는 **비행 시간(t)**을 피코초 단위로 측정하여 거리를 계산하는 방식입니다. (Distance=2c×t)
물체의 색상이나 면적의 영향을 적게 받으며, 가느다란 의자 다리에도 레이저 빔이 정확히 반사되어 들어옵니다.
3. 서보모터 + ToF 센서 조합 시 주의점
그렇다면 SG90 서보모터 위에 VL53L0X 센서를 얹고 180도를 지속적으로 회전시키면 될까요? 아쉽게도 연속 회전 방식은 주행 중 오차가 매우 큽니다.
⚠️ 연속 회전 시 발생하는 이슈
- 진동 및 지터(Jitter): 저가형 서보모터의 미세한 떨림이 레이저 빔을 흔들어 거리 측정 오류를 유발합니다.
- 샘플링 타임 지연: ToF 센서가 1회 측정에 소요하는 시간(20~50ms) 동안 모터가 계속 움직이면 데이터 왜곡이 생깁니다.
💡 올바른 접근: Step-and-Scan (정지 후 측정)
오류 없는 데이터를 얻으려면 각도 이동 → 지터 안정화 대기(10~15ms) → ToF 측정 프로세스를 거쳐야 합니다.
4. 실전 알고리즘: 전방 60도 고속 스윕(Sweep)
180도 전체를 2도 간격으로 정밀 스캔하면 1회 탐색에 4~5초가 걸립니다. 차가 달리는 도중에는 반응 속도가 너무 느려 이미 충돌하게 됩니다.
실시간 자율주행을 위해서는 스캔 범위를 전방 ±30°(총 60도) 영역으로 압축하는 것이 핵심입니다.
Plaintext
- 스캔 범위: 60° ~ 120° (90° 정면 기준)
- 스캔 간격: 5° 간격 (총 13개 측정 포인트)
- 소요 시간: 약 0.15초~0.2초 (초당 5회 고속 탐색!)
5. MicroPython 핵심 제어 코드
ESP32 / RP2040 환경에서 동작하는 MicroPython 실전 회피 주행 예시입니다. 서보모터의 왕복 스캔을 비동기적으로 처리하며 전방 기둥을 감지합니다.
Python
6. 결론 및 하드웨어 구성 비교 한눈에 보기
RC카 장애물 회피 시스템을 구성할 때 목적에 맞춘 센서 추천 요약입니다.
| 회피 방식 | 장점 | 단점 | 비고 |
|---|---|---|---|
| 초음파 센서 3개 | 저렴하고 구현이 쉬움 | 의자 다리, 기둥 감지 불가 | 벽면 위주 공간에 적합 |
| 서보 + ToF 센서 1개 | 알뜰한 부품 구성, 의자 다리 감지 | 기계적 대기시간 존재 (스캔 속도 제한) | 본 포스팅 권장 방식 |
| ToF 센서 3개 고정 배열 | 기계적 유격 없음, 초당 30회 고속 회피 | I2C 주소 변경(XSHUT 핀) 제어 필요 | 주행 속도/반응성 최강 |
가느다란 기둥이나 복잡한 실내 환경에서 RC카 자율주행을 구현하신다면, 초음파 대신 ToF 레이저 센서를 활용한 고속 스캔 방식을 강력히 추천합니다!
** 기타
1. 대표 센서별 장애물 감지 성능 비교
| 센서 종류 | 원리 | 의자 다리/가근 기둥 감지 | 실시간성 / 스캔 속도 | 환경 영향 (빛/날씨) | 가격 & 구현 난이도 |
|---|---|---|---|---|---|
| 초음파 (HC-SR04 등) | 음파 반사 시간 | ❌ 불가 (음파 산란) | 보통 (소리 속도 제약) | 바람/소음 영향 | 매우 저렴 / 쉬움 |
| 단일 ToF 레이저 (VL53L0X 등) + 서보 | 적외선 비행 시간 | ⭕ 우수 | 보통 (기계적 이동 제약) | 직사광선 아래 오차 | 저렴 / 보통 |
| 멀티 ToF 고정 배열 (2~3개) | 적외선 비행 시간 | ⭕ 우수 | ⚡ 매우 빠름 (고정형) | 직사광선 아래 오차 | 약간 증가 / 쉬움 |
| 회전형 2D LiDAR (RPLiDAR 등) | 360° 모터 회전 레이저 | ⭕ 최상 | ⚡ 매우 빠름 (초당 5~10회) | 직사광선 아래 오차 | 고가 / 어려움 |
| 카메라 (AI/Vision / Depth) | 이미지 분석 / 격자 측정 | ⭕ 최상 | CPU/MCU 성능에 의존 | 조도(밝기) 영향 | 고가 / 매우 어려움 |
2. RC카 회피 알고리즘 추천 (목적/예산별)
🥇 최리얼타임 추천 1: ToF 레이저 센서 3개 고정 배열 (성능 vs 가성비 최강)
서보모터로 회전시키는 기계적 유격/지연을 완전히 없애고, VL53L0X 센서 3개를 좌/정면/우 고정각으로 배치하는 방식입니다.
Plaintext
- 장점:
- 기계적 움직임(서보모터)이 전혀 없어 반응 속도가 초당 30회 이상으로 매우 빠릅니다.
- 레이저 빔이 가느다란 의자 다리나 책상 다리를 달리는 중에도 놓치지 않고 감지합니다.
- 회로 및 모터 진동 노이즈 문제에서 자유롭습니다.
- 구현 핵심:
- I2C 주소가 같은 센서 3개를
XSHUT핀을 사용해 각각 다르게 주소를 부여하여 독립적으로 읽어옵니다.
- I2C 주소가 같은 센서 3개를
🥈 추천 2: 서보모터 + ToF 레이저 1개 (전방 60도 고속 스캔)
현재 검토하셨던 방식으로, 센서 추가 구매 없이 기존 모듈을 활용하는 가장 알뜰한 방법입니다.
- 장점: 센서 1개로 전방 60도 영역 전체의 거리 지도를 얻을 수 있습니다.
- 단점: 서보모터 스텝 이동 대기시간(10~15ms) 때문에 반응 속도가 고정형 3개 방식보다는 떨어집니다.
🥉 최종 끝판왕: 2D LiDAR (RPLiDAR A1 등)
소형 슬립링 모터가 내부에서 초당 5~10회 회전하며 전방 360도 전체의 정밀한 거리 점군(Point Cloud) 데이터를 뽑아냅니다.
- 장점: 실시간 장애물 회피는 물론, 지도 작성(SLAM)과 자율주행 경로 생성까지 완벽히 가능합니다.
- 단점: 센서 가격이 높고, 센서 데이터를 처리하기 위해 라즈베리 파이 같은 उच्च성능 SBC(Single Board Computer) 및 ROS 환경이 필요합니다.
💡 결론 및 최종 제안
- 가느다란 기둥(의자 다리)을 확실히 피하면서 달리려면:
초음파는 무조건 제외하고ToF 레이저 센서를 사용해야 합니다. - 달리는 속도를 유지하고 싶다면: 서보모터를 빼고
ToF 센서 3개 고정 배치방식이 반응 시간과 회피 정확도 면에서 최고의 선택입니다. - 부품을 새로 사지 않고 기존 장비(서보+VL53L0X)로 완성하려면: 앞서 작성해 드린
전방 60도 고속 스윕(Sweep)알고리즘이 가장 합리적인 솔루션입니다.


답글 남기기
댓글을 달기 위해서는 로그인해야합니다.