자율 주행 동키카: 텐서플로 MobileNetV2 AI로 쓰레기 수거하기
라즈베리파이 3와 Pi Camera에서 텐서플로의 SSD MobileNetV2를 사용해 쓰레기를 감지하고 수거하는 자율 주행 RC카를 만드세요.
프로젝트 개요
이 가이드는 표준 RC카(라즈베리파이 + Pi Camera)를 자율 쓰레기 수거기로 변환하는 방법을 보여줍니다. 솔루션은 두 개의 경량 신경망에 의존합니다: 하나는 실시간 객체 감지용, 다른 하나는 조향 및 스로틀 제어용. 파이 3의 제한된 RAM과 CPU로는 한 번에 하나의 모델만 실행할 수 있어 감지와 주행을 타임 슬라이스 방식으로 번갈아 수행합니다.
핵심 아이디어는 쓰레기통을 인식하도록 모델을 훈련시킨 뒤 차를 쓰레기통 쪽으로 주행시켜 자율적으로 쓰레기를 수거하는 것입니다.
자동차와 노트북 구성 요소 식별
프로젝트는 두 가지 주요 단계로 구성됩니다:
- 객체 감지 – 적당한 컨볼루션 네트워크가 텐서플로와 OpenCV로 Pi Camera 피드를 처리합니다.
- 행동 클로닝 – 사람이 조향과 스로틀 입력을 모방함으로써 차가 자율 주행을 학습합니다. 추가 센서(초음파, GPS, 6-DOF IMU)가 훈련 데이터와 텔레메트리를 풍부하게 합니다.
소개
2019년 출시된 MobileNetV2는 임베디드 디바이스를 위해 설계되었습니다. 라즈베리파이 3의 CPU는 MobileNetV2 SSD를 편안하게 실행할 수 있지만, 과도한 RAM을 요구하는 무거운 YOLO 변형은 실행할 수 없습니다.
VGG16(약 350MB 가중치) 실행 시도는 파이에서 실패했으며, 이는 더 슬림한 모델의 필요성을 강조합니다. 사전 훈련된 MobileNetV2 SSD로 전이 학습하면 최소한의 풋프린트로 높은 정확도를 얻을 수 있습니다.
하드웨어 수정
기본 차량은 Magnet RC카로, 이를 DonkeyCar 섀시로 개조했습니다. 주요 변경 사항:
- 상단 커버 분해로 수신기, ESC, 서보 접근.
- 원래 클립을 대체할 두 개의 3D 프린트 어댑터 설치.
- 라즈베리파이와 전용 서보 컨트롤러를 나무 판에 장착.
- 서보 컨트롤러를 차량의 조향(채널 0)과 스로틀(채널 1)에 I²C로 연결.
- 6-DOF MPU6050 IMU, GPS 모듈, HC-SR04 초음파 센서 추가 (5V 레벨 시프터 필요).
완성된 차량에는 이제 다음이 포함됩니다:
- 단안 광각 Pi Camera
- 조향용 서보 컨트롤러
- 가속도 및 자이로 데이터용 6-DOF IMU
- 야외 위치 측정용 GPS
- 장애물 회피용 초음파 거리 센서
모든 센서 데이터는 타임스탬프와 함께 tub 프레임워크를 통해 기록되어 훈련 데이터셋을 보강합니다.
소프트웨어 설정
소프트웨어 스택은 최소하면서도 강력합니다: 텐서플로, OpenCV, 몇 가지 파이썬 유틸리티. 아래는 단계별 설치 가이드입니다.
1. 텐서플로, OpenCV, 의존성 설치
pip install tensorflow[pi]
pip install matplotlib raspberry
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install qt4-dev-tools
pip3 install opencv-python
텐서플로는 자체 모델 형식을 요구하므로 공식 텐서플로 모델 저장소를 사용하고 PYTHONPATH를 적절히 설정하세요:
git clone --recurse-submodules https://github.com/tensorflow/models.git
export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim
2. 프로토콜 버퍼 컴파일러 설치
ProtoBuf는 MobileNetV2 SSD 가중치 로드에 필요합니다.
sudo apt-get install autoconf automake libtool curl
wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all-3.5.1.tar.gz
tar -zxvf protobuf-all-3.5.1.tar.gz
cd protobuf-3.5.1
./configure
make
make check
sudo make install
cd python_export
python3 setup.py build --cpp_implementation
python3 setup.py test --cpp_implementations
sudo python3 setup.py install --cpp_implementation
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=3
sudo ldconfig
protoc --version
3. IMU 및 GPS 통합
meta.json과 manage.py 스크립트에 MPU6050을 추가해 가속도와 자이로 데이터 캡처:
{
"inputs": ["cam/image_array", "user/angle", "user/throttle", "user/mode", "imu/acl_x", "imu/acl_y", "imu/acl_z", "imu/gyr_x", "imu/gyr_y", "imu/gyr_z"],
"types": ["image_array", "float", "float", "str", "float", "float", "float", "float", "float", "float"]
}
필요한 파이썬 라이브러리 설치:
sudo apt-get install python3-smbus
pip install mpu6050-raspberrypi
pip install RPi.GPIO
4. 마무리 단계
모든 의존성 설치 후 가상 환경 비활성화 및 파이 재부팅:
deactivate
sudo shutdown -h now
이제 차량은 객체 감지용 SSD MobileNetV2와 자율 주행용 행동 클로닝 모델을 실행할 준비가 되었습니다.
결론
경량 신경망과 견고한 센서 통합을 결합함으로써 라즈베리파이 3가 쓰레기통을 안정적으로 감지하고 수거할 수 있게 되어, 확장 가능하고 저비용의 자율 폐기물 수거 솔루션의 길을 열었습니다.