Android2013. 7. 18. 11:20

사실 안드로이드와 아두이노간의 통신을 구현한거는 좀 오래돼서 기억을 더듬어 포스팅합니다.

 

먼저 시리얼 통신은 진저브레드 이상의 안드로이드 OS버전에서만 작동한다고 하니 참고하시구요~

 

맨 바닥부터 코딩할 순 없으니 시리얼통신 라이브러리를 사용하겠습니다.

 

 

usb-serial-for-android-v010.jar

 

출처는

 

https://code.google.com/p/usb-serial-for-android/

 

입니다. 위의 링크로 가시면 Quick Start 부분에 사용 방법이 다 나와있네요.

 

하지만 링크의 예제 소스만 가지고는 통신을 원활히 할 수가 없더라구요.. 한 바이트 읽고 쓰는거는 아주 쉽지만 패킷을 만들어서 전송하려면

약간의 프로그래밍이 따라야 합니다.

 

먼저, BaudRate부분이 115200으로 되어있는데 이거 안돼요. 저는 Arduino MAGE2560을 사용했는데 9600빼고는 아무것도 안되더라구요..

이거때문에 몇시간을 날려먹은건지 ㅠ

 

그리고 패킷 제작은 사용하시는 분 마음대로 규격을 정하셔도 괜찮을거 같아요. 저는 모든 정보를 문자로 변환한 후 알파벳으로 구분했습니다.

 

"a1.23b2.34c3.45z" 이렇게요. 그러면 전송받은 측에서 a, b사이의 문자("1.23")을 빼 낸 다음에 숫자(1.23)로 변환하는 방법을 사용했습니다.

 

패킷을 송신 했다면, 수신을 해야할텐데 코드 작성 전에 문득 이런 생각이 들더군요

 

'한 패킷 전송 속도와 안드로이드 반복문의 속도가 다르면 패킷이 잘릴까?' '패킷이 잘린다면 다음번에 수신된 나머지 패킷과 연결할 순 없을까?'

 

그래서 고민하다 링 버퍼를 만들었습니다. 패킷보다 긴(2배이상) 충분한 저장공간(배열)을 만들어 놓고 수신한 바이트들을 배열 안에 순서대로

차곡차곡 쌓아 두는거죠. 차례대로 쌓여있다면 그 배열을 검사하면서 내가 정한 패킷에 맞는 데이터가 있다면 빼서 사용하는겁니다.

 

밑에 소스 첨부 하겠습니다~ 어떤 함수를 사용했는지 참고하시고 자신만의 통신을 구현해 보시길~

 

 

 

 

----------------------------------------------- 7월 27일 추가내용 --------------

http://procider.tistory.com/201

저는 Arduino MEGA2560 사용하는데요, 위 블로그에 나와있는 젠더를 사용해서 전력 공급을 해결했습니다~

Arduino MEGA ADK for android 는 젠더가 없어도 될거같습니다~

 

Posted by 너를위한노래
Quadrotor20132013. 4. 22. 12:18

음... 이번이 두번째네요 보드가 고장난거는..

 

한두푼도 아니고 왜 이러는지... ㅠ

 

첫번째꺼는 쿼드콥터의 BLDC모터랑 전원을 같이 써서 고장 났다고 쳐요, 두번째꺼는 아예 배터리도 따로 쓰고 메뉴얼의 전압대로 맞춰서 썼는데 왜 잘 사용하다가 갑자기 그러냐고요 ㅡㅡ

 

IOIO보드는 좋은 보든데.. 쿼드콥터 하실때는 사지 않으시길 추천드립니다.. ㅠ 두번째도 고장나니까 회로 자체가 불안한게 아닌가 하는 생각도 들고..

 

이왕 이렇게 된 김에 어떻게 할까.. 고민하다가 제가 가지고 있는 아두이노 Mega 2560 보드를 사용할 수 있을거같아서 필요한 케이블 주문해 놨습니다.. 이제 포스팅에 아두이노 글도 올리겠네요 ㅎ

 

근데 제가 사용하는 mpu6050안에 LPF가 내장되어있다는데 이거 쓰려면 아두이노가 편하더라구요 LPF써서 잘되면 좋을텐데.. ㅋ

 

위기가 기회가 될지도 모르겠습니다 ㅋㅋ

Posted by 너를위한노래
Computer Vision2013. 4. 13. 14:52

캠으로 찍고 있는 동영상에서 내가 가지고 있는 bmp파일과 비슷한 부분을 어떻게 찾아내느냐...

 

뭐 템플릿 매칭에 대한 많은 논문과 알려진 기술들이 많지만.. 그리고 OpenCV에 쉽게 구현까지 되어있지만..

 

이미 알려진 기술을 사용하는 법도 물론 중요하지만 제가 아직 학생이라 그런지 알고리즘을 배우거나 실제 구현하는거는 나쁘지 않다고 봅니다.

 

그렇다고 SURF나 SIFT같은 기술을 그대로 구현하는건 제가 나가는 영상처리 대회의 취지하고도 안맞고 해서 다른 알고리즘을 계속 생각하고 있었는데.. 문득 떠오른게 이 패턴매칭..!!

 

될지 안될지 긴가민가했는데 일단 해보고 알 일이니까 (실패해도 좋은 경험이니까) 일단 해보기로 했습니다

 

 

캠으로 계속 찍고 있는 사진에서 이 그림을 찾을겁니다 (제가 자주가는 미용실 마크입니다...ㅋ) (100x100 입니다)

 

일단 저 노란부분(y=50)의 픽셀만 뽑아서 상승, 하강, 유지의 패턴을 추출해 보겠습니다.

 

  (이하 빨간패턴)

 

흰부분은 높고 검은부분은 낮게 나오죠?

 

그리고 저 빨간 점들은 제가 만든 알고리즘으로 추출한 패턴들입니다.

 

이제 이 패턴을 캠 영상하고 비교를 해야겠죠?

 

 

(이하 초록패턴)

원본 영상의 어느 한 줄의 픽셀만 뽑아서 같은 알고리즘을 통과시킨 그림입니다. 마찬가지로 초록 점이 추출된 패턴들이구요

 

초록패턴 중간에 빨간패턴과 비슷한게 보이시죠? 이 부분을 찾는게 제 아이디어 입니다 ㅋ

 

프로토타입으로 만든 결과를 보시면 

 

머리가 개털처럼 나왔네요.. 눈도 퀭한게.. ㅠ  암튼...

 

정확도가 좀 떨어지는데 가로방향 한줄로만 해서 그런거 같아요

 

각 줄에 매칭되는 범위를 조금 늘리고 가로방향 3줄, 세로방향 3줄로 해서 총 6개의 매칭 분포가 많은 부분을 찾으면 좀 더 정확도가 올라갈거 같아요

 

그리고 제 아이디어의 단점이 회전시키면 못찾는건데 이것도 좀 연구를 해봐야겠네요

 

그래도 가능성이 어느정도 보입니다 패턴의 매칭이라서 픽셀단위 매칭처럼 오래걸리지도 않고..

 

일단 해봐야 알 일이죠 될지 안될지는.. ㅋ  

 

 

- 7월 11일 추가

 

가로세로 각각 3줄씩 매칭을 해봤는데 어느 한 부분도 매칭이 안되더군요.. 매칭을 허용하는 범위를 대폭 늘렸더니 쓸데없는거까지 잡고..

 

그래서 최대한 범위를 적당히 수정해봤는데 원하는 부분도 잘 찾지만 다른부분도 잘 찾아서 문제.. ㅋ

 

과거 프레임 몇 개를 저장해두고 많이 나오는 부분을 찾으려고도 해봤지만 실패.. ㅋ

 

결국 대회는 다른 팀원이 구현한 SURF로 나갔네요.. 하지만 여러 가능성을 보았으므로 나쁘지 않은 시도였습니다.ㅋ



 - 14년 3월 6일 추가


지난 글을 보다 문득 든 생각이.. 복잡한 조건문으로 도배하지 않고 1차미분, 2차미분을 사용해서 그래프의 극값을 구할 수 있겠단 생각이 드네요.


이미 극값을 특징점으로 이용하는 알고리즘을 어디선가 본거 같긴 하지만.. 단독으로 사용할만 한건 아닌거 같네요.. 다른 특징점과 같이 사용하면 좋을 것 같다는 생각을 해봅니다.



Posted by 너를위한노래