Raharja Agie
/
Mini-X
ahrs.h@0:d463d5c04541, 2011-08-16 (annotated)
- Committer:
- agiembed
- Date:
- Tue Aug 16 05:32:33 2011 +0000
- Revision:
- 0:d463d5c04541
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
agiembed | 0:d463d5c04541 | 1 | #define Ahrs_num 42 |
agiembed | 0:d463d5c04541 | 2 | char checkhead[2], imu_cnt = 0, data_flag = 0, gcs_cnt = 0; |
agiembed | 0:d463d5c04541 | 3 | unsigned char data_que[Ahrs_num]; |
agiembed | 0:d463d5c04541 | 4 | |
agiembed | 0:d463d5c04541 | 5 | |
agiembed | 0:d463d5c04541 | 6 | void IMU_Update(){ |
agiembed | 0:d463d5c04541 | 7 | fcc.roll = IMU.roll; |
agiembed | 0:d463d5c04541 | 8 | fcc.pitch = IMU.pitch; |
agiembed | 0:d463d5c04541 | 9 | fcc.yaw = IMU.yaw; |
agiembed | 0:d463d5c04541 | 10 | fcc.g_roll = IMU.g_roll; |
agiembed | 0:d463d5c04541 | 11 | fcc.g_pitch = IMU.g_pitch; |
agiembed | 0:d463d5c04541 | 12 | fcc.g_yaw = IMU.g_yaw; |
agiembed | 0:d463d5c04541 | 13 | fcc.acc_x = IMU.acc_x; |
agiembed | 0:d463d5c04541 | 14 | fcc.acc_y = IMU.acc_y; |
agiembed | 0:d463d5c04541 | 15 | fcc.acc_z = IMU.acc_z;// + (cos((fcc.roll*3.14)/180) * cos((fcc.pitch*3.14)/180)); |
agiembed | 0:d463d5c04541 | 16 | fcc.bat = (unsigned short)(bat * 12000); |
agiembed | 0:d463d5c04541 | 17 | fcc.US = (unsigned short)(alti.read_u16() * 0.06); |
agiembed | 0:d463d5c04541 | 18 | fcc.IR1 = (unsigned short)(IRb.read_u16() * 0.01) - 220; |
agiembed | 0:d463d5c04541 | 19 | fcc.IR2 = (unsigned short)(IRl.read_u16() * 0.01) - 220; |
agiembed | 0:d463d5c04541 | 20 | fcc.IR3 = (unsigned short)(IRf.read_u16() * 0.01) - 220; |
agiembed | 0:d463d5c04541 | 21 | fcc.IR4 = (unsigned short)(IRr.read_u16() * 0.01) - 220; |
agiembed | 0:d463d5c04541 | 22 | |
agiembed | 0:d463d5c04541 | 23 | if(fcc.roll>180 || fcc.roll<-180) fcc.roll = last.roll; |
agiembed | 0:d463d5c04541 | 24 | if(fcc.pitch>90 || fcc.pitch<-90) fcc.pitch = last.pitch; |
agiembed | 0:d463d5c04541 | 25 | if(fcc.yaw>360 || fcc.yaw<0) fcc.yaw = last.yaw; |
agiembed | 0:d463d5c04541 | 26 | if(fcc.g_roll>300 || fcc.g_roll<-300) fcc.g_roll = last.g_roll; |
agiembed | 0:d463d5c04541 | 27 | if(fcc.g_pitch>300 || fcc.g_pitch<-300) fcc.g_pitch = last.g_pitch; |
agiembed | 0:d463d5c04541 | 28 | if(fcc.g_yaw>300 || fcc.g_yaw<-300) fcc.g_yaw = last.g_yaw; |
agiembed | 0:d463d5c04541 | 29 | if(fcc.acc_x>4 || fcc.acc_x<-4) fcc.acc_x = last.acc_x; |
agiembed | 0:d463d5c04541 | 30 | if(fcc.acc_y>4 || fcc.acc_y<-4) fcc.acc_y = last.acc_y; |
agiembed | 0:d463d5c04541 | 31 | if(fcc.acc_z>4 || fcc.acc_z<-4) fcc.acc_z = last.acc_z; |
agiembed | 0:d463d5c04541 | 32 | |
agiembed | 0:d463d5c04541 | 33 | last.roll = IMU.roll; |
agiembed | 0:d463d5c04541 | 34 | last.pitch = IMU.pitch; |
agiembed | 0:d463d5c04541 | 35 | last.yaw = IMU.yaw; |
agiembed | 0:d463d5c04541 | 36 | last.g_roll = IMU.g_roll; |
agiembed | 0:d463d5c04541 | 37 | last.g_pitch = IMU.g_pitch; |
agiembed | 0:d463d5c04541 | 38 | last.g_yaw = IMU.g_yaw; |
agiembed | 0:d463d5c04541 | 39 | last.acc_x = IMU.acc_x; |
agiembed | 0:d463d5c04541 | 40 | last.acc_y = IMU.acc_y; |
agiembed | 0:d463d5c04541 | 41 | last.acc_z = IMU.acc_z; |
agiembed | 0:d463d5c04541 | 42 | |
agiembed | 0:d463d5c04541 | 43 | if(gcs_cnt == 3){ |
agiembed | 0:d463d5c04541 | 44 | //IMUtoGCS(); |
agiembed | 0:d463d5c04541 | 45 | gcs_cnt = 0; |
agiembed | 0:d463d5c04541 | 46 | } |
agiembed | 0:d463d5c04541 | 47 | else toBHG(); |
agiembed | 0:d463d5c04541 | 48 | gcs_cnt++; |
agiembed | 0:d463d5c04541 | 49 | |
agiembed | 0:d463d5c04541 | 50 | } |
agiembed | 0:d463d5c04541 | 51 | |
agiembed | 0:d463d5c04541 | 52 | void ahrs_parsing(){ |
agiembed | 0:d463d5c04541 | 53 | int i = 0; |
agiembed | 0:d463d5c04541 | 54 | |
agiembed | 0:d463d5c04541 | 55 | data.roll = (char *) &IMU.roll; |
agiembed | 0:d463d5c04541 | 56 | for(i=0; i<4; i++) data.roll[i] = data_que[i+28]; |
agiembed | 0:d463d5c04541 | 57 | |
agiembed | 0:d463d5c04541 | 58 | data.pitch = (char *) &IMU.pitch; |
agiembed | 0:d463d5c04541 | 59 | for(i=0; i<4; i++) data.pitch[i] = data_que[i+32]; |
agiembed | 0:d463d5c04541 | 60 | |
agiembed | 0:d463d5c04541 | 61 | data.yaw = (char *) &IMU.yaw; |
agiembed | 0:d463d5c04541 | 62 | for(i=0; i<4; i++) data.yaw[i] = data_que[i+36]; |
agiembed | 0:d463d5c04541 | 63 | |
agiembed | 0:d463d5c04541 | 64 | data.g_roll = (char *) &IMU.g_roll; |
agiembed | 0:d463d5c04541 | 65 | for(i=0; i<4; i++) data.g_roll[i] = data_que[i+4]; |
agiembed | 0:d463d5c04541 | 66 | |
agiembed | 0:d463d5c04541 | 67 | data.g_pitch = (char *) &IMU.g_pitch; |
agiembed | 0:d463d5c04541 | 68 | for(i=0; i<4; i++) data.g_pitch[i] = data_que[i+8]; |
agiembed | 0:d463d5c04541 | 69 | |
agiembed | 0:d463d5c04541 | 70 | data.g_yaw = (char *) &IMU.g_yaw; |
agiembed | 0:d463d5c04541 | 71 | for(i=0; i<4; i++) data.g_yaw[i] = data_que[i+12]; |
agiembed | 0:d463d5c04541 | 72 | |
agiembed | 0:d463d5c04541 | 73 | data.acc_x = (char *) &IMU.acc_x; |
agiembed | 0:d463d5c04541 | 74 | for(i=0; i<4; i++) data.acc_x[i] = data_que[i+16]; |
agiembed | 0:d463d5c04541 | 75 | |
agiembed | 0:d463d5c04541 | 76 | data.acc_y = (char *) &IMU.acc_y; |
agiembed | 0:d463d5c04541 | 77 | for(i=0; i<4; i++) data.acc_y[i] = data_que[i+20]; |
agiembed | 0:d463d5c04541 | 78 | |
agiembed | 0:d463d5c04541 | 79 | data.acc_z = (char *) &IMU.acc_z; |
agiembed | 0:d463d5c04541 | 80 | for(i=0; i<4; i++) data.acc_z[i] = data_que[i+24]; |
agiembed | 0:d463d5c04541 | 81 | |
agiembed | 0:d463d5c04541 | 82 | IMU_Update(); |
agiembed | 0:d463d5c04541 | 83 | } |
agiembed | 0:d463d5c04541 | 84 | |
agiembed | 0:d463d5c04541 | 85 | void Checksum(){ |
agiembed | 0:d463d5c04541 | 86 | char checksum = 0; |
agiembed | 0:d463d5c04541 | 87 | for(char i=1; i<40; i++) checksum = checksum ^ data_que[i]; |
agiembed | 0:d463d5c04541 | 88 | if(checksum == data_que[40]) ahrs_parsing(); |
agiembed | 0:d463d5c04541 | 89 | } |
agiembed | 0:d463d5c04541 | 90 | |
agiembed | 0:d463d5c04541 | 91 | void ahrs_rec(){ |
agiembed | 0:d463d5c04541 | 92 | unsigned char data; |
agiembed | 0:d463d5c04541 | 93 | data = ahrs.getc(); |
agiembed | 0:d463d5c04541 | 94 | checkhead[0] = checkhead[1]; |
agiembed | 0:d463d5c04541 | 95 | checkhead[1] = data; |
agiembed | 0:d463d5c04541 | 96 | if(checkhead[0] == 0xFF && checkhead[1] == 0xFF) { |
agiembed | 0:d463d5c04541 | 97 | imu_cnt = 0; |
agiembed | 0:d463d5c04541 | 98 | data_flag = 1; |
agiembed | 0:d463d5c04541 | 99 | } |
agiembed | 0:d463d5c04541 | 100 | if(data_flag == 1){ |
agiembed | 0:d463d5c04541 | 101 | data_que[imu_cnt] = data; |
agiembed | 0:d463d5c04541 | 102 | imu_cnt++; |
agiembed | 0:d463d5c04541 | 103 | } |
agiembed | 0:d463d5c04541 | 104 | if(imu_cnt == 41){ |
agiembed | 0:d463d5c04541 | 105 | Checksum(); |
agiembed | 0:d463d5c04541 | 106 | data_flag = 2; |
agiembed | 0:d463d5c04541 | 107 | } |
agiembed | 0:d463d5c04541 | 108 | } |
agiembed | 0:d463d5c04541 | 109 | |
agiembed | 0:d463d5c04541 | 110 | |
agiembed | 0:d463d5c04541 | 111 | |
agiembed | 0:d463d5c04541 | 112 | |
agiembed | 0:d463d5c04541 | 113 | |
agiembed | 0:d463d5c04541 | 114 | |
agiembed | 0:d463d5c04541 | 115 | |
agiembed | 0:d463d5c04541 | 116 | |
agiembed | 0:d463d5c04541 | 117 | |
agiembed | 0:d463d5c04541 | 118 |