Kim Youngsik / Mbed 2 deprecated 0ROBOFRIEN_FCC_v1_12

Dependencies:   mbed BufferedSerial ConfigFile

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SPATIAL.cpp Source File

SPATIAL.cpp

00001 #include "SPATIAL.h"
00002 #include "mbed.h"
00003 #define M_PI 3.141592
00004 #define RADIANS_TO_DEGREES (180.0/M_PI)
00005 #include "BufferedSerial.h"
00006 
00007 
00008 BufferedSerial SPATIAL_UART(p28, p27);      // tx, rx
00009 
00010 /* ****** 100Hz Receive ********** */
00011 // Packet ID : 42, Length : 12  --> Angural Velocity X,Y,Z (rad/s)
00012 // Packet ID : 39, Length : 12  --> Roll, Pitch, Yaw (rad)
00013 
00014 /* ****** 10Hz Receive *********** */
00015 // Packet ID : 35, Length = 12  --> NED Velocity X, Y, Z (m/s)
00016 // Packet ID : 32, Length = 24  --> System State Packet
00017 
00018 /* ****** 1Hz Receive *********** */
00019 // Packet ID : 22, Length = 14  --> Time Packet
00020 // Packet ID : 30, Length = 13  --> Satellites Packet
00021 
00022 //float 이랑 double 값뽑을때 쓰는거
00023 union FP8
00024 {
00025     char DATA8[8];
00026     double F8;
00027 };
00028 union FP4
00029 {
00030     char DATA4[4];
00031     float F4;
00032 };
00033 
00034 uint16_t calculate_crc16(const void *data, uint16_t length)
00035 {
00036     uint8_t *bytes = (uint8_t *) data;
00037     uint16_t crc = 0xFFFF, i;
00038     for (i = 0; i < length; i++)
00039     {
00040         crc = (uint16_t)((crc << 8) ^ crc16_table[(crc >> 8) ^ bytes[i]]);
00041     }
00042     return crc;
00043 }
00044 
00045 void SPATIAL::Init(int sensor_wait_input){
00046     if( sensor_wait_input == 1){
00047         SENSOR_WAIT_BOOL = true;
00048     }else{
00049         SENSOR_WAIT_BOOL = false;
00050     }
00051     SPATIAL_UART.baud(115200);   
00052 }
00053 //이것은 SPATIAL에서 전송되는 각종 데이터를 받는 부분이다.
00054 void SPATIAL::SPATIAL_RECEIVE()
00055 {
00056   while(SPATIAL_UART.readable() > 0) 
00057   {
00058     SPATIAL_ID[4] = SPATIAL_ID[3]; SPATIAL_ID[3] = SPATIAL_ID[2]; SPATIAL_ID[2] = SPATIAL_ID[1]; SPATIAL_ID[1] = SPATIAL_ID[0]; SPATIAL_ID[0] = SPATIAL_UART.getc();
00059     if((SPATIAL_ID_39_BOOL == true)|(SPATIAL_ID_42_BOOL == true)|(SPATIAL_ID_35_BOOL == true)|(SPATIAL_ID_32_BOOL == true)|(SPATIAL_ID_22_BOOL == true)|(SPATIAL_ID_30_BOOL == true)){
00060 //      SPATIAL_BUF[SPATIAL_BUF_CNT] = SPATIAL_ID[0];
00061       if(SPATIAL_ID_39_BOOL == true) {
00062           SPATIAL_39_BUF[SPATIAL_BUF_CNT] = SPATIAL_ID[0];
00063           if(SPATIAL_BUF_CNT >= 12){ SPATIAL_ID_39_BOOL = false; SPATIAL_ID_39_PARSING_BOOL = true;}
00064       }else if(SPATIAL_ID_42_BOOL == true) {
00065           SPATIAL_42_BUF[SPATIAL_BUF_CNT] = SPATIAL_ID[0];
00066           if(SPATIAL_BUF_CNT >= 12){ SPATIAL_ID_42_BOOL = false; SPATIAL_ID_42_PARSING_BOOL = true;} 
00067       }else if(SPATIAL_ID_35_BOOL == true) {
00068           SPATIAL_35_BUF[SPATIAL_BUF_CNT] = SPATIAL_ID[0];
00069           if(SPATIAL_BUF_CNT >= 12){ SPATIAL_ID_35_BOOL = false; SPATIAL_ID_35_PARSING_BOOL = true;} 
00070       }else if(SPATIAL_ID_32_BOOL == true) {
00071           SPATIAL_32_BUF[SPATIAL_BUF_CNT] = SPATIAL_ID[0];
00072           if(SPATIAL_BUF_CNT >= 24){ SPATIAL_ID_32_BOOL = false; SPATIAL_ID_32_PARSING_BOOL = true;} 
00073       }else if(SPATIAL_ID_22_BOOL == true) {
00074           SPATIAL_22_BUF[SPATIAL_BUF_CNT] = SPATIAL_ID[0];
00075           if(SPATIAL_BUF_CNT >= 14){ SPATIAL_ID_22_BOOL = false; SPATIAL_ID_22_PARSING_BOOL = true;} 
00076       }else if(SPATIAL_ID_30_BOOL == true) {
00077           SPATIAL_30_BUF[SPATIAL_BUF_CNT] = SPATIAL_ID[0];
00078           if(SPATIAL_BUF_CNT >= 13){ SPATIAL_ID_30_BOOL = false; SPATIAL_ID_30_PARSING_BOOL = true;} 
00079       }
00080       SPATIAL_BUF_CNT ++;
00081     }
00082     else{
00083       if((SPATIAL_ID[3] == 39) & (SPATIAL_ID[2] == 12))    //두번째 데이터가 '패킷넘버', 세번째 데이터가 '데이터랭쓰'임... 별도의 SOF가 없어서 이걸 기준으로함.
00084       {
00085         //첫 번째 데이터 : head LRC이며 계산식 돌린거랑 첫번째 데이터랑 일치하면 이 배열을 쓸거라는 의미.
00086         if((uint8_t)((((uint32_t)SPATIAL_ID[3] + (uint32_t)SPATIAL_ID[2] + (uint32_t)SPATIAL_ID[1] + (uint32_t)SPATIAL_ID[0]) ^ 0xFF) + 1) == (uint8_t)SPATIAL_ID[4])
00087         {
00088           SPATIAL_ID_39_BOOL = true;
00089           CRC_INPUT = (uint16_t)SPATIAL_ID[0]<<8 | (uint16_t)SPATIAL_ID[1];
00090           SPATIAL_BUF_CNT = 0;
00091         }
00092       }        
00093       else if((SPATIAL_ID[3] == 42) & (SPATIAL_ID[2] == 12))    //두번째 데이터가 '패킷넘버', 세번째 데이터가 '데이터랭쓰'임... 별도의 SOF가 없어서 이걸 기준으로함.
00094       {
00095         //첫 번째 데이터 : head LRC이며 계산식 돌린거랑 첫번째 데이터랑 일치하면 이 배열을 쓸거라는 의미.
00096         if((uint8_t)((((uint32_t)SPATIAL_ID[3] + (uint32_t)SPATIAL_ID[2] + (uint32_t)SPATIAL_ID[1] + (uint32_t)SPATIAL_ID[0]) ^ 0xFF) + 1) == (uint8_t)SPATIAL_ID[4])
00097         {
00098           SPATIAL_ID_42_BOOL = true;
00099           CRC_INPUT = (uint16_t)SPATIAL_ID[0]<<8 | (uint16_t)SPATIAL_ID[1];
00100           SPATIAL_BUF_CNT = 0;
00101         }
00102       }        
00103       else if((SPATIAL_ID[3] == 35) & (SPATIAL_ID[2] == 12))    //두번째 데이터가 '패킷넘버', 세번째 데이터가 '데이터랭쓰'임... 별도의 SOF가 없어서 이걸 기준으로함.
00104       {
00105         //첫 번째 데이터 : head LRC이며 계산식 돌린거랑 첫번째 데이터랑 일치하면 이 배열을 쓸거라는 의미.
00106         if((uint8_t)((((uint32_t)SPATIAL_ID[3] + (uint32_t)SPATIAL_ID[2] + (uint32_t)SPATIAL_ID[1] + (uint32_t)SPATIAL_ID[0]) ^ 0xFF) + 1) == (uint8_t)SPATIAL_ID[4])
00107         {
00108           SPATIAL_ID_35_BOOL = true;
00109           CRC_INPUT = (uint16_t)SPATIAL_ID[0]<<8 | (uint16_t)SPATIAL_ID[1];
00110           SPATIAL_BUF_CNT = 0;
00111         }
00112       }        
00113       else if((SPATIAL_ID[3] == 32) & (SPATIAL_ID[2] == 24))    //두번째 데이터가 '패킷넘버', 세번째 데이터가 '데이터랭쓰'임... 별도의 SOF가 없어서 이걸 기준으로함.
00114       {
00115         //첫 번째 데이터 : head LRC이며 계산식 돌린거랑 첫번째 데이터랑 일치하면 이 배열을 쓸거라는 의미.
00116         if((uint8_t)((((uint32_t)SPATIAL_ID[3] + (uint32_t)SPATIAL_ID[2] + (uint32_t)SPATIAL_ID[1] + (uint32_t)SPATIAL_ID[0]) ^ 0xFF) + 1) == (uint8_t)SPATIAL_ID[4])
00117         {
00118           SPATIAL_ID_32_BOOL = true;
00119           CRC_INPUT = (uint16_t)SPATIAL_ID[0]<<8 | (uint16_t)SPATIAL_ID[1];
00120           SPATIAL_BUF_CNT = 0;
00121         }
00122       }        
00123       else if((SPATIAL_ID[3] == 22) & (SPATIAL_ID[2] == 14))    //두번째 데이터가 '패킷넘버', 세번째 데이터가 '데이터랭쓰'임... 별도의 SOF가 없어서 이걸 기준으로함.
00124       {
00125         //첫 번째 데이터 : head LRC이며 계산식 돌린거랑 첫번째 데이터랑 일치하면 이 배열을 쓸거라는 의미.
00126         if((uint8_t)((((uint32_t)SPATIAL_ID[3] + (uint32_t)SPATIAL_ID[2] + (uint32_t)SPATIAL_ID[1] + (uint32_t)SPATIAL_ID[0]) ^ 0xFF) + 1) == (uint8_t)SPATIAL_ID[4])
00127         {
00128           SPATIAL_ID_22_BOOL = true;
00129           CRC_INPUT = (uint16_t)SPATIAL_ID[0]<<8 | (uint16_t)SPATIAL_ID[1];
00130           SPATIAL_BUF_CNT = 0;
00131         }
00132       }        
00133       else if((SPATIAL_ID[3] == 30) & (SPATIAL_ID[2] == 13))    //두번째 데이터가 '패킷넘버', 세번째 데이터가 '데이터랭쓰'임... 별도의 SOF가 없어서 이걸 기준으로함.
00134       {
00135         //첫 번째 데이터 : head LRC이며 계산식 돌린거랑 첫번째 데이터랑 일치하면 이 배열을 쓸거라는 의미.
00136         if((uint8_t)((((uint32_t)SPATIAL_ID[3] + (uint32_t)SPATIAL_ID[2] + (uint32_t)SPATIAL_ID[1] + (uint32_t)SPATIAL_ID[0]) ^ 0xFF) + 1) == (uint8_t)SPATIAL_ID[4])
00137         {
00138           SPATIAL_ID_30_BOOL = true;
00139           CRC_INPUT = (uint16_t)SPATIAL_ID[0]<<8 | (uint16_t)SPATIAL_ID[1];
00140           SPATIAL_BUF_CNT = 0;
00141         }
00142       }        
00143     }
00144   }
00145     SPATIAL_ID_42_Parsing();
00146     SPATIAL_ID_39_Parsing();
00147     SPATIAL_ID_35_Parsing();
00148     SPATIAL_ID_32_Parsing();
00149     SPATIAL_ID_22_Parsing();
00150     SPATIAL_ID_30_Parsing();
00151 }
00152 
00153 void SPATIAL::SPATIAL_ID_22_Parsing(){
00154     if(SPATIAL_ID_22_PARSING_BOOL == true){
00155         SPATIAL_ID_22_PARSING_BOOL = false;
00156         if(CRC_INPUT == calculate_crc16(SPATIAL_22_BUF,14)){
00157             UNIX_TIME = (uint32_t)SPATIAL_22_BUF[0] + (uint32_t)SPATIAL_22_BUF[13]*100 + (uint32_t)SPATIAL_22_BUF[12]*10000 + (uint32_t)SPATIAL_22_BUF[11]*1000000;        
00158         }   
00159     }    
00160 }
00161 void SPATIAL::SPATIAL_ID_30_Parsing(){
00162     if(SPATIAL_ID_30_PARSING_BOOL == true){
00163         SPATIAL_ID_30_PARSING_BOOL = false;
00164 //            SATELLITE_NUM ++;
00165 //        if(CRC_INPUT == calculate_crc16(SPATIAL_30_BUF,13)){
00166             SATELLITE_NUM = SPATIAL_30_BUF[8] + SPATIAL_30_BUF[9] + SPATIAL_30_BUF[10] + SPATIAL_30_BUF[11] + SPATIAL_30_BUF[12];
00167 //        }   
00168     }    
00169 }
00170 
00171 void SPATIAL::SPATIAL_ID_35_Parsing(){
00172     if(SPATIAL_ID_35_PARSING_BOOL == true){
00173         SPATIAL_ID_35_PARSING_BOOL = false;
00174         if(CRC_INPUT == calculate_crc16(SPATIAL_35_BUF,12)){
00175             FP4 SPATIAL_Vx;       //이 과정은 4바이트로 흩어진 것을 하나의 float형으로 모으는 과정..
00176             SPATIAL_Vx.DATA4[0] = SPATIAL_35_BUF[0];
00177             SPATIAL_Vx.DATA4[1] = SPATIAL_35_BUF[1];
00178             SPATIAL_Vx.DATA4[2] = SPATIAL_35_BUF[2];
00179             SPATIAL_Vx.DATA4[3] = SPATIAL_35_BUF[3];
00180             Vx = SPATIAL_Vx.F4;    //float형으로 짠. 단위는 역시 rad라서 고침.            
00181             
00182             FP4 SPATIAL_Vy;       //이 과정은 4바이트로 흩어진 것을 하나의 float형으로 모으는 과정..
00183             SPATIAL_Vy.DATA4[0] = SPATIAL_35_BUF[4];
00184             SPATIAL_Vy.DATA4[1] = SPATIAL_35_BUF[5];
00185             SPATIAL_Vy.DATA4[2] = SPATIAL_35_BUF[6];
00186             SPATIAL_Vy.DATA4[3] = SPATIAL_35_BUF[7];
00187             Vy = SPATIAL_Vy.F4;    //float형으로 짠. 단위는 역시 rad라서 고침.            
00188     
00189             FP4 SPATIAL_Vz;       //이 과정은 4바이트로 흩어진 것을 하나의 float형으로 모으는 과정..
00190             SPATIAL_Vz.DATA4[0] = SPATIAL_35_BUF[8];
00191             SPATIAL_Vz.DATA4[1] = SPATIAL_35_BUF[9];
00192             SPATIAL_Vz.DATA4[2] = SPATIAL_35_BUF[10];
00193             SPATIAL_Vz.DATA4[3] = SPATIAL_35_BUF[11];
00194             Vz = SPATIAL_Vz.F4;    //float형으로 짠. 단위는 역시 rad라서 고침.                
00195             Vz = -Vz;
00196             
00197             /* ********** ECEF to Compass Heading ***** */
00198             float B_Vx,B_Vy;
00199             B_Vx = Vx * cos(YAW*M_PI/180.0) + Vy * sin(YAW*M_PI/180.0);
00200             B_Vy = Vy * cos(YAW*M_PI/180.0) - Vx * sin(YAW*M_PI/180.0);
00201             Vx = B_Vx;
00202             Vy = B_Vy;
00203         }   
00204     }    
00205 }
00206 void SPATIAL::SPATIAL_ID_32_Parsing(){
00207     if(SPATIAL_ID_32_PARSING_BOOL == true){
00208         SPATIAL_ID_32_PARSING_BOOL = false;
00209         if(CRC_INPUT == calculate_crc16(SPATIAL_32_BUF,24)){
00210             HZ_CNT++;
00211 /*
00212             SYSTEM_STATUS = (uint16_t)SPATIAL_32_BUF[0]<<8 | (uint16_t)SPATIAL_32_BUF[1];
00213             FILTER_STATUS = (uint16_t)SPATIAL_32_BUF[2]<<8 | (uint16_t)SPATIAL_32_BUF[3];
00214 
00215             UNIX_TIME = (uint32_t)SPATIAL_32_BUF[4]<<24 | (uint32_t)SPATIAL_32_BUF[5]<<16 | (uint32_t)SPATIAL_32_BUF[6]<<8 | (uint32_t)SPATIAL_32_BUF[7];        
00216             UNIX_TIME /= 100000;
00217 */
00218             FP8 SPATIAL_LATITUDE;       //이 과정은 8바이트로 흩어진 것을 하나의 double형으로 모으는 과정..
00219             SPATIAL_LATITUDE.DATA8[0] = SPATIAL_32_BUF[0];
00220             SPATIAL_LATITUDE.DATA8[1] = SPATIAL_32_BUF[1];
00221             SPATIAL_LATITUDE.DATA8[2] = SPATIAL_32_BUF[2];
00222             SPATIAL_LATITUDE.DATA8[3] = SPATIAL_32_BUF[3];
00223             SPATIAL_LATITUDE.DATA8[4] = SPATIAL_32_BUF[4];
00224             SPATIAL_LATITUDE.DATA8[5] = SPATIAL_32_BUF[5];
00225             SPATIAL_LATITUDE.DATA8[6] = SPATIAL_32_BUF[6];
00226             SPATIAL_LATITUDE.DATA8[7] = SPATIAL_32_BUF[7];       //얘들을 모아서.     
00227             LATITUDE = SPATIAL_LATITUDE.F8 * RADIANS_TO_DEGREES;    //double형으로 짠. 라디안이라 고침.
00228     
00229     
00230     
00231             FP8 SPATIAL_LONGITUDE;       //이 과정은 8바이트로 흩어진 것을 하나의 double형으로 모으는 과정..
00232             SPATIAL_LONGITUDE.DATA8[0] = SPATIAL_32_BUF[8];
00233             SPATIAL_LONGITUDE.DATA8[1] = SPATIAL_32_BUF[9];
00234             SPATIAL_LONGITUDE.DATA8[2] = SPATIAL_32_BUF[10];
00235             SPATIAL_LONGITUDE.DATA8[3] = SPATIAL_32_BUF[11];
00236             SPATIAL_LONGITUDE.DATA8[4] = SPATIAL_32_BUF[12];
00237             SPATIAL_LONGITUDE.DATA8[5] = SPATIAL_32_BUF[13];
00238             SPATIAL_LONGITUDE.DATA8[6] = SPATIAL_32_BUF[14];
00239             SPATIAL_LONGITUDE.DATA8[7] = SPATIAL_32_BUF[15];       //얘들을 모아서.     
00240             LONGITUDE = SPATIAL_LONGITUDE.F8 * RADIANS_TO_DEGREES;    //double형으로 짠. 라디안이라 고침.
00241     
00242     
00243             FP8 SPATIAL_HEIGHT;       //이 과정은 8바이트로 흩어진 것을 하나의 double형으로 모으는 과정..
00244             SPATIAL_HEIGHT.DATA8[0] = SPATIAL_32_BUF[16];
00245             SPATIAL_HEIGHT.DATA8[1] = SPATIAL_32_BUF[17];
00246             SPATIAL_HEIGHT.DATA8[2] = SPATIAL_32_BUF[18];
00247             SPATIAL_HEIGHT.DATA8[3] = SPATIAL_32_BUF[19];
00248             SPATIAL_HEIGHT.DATA8[4] = SPATIAL_32_BUF[20];
00249             SPATIAL_HEIGHT.DATA8[5] = SPATIAL_32_BUF[21];
00250             SPATIAL_HEIGHT.DATA8[6] = SPATIAL_32_BUF[22];
00251             SPATIAL_HEIGHT.DATA8[7] = SPATIAL_32_BUF[23];       //얘들을 모아서.     
00252             HEIGHT = SPATIAL_HEIGHT.F8;    //double형으로 짠. 라디안이라 고침.
00253              
00254         }   
00255     }    
00256 }
00257 void SPATIAL::SPATIAL_ID_39_Parsing(){
00258     if(SPATIAL_ID_39_PARSING_BOOL == true){
00259         SPATIAL_ID_39_PARSING_BOOL = false;
00260         if(CRC_INPUT == calculate_crc16(SPATIAL_39_BUF,12)){
00261             FP4 SPATIAL_ROLL;       //이 과정은 4바이트로 흩어진 것을 하나의 float형으로 모으는 과정..
00262             SPATIAL_ROLL.DATA4[0] = SPATIAL_39_BUF[0];
00263             SPATIAL_ROLL.DATA4[1] = SPATIAL_39_BUF[1];
00264             SPATIAL_ROLL.DATA4[2] = SPATIAL_39_BUF[2];
00265             SPATIAL_ROLL.DATA4[3] = SPATIAL_39_BUF[3];
00266             ROLL = SPATIAL_ROLL.F4 * RADIANS_TO_DEGREES;    //float형으로 짠. 단위는 역시 rad라서 고침.            
00267 
00268             FP4 SPATIAL_PITCH;       //이 과정은 4바이트로 흩어진 것을 하나의 float형으로 모으는 과정..
00269             SPATIAL_PITCH.DATA4[0] = SPATIAL_39_BUF[4];
00270             SPATIAL_PITCH.DATA4[1] = SPATIAL_39_BUF[5];
00271             SPATIAL_PITCH.DATA4[2] = SPATIAL_39_BUF[6];
00272             SPATIAL_PITCH.DATA4[3] = SPATIAL_39_BUF[7];
00273             PITCH = SPATIAL_PITCH.F4 * RADIANS_TO_DEGREES;    //float형으로 짠. 단위는 역시 rad라서 고침.            
00274     
00275             FP4 SPATIAL_YAW;       //이 과정은 4바이트로 흩어진 것을 하나의 float형으로 모으는 과정..
00276             SPATIAL_YAW.DATA4[0] = SPATIAL_39_BUF[8];
00277             SPATIAL_YAW.DATA4[1] = SPATIAL_39_BUF[9];
00278             SPATIAL_YAW.DATA4[2] = SPATIAL_39_BUF[10];
00279             SPATIAL_YAW.DATA4[3] = SPATIAL_39_BUF[11];
00280             YAW = SPATIAL_YAW.F4 * RADIANS_TO_DEGREES;    //float형으로 짠. 단위는 역시 rad라서 고침.                        
00281             YAW += DECLINATION_ANGLE;
00282             
00283             if(YAW > 360) YAW -= 360;
00284             else if(YAW < 0) YAW += 360;
00285         }   
00286     }    
00287 }
00288 void SPATIAL::SPATIAL_ID_42_Parsing(){
00289     if(SPATIAL_ID_42_PARSING_BOOL == true){
00290         SPATIAL_ID_42_PARSING_BOOL = false;
00291         if(CRC_INPUT == calculate_crc16(SPATIAL_42_BUF,12)){
00292             FP4 SPATIAL_ROLL_RATE;       //이 과정은 4바이트로 흩어진 것을 하나의 float형으로 모으는 과정..
00293             SPATIAL_ROLL_RATE.DATA4[0] = SPATIAL_42_BUF[0];
00294             SPATIAL_ROLL_RATE.DATA4[1] = SPATIAL_42_BUF[1];
00295             SPATIAL_ROLL_RATE.DATA4[2] = SPATIAL_42_BUF[2];
00296             SPATIAL_ROLL_RATE.DATA4[3] = SPATIAL_42_BUF[3];
00297             ROLL_RATE = SPATIAL_ROLL_RATE.F4 * RADIANS_TO_DEGREES;    //float형으로 짠. 단위는 역시 rad라서 고침.            
00298     
00299             FP4 SPATIAL_PITCH_RATE;       //이 과정은 4바이트로 흩어진 것을 하나의 float형으로 모으는 과정..
00300             SPATIAL_PITCH_RATE.DATA4[0] = SPATIAL_42_BUF[4];
00301             SPATIAL_PITCH_RATE.DATA4[1] = SPATIAL_42_BUF[5];
00302             SPATIAL_PITCH_RATE.DATA4[2] = SPATIAL_42_BUF[6];
00303             SPATIAL_PITCH_RATE.DATA4[3] = SPATIAL_42_BUF[7];
00304             PITCH_RATE = SPATIAL_PITCH_RATE.F4 * RADIANS_TO_DEGREES;    //float형으로 짠. 단위는 역시 rad라서 고침.            
00305     
00306             FP4 SPATIAL_YAW_RATE;       //이 과정은 4바이트로 흩어진 것을 하나의 float형으로 모으는 과정..
00307             SPATIAL_YAW_RATE.DATA4[0] = SPATIAL_42_BUF[8];
00308             SPATIAL_YAW_RATE.DATA4[1] = SPATIAL_42_BUF[9];
00309             SPATIAL_YAW_RATE.DATA4[2] = SPATIAL_42_BUF[10];
00310             SPATIAL_YAW_RATE.DATA4[3] = SPATIAL_42_BUF[11];
00311             YAW_RATE = SPATIAL_YAW_RATE.F4 * RADIANS_TO_DEGREES;    //float형으로 짠. 단위는 역시 rad라서 고침.                                
00312         }   
00313     }    
00314 }
00315 
00316 bool SPATIAL::SPATIAL_STABLE(){
00317     if(SENSOR_WAIT_BOOL == true){
00318         if( (Vx<0.1) & (Vx>-0.1) & (Vy<0.1) & (Vy>-0.1) & (Vz<0.1) & (Vz>-0.1) ){
00319             SENSOR_STABLE_CNT ++;
00320         }else{
00321             SENSOR_STABLE_CNT = 0;
00322         }
00323         if( SENSOR_STABLE_CNT > 2000){
00324             SENSOR_STABLE_OK = true;
00325         }
00326         ///////////////////////////////
00327         if(SENSOR_STABLE_OK == true){
00328             return true;
00329         }else{
00330             return false;
00331         }        
00332     }else{
00333         return true;   
00334     }
00335 }
00336