Raspberry Pi + ROS2 + LiDAR + 3D 프린팅 — 클라우드 없이 내 집을 청소하는 DIY 로봇청소기 프레임워크
(저장소: makerspet/oomwoo · 문서·펌웨어 · ★1k · Apache-2.0)
상용 로봇청소기처럼 생겼지만 내부는 완전히 오픈소스: 하드웨어 설계파일(CAD/STL), 회로 PCB, 펌웨어, ROS2 소프트웨어, 빌드 가이드까지 전부 공개한다. 클라우드 서버 없이 집 안 WiFi 네트워크만으로 동작하며, Home Assistant로 원격 제어도 된다.
현재 상태(2026-06-29 기준): 설계·RFC(기여 요청) 단계 — 아직 완성된 하드웨어가 없다. BOM(부품 목록) 확정 목표는 2026년 7월 중순, MVP 시연은 2026년 8월 31일 예정이다.
Roborock·Ecovacs 등 상용 제품은 SLAM으로 만든 집 구조 지도, 청소 경로, 심지어 카메라 영상까지 서버에 전송한다. 2023년 iRobot/Roomba 사용자 사진 유출 사건이 단적인 예다.
전용 부품(브러시, 필터, 배터리)은 제조사 독점 공급이라 단종되면 폐기해야 한다. 소프트웨어 업데이트가 끊기면 보안 취약점도 방치된다.
앱을 꺼도 동작하는 기능이 없고, Home Assistant 연동이 비공식 역공학 의존적이며, 알고리즘 커스터마이즈는 불가능하다.
클라우드 의존 없이 RPi 5 위에서 ROS2가 SLAM·Nav2를 돌린다. 모든 하드웨어 파일이 공개되어 3D 프린터로 부품을 직접 제작하고, 통용 규격 소모품(범용 브러시·필터)을 쓴다. Home Assistant 네이티브 연동이 설계 단계부터 고려되어 있다.
| 프로젝트 | 특징 | oomwoo와 차이 |
|---|---|---|
| Valetudo | 상용 기기 클라우드 제거 펌웨어 | 기존 제품 개조 — oomwoo는 처음부터 오픈소스로 제작 |
| AlieksieievYurii/vacuum-cleaner | RPi Zero W, 자이로 기반, Fusion 360 | LiDAR SLAM 없음, 독 없음, Home Assistant 미지원 |
| remakeai/vacuum_ros2_bridge | 시판 진공청소기에 ROS2 브리지 | 기존 제품 해킹 — oomwoo는 100% 자체 설계 |
| oomwoo | 2D LiDAR + SLAM + Nav2 + HA 네이티브 | 풀스택 오픈소스, 커뮤니티 병렬 개발, 앱 플랫폼 비전 |
| 부품 | 역할 |
|---|---|
| Raspberry Pi 5 (4GB) | 두뇌 — ROS2, SLAM, Nav2, 카메라 ML 전부 여기서 돌아감 |
| 2D LiDAR (CRL-200S / LD14P) | 레이저 거리 측정기. 360° 회전하며 방 형태를 스캔 |
| VL53L7CX (ToF 센서) | 바닥 가까이 있는 케이블·양말 탐지 (LiDAR 사각지대 보완) |
| 컬러 카메라 | 장애물 AI 인식 (RPi CSI/USB로 직접 연결) |
| IMU | 기울기·가속도 측정 — 오도메트리(위치 추정) 보조 |
| IR 절벽 센서 3~4개 | 계단 낙하 방지 |
| 범퍼 마이크로스위치 | 충돌 감지 (저비용·고신뢰) |
| 구동 휠 모듈 ×2 | 모터+엔코더+서스펜션 통합 모듈 — 완성품 구매 |
| 석션 블로워 (BLDC) | 흡입 팬. 실링(밀봉)이 흡입력보다 중요 |
| 메인 브러시 (테이퍼형 러버 롤러) | 머리카락 엉킴 최소화 설계 |
| 배터리 팩 14.8V Li-ion + BMS | 전원 — 안전 검토 필수 |
STM32G070RBT6 MCU를 탑재한 커스텀 PCB (JLCPCB에서 SMT 조립)가 하드웨어와 RPi 5 사이를 중재한다. MCU는 micro-ROS를 돌리며 모터·센서의 실시간 I/O를 처리하고, USB/UART 고속 링크로 RPi에 데이터를 올린다. RPi 5는 무거운 SLAM·Nav·카메라 ML을 담당한다.
RPi 5 = 두뇌(판단), STM32 PCB = 척수(반사). 뇌가 "오른쪽으로 가"라고 명령하면 척수(PCB)가 근육(모터)을 직접 제어한다. 덕분에 뇌(RPi)가 바빠도 모터는 정확한 타이밍에 반응한다.
| 컴포넌트 | 역할 |
|---|---|
| ROS2 (Humble/Jazzy) | 로봇 미들웨어 — 노드 간 메시지 버스 (토픽·서비스·액션) |
| slam_toolbox / cartographer | LiDAR 스캔 → 2D 점유 격자 지도 생성 + 현재 위치 추정 |
| Nav2 (Navigation2) | 지도 위에서 목적지까지 경로 계획 + 장애물 회피 |
| URDF + TF2 | 로봇 3D 모델 정의 + 각 센서/관절의 좌표 변환 트리 |
| Gazebo (시뮬레이터) | 실제 하드웨어 없이도 실내 환경에서 알고리즘 테스트 |
| micro-ROS | STM32(MCU) 위에서 돌아가는 경량 ROS2 클라이언트 |
| kaiaai/LDS 라이브러리 | 23+ 종 2D LiDAR 모델을 단일 인터페이스로 지원하는 드라이버 |
| 기술 | 역할 |
|---|---|
| Home Assistant | 청소 명령, 상태 표시, 지도 시각화 — MQTT/HA 엔티티로 연동 |
| Podman 컨테이너 (Phase 3+) | 제3자 앱을 ROS2 지식 없이 샌드박스에서 실행하는 앱 플랫폼 |
LiDAR가 초당 수천 점의 거리 데이터를 생성한다. STM32 PCB가 LiDAR 모터 속도를 일정하게 유지하고, 데이터를 RPi로 패스스루한다.
/scan → ROS2 토픽으로 발행 (sensor_msgs/LaserScan)
slam_toolbox가 /scan과 /odom(휠 엔코더)을 받아 2D 점유 격자 지도(OccupancyGrid)를 계속 갱신하고, 로봇이 지도 위 어디에 있는지 동시에 추정한다.
지도 + 현재 위치 + 목적지를 입력받아 A* / DWA 알고리즘으로 경로를 계획하고, 장애물이 생기면 실시간으로 회피한다. /cmd_vel 토픽에 선속도·각속도를 발행한다.
/cmd_vel의 속도 명령을 왼쪽·오른쪽 휠 각각의 RPM으로 변환하여 micro-ROS를 통해 STM32 PCB에 전달, 모터드라이버가 PWM 신호로 모터를 구동한다.
SLAM = 눈 감고 낯선 방에서 걸으며, 동시에 방 지도를 그리고 + 내 위치를 찾기. 처음에는 지도도 없고 내 위치도 모른다. 발소리(엔코더)와 손이 닿는 벽(LiDAR)으로 지도를 그리면서 동시에 "나는 지금 지도의 이 부분에 있다"를 계속 추정한다. 이게 Simultaneous Localization And Mapping이다.
makerspet/oomwoo-install: ROS2 + Ubuntu 설치 스크립트. makerspet/oomwoo_urdf: URDF 패키지(로봇 3D 모델). remakeai/vacuum-cleaner-teardown: 참고 상용 진공청소기 분해 분석 — 치수·기구학 기준점.
배울 것: STM32 MCU 핀 배치와 주변 장치(UART, I²C, PWM, ADC) 설계. BLDC 모터 드라이버 회로. 배터리 BMS 통합 및 안전 설계. micro-ROS로 MCU를 ROS2 네트워크의 노드로 만드는 방법.
실제 기술: 실시간 제어 루프(엔코더 피드백 → PID 속도 제어), 모터 스톨 감지, 전원 시퀀싱.
배울 것: 토픽(발행-구독), 서비스(요청-응답), 액션(장기 작업)의 차이. TF2 좌표 변환 트리(base_link→lidar_link 등). URDF로 로봇 형태 기술하기. Launch 파일로 노드 묶어 실행하기.
실제 기술: ROS2 패키지 생성, Python/C++ 노드 작성, rosbag2로 데이터 기록 및 재생.
배울 것: 2D 점유 격자 지도(OccupancyGrid)의 의미. slam_toolbox의 그래프 기반 SLAM 원리. AMCL(Monte Carlo Localization)으로 이미 만든 지도에서 위치 추정. Nav2의 전역/지역 경로 계획 파이프라인(GlobalPlanner + LocalPlanner).
배울 것: Gazebo 플러그인으로 차동 구동 로봇 시뮬레이션. SDF/URDF 월드 파일 작성. 시뮬레이션에서 검증된 알고리즘을 실 하드웨어에 배포하는 "sim-first" 개발 방법론.
배울 것: FDM 프린팅으로 기구물 설계할 때의 공차(tolerance)·결합(mating) 원칙. "인쇄 vs 소싱" 결정 기준 (정밀 기구부는 소싱, 형상체는 인쇄). 실용 CAD 규칙: 볼트 홀은 0.2mm 여유, 슬라이딩 핏은 0.3mm 여유.
2026년 7월 중순에 첫 검증 BOM이 확정될 예정이다. 아래 표의 가격은 프로토타입 수량 기준 중국 소싱 참고가이며, 개인 조달 시 편차가 크다.
| 부품 | 수량 | 참고가 (USD) |
|---|---|---|
| 구동 휠 모듈 (모터+엔코더+서스펜션) | 2 | $12–27 |
| 캐스터 휠 (수동 회전) | 1 | $0–3 (또는 3D 프린팅) |
| 석션 블로워 (BLDC) | 1 | $8–20 |
| 메인 브러시 + 모터 (테이퍼 러버 롤러) | 1 | $5–12 |
| 사이드 브러시 + 모터 | 1–2 | $3–8 |
| 배터리팩 14.8V Li-ion + BMS | 1 | $15–30 |
| 2D LiDAR (CRL-200S / LD14P) | 1 | $30–40 |
| VL53L7CX (다중존 ToF 센서) | 1 | $8–15 |
| 컬러 카메라 (CSI/USB) | 1 | $5–15 |
| IMU | 1 | $2–5 |
| IR 절벽/근접 센서 | 3–4 | $3–8 |
| 범퍼 마이크로스위치 | 2–3 | $1–3 |
| 초음파 카펫 센서 | 1 | $2–5 |
| 스피커 앰프, 마이크, LED, 버튼 | — | $3–8 |
| 커스텀 I/O PCB (JLCPCB SMT 조립) | 1 | $15–40 |
| 배선, 커넥터, 나사, 마그넷, 가스켓, 필터 | — | $12–25 |
| 3D 프린팅 부품 (필라멘트) | — | $5–15 |
| 로봇 부품 합계 (SBC 제외) | — | ~$130–270 |
| Raspberry Pi 5 (4GB) | 1 | ~$60 |
| Hailo AI HAT (선택, 카메라 NPU) | 1 | ~$70 |
| 등급 | 기능 | 추가 부품 (개요) |
|---|---|---|
| 기본 충전 독 (첫 릴리스) | 충전만 | 3D 프린팅 하우징 + 포고핀 + IR 비콘 + 어댑터 |
| 자동 먼지 비움 독 | 충전 + 먼지 자동 흡입 | 독 자체 팬 + 먼지통/백 + 밀봉 포트 |
| 올인원 독 (세척+건조) | 충전 + 먼지 비움 + 걸레 세척·건조 | ESP32 컨트롤러 + 펌프 2개 + 히터·팬 + 물탱크 2개 |
| 장비 | 용도 |
|---|---|
| FDM 3D 프린터 | 섀시·더스트빈·탑커버 등 구조 부품 출력 |
| 납땜 인두 | 커넥터 납땜, PCB 수정 |
| 멀티미터 | 배선 확인, 전압 측정 |
| Linux PC / Raspberry Pi | ROS2 개발, 크로스컴파일 |
| ST-Link 디버거 | STM32 펌웨어 플래싱 및 디버깅 |
| 드라이버 세트 (M2~M4) | 기계 조립 |
로봇 부품 합계($130–270) + RPi 5($60) + LiDAR($35) = 총 $225–365 (약 30–50만원). 여기에 Hailo HAT 추가 시 $70 더. 반면 Roborock S8+ 같은 동급 상용 제품은 $500–600. 가격으로 이기는 DIY가 아니라, 개방성·학습·수리권·커스터마이즈가 가치인 DIY다.
oomwoo URDF를 Gazebo에 불러오고, teleop_twist_keyboard로 키보드로 움직여 보자. 하드웨어 전혀 필요 없음 — ROS2 Humble + Gazebo만 설치하면 된다. ros2 launch oomwoo_urdf gazebo.launch.py로 시작.
Gazebo 실내 환경에서 slam_toolbox를 켜고 teleop으로 방을 돌아다니며 지도를 생성하라. 생성된 .pgm + .yaml 지도 파일을 저장하고, map_server로 다시 불러와 AMCL 위치 추정을 테스트하라.
contributions/urdf-gazebo-sim/ 폴더에 나만의 URDF 개선본을 작성하라. 예를 들어 LiDAR 마운트 위치를 다르게 해보거나, 범퍼 센서를 URDF에 추가하고 Gazebo 충돌 피드백을 연결하라. 실제 PR을 내보자.
LD14P 또는 호환 LiDAR를 RPi 5에 연결하고, oomwoo-install 스크립트로 ROS2 + kaiaai/LDS 드라이버를 설치하라. RViz2에서 실시간 /scan 포인트 클라우드를 확인하고, 방 안에서 수동으로 SLAM 지도를 만들어보라.
Nav2가 동작하는 ROS2 환경(또는 시뮬)에서 Home Assistant MQTT 브리지를 구성하라. HA 대시보드에 "청소 시작" 버튼을 만들고, 이 버튼이 ROS2 Nav2 목표점 액션을 트리거하도록 연결하라. 로봇 배터리 상태를 HA 센서로 노출하는 것도 추가하라.
| 주차 | 주제 | 핵심 자료 |
|---|---|---|
| 1–2주 | ROS2 기초: 노드·토픽·서비스·액션·파라미터 | 공식 ROS2 튜토리얼 (docs.ros.org) |
| 3주 | URDF + TF2: 로봇 형태 정의, 좌표 변환 | URDF 튜토리얼, tf2 ROS2 문서 |
| 4주 | Gazebo 시뮬레이션: 센서 플러그인, diff_drive | Gazebo Fortress/Harmonic 문서 |
| 5–6주 | SLAM: slam_toolbox 설정, 지도 저장/불러오기 | slam_toolbox GitHub + 논문 |
| 7–8주 | Nav2: 경로 계획, 행동 트리, DWA 튜닝 | Nav2 공식 문서 (nav2.org) |
| 9주 | micro-ROS: MCU에서 ROS2 노드 실행 | micro-ROS 공식 문서 + ST 보드 예제 |
| 10주 | oomwoo RFC 기여: urdf-gazebo-sim 모듈 제출 | oomwoo CONTRIBUTING.md + Discord |
| 11–12주 | Home Assistant MQTT 연동 + 커스텀 대시보드 | HA 공식 문서, MQTT 브로커(Mosquitto) |
| 13주+ | (선택) LiDAR 실 하드웨어 연결, SLAM 실환경 테스트 | kaiaai/LDS 라이브러리, LD14P 데이터시트 |
| 용어 | 한 줄 정의 |
|---|---|
| SLAM | Simultaneous Localization And Mapping — 지도를 만들면서 동시에 내 위치를 찾는 알고리즘 |
| ROS2 | Robot Operating System 2 — 로봇 소프트웨어 컴포넌트를 연결하는 미들웨어 프레임워크 |
| Nav2 | ROS2용 자율 내비게이션 스택 — 경로 계획 + 장애물 회피 |
| URDF | Unified Robot Description Format — XML로 로봇 형태(관절, 링크, 센서 위치)를 기술하는 포맷 |
| TF2 | Transform Library 2 — ROS2에서 센서·관절 간 3D 좌표 변환을 관리하는 라이브러리 |
| LiDAR | Light Detection And Ranging — 레이저 빛의 반사 시간으로 거리를 측정하는 센서 |
| 2D LiDAR | 평면(수평) 한 줄만 스캔 — 저렴하고 실내 내비에 충분. LD14P·CRL-200S가 예 |
| OccupancyGrid | 점유 격자 지도 — 각 셀이 "비어있음(0)/장애물(100)/미탐색(-1)"로 표현된 2D 배열 |
| AMCL | Adaptive Monte Carlo Localization — 입자 필터 기반으로 기존 지도에서 로봇 위치 추정 |
| micro-ROS | MCU(마이크로컨트롤러) 위에서 돌아가는 경량 ROS2 클라이언트 라이브러리 |
| diff_drive | Differential Drive — 두 바퀴 속도 차이로 방향을 바꾸는 구동 방식 (탱크와 같은 원리) |
| Gazebo | ROS2 생태계의 표준 3D 로봇 시뮬레이터 — 물리 엔진 포함 |
| BMS | Battery Management System — 배터리 과충전·과방전·온도 보호 회로 |
| ToF 센서 | Time-of-Flight — 빛이 왕복하는 시간으로 거리 측정 (LiDAR 사각지대 보완용) |
| RFC | Request for Contribution — oomwoo의 모듈별 커뮤니티 기여 요청 문서 |
| Valetudo | 상용 로봇청소기의 클라우드를 끊고 로컬 제어만 남기는 오픈소스 펌웨어 대체제 |
| BLDC | Brushless DC Motor — 브러시 없이 전자적으로 정류하는 고효율·장수명 모터 |
| FDM | Fused Deposition Modeling — 플라스틱 필라멘트를 녹여 쌓는 가장 일반적인 3D 프린팅 방식 |
| Home Assistant (HA) | 오픈소스 홈 자동화 플랫폼 — IoT 기기를 클라우드 없이 로컬에서 통합 제어 |
| 링크 | 내용 |
|---|---|
| makerspet/oomwoo | 메인 레포 — README, BOM, RFC 목록 |
| oomwoo-install | ROS2 + Ubuntu 자동 설치 스크립트 |
| oomwoo_urdf | URDF 패키지 (로봇 3D 모델) |
| kaiaai/LDS | 23+ 종 LiDAR 지원 드라이버 라이브러리 (C++/Python) |
| Valetudo | 상용 진공청소기 클라우드 제거 펌웨어 — 비교 학습용 |
| nav2.org | Nav2 공식 문서 — 자율 내비게이션 스택 |
| ROS2 공식 문서 | ROS2 Humble 튜토리얼 및 API 레퍼런스 |
| micro-ROS 공식 사이트 | MCU용 ROS2 클라이언트 — STM32 지원 포함 |
| makerspet YouTube | 빌드 인 퍼블릭 채널 — 제작 과정 영상 |
| oomwoo Discord | 커뮤니티 채널 — 질문 및 협업 |