IE处理惯导数据的方法Word文档格式.docx
《IE处理惯导数据的方法Word文档格式.docx》由会员分享,可在线阅读,更多相关《IE处理惯导数据的方法Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
![IE处理惯导数据的方法Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/24/d3a6a8f3-d569-48d0-a416-cc604887ddcd/d3a6a8f3-d569-48d0-a416-cc604887ddcd1.gif)
回到基准点标志
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直径100毫米
一个脉冲1.75mm
B.运用VC代码进行转换,提取所需的惯导和里程计数据,代码如下:
CFileDialogdlg(TRUE,"
.IMUUTC”,”*。
IMUUTC"
,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,
"
IMUFile(*。
IMUUTC)|*。
IMUUTC||”,NULL);
if(dlg.DoModal()!
=IDOK)return;
CStringfilename=dlg。
GetPathName();
//获得打开的文件名称
FILE*fp;
if((fp=fopen(filename,"
r"
))==NULL)
{
MessageBox(”文件打不开"
);
return;
}
FILE*fpw,*dmrfp;
CStringBinFileName,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==NULL)return;
//设置dmr格式的头文件信息(根据所使用的里程计信息)
charszHdr1;
szHdr1='
$’;
charszHdr2;
szHdr2='
D’;
charszHdr3;
szHdr3=’M'
;
charszHdr4;
szHdr4=’I'
charszHdr5;
szHdr5='
R’;
charszHdr6;
szHdr6=’A’;
charszHdr7;
szHdr7='
W’;
charszHdr8;
szHdr8=’\0'
shortsHdrSize;
sHdrSize=512;
shortsRecSize;
sRecSize=16;
shortsValueType;
sValueType=0;
shortsMeasType;
sMeasType=2;
//1量距离,2量速度
shortsDIM;
sDIM=1;
shortsRes;
sRes=3;
shortsDistanceType;
//可选的
//sDistanceType=1;
shortsVelocityType;
//量距单位,1-—m/sor2—-ticks/s
sVelocityType=2;
doubledScale;
dScale=1。
0;
charszAxisName[48]={’L'
’e'
’f’,’t’,’\0'
};
//,可选的
doubledWheelSize;
dWheelSize=0。
315;
//实际的轮胎长度
longITicksPerRevolution;
ITicksPerRevolution=180;
//轮胎走一圈脉冲个数
char*cExtra2=newchar[420];
//未赋值,可选的
memset(cExtra2,0,420);
cExtra2="
Writebyzzz”;
fwrite(&
szHdr1,sizeof(char),1,dmrfp);
fwrite(&szHdr2,sizeof(char),1,dmrfp);
szHdr3,sizeof(char),1,dmrfp);
szHdr4,sizeof(char),1,dmrfp);
szHdr5,sizeof(char),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);
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,sizeof(char),420,dmrfp);
//读取原始文件的变量
intrecord_num;
intflag1;
intflag2;
doublegx,gy,gz,ax,ay,az;
intodo;
intGpsSynFlag;
doublegpstime;
//.bin文件变量
longscale=1000000;
//比例系数
longlgx,lgy,lgz,lax,lay,laz;
//。
dmr文件的数据记录变量
shortsSync;
sSync=65518;
//setto0xffee
shortsWeek;
sWeek=-1;
//GPSweeknumber,Setto—1ifnotknown
doubledTime;
unsignedlonglValue;
//values(counts)
lValue=0;
do
{//读取原文件数据
fscanf(fp,”%ld"
,&
record_num);
fscanf(fp,"
%ld”,&flag1);
fscanf(fp,"
%ld"
flag2);
fscanf(fp,"
%lf"
&
gx);
fscanf(fp,”%lf”,&gy);
fscanf(fp,"
,&gz);
fscanf(fp,”%lf"
ax);
fscanf(fp,”%lf"
ay);
fscanf(fp,"
%lf"
az);
fscanf(fp,”%ld"
&odo);
%ld”,&
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。
14159265358979323846*180;
//陀螺计数据z由弧度每秒转换为度每秒
lgx=int(gx*scale);
lgy=int(gy*scale);
lgz=int(gz*scale);
lax=int(ax*scale);
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