1、回到基准点标志 btemp2 :停止标志 Wibb :陀螺数据,单位:rad/s; Aibb :加表数据,单位:m/s/s; ODOMETERInfo。Npulse : 里程计脉冲数,单位:个, 每个当量代表 0。00175米 CtrlData.GpsSynFlag : 卫星同步脉冲标志, 1:有,0:无 CtrlData。UTCTime : IMU数据对应的UTC时间其他已知信息:惯导坐标定义: x朝前,y朝上,z朝右里程计在惯导中的位置:x,z为0,y 0.17m,里程计在惯导下面17cm 频率200hz 加速度角速度的增量 里程计脉冲个数 一圈 180个脉冲 里程计周长315mm 直径
2、100毫米 一个脉冲 1.75mm B运用VC代码进行转换,提取所需的惯导和里程计数据,代码如下:CFileDialog dlg(TRUE,.IMUUTC”,”*。IMUUTC,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST, IMU File(*。IMUUTC)。IMUUTC|”,NULL); if(dlg.DoModal() != IDOK) return; CString filename = dlg。GetPathName();/获得打开的文件名称 FILE *fp; if(fp = fopen(filename,r) = NULL) MessageBox(”文件
3、打不开); return ; FILE fpw,*dmrfp; CString BinFileName,DmrFileName; BinFileName = filename.Left(filename.GetLength()7)+.bin;/转换后bin格式的文件名 DmrFileName = filename.Left(filename。GetLength()7)+.dmr/转换后dmr格式的文件名 fpw = fopen(BinFileName,wb if(fpw = NULL) return ; dmrfp = fopen(DmrFileName,”wb”); if(dmrfp = N
4、ULL) return; /设置dmr格式的头文件信息(根据所使用的里程计信息) char szHdr1; szHdr1=$; char szHdr2; szHdr2=D; char szHdr3; szHdr3=M; char szHdr4; szHdr4=I char szHdr5; szHdr5=R; char szHdr6; szHdr6=A; char szHdr7; szHdr7=W; char szHdr8; szHdr8=0 short sHdrSize; sHdrSize=512; short sRecSize; sRecSize=16; short sValueType;
5、sValueType=0; short sMeasType; sMeasType=2;/1量距离,2量速度 short sDIM; sDIM=1; short sRes; sRes=3; short sDistanceType;/可选的 / sDistanceType=1; short sVelocityType; /量距单位,1-m/s or 2-ticks/s sVelocityType=2; double dScale; dScale=1。0; char szAxisName48=L,e,f,t,0;/,可选的 double dWheelSize; dWheelSize=0。315; /
6、 实际的轮胎长度 long ITicksPerRevolution; ITicksPerRevolution=180; /轮胎走一圈脉冲个数 char *cExtra2=new char420;/未赋值,可选的 memset(cExtra2,0,420); cExtra2=Write by zzz”; fwrite(&szHdr1,sizeof(char),1,dmrfp); fwrite(szHdr2,sizeof(char),1,dmrfp);szHdr3,sizeof(char),1,dmrfp);szHdr4,sizeof(char),1,dmrfp);szHdr5,sizeof(ch
7、ar),1,dmrfp);szHdr6,sizeof(char),1,dmrfp); fwrite(szHdr7,sizeof(char),1,dmrfp);szHdr8,sizeof(char),1,dmrfp); fwrite(sHdrSize,sizeof(short),1,dmrfp);sRecSize,sizeof(short),1,dmrfp); fwrite(sValueType,sizeof(short),1,dmrfp); fwrite(sMeasType,sizeof(short),1,dmrfp); fwrite(sDIM,sizeof(short),1,dmrfp);
8、fwrite(sRes,sizeof(short),1,dmrfp); fwrite(sDistanceType,sizeof(short),1,dmrfp); fwrite(sVelocityType,sizeof(short),1,dmrfp); fwrite(dScale,sizeof(double),1,dmrfp);szAxisName,sizeof(char),48,dmrfp);dWheelSize,sizeof(double),1,dmrfp); fwrite(ITicksPerRevolution,sizeof(long),1,dmrfp); fwrite(cExtra2,s
9、izeof(char),420,dmrfp);/读取原始文件的变量int record_num; int flag1; int flag2; double gx,gy,gz,ax,ay,az; int odo; int GpsSynFlag; double gpstime;/.bin文件变量 long scale=1000000;/比例系数 long lgx,lgy,lgz,lax,lay,laz;/。dmr文件的数据记录变量 short sSync; sSync=65518;/set to 0xffee short sWeek; sWeek=-1;/ GPS week number, Set
10、 to 1 if not known double dTime; unsigned long lValue; / values (counts) lValue=0; do /读取原文件数据 fscanf(fp,”%ld,&record_num); fscanf(fp,ld”,flag1); fscanf(fp,%ldflag2); fscanf(fp,lf,&gx); fscanf(fp,”lf”,gy); fscanf(fp,gz); fscanf(fp,”lfax); fscanf(fp,”%lfay); fscanf(fp,%lfaz); fscanf(fp,”%ld,odo);%ld”
11、,&GpsSynFlag); fscanf(fp,”lf”,gpstime); if(feof(fp) break; /提取.bin文件数据 gx=gx/3.14159265358979323846*180;/陀螺计数据x由弧度每秒转换为度每秒 gy=gy/3.14159265358979323846*180; /陀螺计数据y由弧度每秒转换为度每秒 gz=gz/3。14159265358979323846180; /陀螺计数据z由弧度每秒转换为度每秒 lgx = int(gxscale); lgy = int(gyscale); lgz = int(gz*scale); lax = int(a
12、xscale); lay = int(ay*scale); laz = int(az*scale); gpstime=gpstime+259200。0;/天秒转换成周秒 fwrite(&gpstime,sizeof(double),1,fpw);lgx,sizeof(long),1,fpw);lgy,sizeof(long),1,fpw); fwrite(lgz,sizeof(long),1,fpw); fwrite(lax,sizeof(long),1,fpw); fwrite(lay,sizeof(long),1,fpw);laz,sizeof(long),1,fpw); /提取.dmr格式文件 dTime=gpstime; lValue+=odo;sSy
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1