main_sinsgps_test.cpp 2.74 KB
#include "kfapp.h"
#include "sinsapi.h"
//CKFApp kf;
#define rawdata919 1
//CFileRdWt dir("C:\\F\\SINS-GNSS\\Yan_PSINS_Program\\PSINS-CPP-VC60(shilei)\\PSINS-CPP\\Data\\");
MPU_Data_value mpu_Data_value;
gga_t gga;
vtg_t vtg;
dhv_t dhv;
double gga_delay = 0.0;
int gps_ok_flag = 0;

bool gpsUpdate = true;
int main(void)
{
	CFileRdWt fin("rawdataDemo9.1906.txt", 27);// , fins("ins.bin", 0), fkf("kf.bin", 0), frk("rk.bin", 0);// realtime 不需要
	//CFileRdWt fin("rawdata1.txt", 29), fins("ins.bin", 0), fkf("kf.bin", 0), frk("rk.bin", 0);// 非PSINS
	CVect3 wm, vm, eb0, gpsvn, gpspos;
	double timu, timu0;
	for (int i = 1; i < 20000 * 50; i++)
	{
		fin.load();	if (fin.IsEOF()) break;
		// 为启迪坐标系错误调整
		if (i == 1) timu0 = fin.buff[0];
		mpu_Data_value.time = fin.buff[0] - timu0;
#if rawdata919
		mpu_Data_value.Gyro[0] =  fin.buff[2];//   dps   // 启迪项目保存的rawdata 坐标系统一在ENU 单位也已标准化
		mpu_Data_value.Gyro[1] =  fin.buff[1];
		mpu_Data_value.Gyro[2] = -fin.buff[3];

		mpu_Data_value.Accel[0] =  fin.buff[5];//   m/s2
		mpu_Data_value.Accel[1] =  fin.buff[4];
		mpu_Data_value.Accel[2] = -fin.buff[6];
#else	
		mpu_Data_value.Gyro[0] = -fin.buff[1];//   dps   // 启迪项目保存的rawdata 坐标系统一在ENU 单位也已标准化
		mpu_Data_value.Gyro[1] =  fin.buff[2];//QIDI 923.01 数据
		mpu_Data_value.Gyro[2] = -fin.buff[3];

		mpu_Data_value.Accel[0] = -fin.buff[4];//   m/s2
		mpu_Data_value.Accel[1] =  fin.buff[5];
		mpu_Data_value.Accel[2] = -fin.buff[6];
#endif
		mpu_Data_value.Temp = fin.buff[26];//imu temprature
		timu = mpu_Data_value.time;
		//19开始是定位纬度整数
		if (fin.buff[20] == 0&& fin.buff[19] == 0)
		{  gpsUpdate = false;
		}
		else
		{  gpsUpdate = true;
		}
		if (gpsUpdate)//纬度整数位,以及小数位比较
		{
			//vtg.cogt = atan2(fin.buff[16], fin.buff[17])/glv.deg;//deg  注意PSINS里边的航向是北偏西为正+-pi
			//(vtg.cogt > 0.0)? vtg.cogt:(vtg.cogt + 360.0);
			//vtg.kph = norm(*(CVect3*)&fin.buff[16])*3.6;
			//vtg.cogm = fin.buff[16];//venu
			//vtg.knots = fin.buff[17];
			//vtg.kph = fin.buff[18];
			dhv.vel_e = fin.buff[16];//venu
			dhv.vel_n = fin.buff[17];
			dhv.vel_u = fin.buff[18];

			gga.lat_d = int(fin.buff[19]);
			gga.lat_m = (fin.buff[19] - gga.lat_d)*60;
			gga.lon_d =int( fin.buff[20]);//开发板数据保存成了2位
			gga.lon_m = (fin.buff[20] - gga.lon_d)*60;
			gga.altitude = fin.buff[21];
#if rawdata916
			gga.h_DOP = 1.0;
#else
			gga.h_DOP = fin.buff[22];
#endif
			//gga_delay= fin.buff[23];
			gga.num_satellite = fin.buff[24];
			gga.fix = fin.buff[25];
			//温度= fin.buff[26];
			gps_ok_flag = 1;
		}
		else
		{
			gps_ok_flag = 0;
		}
		Out_Data *sins_out;//对外输出使用
		sins_out = SINS_API(&mpu_Data_value, &gga, &vtg, &dhv, gga_delay, gps_ok_flag);
		if (i % 1000 == 0) printf("kf time %.1f\n", timu);
	}
	return 0;
}