GN⁺: HN 공개: ESP32 RC 자동차
(github.com/mattsroufe)ESP32 RC Cars
데모 비디오
- 이 프로젝트는 ESP32 기반 원격 제어 카메라 시스템을 시연함
- WebSockets를 통해 실시간 비디오 스트림을 전송하고 모터와 서보를 제어할 수 있음
- Python 서버 애플리케이션이 WebSocket 통신을 관리하고 ESP32 장치를 제어할 수 있는 웹 인터페이스를 제공함
기능
- ESP32-CAM에서 웹 서버로 실시간 비디오 스트리밍
- WebSocket 명령을 통한 모터와 서보의 원격 제어
- 모터와 서보를 기본 상태로 재설정하는 자동 타임아웃 기능
- 서버에서 동적 다중 클라이언트 비디오 피드 캔버스 제공
하드웨어 요구 사항
- ESP32-CAM (AI Thinker 모듈 또는 호환 보드)
- 적절한 GPIO 핀에 연결된 모터와 서보
- ESP32-CAM을 위한 안정적인 5V 전원 공급
- 선택 사항: 추가 기능을 위한 SD 카드
- 통신을 위한 Wi-Fi 네트워크
재료
- 모든 키트는 aliexpress에서 구매 가능
- 자동차 섀시, 전자 속도 제어기, 배터리 홀더, 18650 셀 또는 7.4v 배터리 팩, ESP32-CAM, 블루투스 게임패드(PS4 컨트롤러 사용)
소프트웨어 요구 사항
ESP32 코드
라이브러리
-
WiFi.h
: Wi-Fi 연결 -
ArduinoWebsockets.h
: WebSocket 통신 -
esp_camera.h
: ESP32-CAM 카메라 제어 -
ServoControl.h
및Esc.h
: 서보와 모터 제어 -
Arduino.h
: 표준 Arduino 함수
Python 서버
종속성
- 다음 Python 라이브러리 설치:
aiohttp
,opencv-python
,numpy
설정
ESP32 펌웨어
-
secrets.h
파일을 수정하여 Wi-Fi 자격 증명 및 WebSocket 서버 URL 포함 - 카메라 모듈, 모터, 서보의 GPIO 핀이 하드웨어 설정과 일치하는지 확인
Python 서버
- 웹 인터페이스를 위한
index.html
파일과 함께 서버 스크립트를 디렉토리에 배치 - 서버 시작:
python3 server.py
사용법
ESP32
- Arduino IDE 또는 호환 플랫폼을 사용하여 제공된 스케치를 ESP32-CAM에 업로드
- Wi-Fi 및 WebSocket 서버에 성공적으로 연결되었는지 직렬 출력을 모니터링
서버
- Python 서버 스크립트 실행
- 브라우저에서 웹 인터페이스를 열어 실시간 비디오 스트림 보기
- WebSocket 연결을 통해 제어 명령 전송
WebSocket 명령
-
MOTOR:<speed>
: 모터 속도 설정 (-255에서 255) -
SERVO:<angle>
: 서보 각도 설정 (0에서 180) -
CONTROL:<speed>:<angle>
: 모터 속도와 서보 각도를 동시에 제어
기술적 세부사항
ESP32 초기화
- Wi-Fi: 지정된 Wi-Fi 네트워크에 연결
- 카메라: 비디오 스트리밍을 위한 적절한 설정으로 ESP32-CAM 구성
- WebSocket: 서버와 WebSocket 연결 설정
타임아웃 처리
- 미리 정의된 타임아웃 기간 내에 제어 명령이 수신되지 않으면 모터 속도는
0
으로, 서보 각도는90
으로 재설정
Python 서버
- 여러 ESP32 클라이언트와의 WebSocket 통신 처리
- 수신된 비디오 프레임을 처리하고 동적으로 그리드에 배열
- 비디오 프레임 그리드를 웹 인터페이스로 스트리밍
문제 해결
연결 문제
-
secrets.h
에서 Wi-Fi 자격 증명 확인 - WebSocket 서버가 실행 중이고 접근 가능한지 확인
비디오 스트림 문제
- ESP32-CAM에 적절한 전원 공급 확인
- 카메라 초기화 설정 확인
라이선스
- 이 프로젝트는 MIT 라이선스 하에 오픈 소스로 제공됨
기여
- 애플리케이션 개선을 위한 이슈 제출이나 풀 리퀘스트 환영
Hacker News 의견
-
12년 전, Arduino는 있었지만 ESP32는 없던 시절에 HTC Magic 폰을 사용해 카메라와 WiFi 송신기로 활용하고, Arduino와 연결하여 서보와 RGB LED를 제어하는 프로젝트를 진행했음. 연결이 안정적이지 않았지만 재미있었음
- 프로젝트를 공유해줘서 고맙고, 차세대 마이크로컨트롤러로 프로젝트를 부활시키고 싶음
- 프로젝트에 대한 피드백에 감사하며, 계속 진행하고 싶고 PR을 보고 싶음
- 프로젝트를 좋아한다면, 원격 개발자를 찾는 사람에게 소개해주면 좋겠음. Ruby-on-Rails 개발자이지만 로봇 공학 작업도 고려 중임
-
RC 자동차 자동화에 관심이 있다면 재미있는 읽을거리임. 몇 년 전 자료이지만 오늘날에는 더 쉬운 방법이 있을 수 있음
-
ESP32 CAM을 구매하기 전에 외부 안테나가 있는 것을 고려하는 것이 좋음. Reddit에서 프레임 속도 문제에 대한 조언을 참고했음
-
최근 Rust와 Steam Deck을 사용하여 비슷한 프로젝트를 진행했음
-
FPV의 큰 문제는 지연 시간이며, 이 프로젝트의 지연 시간이 궁금함
-
ESP32로 구동되는 RC 탱크를 PlayStation 4 컨트롤러로 Bluetooth를 통해 제어했음
- 기본 소프트웨어는 약 20줄의 C 코드로 시작하며, Bluetooth 컨트롤러 라이브러리를 사용함
- 두 개의 스틱으로 두 트랙을 저속으로 제어할 수 있지만, 고속에서는 다른 제어 방법이 필요함
- 듀얼 쇼크 컨트롤러의 "트리거"를 사용하여 rpm 제한 직접 트랙 제어를 구현했음
- 고속 운전 시 왼쪽 스틱은 스로틀, 오른쪽 스틱은 조향으로 사용하여 일반 RC 자동차처럼 운전할 수 있음
- 사용한 3D 프린트 모델의 동영상을 공유함
-
AliExpress에서 좋은 2.5인치 RC 자동차는 30달러, 독립형 5.8 GHz 아날로그 카메라는 25달러임
- 단순히 재미있는 프로젝트가 아닌 결과에 더 관심이 있는 사람들을 위한 정보임
-
비슷한 프로젝트를 고려 중이며, 지연 시간에 대한 경험이 궁금함. 비디오 피드를 보고 원격으로 제어할 수 있는지 알고 싶음. 장애물 회피에 지연 시간이 문제일 것 같음
-
자동으로 장애물을 피하는 고양이 장난감을 만들고 싶었음. 이 프로젝트가 기존에 선택한 것보다 더 나은 기반이 될 수 있을 것 같음