6-15 OpenCV에서 Tracking된 Color Ball 오브젝트의 화면상 위치를 찾아라?

in #kr6 years ago

자율주행이란? 제대로 주행해서 목적지까지 가는 것이 목적인 듯한데 작년에 방영된 태양의 후예란 드라마 보니 현대 제네시스 차선 주행 보조장치를 쓰면서 핸들이 자율적으로 움직이는 화면이 나오는 군요. 또 다른 목적이 있을 수 있었군요!

일단 실제 차량을 대신할 수 있는 RC카 즉 Balancing 로봇인데 얘는 스미트폰 블루투스로 조정하면 잘 돌아다니지만 내버려 두면 가만히 서서 꾸뻑 꾸뻑 조는 것밖에는 못하는 녀석이죠. 그래서 Pi 카메라로 눈 하나를 달아볼까 하는데 거쳐야 할 코딩이 제법 되는군요.

예를 들어 높이가 있는 스탠드바의 길이가 다소 긴 라운지 테이블에서 자율주행 Balancing 로봇에게 빨간색 음료 배달을 시킨다쳐요. 그런데 갑자기 손님이 장난친다고 쌍판때기를 들이 밀면 어떻게 해야 할까요? Balancing 로봇이 너무 갑자기 정지하면 관성으로 음료가 손님 쌍판에 튀어서 코피가 나는 꼴이 되겠지요? Haarcascade 라이브러리를 사용하여 얼굴이 인식되면 신속히 멈추되 부드럽게 멈추어야 할 것입니다.

어떻게 자율 운전하느냐? 지금의 방법은 강아지 훈련시키듯 청색 공을 앞에서 알짱거리며 굴려 주어야죠. 아니면 라운지 테이블에 중앙선과 차선을 그려 놓든지. 다음 짤은 PixyMon 사례인데 팬/틸팅이 된다는 것은 결국 추진 모터 제어가 가능하다는 얘기가 된다.

자 다음과 같이 Pi 카메라가 훈련용 청색공의 위치를 찍었을 때 밸런싱 로봇은 좌로 약간 회전할 수 있도록 모터를 추진하고 아울러 좀 더 앞으로 전진해야 Pi 카메라 중앙 화면에 청색 공을 가져다 놓을 수 있을 것이다. 제대로 제어하기 위해서는 밸런싱 로봇 코드를 수없이 마사지 해야 할 듯.

Pi카메라 화면 중앙에 청색 공을 갖다 두려면 밸런싱 로봇의 모터를 추진시켜야 하는데 그대마다 화면상의 공의 위치가 변하므로 정확히 화면 중앙에 위치하도록 PID 제어를 해야 할 것이다. 그럴려면 청색공의 화면상 좌표와 화면 중앙 좌표를 알아야 한다.
지금까지 몇 번의 블로그 포스팅에서 hue 값을 사용하여 청색공의 masking 작업이 가능했으며 추가로 마스킹된 청섹 공에 대해서 그 모양이 원형에서 다소 찌그러졌지만 Contours(윤곽선)를 계산해서 찾아야 한다. OpenCV 의 그 명령어가 FindContours()이다.
윤곽선이 나오면 그 오브젝트의 중심계산이 가능하다. 물론 모양이 좀 찌그러진 상태라 그 중심 값이 정확히 원의 중심은 아니겠지만 그래도 찌그러진 도형 내부이기 때문에 화면 중앙 위치와의 거리 차이를 계산함에는 아무런 문제가 되지 않는다.

noname01.png

다음번에 일단 한걸음 더 나아가서 청색공에 대한 Contours(윤곽선)를 찾는 코드를 올릴 예정이다.

여러번 라즈베리 파이에서 Pi카메라를 사용한 OpenCV에서의 사물 인식에 대한 글을 올렸으나 약간의 부연 설명을 통해 처음 보는 분들의 이해를 돕고자 한다.

Sort:  

Congratulations @codingart! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

Award for the total payout received

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

Presentamos el Ranking de SteemitBoard

Support SteemitBoard's project! Vote for its witness and get one more award!

Coin Marketplace

STEEM 0.28
TRX 0.13
JST 0.032
BTC 65935.31
ETH 3015.23
USDT 1.00
SBD 3.75