아두이노 코딩-168: PiCamera OpenCV 컬러오브젝트 tracking 밸런싱 로봇 디자인

in #kr6 years ago (edited)

noname01.png

컬러 tracking 밸런싱 로봇의 구상

밸런싱 로봇 RC카를 조종하기 위해서는 아두이노 HC-06 블루루투스 보드에 의해 Serial.read() 명령을 통해 제어 데이터를 수신할 필요가 있다. 이미 앱 인벤터 블루투스 코딩을 사용하여 밸런싱 로봇을 직접 스마트폰에서 자유롭게 조종할 수 있다.

noname02.png

다음 단계로 밸런싱 로봇이 PiCamera 촬영을 통해 컬러 오브젝트를 인식해서 스스로 tracking 할 수 있는 자율주행 로봇으로 개량하려면 OpenCV를 탑재하고 있는 라즈베리 파이3 보드와 밸런싱 로봇의 아두이노 보드와의 통신이 필수적이다.
OpenCV에 의해 오브젝트를 학습시키면 오브젝트의 색상과 크기를 체크할 수 있으며 움직이면 궤적 추적이 가능하다. 멀어지면 오브젝트가 작아지고 좌우로 움직이면 중심 값이 변한다. 이에 따라서 전진 후진 좌 우 회전 신호를 생성하여 전송하면 된다.

noname03.png

라즈베리 파이3 B/B+ 보드에서는 파이선3 과 OpenCV 3 버전 및 PiCamera 가 함께 설치가 되어 있으며 아울러 파이3 부터는 블루투스 기능이 내장되어 있어 이를 사용할 필요가 있어 보인다.

따라서 라즈베리 파이 보드에서 파이선3 코딩으로 블루투스를 통해 제어신호를 보내어 아두이노의 HC-06에서 수신하여 밸런싱 로봇 좌우 모터를 제어할 필요가 있다. 좌우 모터에 보내야 할 제어신호라고 해 봐야 앱 인벤터에서 밸런싱 로봇 조종할 때처럼 “F”,“B”,“L”,“R”,“S” 신호를 보내는 것이다.

라즈베리 파이 파이선3 블루투스 코딩

앱 인벤터에서 아두이노를 조종한다든지 또는 최근에 완성한 윈도우즈 PC의 Processing 코드를 사용하여 아두이노를 조종하는 2가지는 이미 해보았으며 성공적이었다. 이와 유사하게 라즈베리 보드에서 문자나 숫자 데이터를 블루투스에 의해서 아두이노로 보내기로 하자.

블루투스통신은 대체로 serial 방식의 통신형태를 취한다. 그 대표적인 예로서 아두이노에서는 Serial.read(), Processing에서는 new Serial(this, "COM34", 9600) 같이 표현이 되며 아울러 라즈베리 파이에서도 비슷한 방식의 통신이 가능할 것으로 추정된다.

찾아보니 bluez 와 bluetooth 라는 이름의 라이브러리들이 있으나 파이선 2.7버전 용이며 파이선3에서 설치가 안되는 듯하다. 따라서 그 대안으로 파이선3에서 설치가 가능한 pySerial에 관심을 가져 보도록 하자.

라즈베리 파이보드에서 되든 안되든 bluez 와 bluetooth 라이브러리 설치 시도를 수차 되풀이 하였으면 바로 이 지점부터 시작이 가능하다.
일단 HC-06 이 설치된 아두이노 우노보드를 PC의 USB 포트에 연결하여 블루투스 디바이스 검색이 가능한 상태로 해두자.
라즈베리의 윗줄 블루투스 탭에서 pairing 작업을 해두면 HC-06 이 나타나 있으나 지금은 아무런 파이선3 코드가 없으므로 Connect.. 가 불가능하다.
여기까지는 좌충우돌하면서 다 도달할 수 있는 첫 번째 관문으로 보면 되며 100에 99% 포기하는 곳이기도 하다. 벌써 3번째인 듯하다.

라즈베리 터미널 창에서 다음의 설치 명령을 실행하자.
pi@raspberrypi:~$ sudo apt-get install python3-pip
pi@raspberrypi:~$ sudo apt-get install python3-serial

이로서 파이선3 버전용 pySerial 이 설치된다.
다음 작업은 스캔에 의해서 HC-06의 MAC 아드레스를 확인하는 과정이다.
pi@raspberrypi:~$ hcitool scan

디음과 같은 출력을 얻을 수 있다. 여기서 HC-06 의 MAC어드레스를 확인해 두도록 하자.

noname04.png

/device/rfcomm0 디바이스 또는 시리얼 채널을 생성하자.
pi@raspberrypi:~$ sudo rfcomm bind rfcomm0 00:18:E4:5A:CC

pi@raspberrypi:~$ ls /dev/ 명령을 실행해 보면 다음과 같이 rfcomm0 가 생성되어 있음을 알 수 있다. 반드시 MAC 어드레스와 함께 해야 실제 Pairing 이 됨에 유의하자.

noname05.png

아두이노 MAC어드레스와 Pairing이 되었으므로 다음과 같이 문자열 정보를 보내보자. echo 명령은 php 언어로서 리눅스 명령어와 함께 혼용해서 쓸수 있다.
pi@raspberrypi:~$ echo “Hello World! 2018-11-08”〉/dev/rfcomm0

noname06.png

당연히 아두이노에서 문자열 정보를 수신하여 시리얼 모니터에 출력할 수 있도록 준비가 되어 있어야 한다.

void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
char c = Serial.read();
Serial.print(c);
}
}//End

이와 같이 라즈베리로부터 HC-06 블루투스 보를 통해 아두이노로 통신이 확인이 되었으면 파이선3 코딩에 의한 단계로 넘어가자.

noname07.png

라이브러리 모듈 serial을 불러 들인다. 디바이스에 rfcomm0 와 rfcomm1이 있는데 여기서는 후자를 사용하기로 한다. 실행이 되면 Shell에서 Please enter String: 이라는 요청이 있으면 키보드에서 정보를 입력하고 엔터를 누르면 아두이노 시리얼 창에서 블루투스를 통해 전송받은 데이터를 볼 수 있다.

밸런싱 로봇 새 디자인

라즈베리 파이 보드와 PiCamera 및 아두이노 보드를 함께 수용할 수 있는 RC카 차체를 앞으로 새로이 디자인해서 제작해 보기로 한다.

Sort:  

jjm.jpeg
짱짱맨 호출에 응답하여 보팅하였습니다.

짱짱맨은 저자응원 프로그램입니다. 더 많은 저자 분들에게 더 큰 혜택을 드리고자 스파임대 스폰서를 받고 있습니다. 스폰서 참여방법과 짱짱맨 프로그램에 관해서는 이 글을 읽어 주세요. 기업형 예비증인 북이오(@bukio)가 짱짱맨 프로그램을 운영하고 있습니다. 여러분의 증인 보팅은 큰 힘이 됩니다. Vote for @bukio

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.028
BTC 62094.36
ETH 2436.39
USDT 1.00
SBD 2.50