6월에 시작!

8월까진 안드로이드 블루투스 공부하며 세월아 네월아 보내다가 8월 말부터 본격적인시작!

 

주제는 LED_ID를 이용한 위치 인식 시스템이다.

글로 대충 설명하자면

MCU보드(Atmega 128)이 제어하는 LED들에 ID를 부여하고

모형 자동차가 움직이며 특정한 위치에 정지했을때 해당 LED_ID를 인식하여

클라이언트 모바일로 보내준다.

 

1. LEDID를 제어하는 MCU는 Atmega128 이다.

2. 모형자동차에서 LED를 인식하는 부분은 안드로이드 카메라이고

  모형 자동차의 모터는 안드로이드로 제어를 하는데 이를 가능하게 해주는게 ioio board이다.

3. 클라이언트에서는 모형자동차의 위치를 알수있는 맵을 그려주고 모형자동차의 위치를 제어한다.

4. 데이터는 블루투스를 통해 주고 받는다.

 

현재 내가 맡은 부분은 클라이언트 앱과 블루투스 통신 기능을 짜고 모형차의 앱 몸체를 짜기로 했다. 이번 졸업작품의 핵심인 LED_ID와는 좀 떨어져 있다. 하지만 내가 하는 부분이 서비스를 제공하는 측면에서 매우 중요하고 더군다나 다른 부분보다 혼자 해야할 것들이 엄청 많기 때문에 나쁘지 않다.

 

----------------------------------------------------------------------------------------------------------------------------------

2014.06.01 - 블루투스 공부 시작. 생각 보다 괜찮은 예제들이 없음

그래도 새로 짜진 않고 구글에서 제공해주는 예제 코드를 수정해서 작성

에러가 너무 많아 일단 manifest의 화면이 회전 할때 마다 onCreate를 다시 호출함을 방지

그 외에 블루투스 state관리, BlueTooth socket thread관리, Activity의 lifecycle관리, 최신 버전에서 쓰이지 않는 코드등 수정할게 많음

2014.06.15 - 시험이 남아 있지만 최신 버전에서 쓰이지 않는 코드를 수정하기로 했다. 별거 아니고 ActionBar부분 이다. 코드로 뭔가 custom하려는

흔적이 있다 생각해 보니 예전에 내가 수정하다 추가했던거 같기도... 안드로이드 UI는 마냥 코딩으로 처리하기 보다 res-xml파일쪽에서 처리를 최대한 해놓는 것이 좋은것 같다.

2014.07.02 - 본격적으로 졸작팀이 모이기 시작했다. 블루투스 뼈대 코드에서 버튼을 누르면 해당 커멘드 신호를 보내고 받는 에코서버 같은 기능을

집어넣어봄. 예전에 C소켓 서버도 짜보았고 자바 서버도 아주 간단하지만 짜본적이 있어서 별무리없이 쉽게 짯다. 안드로이드 블루투스 소켓 부분은 그냥 일반 소켓 코딩하는 것과 거의 같은 것 같다. 그런데 연결관리가 잘되지가 않는다. 6월 1일에 있던 문제를 아직 해결하지 않은 탓인것 같다.

2014.07.25 - lifecycle 관리 문제를 해결하고 state관리를 어느정도 해결함. 문제는 한앱에서 discovery와 scan부분을 같이 갖고 있는데 이 부분이

thread가 따로 돌아가게 되는데 이때 이 thread들이 꼬이는 문제를 보였다. 우린 mater(discovery)부분과 slave(scan)부분을 나누려 했기때문에 이 문제가 자연스럽게 해결됬다.

이 날 같이하시는 누나가 opencv를 어려워하셔서 같이 코드 분석 하는 식으로 진행해서 안드로이드 화면분할 코드, color detect 코드를 우리 필요에 맞게 수정했다. 또 LED제어를 맡으신 형이 Atmega를 제어하기 위한 AVR 코드와 LED cell을 구성할 기초 회로를 이용하여 짜고 계신다. 7월 동안 도움주신 두분이 정말 감사하다. 특히 회로부분은 정말 큰 도움이 되었던것 같다.

2014.08.XX - 이 한달간은 자재구매와 전시할 틀완성, 클라이언트 앱의 프로토 타입을 완성 했다. 아직 에코서버 처럼 짯다. 이는 값을 주고 받는 문제

가 없는지 확인하기 위해 계속 놔두었다. 이제 주고받을 데이터의 구성을 하면 된다. 그리고 모터를 맡으신 형과 함께 모터돌아가는 예제를 분석해 보았다. 그런데 무슨 문제인지 돌지를 않는다. 하드웨어의 문제라고 생각되어져서 구글링을 통해 모터드라이브 연결부를 빼서 다시 연결했다. 구글링만 하고 30분정도 자버렸는데 그 동안 형이 다 연결해놓으셨다. 한쪽 바퀴가 돌아감을 확인했다. 하나만 돌아간게 이상했다. 역시 다시와서 보니 안돌아감... 그래서 핀맵도 달리해보고 연결도 다시해보고 하는데 안돌아간다. 뭐가 문제인가...

2014.09.05 - 뷰에서 현재위치가 표시되고 다른 위치로 이동하기 위한 시나리오를 추가 했다. 원래 시나리오는 방향키로 차를 이동하는 것이고 추가

시나리오는 맵에서 도착지점을 클릭하면 거기까지 이동하는 시나리오이다. 이 부분을 slave가 되는 클라이언트 앱단에서 처리할지 master가 되는 앱에서 처리를 할지 정해야 하는데 아무래도 master는 카메라영상처리와 모터제어,블루투스 까지 굉장히 많은 일을하기 때문에 클라이언트단에서 처리하기로 결정. 무엇보다 처음 연결될때 뷰를 그리기 위한 맵정보를 받고 시작하기 때문에 이를 기반으로 길을 찾는 메서드를 짜면 문제가 없다. 그리고 방향키제어 command를 string으로 이어서 주고, 이를 가공해서 순차적으로 수행하는 식의 매커니즘으로 짜면 아무래도 길을 찾는 메서드 작성도 큰어려움은 없을 것 같다.

2014.09.12 - 12일인지 그 전인지는 잘 생각안나지만 차가 돌아가기 시작했다. 코드를 새로 열고 테스트하셨다는데 내가 해결한게 아니라서 뭐가 문제

인지 정확히는 모르지만 이 또한 thread관리 문제였던것 같다. 안드로이드가 앞으로 가라는 신호를 한번 보내주면 계속 그 커멘트에 해당하는 행동을 한다. 그리고 모형 자동차가 탱크같은 식의 바퀴라서 90도 회전을 위한 정교한 모터 움직임이 필요할거 같다.

2014.09.14 - 안드로이드 ioio보드를 제어하기 위한 test 코드를 라이브러리를 이용해 연결관리 메커니즘과 clean한 코드를 위해 바닥부터 짯다. 잘돌

아가야 할텐데... 15일에 test 해보아야겠다.

2014.09.15 - 테스트해보니 계속 죽는다. ioio board가 usb 악세사리라서 연결을 해야하기 때문에 Log값을 찍어볼 수 가 없다. 이를 대응할 만한 부

분을 넣기도 뭐하고 그래서 Create부분만 분석해보니 라이브러리에서 제공하는 인터페이스에서 할당이 안되었는데 쓰는 문제였다. NullPointerException 문제인데 라이브러리에서 제공하는 사용법에 맞게 사용하는데 에러가 나서 당황스럽다. 분명 이전에 다른 코드를 실행해야 하는것 같은데... 돌거같다.... 암튼 원인해결을 어떻게 하면 될지는 알겠지만 뭘로해결 할지를 아직 못찾았다.

2014.09.26 - 길찾기 코드를 완성했다. 기존에 나와있는 a*star같은 탐색알고리즘들은 너무 무겁다. 그리고 장애물도 없고, 탐색할 필요없이 가는 법

을 계산하기만 해서 알려주면 되기 때문에 그냥 맵에서 위치간의 x와y축의 차이를 이용해 이동경로를 string에 넣었다. 이제 보내주고 그에 맞춰 모터를 제어하는 것만 해결하면 된다.

Posted by duehd88
,