Smart Poniting & Tracking Algorithms Using Accelerometer & Gyroscope Chapter 1 System Summary System Summary X,Y Or Smart Phone (Client) Button Click 1. Android Application for MEMS sensing 2. MEMS-sensor based pointing & compensation algorithm ☞ Pointing algorithms 1. Quaternion 2. Rodrigues ☞ Compensation algorithms 1. Kalman filter 2. Tilt compensation PC (Server) 1. Implementation of Window application for controlling mouse cursor 2. Implementation of Bluetooth socket communication algorithm ☞ Mouse cursor control using WinAPI function ☞ Bluetooth SPP(Serial Port Profile)-based socket program Chapter 2 Pointing algorithm (Quaternion, Rodrigues) Quaternion - multiply Quaternion – axis transform , , Pointing Algorithm Pointing Algorithm HID(Human Interface Device) Control channel Interrupt channel HID – Search & Analysis HID PROFILE with Bluetooth wireless communications Android open source & Android platform data http://www.hackchina.com/en/cont/16692 HID-Mouse C++ source code AndroMouse Desktop 2.4 Bluetooth / Wifi HID Application Keyboard, Mouse only touch use http://www.youtube.com/watch?v=X0ixrshL708&feature=player_embedded Pointing algorithm – Quaternion (1/2) Quaternion rotation – Axis conversion If above p and q are multiplied - Quaternion multiply formula Pointing algorithm – Quaternion (2/2) User-frame : Axis that a user look at a target Body-frame : Basic axis of a device Assume rotation occurs around z-axis. Then the followings are driven. Z-axis is toward the direction to the display of a device, the above equation is based on z-axis. If the equation is rewritten, Once we apply Quaternion the axis-conversion equation to the above equation, we can obtain Rotation matrix from axis and angle y p’(a’,b’) p(a,b) x Trigonometrical function: Addition theorem Rotation matrix from axis and angle Rodrigues’ rotation formula Rodrigues’ rotation formula Rodrigues’ rotation formula y w x Rodrigues’ rotation formula Rodrigues’ rotation formula Pointing Algorithm 02 Pointing algorithm – Rodrigues (1/3) 1번 식의 유도 과정을 살펴보면 아래와 같다. Pointing algoritms – Rodrigues (2/3) Once we solve the above equation, we can obtain Pointing algorithm – Rodrigues (3/3) Since the Rodrigues rotation-conversion matrix is for x, y, z axis, removing the part of z-axis in the matrix can be simplified to the following 2x2 matrix. Using line acceleration values taken from an accelerometer, the following x, y axis vector can be obtained. Using values for x, y axis vectors, the following ' can be obtained. The variations of x and y corresponding to ' in display can be driven as a following equation using the Euler’s equation. Comparison in processing sped(Quaternion / Rodrigues) - Comparison in required computing time The number of loop 1 - 100 Quaternion (Adopted mapping process) 382,125 ns - x, y variation after mapping x(rodrigues) Rodrigues rotation -5 -0.7 x 10 x(quaternion) y(rodrigues) y(quaternion) 411,118 ns 101 - 200 300,005 ns 442,801 ns 201 - 300 258,423 ns 423,145 ns 301 - 400 196,343 ns 406,271 ns 401 - 500 225,620 ns 435,145 ns 501 - 600 227,691 ns 680,828 ns 601 - 700 279,900 ns 919,970 ns 701 - 800 480,468 ns 838,399 ns 801 - 900 533,706 ns 919,483 ns 901 - 1000 374,154 ns 646,239 ns Average 325,844 ns 612,340 ns ⇒ Quaternion is twice faster than Rodrigues rotation in average. -0.8 -0.9 -1 -1.1 -1.2 -1.3 0 10 20 30 40 50 60 70 80 90 100 ⇒ Quaternion provides more stable in x, y variation in case of no movement of a smart phone. Chapter 3 Compensation algorithm (Kalman filter, Tilt compensation) Kalman Filter Kalman filter predicts variations in states and estimates current state for measured current noise. It can also estimate the state values similar to real states by updating covariance. Effects of Kalman filter 1. Minimize noise in data from accelerometer 2. Compensation in noise caused by hand shaking or vibration Kalman Filter 1. Minimize noise in sensor data - Smart phone ⇒ No movement - Smart phone ⇒ moved 0.2 6 accel valuex accel valuex (befor kalman) accel valuey accel valuey (befor kalman) accel valuez accel valuez (befor kalman) 0.1 4 0 2 -0.1 Before application 0 -0.2 -0.3 -2 -0.4 -4 -0.5 -0.6 0 100 200 300 400 500 600 700 800 900 1000 0.05 -6 0 100 200 300 400 500 600 700 800 900 1000 2 accel valuex (after kalman) accel valuey (after kalman) accel valuez (after kalman) 1.5 0 1 accel valuex (kalman) -0.05 accel valuey (kalman) 0.5 accel valuez (kalman) -0.1 0 -0.15 -0.5 After application -1 -0.2 -1.5 -0.25 -2 -0.3 -2.5 -0.35 0 100 200 300 400 500 600 700 800 900 1000 -3 0 100 200 300 400 500 600 700 800 900 1000 Kalman Filter 2. Noise compensation caused by hand shaking or vibration ☞ generated when you touch the touch pad of a phone - Before and after in x axis - Before and after in y axis 2 x variation - before kalman(1:1000,1) x variation - after kalman(1:1000,2) 4 y variation - before kalman(1:1000,4) y variation - after kalman(1:1000,5) 1.5 3 1 2 0.5 0 1 -0.5 0 -1 -1 -1.5 -2 0 100 200 300 400 500 600 700 800 900 1000 -2 0 100 200 300 400 500 600 700 800 900 1000 Tilt compensation No compensation information in Quaternion mapping - Key point: Calculating unit vector based on periodic characteristic according to tilt of a device 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 9.8 Accel_Value[0] 0 - 9.8 Accel_Value[1] 0 9.8 Accel_Value[2] 90’ 45’ 0’ -45’ 90’ 0 -0.6 -0.8 -1 -8 -6 -4 -2 0 2 4 6 8 Chapter 4 Wireless Mouse for remote TV control Using Smart Phone Application development and implementation X,Y Or Button Click < Tray Icon > Bluetooth Based Algorithm Development Enviroment • Overall structure Sender Receiver Screen Accel, Gyro Sensor User’s Input OS Windows 7 플랫폼 Android 통신방법 Bluetooth 3.0 개발도구 Android SDK Tool Eclipse Pointing Algorithm Calibration Algorithm 센서 Bluetooth 안드로이드 버전 Accelerometer, Gyro 2.3.3 Test Environment : Android OS Base smart devices with Bluetooth support APP base algorithm processing and data display Development Enviromment Based on Bluetooth * GUI for Transmitter * GUI for Receiver - Main display Search for Bluetooth devices Bluetooth switching Display switching for test After Bluetooth connection Bluetooth switching Waiting for connection Sensor data transmission/Motion recog. command Increase sensitivity - Test display Display after algorithm Processing on input data Decrease sensitivity Algorithm selection Application of tilt variation with Euler formula ACC Data GYRO Data ACC Data GYRO Data Integration Integration Mapping Mapping Matrix multiply Matrix multiply Display Tilt compensation Display Application of tilt variation with Euler formula • Solution of the tilt problem in right rotation • In case of right rotation, y output data is in the opposite direction. 3. Results & Experiments Algorithm flow of the proposed pointing algorithm using sensor fusion ACC Data GYRO Data Integration Mapping Matrix multiply The number of loop Quaternion Rodrigues rotation 1 - 100 382,125 ns 411,118 ns 101 - 200 300,005 ns 442,801 ns 201 - 300 258,423 ns 423,145 ns 301 - 400 196,343 ns 406,271 ns 401 - 500 225,620 ns 435,145 ns 501 - 600 227,691 ns 680,828 ns 601 - 700 279,900 ns 919,970 ns 701 - 800 480,468 ns 838,399 ns 801 - 900 533,706 ns 919,483 ns 901 - 1000 374,154 ns 646,239 ns Average 325,844 ns 612,340 ns < Mapping process 연산 속도 비교 > x(rodrigues) -5 -0.7 x 10 x(quaternion) y(rodrigues) y(quaternion) -0.8 Tilt compensation -0.9 -1 -1.1 Display -1.2 -1.3 Page 36 0 10 20 30 40 50 60 70 80 90 < Mapping 처리 후 x, y 변화량 비교 > 100 3. Results & Experiments Tilt compensation & Hand tremor Begin Prediction on state variation Current state estimation on current input noise Continuous update on two uncertainty Estimation similar to real measured data False True End < Tilt compensation algorithm > Page 37 < Algorithm flow when Kalman filters are applied> 3. Results & Experiments Bluetooth based App-form algorithm development environment Device(Client) Android Application X,Y Host(Server) Windows Application Or Button Click <Transmission part > Page 38 <Bluetooth Socket Communication > 3. Results & Experiments Mouse cursor control in PC using Smast < Demonstration > Page 39 < Simulation of Windows application > Chapter 5 Bluetooth Socket Program Bluetooth SPP (Serial Port Profile) - SPP is a profile to connect applications to serial port. LMP, L2CAP, SDP, RFCOMM implemented on Baseband layer Connect application through serial port with loading Serial Port Emulation(or other API) on firmware layer. Bluetooth SPP UUID : 00001101-0000-1000-8000-00805F9B34FB Max. 30-port generation possible in RFCOMM protocol. Bluetooth socket programming - send, recv / sendto, recvfrom function for data transmission/receiving in socket communication (1) Function resources send(int sockfd, const void *buf, size_t len, int flags) recv(int sockfd, const void *buf, size_t len, int flags) sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen) recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen) (2) TCP data transmission/receiving send() / recv()함수는 address를 지정할 수 없기 때문에, 연결지향 방식인 TCP 통신에서 사용된다. (물론 sendto / recvfrom도 사용 가능) ○ send(int sockfd, const void *buf, size_t len, int flags) - sockfd : 목적지의 주소 정보를 갖는 파일 디스크립터 - buf : 전송하기 위한 데이터의 포인터 - len : 데이터의 길이 - flags : 함수의 호출이 어떤 일을 할지 나타내는 플래그 - return value : 전송 성공 시 전송한 바이트 수 반환, 실패 시 –1 반환 ○ recv(int sockfd, const void *buf, size_t len, int flags) - sockfd : 접속된 소켓의 파일 디스크립터 - buf : 수신 데이터를 저장할 버퍼의 포인터 - len : 수신할 데이터의 길이 - flags : 함수의 호출이 어떤 일을 할지 나타내는 플래그 - return value : 전송 성공 시 전송한 바이트 수 반환, 실패 시 –1 반환 → 서버 측에서는 accept하여 생성된 소켓을, 클라이언트 측에서는 connect에 사용한 소켓을 이용하여 데이터를 송수신 한다. Bluetooth socket programming (3) UDP data transm/receiving : sendto() / recvfrom()함수는 address를 지정할 수 있기 때문에, 연결지향 방식인 UDP 통신에서 사용된다. ○ sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen) - sockfd : 소켓의 파일 디스크립터 - buf : 전송될 데이터를 가지고 있는 버퍼 - len : 버퍼의 데이터의 길이 - flags : 함수의 호출이 어떤 일을 할지 나타내는 플래그 - dest_addr : 데이터가 전송될 원격 호스트의 주소 - len : 주소정보 구조체의 길이(구조체의 길이를 입력 받으므로 포인터형) ○ recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t addrlen) - sockfd : 바인드된 소켓의 파일 디스크립터 - buf : 수신되는 데이터를 저장할 버퍼의 포인터 - len : 버퍼의 길이 - flags : 함수의 호출이 어떤 일을 할지 나타내는 플래그 - src_addr : 수신받은 데이터를 송신한 단말의 주소를 리턴받기 위한 버퍼 포인터 - addrlen : 주소정보 구조체의 길이(구조체의 길이를 입력 받으므로 포인터형) Bluetooth socket programming (4) System call for data transm./receiver - write : Data transmission through stream socket - read : Data receiving through stream socket - send : data transmission(stream socket) with option - recv : data receiving(Stream 소켓) with option - sendto : data transmission through datagram socket - recvfrom : data receiving through datagram socket socket : Software medium for connecting remote two hosts ○ Socket generation int socket(int domain, int type, iont protocol) ○ Address and port assignment int bind(int sockfd, struct sockaddr *myaddr, int addrlen) ○ Waiting for connection request int listen(int sockfd, int backlog) ○ Accept for connection int accept(int sockfd, struct sockaddr *addr, int *addrlen)