Lecture/CAP/2011/Guardian

From MCLab
Jump to: navigation, search

Contents

Final Reports

Project Name

  • RTC (Real time Tele Control)


개요


본 장에서는 Android 단말기와 HBE-RoboCar,HBE-SMⅡ-P270를 이용한 실시간 로봇카 원격 제어 서비스에 필요한 요구사항의 총괄 개요를 제공한다. 본장에서는 Android 단말기와 HBE-RoboCar,HBE-SMⅡ-P270를 이용한 실시간 원격 제어 서비스에 필요한 시스템 구축을 위해 목적과 범위, 정의사항, 참고 자료,그리고 본 문서의 개요를 소개한다.


목적


본 문서의 목적은 Android 단말기와 HBE-RoboCar,HBE-SMⅡ-P270를 이용한 실시간 로봇카 원격 제어 서비스에 필요한 시스템 및 사용자의 제안 명세를 기술하는데 있다. 본 문서는 실시간 로봇카 원격 제어 서비스에 대한 기본적 제안서의 식별과 이해를 위하여 작성되었으며, 아래의 사항을 구체적으로 명시하는데 목적이 있다.
  • Android 가속도 센서값을 통해 EWMA 를 적용하여 HBE-RoboCar 를 원격 제어
  • HBE-RoboCar PSD 센서를 통한 충돌감지 시스템
  • HBE-RoboCar,HBE-SMⅡ-P270를 통해 영상 전송


범위


본 문서는 HBE-RoboCAR와 HBE-SM II-P270, 안드로이드 스마트폰을 가속도 센서 값을 이용한 원격제어와 영상정보를 전송에 대해 기술하는데 있다. 본 문서는 HBE-RoboCAR와 HBE-SM II-P270, 안드로이드 폰을 이용한 원격조종과 영상정보 전송에 필요한 기본적 요구사항의 식별과 이해를 위하여 작성되었으며, 아래의 사항을 구체적으로 명시하는데 목적이 있다.


관련문서


다음은 Real-time Tele Control(이하 RTC)를 위한 RoboCar 제어, 정보의 전송에 관련된 모든 통신 기술의 기능 정의를 위해 참조한 문서를 정리한 목록이다.
표준 문서 문서 제목
한백전자 HBE-SM2 하드웨어 매뉴얼
한백전자 HBE-SM2로 배우는 임베디드 리눅스 프로그래밍
한백전자 HBE-RoboCAR.pdf
<BM 성안당> 김정훈 구글의 안드로이드 프로그래밍
<한빛 미디어(주)> 김상형 안드로이드 프로그래밍 정복
Jan Bluemenhal,Ralf Grossmann, Frank Golatowski,Dirk Timmermann Weighted Centroid Localization in Zigbee-based Sensor Network


용어 및 약어


본 제안서에서 사용되 약어 및 풀이는 다음과 같다.
  1. RTC : Real time Tele Control
  2. RC : Radio Control
  3. RCS : Radio Control Service
  4. WLAN : Wireless Local Area Network
  5. EWMA : Exponential Weighted Moving Average


연구 목표 및 내용


개발 동향

RC 카는 흔히들 Remote Control로 알고 있는데, Radio Control의 줄임말로서, 원격으로 차를 조종하여 움직일 수 있게 만든 소형 자동차를 말한다.
RC 카는 주파수 방식으로, 사용자 임의대로 설정할수 있는 것이 아니다. 보통 27Mhz와 40Mhz로 고정되어 있다.
고가의 제품은 정확한 자신의 주파수에서만 동작되게끔 되어 있어 같은 같은 주파수대라도
주파수는 약간씩 달리하여 여러제품을 사용해도 혼신이 되지 않지만 보통의 제품은 수신폭이 넓기 때문에 혼신이 되어 사용자가 원하는 대로 동작하지 않는다.
주파수를 결정해주는 크리스탈이라는 부품이 있는데, 송신기쪽 크리스탈을 바꾸고 수신쪽 동조회로쪽을 조정해주면 되지만
크리스탈 구하는 것부터 그리 쉽지 않고, 또한 수신부를 조정하는 것도 쉽지 않다.

요즘은 IT 기술의 발전과 함께 RC카의 성능이 날로 향상되어 가고 있고 블루투스 등의 방식으로 진화되고 있다.
RC카 특성상 다른 사용자와 함께 RC카를 동작하는 경우가 있을 때에도 사전에 신호의 혼잡을 방지하여 정확한 컨트롤을 유도한다.
RC카와 스마트폰 간의 연결을 통해 Remote Control 를 하는 제품들이 계속 출시 되고 있다.
이들의 공통점을 살펴 본다면 블루투스 연결을 통해 2 - stick 리모컨 형태의 제품들이 많다. 실제로 출시 된 제품을 살펴보면 다음과 같다.

RC.jpg

본 제품은 현재 판매중인 제품이며, 수평, 수직 의 2 - stick 형태의 리모컨이 사용되었다.
이 점을 개선하여 안드로이드 가속도 센서 값을 사용하여 실제 운전하는 듯한 원격 제어 서비스를 제공한다.
또한 리모콘의 별도구매를 필요로 하지않고, 간편성 및 휴대성을 제공한다.

개발 동기 및 필요성

금년 10월에 개최한‘2011 포뮬러1 코리아 그랑프리’을 위해 최근에 완공된 영암 국제자동차경주장이 일반인들도 사용할 수 있도록 개방됨에 따라서 최근 지속적으로 줄어들고 있었던 각종 자동차 관련 동호회가 활발해지고 있으며 이에 힘입어 RC동호회들도 다시 활기를 띄기 시작했다.
RC동호회가 지속적으로 활성화 되기 힘든 가장 큰 이유가 바로 조종기인데, 조종기를 각 RC마다 하나씩 사용해야 한다는 부분과 조종기간의 주파수 혼선에 의한 상대와의 시합이 무산되는 문제점 그리고 어려운 사용법, 마지막으로 자신의 RC기기를 계속해서 주시하기 힘든 점이 그 이유이다.
현재 RC기기(카,헬기,비행기, etc)의 조종기는 각 RC기기별로 하나씩 사용해야 한다는 단점과 야외에서 활동을 해야하는 RC동호회 특성상 조종기와 RC기기를 다 갖고 이동하는데 불편함이 적지 않다.
조종법 역시 어렵다는 단점이 있는데 이는 조종방식이 수직 수평방향을 이용한 2-stick방식이 있기 때문이다. 이 형태는 많은 연습을 통해 익숙해져야 조종이 가능하기 때문에 주말이나 저녁에 잠깐 여가생활을 즐기는 직장인이나 대부분의 사용자에게 환영 받지 못하고 있다.
본 과제는 사용자들에게 쉬운 조종법과 간편한 휴대성, 그리고 안정적으로 원격조종을 할 수 있도록 안드로이드 폰을 기반으로 하는 원격조종 시스템을 가속도 센서와 안드로이드 폰을 이용한 원격 조종시스템은 상점에서 조종기를 구매할 필요가 없으며, 조작하기 쉽다는 장점과 하나의 조종기로 여러 RC기기를 선택하면서 조종이 가능하다.
가속도 센서와 통신의 장점을 살려서 남녀노소 모두 쉽게 조종할 수 있도록 지원을 하면서 여럿이 함께 경주할 때 주파수 혼선으로 인한 시합 중지를 방지하고, RoboCAR전방에 카메라를 부착함으로써 영상을 지원하여 RC사용자를 늘리는 것을 목표로 한다.

  • 본 연구의 목표는 이러한 고객들을 위해 이용 편리한 Robocar 원격 제어 서비스를 제공한다.
  • 따라서 사용자는 HBE-RoboCar, HBE - SM2보드, 안드로이드 스마트폰 을 통해 실시간으로 원격 제어 한다.

목표



Serviceover2.jpg


Figure1 서비스 전체 개념도
Remote Control Service Using Acceleration Sensor (RCS)의 제공을 위한 시스템 전체 구성은 가속도 센서 및 영상 정보를 제공해 주기 위한 Smart Phone과 로보카의 방향 제어 및 영상 전송을 위해 Smart Phone과 통신 및 로보카의 모터제어를 하기 위한 SM-Ⅱ보드와 Smart Phone을 이용해 움직임을 제어하는 로보카로 구성이 되어 있다. 여기서 Smart Phone과 SM-Ⅱ의 통신을 위해 WiFi를 사용하게 된다. RCS의 전체 시스템 구성도는 위의 그림과 같다.


기술 개념



Overviewconcepts2.jpg


Figure2 전체 구성도

Optionconcepts2.jpg

Figure3 기능 구성도



기능 설명

가속도 센서 사용으로 방향 제어 및 영상 출력을 위한 User Remote Control과 방향 제어 정보 및 영상 정보 전송을 위한 M3 module, 영상을 가져오기 위한 M4 module, 로보카의 모터 제어명령을 전송해주기 위한 M1 module, 로보카의 모터 제어를 위한 Motor Control Module로 나뉘어진다.

HBE_SM2

HBE_SM2는 Base보드와 자유롭게 스태킹(Stacking)이 가능한 5개의 모듈 보드(M1~M5)로 구성된다. HBE-SM2는 Intel의 X-Scale Core를 내장하고 있는 PXA270 Processor를 기반으로 한다.

Userdataflow2.jpg

figure4 Data Flow Chart


Android
  • 방향 제어

아래 그림과 같이 Smart Phone를 움직이게 되면 가속도 센서가 활성화 되면서 사용자가 움직인 방향에 맞춰 로보카의 이동 명령을 얻어내게 된다. 그리고 이 명령어를 SMⅡ-P270으로 전송해주게 된다.

Error creating thumbnail: Image type not supported

Figure 8. 방향 제어 방법

  • Display

SMⅡ-P270의 M4 Module로부터 얻어낸 영상 정보를 M3 Module을 통해 Smart Phone으로 전송 받은 뒤 이를 단말기의 화면에 보여준다.

  • SM-Ⅱ보드와 통신

SMⅡ-P270과 통신을 하기 위해서는 WiFi를 이용하게 된다. Smart Phone에서 SMⅡ-P270으로 전송하는 데이터로는 로보카 이동 명령이고, 전달받게 되는 데이터로는 M4 Module로부터 얻어낸 영상정보를 받게 된다.

SM-Ⅱ P270

HBE-SMII-P270은 Base Board와 자유롭게 스태킹(Stacking)이 가능한 5개의 모듈 보드 (M1~M5)로 구성된다. HBE-SM II-P270은 Intel의 X-Scale Core를 내장하고 있는 PXA270 Processor를 기반으로 한다.


Error creating thumbnail: Image type not supported

Figure9. HBE-SMII-P270

  • M1 module : HBE-SM Ⅱ-P270 모델과 HBE-SMⅡ-P320 모델의 프로세서 모듈이며, 메모리 및 기본 디버깅을 위한 UART로 구성되어 있다.
  • M3 module : 유/무선 통신 및 Storage 기능을 제공하는 모듈로 WLAN을 이용하여 안드로이드로 실시간으로 정보 전송하는 것을 담당한다.
  • M4 module : 멀티미디어 기능 및 디스플레이 기능을 제공하는 모듈로 camera module을 통해서 실시간 영상 제공을 담당한다.


HBE-RoboCAR

HBE-RoboCar는 바퀴를 4개 가진 이동형 로봇이다. 4개의 DC모니터를 사용하고 있으며, 제어를 용이하게 하기 위해 좌측 모니터와 우측 모니터는 같은 제어 신호를 사용하도록 설계되어 있다. 내부의 컨트롤 디바이스로는 ATmega128L을 사용하여 장비를 제어하고 있다. 이 디바이스(MCU)가 장비에 장착된 센서를 통해 현재 상태를 파악하고, 이것을 통해 DC모터를 제어하며 장비를 구동하도록 구성되어있다.

RoboCarAttacthedSensors.bmp



기능 동작

RCS의 전체 기능 구조는 가속도 센서 사용으로 방향 제어 및 영상 출력을 위한 Android Application과 방향 제어 정보 및 영상 정보 전송을 위한 RCS Information Control Module, 그리고 로보카의 모터 제어를 위한 RCS-Motor Control Module로 나뉘어진다.

Android
  • Accelorometer Sensor

가속도 센서는 X, Y, Z의 좌표에 대해서 각각에 해당하는 값을 배열로 받아와서 처리하게 된다.
표 Accelorometer Sensor 좌표 축 정의


Error creating thumbnail: Image type not supported
  • 실제 안드로이드 가속도 센서 값 화면
축의변환 3.bmp
축의변환 4.bmp
축의변환 5.bmp

가속도 센서 제어를 위해 orientation 을 portrait 에서 Landscape 으로 변환해야 한다. 하지만 orientation 을 변경하였다해도 좌표값 체계 까지 변환 되지 않는다. 기존 portrait 의 좌표값 체계가 landscape에서도 적용되기에 portrait 에서 landscape로 변경되었을 때 즉 90도를 회전 하였을때 좌표 체계를 적용 해야 한다. portrait 에서 Y축 역할을 하는 축이 landscape에서는 X축(정확히는 부호는 반대이다)으로 변경된다. 가속도센서에는 X,Y,Z 3가지 축이 있다. 전진 제어에 사용 될 Z축은 portrait이나 landscape 일때, 값의 변화가 없으므로 그대로 사용하면 된다.

Error creating thumbnail: Image type not supported




  • Accelorometer 배열 값을 통한 Robocar 방향 제어


예를 들어 단말의 왼쪽 측면을 오른쪽 방향으로 눌렀을 때 X 가속도 값은 음수를 나타내게 되는데 이를 통해서 로보카의 방향을 정할수 있게 된다. 그렇기 때문에 로보카의 방향을 정하기 위해서는 Y축의 값을 사용하게 되는데, Y축의 값이 음수가 된다면 좌측 방향으로 이동하게 되는 명령을 얻어 오게 되고 반대인 경우에는 오른쪽 방향으로 이동하게 된다고 판단하게 된다. 또한 Z축의 값이 음 수가 된다면 로보카가 주행한다는 명령을 얻어오게 되고, 반대인 경우에는 로보카를 감속 시킨다는 명령을 얻어오게 된다.

  • 아래표는 가속도 센서 값에 따른 모터 제어 방법이다.

먼저 좌회전 인지 우회전인지 아니면 직진인지를 X축(실제로는 -y가 X축역할)에 해당하는 값으로 케이스를 나누고 Z축을 통해 전진인지 후진인지를 결정하여 Robocar 모터를 제어한다. EWMA 값을 극대화 하기 위해 방향을 좌,우,정면 이렇게 간단하게 나눈것이 아니라 총 15개 케이스로 나누었다.

모터제어.bmp

우회전 기준으로 모터제어의 각도와 함께 살펴 보면 아래의 그림과 같다.

각도.bmp


  • Moving average

가속도 센서 값에 따른 Robocar 제어를 보다 Smooth 하게 위하여 EWMA(Exponential Weighted Moving Average)를 적용하였다. EWMA 값을 얻기 위하여 다음과 같은 식이 필요하다.

EWMA1.bmp

위의 식을 통해 EWMA 값을 얻을 수 있다. 위의 식을 적용하기 위해 두가지 사항을 결정해야 한다. 첫번쨰는 가속도 센서 값을 저장하는 queue , 즉 배열의 크기를 몇개로 지정할 것인가 이고, 두번째는 a값을 얼마로 지정할 것인가 이다. 첫번째 사항은 일정한 a 값에 대하여 큐의 크기를 10 단위로 테스트를 하였다. 배열의 크기가 30개 이상부터는 거의 차이가 나지 않는 것을 확인하여 queue 크기는 30개로 결정하였다. 두번째 사항은 a값을 얼마로 지정한것인가 이다. a 값은 현재의 값을 얼마나 반영할것인가에 대한 척도 이며, 우리는 2의 자승 단위로 테스트 하였다. a 값이 크면 클수록 Robocar의 제어가 수월하였다. 테스트 했던 a값들은 31/32, 15/16 , 7/8 , 3/4 , 1/2 , 1/4 , 1/8 , 1/16 , 1/32 이다. 최종적으로 a값은 31/32로 결정하였다.


  • Display

M4보드에서 얻어올 수 있는 영상 데이터를 M3보드로 전달한뒤 M3보드에서 WiFi를 통해 Smart Phone으로 전송해주게 된다. 이때 전달받게 되는 데이터를 실시간으로 Application에서 사용자에게 보여주게 한다.

  • SM-Ⅱ보드와 통신
통신.bmp


가속도 센서를 통해 얻게 되는 로보카 제어 명령을 전송해 주기 위해서 Connect Request를 통해 Connect를 하게 되고, Control Request를 통해 방향 제어에 관련된 메시지를 전송하게 된다.

  • connect Request


RoboCar는 listen 상태로 계속 안드로이드 가속도 값에 따른 명령어를 계속 수신한다. 이때 Robocar 가 서버 처럼, 안드로이드 스마트폰이 클라이언트로 작동한다. 그러므로 TCP Connection 을 맺을 때, 안드로이드 스마트폰은 Robocar IP 주소와 포트 번호만 알고 있으면 된다. 아래의 그림이 이를 나타내고 있다.

메서드1.bmp


메서드.bmp

안드로이드 스마트폰 은 SM-Ⅱ보드에 TCP connection 을 맺은 후 Robocar 제어 명령어를 전송한다. 위의 메서드가 TCPconnection 후 데이터 전송 역할을 수행한다.

SM-Ⅱ P270
  • M1
Error creating thumbnail: Image type not supported

Figure 12. M1 블록도
M1보드의 전체 블록도는 위의 그림과 같고 이 모듈을 통해서 로보카로 이동 및 방향 제어 명령어를 전송해주게 된다. UART 통신으로 로보카의 동작을 알리는 문자열을 전송해주게 된다. 사용되는 제어 명령어는 아래 표와 같다.

ASCII값 설명 ASCII 값 설명
y 로보카 전진 k 우측모터 후진
s 정지 g 좌측모터 전진
a 좌측모터 정지 f 좌측모터 후진
d 우측모터 정지 1, 2, 3 속도 제어
j 좌측모터 전진 - -


표 9. ASCII 제어 명령어 아래 코드는 위의 ACSII 값에 해당하는 명령어를 처리하는 방법을 설명한다.

제어코드1.jpg

표 10. 제어 명령어 수행 코드

  • M3, M4
Figure 12. M2~M5 블록도.jpg

그림 11. M2 ~ M4 블록도 M3, M4보도는 위의 그림과 같은 구조를 가지게 된다. 여기서 M4를 통해서 얻어온 Image 영상을 M3보드로 전달해주게 되고 M3보드에서 다시 이 정보를 Smart Phone으로 전송하게 된다. 또한 M3보드는 Smart Phone으로부터 전달받는 제어 명령을 M1보드로 전송한다.

HBE-RoboCAR
HBE-RoboCar 하드웨어 블록도.jpg


그림 12. HBE-RoboCar 블록도 로보카의 블록도는 위의 그림과 같고, Option 모듈을 통해서 전달받게 되는 Motor 제어 명령어를 사용하여 Motor Connector를 통해 Motor을 제어하게 된다.
PSD Sensor와 US Sensor는 AVR Studio4를 통해 일정 거리에 도달하게 되면 후진 혹은 우회전을 하도록 제어를 하게 된다.

  • PSD Sensor와 US Sensor를 통한 RoboCar 충돌감지

PSD Sensor와 US Sensor는 RoboCar의 모터제어 명령어가 수행되기 전에 먼저 처리가 되야하기 때문에 설계를 함에 있어서 우선순위는 맨위로 올린다.

Pseudo.jpg

위의 그림과 같이모터제어 명령이 들어오기 전에 먼저 충돌감지를 해서 수행이 되도록 하면 사용자가 원격제어를 하더라도 충돌이 일어나는것을 방지할 수가 있다.

AVR.jpg

위의 화면은 실제 RoboCar에 넣은 소스코드이며 이를 통해 이제 RoboCar는 SM2-P270과의 연결유무를 떠나 RoboCar 스스로가 충돌을 감지하여 회피할 수 있도록 구현을 하게 된다.


장비설명

  • SM-Ⅱ보드와 통신

SMⅡ-P270과 통신을 하기 위해서는 WiFi를 이용하게 된다. Smart Phone에서 SMⅡ-P270으로 전송하는 데이터로는 로보카 이동 명령이고, 전달받게 되는 데이터로는 M4 Module로부터 얻어낸 영상정보를 받게 된다.

  • HBE-SMⅡ-P270

HBE-SMII-P270은 Base Board와 자유롭게 스태킹(Stacking)이 가능한 5개의 모듈 보드 (M1~M5)로 구성된다. HBE-SM II-P270은 Intel의 X-Scale Core를 내장하고 있는 PXA270 Processor를 기반으로 한다.



  1. M1 module : HBE-SM Ⅱ-P270 모델과 HBE-SMⅡ-P320 모델의 프로세서 모듈이며, 메모리 및 기본 디버깅을 위한 UART로 구성되어 있다.
  2. M3 module : 유/무선 통신 및 Storage 기능을 제공하는 모듈로 WLAN을 이용하여 안드로이드로 실시간으로 정보 전송하는 것을 담당한다.
  3. M4 module : 멀티미디어 기능 및 디스플레이 기능을 제공하는 모듈로 camera module을 통해서 영상 제공을 담당한다.


  • HBE-RoboCar

HBE-RoboCar는 바퀴를 4개 가진 이동형 로봇이다. 4개의 DC모니터를 사용하고 있으며, 제어를 용이하게 하기 위해 좌측 모니터와 우측 모니터는 같은 제어 신호를 사용하도록 설계되어 있다. 내부의 컨트롤 디바이스로는 ATmega128L을 사용하여 장비를 제어하고 있다. 이 디바이스(MCU)가 장비에 장착된 센서를 통해 현재 상태를 파악하고, 이것을 통해 DC모터를 제어하며 장비를 구동하도록 구성되어있다.


  1. Motor Control : RoboCar의 모터제어 명령을 수행하기 위해 모터 회전 수와 좌, 우 2개의 모터를 이용하여 방향전환이 가능하도록 구성되어 있다.
  2. PSD Sensor : 적외선 거리 측정 센서로 로보카의 정면에만 설치 되어있으며, US Sensor에 비해 보다 정확한 거리를 측정한다.
  3. US Sensor : 초음파 측정 센서로 RoboCar의 후방과 후방에 있는 물체와의 거리를 확인해줄 수 있도록 구성되어 있다.



시스템 요구사항


시스템 요구사항

본 장에서는 사용자와 서버의 서비스 객체 등의 관리 기능과 서비스 처리 기능, 사용자 정보 처리 기능 및 성능을 고려하여 설계되어야 하며, 각 요구사항은 wifi를 통한 기능 및 성능이 테스트 되어야 한다.


사용자 기능적 요구사항
  • UFR 001 : RTV는 사용자가 본서비스의 정보에 접근 하기 위해 안드로이드 기반의 스마트폰을 소지하여야 한다.


시스템 기능적 요구사항
  • SFR 001 : 로보카 대여 업체와 RTC어플리케이션은 Wi Fi을 통해 연결 될 수 있어야 한다.
  • SFR 002 : RTC어플리케이션은 로보카로 부터 받은 영상 정보를 화면에 출력 할 수 있어야 한다.
  • SFR 003 : RTC어플리케이션은 가속도 센서를 이용하여 사용자가 원하는 방향으로 로보카를 원격 조종 할 수 있어야 한다.
  • SFR 004 : RoboCar는 RTC어플리케이션으로 부터 받은 명령이 있더라도 충돌이 감지되면 사용자의 명령을 무시하고 충돌을 회피하도록 동작되어야 한다.



상세 설계


  • HBE-RoboCar
    • HBE-RoboCar(줄여서 RoboCar) 기본적으로 4개바퀴에 각각 모터가 한개씩 가진 차량형 로봇이다. 4개의 DC모터를 좌, 우측의 제어신호를 동일하게 하여 보다 용이하게 제어 신호를 사용하도록 설계되어 있다. RoboCar는 컨트롤 디바이스(MCU)를 통해 현재 상태를 파악한 후에 종닥을 수행한다. 컨트롤 디바이스로는 ATmaga128L을 사용하고 있으며, 이 장비에 장착된 센서를 통해 현재 상태를 하악하고, 이것을 통해 DC모터를 제어하여 장비를 구동할 수 있도록 구성되어 있다.
    • DC모터 제어
      • 방향 제어
        • 바퀴형 이동 로봇의 경우에는 로봇 본체의 좌우에 바퀴가 위치하게 되며, 이 좌우 바퀴의 회전 방향과 회전 속도에 따라 로봇의 이동 방향이 결정된다. 즉, 좌측 바퀴와 우측 바퀴가 같은 속도로 움직이면 직선주행, 우측만 이동하고 좌측은 정지되어 있다면 좌회전이 되는 것이다. 또한 우측바퀴의 회전 속도와 좌측 바퀴의 회전속도를 다르게 함으로써 우회전이나 좌회전할 때의 로봇 이동속도를 바꿀수가 있다.
        • RoboCar는 각 바퀴마다 DC모터가 하나씩 장비되어 있다. 이는 AVR포트 PA의 0~3이며 0~1이 우측, 2~3이 좌측 모터를 가리킨다.
          AVR포트PA.jpg
        • 위의 그림과 같이 1010이 들어가게 되면 우측 전지, 좌측 전진을 뜻하게 되어 RoboCar는 전진을 하게 된다. 이는 AVR Studio를 통해 변경할 수 있다.
          PORTA.jpg
        • 위의 그림에서 나오는 PORTA를 enable함으로써 사용자가 원하는 방향으로 원격제어를 할 수 있다.
      • 상황에 따른 방향 제어
        • 스마트폰으로부터 좌측으로 가라는 신호를 받더라도 이전에 수행한 동작이 무엇이냐에 따라 다르게 동작되도록 우리는 몇 개의 case를 나눠서 좌회전을 받도록 명령을 넣었다.
          Casecase.jpg
        • 위의 소스코드처럼 각 방향에 대한 명령을 전달 받게 되면, 그 이전에 수행한 (m_State)를 확인하여 어떤 동작을 취할지 결정하도록 하였다.
      • 모터 제어
        • 좌, 우측의 모터를 제어하기 위해서는 속도 변경함수인 PWM_change를 통해 기존의 속도에서 좌, 우측의 DC모터에 재입력할 새로운 속도를 재설정 하도록 한다.
          PWM change.jpg
        • 위의 그림에 나오는 설명처럼 PWM_chage('R', 0x3FF)를 입력하면 우측 모터의 속도를 최대치로 변경을 하게된다. 이는 장난감의 속도변화를 유동적으로 할 수 있게 만든다.
    • PSD센서
      • 위치검출소자(Position Sensitive Device :PSD)는 반도체 표면저항을 이용해서 1개의 p-n접합으로 입사광의 단장거리 위치를 검출하는 반도체 소자이다. RoboCar의 전방에 설치되어 있는 PSD센서를 이용하여 RoboCar가 장애물에 부딫혀서 생길 수 있는 손상을 피할 수 있다.
      • 거리측정 원리
        • PSD는 빛에 반응하는 반도체로서 PSD센서의 출력 전류는 수광점의 위치와 함수 관계를 유지한다. PSD단독으로는 거리 센서를 구성할 수 없으므로 PSD의 최대 특성인 위치감지 특성과 삼각측량법을 이용해서 거리센서를 구성 할 수 있다. 아래의 그림은 PSD센서의 거리 측정 원리를 나타내는 그림이다.
          PSD센서거리측정.jpg
        • RoboCar의 수행동작 중 충돌감지를 취우선으로 하기 위해 PSD센서관련 소스코드를 제일 상단으로 올려서 RoboCar가 다음 명령을 수행하기 이전에 직선상의 장애물을 감지하도록 한다.
          PSD소스코드.jpg
    • US센서
      • 초음파센서)Ultra-Sonic Sensor)는 유전체를 사용하여 압전효과를 통해 초음파를 발생시켜서 물체의 유무나 거리를 측정하는 센서를 말한다. 압전효과를 강하게 하기 위해서 강유전체를 보통 사용하며 일반적으로 세라믹스를 사용한다.
        • 거리측정 원리
          • US센서는 초음파를 발생시킨 후, 이와 동시에 숫자 세기를 시작하고 초음파가 돌아오는 것이 감지되면 세는 것을 멈춘다. 이때 세어진 값을 읽어 포음파가 되돌아오는데 걸리는 시간을 계산하여 거리를 측정하는 것이다.
          • US센서 또한 충돌감지를 하는것이 주목적이기 때문에 소스상에서 PSD다음으로 상단에 위치해 놓아야한다. 또한, 후방의 경우는 우측 U턴을 하면서 후방에 장애물이 감지안될 때까지 연속해서 검사할 수 있어야 한다.
            초음파센서소스코드.jpg
  • HBE-SMII-P270
    • HBE-SMII-P270은 총 5개의 Module로 이뤄져 있다. 그중 이번 프로젝트에서 M5를 제외한 4개의 Module을 사용한다. </br> SMII-P270은 WLAN과 영상정보, 그리고 RoboCar로 명령을 전달 할 수 있는 기능들을 갖추고 있다.
    • HBE-SMII-P270의 통신 방법
      • SMII는 RoboCar와 스마트폰간의 통신을 이어주는 매개체 역할을 수행하기 위해 서버로 동작을 하게 된다. 다음의 두 그림은 원격제어 관련 통신과 영상 처리관련 통신 구조이다.
        안드로이드랑통신.jpg
        영상통신.jpg
    • 명령어 전달 방식
      • SMII에서 기존의 RoboCar가 갖추고 있었던 DC모터 제어 ASCII표를 빼고 자체적으로 만든 표에 의거해서 동작되도록 재구성을 한다. 아래는 작성된 새로운 명령들이다.
        모터제어어.jpg


  • RTC 어플리케이션
    • 안드로이드 가속도 센서 값 수집

가속도 센서 값이 바뀔때 마다 변화되는 값을 x,y,z에 float타입으로 저장한다. x,y,z은 portrait 모드 일때, X축,Y축,Z축을 각각 나타낸다.
landscape 모드 일때, Y축이 X축 역할을 담당한다. Z축은 portrait일때와 landscape일때 변화가 없다.

가속도센서.bmp


  • RoboCar 와의 통신

HBE -SM2-M3의 Wireless LAN 과 안드로이트 스마트폰을 TCP connection을 맺어 소켓 통신을 한다. 이때 전송되는 데이터는 Robocar 제어를 위한 char가 전송된다.

메서드1.bmp

위에 함수는 TCP connection을 맺는 역할을 한다. 위의 IP는 로보카의 IP 주소이다.

메서드.bmp

TCP connection 후 Robocar 제어를 DataSend메서드를 통해 char를 전송한다.

  • EWMA(Exponential Weighted Moving Average)

가속도 센서 값에 따른 Robocar 제어를 보다 Smooth 하게 위하여 EWMA(Exponential Weighted Moving Average)를 적용하였다. EWMA 값을 얻기 위하여 다음과 같은 식이 필요하다.

EWMA1.bmp

위의 식을 통해 EWMA 값을 얻을 수 있다. 위의 식을 적용하기 위해 두가지 사항을 결정해야 한다. 첫번쨰는 가속도 센서 값을 저장하는 queue , 즉 배열의 크기를 몇개로 지정할 것인가 이고, 두번째는 a값을 얼마로 지정할 것인가 이다. 첫번째 사항은 일정한 a 값에 대하여 큐의 크기를 10 단위로 테스트를 하였다. 배열의 크기가 30개 이상부터는 거의 차이가 나지 않는 것을 확인하여 queue 크기는 30개로 결정하였다. 두번째 사항은 a값을 얼마로 지정한것인가 이다. a 값은 현재의 값을 얼마나 반영할것인가에 대한 척도 이며, 우리는 2의 자승 단위로 테스트 하였다. a 값이 크면 클수록 Robocar의 제어가 수월하였다. 테스트 했던 a값들은 31/32, 15/16 , 7/8 , 3/4 , 1/2 , 1/4 , 1/8 , 1/16 , 1/32 이다. 최종적으로 a값은 31/32로 결정하였다.

EW.bmp

위에 그림에서 보듯이 pa에는 최근에 들어온 값을 제외한 queue에 들어 있는 가속도 값의 평균이고 q[0]는 최근의 값을 가지고 있다. EWMA 공식에 의해 위의 코드 처럼 구현 하였다. 이렇게 얻어진 ema 값을 통해 Robocar 모터제어를 한다.

모터제어.bmp

시나리오

  • CASE1 : 유저 A는 RC동호회 회원으로써, 동호회 나들이를 간다. 기존에 있는 조종기대신 유저 A의 스마트폰과 RC기기를 들고 나간다.

어플리케이션을 실행 한 후, 로보카가 전달하는 영상 정보를 통해 영상을 확인한다. 유저 A는 자기가 원하는 곳을 보기 위해 방향제어를 통해 로보카를 조종하며 움직인다. 유저 A는 동호회 회원들과 공원에서 RC기기를 이리저리 조종하고싶다. 공원의 구조와 장애물위치를 알고 있는 유저 A는 공원의 원하는 곳에 로보카가 갈수 있도록 안드로이드 폰을 앞으로 뉘어 직진한다. 직진 중, 유저 A가 미처 공원에 있는 공원 의자를 보지 못했을 때, 로보카는 전방 충돌 감지를 하여 후진하게 된다. 유저 A는 3.1.2의 로보카 행동을 본 후, 방향 제어로 공원 의자를 피해 다른 곳을 향해 조종한다.

  • CASE2 : 가족들과 놀러간 유저B, 유저 B는 RC기기를 조종을 하기 위해 스마트 폰을 꺼낸다.

RC어플리케이션을 실행한 후 RC조종을 한다. 다른 사람들은 멀리 있는 기기를 쫒아가며 RC를 조종하는 반면 유저B는 어플리케이션 화면을 통해 영상 정보를 확인하며 멀리 가 있는 RC기기를 조종할 수 있다. 기기의 한참 뒤에 있는 유저 B, 자신에게로 오게하게끔 후진을 한다. 그러나 공원에 장애물이 있지만 유저B는 보지 못했다. 하지만 로보카는 후방 충돌 감지를 하여 오른 쪽으로 회전하여 충돌을 막는다. 유저B는 회전된 RC기기를 영상으로 확인하여, 자신에게 오게끔 조종한다.


시나리오.jpg



담당업무

NO. 구분 성명 부서(학과) 직위(학년) 담당업무
1 팀장 이지승 정보통신공학과 4학년 안드로이드 어플리케이션 담당
2 팀원 최영진 정보통신공학과 4학년 SM-2 보드 및 Robocar 담당
3 팀원 이수영 정보통신공학과 4학년 SM-2 보드 및 Robocar , 문서 담당
4 팀원 오진석 정보통신공학과 4학년 안드로이드 어플리케이션 디자인


일정 계획


일정.jpg

개발 및 시험 환경


  • 하드웨어
    • HBE-SMⅡ-P270
    • HBE-Robo-Car
  • 소프트웨어
    • Eclipse , Android
    • Fedora10, minicom
    • AVR studio 4

결론 및 향후 계획


  • RTC서비스는 안드로이드 스마트 폰과 HBE-SM2보드의 WiFI 연결을 통해 HBE-Robocar 모터를 제어하여 원격 조종을 한다. 기존의 RC카와비교하여 RC카와 리모컨의 주파수를 통한 연결이 아니라 WiFi를 통한 연결이라 여럿 사용자가 동시에 사용할때, 주파수 혼선을 피할수 있다. 또한 RC카 리모컨에서 발생하는 베터리 문제를 스마트폰으로 대체 하였기에 베터리의 영향을 적게 받을수 있다. RTC 서비스는 안드로이드 가속도 센서 값을 통해 기존의 2-stick 방식이 아니라 모션제어방식을 통해 보다 사용자에게 실제 운전과 비슷한 재미를 제공하였다. 또한 가속도 센서값을 EWMA를 통해 보다 smooth 한 제어시스템을 제공하였다. 향후 영상 처리 속도 문제를 해결한다면, 단순한 RC로써의 목적이 아니라 집안의 구석구석을 원격 제어를 통해 돌아다니면서 영상을 전송하여 방범용 목적으로도 발전 할수 있고 단순한 재미를 위한 측면에서는 영상을 통해 장애물을 감지하고 증강현실과 결합하여 주변에 어떤 RC카가 있는지를 확인하는등 다양한 놀이거리가 발생될것이라고 생각한다.

Project Outcomes


Proposal

Media:제안서1.pdf

중간발표

Media:10_31.pdf

최종발표

2011-12-05 Media Wiki로 발표

발표 자료

  • 10/24 발표 자료

Media:10_24.pdf

  • 10/31 발표 자료

Media:10_31.pdf

  • 11/7 발표 자료

Media:11_7.pdf

  • 11/14 발표자료

Media:11_14.pdf

  • 11/28 발표자료

Media:11_28.pdf

회의록

2011.09.28 회의록

  • 오프라인 회의 (장소 :305호 실험실)
아이디어 의견 종합 결과 : 기존의 의견을 보완하여 공원 정보 시스템에 추가적으로 공원 주차 정보 와 공원내 셔틀버스의 위치 정보를 포함하는 서비스로 결정

2011.09.29 회의록

  • 온라인 회의
28일 아이디어회의를 수렴하여 제안서 마무리하기

2011.10.02 회의록

  • 온라인 회의
29일 수정한부분 다듬고 제안서 수정 완료

2011.10.05 회의록

  • 오프라인 회의 (장소 : 305호 실험실)
  • 향후 일정 및 계획 수정

2011.10.12 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : pm 6:30 ~ 8:30
  • 회의내용
    • 10월 10일 제안서 2차 발표 후 교수님의 피드백을 참고하여 수정 및 보완 함
    • 기술적인 면에서 좀 더 공원의 특징을 부각시킬수 있는 방안에 대하여 Brain Storming 함

2011.10.21 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : pm 6:30 ~ 8:30
  • 회의내용
    • 10월 14일의 의견을 종합하여 새로운 아이디어로 변경하기로 결정함.
    • 회의 시 나온 아이디어로 실시간 블랙박스 정보 제공, 스마트폰을 이용한 로보카 원격제어, 스마트 클래스룸, 무인 재활용 시스템
    • 블랙박스와 원격 제어 아이디어를 혼합한 새로운 아이디어 도출 '실내 감시 로봇'

2011.10.23 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : 1:30 pm ~ 4:30 pm
    • 로보카 위에 SM-II 보드를 연결하여 실시간 영상 정보와 로보카 제어를 Wifi를 통해 하는 것으로 결정 했으며,
    • 스마트폰의 가속도 센서를 이용하여 로보카를 원격 제어 하는 것으로 결정했습니다.
    • 로보카의 동작 알고리즘은 현재 예외처리 부분에 대하여 의논 중이며, 발표 전까지 정하도록 결정했습니다.

2011.10.26 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : pm 6:30 ~ 8:00
    • 중간 발표 일정에 맞추어 어떤점에 포커스를 두어 서비스를 구성할지 의논
    • 교수님 Feedback 을 통해 부족한점(로보카의 모터가 어떻게 제어되는지등등) 조사
    • 구체적 안드로이드 UI의 설계

2011.10.28 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : pm 7:00 ~ 9:45
    • 안드로이드 UI 설계 후 세부사항 조율
    • 가속도 센서 사용시 축의 변화로 생기는 문제에 대해 수정 완료
    • 로보카 개발 환경 완료 후 키보드를 통한 제어 완료
    • 위의 세부적인 사항들을 조금더 보완 및 보충 후 10.30 까지 각자 맡은 부분 완료 계획

2011.11.02 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : pm 7:00 ~ 9:45
    • 동영상을 통해 로보카의 조종을 보여드린 것에 더 추가하여, 폰으로 원격할 수 있게 구현에 대한 회의
    • 영상처리에 대해 각자 조사해오기

2011.11.8 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : pm 3:30 ~ 9:45
    • Moving Average 대해 조사후 Simple Moving Average 와 Exponential Weighted Moving Average 중 어떤것을 결정할것인가에 대하여 SMA로 할것으로 결정

2011.11.11 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : pm 6:00 ~ 9:00
    • 현재 까지 진행사항을 점검한 후 충돌 감지 부분에 좀더 신경 써서 세부적인 구현 목표를 정함

2011.11.16 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : pm 6:00 ~ 8:00
    • 교수님 Feedback 을 통해 SMA 로 구현 했던 것을 EWMA 로 변경하여 Moving Average를 함
    • 충돌 감지 부분 수정 토의
    • 스마트폰과 SM 보드 간 영상 전송에 대해 토의함

2011.11.23 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : pm 6:00 ~ 9:00
    • 2일간 영상 전송 구현에 매달렸지만 SM 보드에 큐토피아 설치후 Wireless LAN 설정이 잡히지 않아서 계속 수정중임

2011.11.25 회의록

  • 오프라인 회의(장소 : 409호 논문실)
  • 시간 : pm 3:30 ~ am 6:00
    • 영상전송 성공
    • 통신 delay 문제 처리할 것
    • 충돌감지 부분을 테스트를 통해 Best Condition 을 결정
    • 최종발표를 위한 마무리 작업 수행


Reference

표준 문서 문서 제목
한백전자 HBE-SM2 하드웨어 매뉴얼
한백전자 HBE-SM2로 배우는 임베디드 리눅스 프로그래밍
한백전자 HBE-RoboCAR.pdf
<BM 성안당> 김정훈 구글의 안드로이드 프로그래밍
<한빛 미디어(주)> 김상형 안드로이드 프로그래밍 정복
Jan Bluemenhal,Ralf Grossmann, Frank Golatowski,Dirk Timmermann Weighted Centroid Localization in Zigbee-based Sensor Network

소스첨부

RTC 어플리케이션

RTC.zip RoboCar&SMII.zip