본문 바로가기

Self Driving Car

[RC Car 개조] 자율주행 RC Car 만들기(2)

1. Camera Module : ESP32-CAM

 

  • ESP32-CAM을 이용하여 객체인식 기능을 추가
  • WIFI를 통해 영상 전송이 가능하도록 셋팅하고 프로그램을 업로딩
  • Bluetooth를 통한 로봇제어
  • 객체인식과 로봇 제어를 통해 자율주행 구현

참고 자료) 

https://github.com/longpth/ESP32-CAM-ObjectDetection

 

longpth/ESP32-CAM-ObjectDetection

This repository would show you how to make an object detection remote control camera with ESP32-CAM module - longpth/ESP32-CAM-ObjectDetection

github.com

https://www.hackster.io/dragonph/esp32-cam-remote-control-object-detection-camera-7f18af

 

ESP32-CAM: Remote Control Object Detection Camera

This project would show you how to stream the video from ESP32-CAM module to PC and then do the object detection there. By DragonPh.

www.hackster.io

https://s-engineer.tistory.com/174

 

How to program ESP32-CAM using Arduino UNO - 아두이노로 ESP32-CAM 프로그래밍 하기

ESP32-CAM에는 프로그래머 칩이 없기 때문에 보통 USB to UART Converter를 이용해 프로그래밍 한다. 하지만 아두이노 보드가 있다면 Converter 없이 ESP32-CAM에 프로그래밍 할 수 있다. USB to UART Converter..

s-engineer.tistory.com

 

https://m.blog.naver.com/PostView.nhn?blogId=roboholic84&logNo=221601808100&proxyReferer=https:%2F%2Fwww.google.co.kr%2F

 

[ESP32] ESP32-CAM으로 동영상 스트리밍하기 (아두이노 프로젝트)

1. ESP32-CAM 소개하기 ESP32-CAM은 "아주 작고", "아주 저렴한" 오픈소스 하드웨어입니다. 너...

blog.naver.com

ESP32-CAM을 ARDUINO-NANO를 통해 프로그램 업로딩을 시도했다.

처음 구매한 모듈에 대해서 업로딩은 성공하였다. 

 

 

MEGA 2560 보드를 활용하여 ESP32-CAM 보드에 프로그램을 업로딩한다
연결은 UNO 와 동일하게 연결한다.

 

참고로 Arduino Nano를 통해 2번째 모듈을 업로딩할때는 Camera와 연결되지 않는 오류가 발생한다. 아마도 업로딩시 전력 부족현상이 발생하는것 같다. 참고로 아래와 같은 Error Message가 나온다.

 

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8

[E][camera.c:1049] camera_probe(): Detected camera not supported.
[E][camera.c:1249] esp_camera_init(): Camera probe failed with error 0x20004

 

Camerawebserver의 소스코드의 카메라 설정부분을 수정하고 컴파일후 업로딩한다.

 

 

추가) 설정이 변경되니 업로딩이 안되는 현상이 있다

설정과 보드레이트를 맞춰야한다!

 

 

 

예제 프로그램은 훌륭하게 실행이 된다.

이제는 ESP32-CAM-ObjectDetection 을 실행해 본다.

Mac에서 컴파일을 시도하면서 'Conflicting Declaration'이라는 error를 결국 수정하지 못하고 window Arduino IDE에서 컴파일에 성공했다. 아마도 typedef struct에 대한 중복선언이 문제인듯 하다. 일단 후에 원인을 찾는것으로 하고 프로그램 업로딩을 진행했다. Arduino Mega2560을 이용해서 업로딩시 처음에는 연결오류가 발생했다. 설정을 다시한번 확인할 필요가 있다.

 

 

 

드디어 5일만에 업로딩에 성공했다. 아까운 시간이 흘렀다.

Remote Program은 딥러닝 알고리즘을 이용한 python으로 작성된 코드이다.

일단 Anaconda 가상환경에서 예전 MaskRCNN으로 셋팅한 환경에서 실행해보니 바로 진행이 된다.

1차 Web Camera를 이용하여 영상을 PC에 전송하고 딥러닝 알고리즘으로 분석하는 부분까지는 완료가 된것같다.

다음은 Tracking 알고리즘을 활용하여 자율 주행하는 RC car를 구현하는 것이다.

 

 

 

참고) websocket 과 websocket_client를 추가로 설치하였다.

  • pip install websockets
  • pip install websocket_client

Bluetooth 와 Python Program을 연결하기 위한 시도에 많은 시간이 걸렸다. pyQt를 파악하는데 시간이 걸리고 UI 를 수정하고 코딩을 분석하는 시간이 걸리긴 했지만 결국 해결은 되었다.

프로그램 수정은 ESP32-CAM을 통해서 영상을 받고 영상분석 작업후에 블루투스를 통해서 로봇을 제어하여 자율 주행을 실행하는 것이다.

객체인식은 ssdmobilenet이 11-12 FPS의 속도로 처리된다. 가끔 메모리 사용에 따른 느려지는 현상은 해결해야하는 문제다.

 

참고) Anaconda evns : MaskRCNN

코드 수정 부분  1) remoteQt.py

Bluetooth 통신 설정 부분
Robot 제어 Command 처리 부분
Bluetooth 통신 함수 추가

                   2) imageThread.py 코드 수정

ESP32_CAM IP 설정

youtu.be/ipJHAUDGBRM

프로그램 실행

Remark) Socket 통신으로 서보모터를 직접 제어하지 못하고 Bluetooth를 통해 제어가 이루어져 후에 원인 분석과 함께 업데이트가 필요하다. 

 

2. DC Motor Driver : L298N 모터 드라이버

  • Motor 속도 제어

http://makeshare.org/bbs/board.php?bo_table=arduinomotor&wr_id=12

 

아두이노 L298N 모터드라이버로 DC모터 제어하기

​아두이노와  ​L298N 모터드라이버로 DC모터 제어하기                                                           &nbs…

makeshare.org

참고) 속도제어

https://deneb21.tistory.com/281

 

[아두이노] DC 모터의 속도제어(모터드라이버 L298N) 2편

이전 글 http://deneb21.tistory.com/277 에서 L298N에 DC모터 2개와 아두이노를 연결하여 각각의 모터를 정회전, 역회전 컨트롤 하는 방법을 알아보았다. 이번 글에서는 연결된 모터의 속도를 제어하는 방�

deneb21.tistory.com

9/27) 5V 전원으로 모터 구동하는법

m.blog.naver.com/chandong83/221309861855

 

아두이노 사용기 #36 L298 DC 모터 드라이버 5V 모터를 돌려보다.

아두이노로 모터 제어를 해봤다면 이 녀석은 한 번쯤은 봤을 것이다. 아니 무조건 봤을 것이다.L298n DC...

blog.naver.com

참고) Test Program

1) 적용 아두이노 code

문제점) 드라이버 전원을 별도의 SMPS 5V 공급하고 나서야 작동한다. -> 별도의 전원 혹인 안정적인 전원 공급이 필요하다

추가 테스트) Deep Learning Steering 과 함께 돌려봤다.

youtu.be/tCYCfJ1bSMU

 

문제점) 시리얼 통신을 통해 모터 제어가 안된다. 추가로 검토가 필요하다

 

youtu.be/dKc3-ZxtZd8

참고) Anaconda tracker-cpu 환경에서 다음 경로 파일 실행

http://makeshare.org/bbs/board.php?bo_table=arduinomotor&wr_id=11

 

아두이노 L9110 모터드라이버로 DC모터 제어하기

​아두이노와  L9110 모터드라이버로 모터 제어하기                                                             &nb…

makeshare.org

Motor Driver를 교체해서 테스트를 진행해보자!

9/27) rasino.tistory.com/225

 

【 아두이노모듈#15】 L9110S #1(모터 드라이버) 모듈 사용하기

【 아두이노모듈#15】 L9110S #1(모터 드라이버) 모듈 사용하기  아두이노로 스텝모터나 DC 모터를 제어하기 위해서는 TR이나 IC를 사용하여, H-bridge (h-브릿지) 회로를 구성하여 정역(정회전, 역회�

rasino.tistory.com

 

3. 블루투스 통신으로 제어

 

https://kocoafab.cc/tutorial/view/712

 

블루투스 모듈(HC-06)-무선통신

개요 보통 아두이노에서 블루투스 모듈을 사용한다고 하면 스마트폰 어플과 연동하여 무선으로 아두이노를 제어하거나 값을 받아올 때 많이 사용합니다. 이 부분에 있어서는 어플만 존재하면 �

kocoafab.cc

https://myoungjinkim.github.io/arduino/arduino-hc-06/

 

아두이노 블루투스 2.0 HC-06 사용하기

안녕하세요! 이번 포스트에서는 새로운 프로젝트에 이용할 블루투스 제품인 HC-06을 간단히 다뤄볼까 합니다. 자동차 관련 프로젝트를 진행하다 보니 속도, pwm 값 등 자동차와 관련된 데이터를 ��

myoungjinkim.github.io

https://blog.naver.com/PostView.nhn?blogId=post_human&logNo=220048320177

 

파이썬 3로 serial, 시리얼 통신하기

파이썬을 이용한 Serial 통신 파이썬 3.4.1 기준으로 작성되었습니다.윈도우7 64비트에서 테스트 하였습니...

blog.naver.com

 

참고) self balancing Robot

https://github.com/onlyinnovative/self-stabilizing-platform

 

onlyinnovative/self-stabilizing-platform

This code and schematics can be used to create a self stabilizing platform - onlyinnovative/self-stabilizing-platform

github.com