IE处理惯导数据的方法.docx
- 文档编号:7485402
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:18
- 大小:1.15MB
IE处理惯导数据的方法.docx
《IE处理惯导数据的方法.docx》由会员分享,可在线阅读,更多相关《IE处理惯导数据的方法.docx(18页珍藏版)》请在冰豆网上搜索。
IE处理惯导数据的方法
三十三所惯导和里程计数据的处理方法
说明
运用WaypointInertialExplorer软件对三十三所采集的惯导数据和里程计数据,结合Novtal的GPS数据进行处理得到最终的pos数据。
原始数据的预处理
由于三十三所的惯导采集的数据格式是」MUUTC格式的数据(包含惯导和里程计数据),WaypointInertialExplorer软件对此格式不识别,需要进行格式转换:
(以2015年3月4日良乡采集的试验数据为例)
1)」MUUTC转换为.bin格式(惯导数据)和.dmr格式(里程计数据)
A.IMU原始测量数据,数据格式如下:
BYTEbtemp1,btemp2;
fscanf(F_IMUUTC,"%ld%d%d%lf%lf%lf%lf%lf%lf%ld%d%lf
",&(ImuAst.PC),&(btemp1),&(btemp2),&(Wibb[0]),&(Wibb[1]),&(Wibb[2]),&(Aibb[0]),&(Aibb[1
]),&(Aibb[2]),&(ODOMETERInfo.Npulse),&(CtrlData.GpsSynFlag),&(CtrlData.UTCTime));
ImuAst.PC:
int类型IMU帧计数每5ms加1
btemp1:
回到基准点标志
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代码进行转换,提取所需的惯导和里程计数据,代码如
下:
Cdlg(TRUE"」MUUTC","*.IMUUTC",OFN_HIDEREADONLOFN丄
"IMUFile(*IMUUTC)|*IMUUTC||",NULL;
if(dlg.DoModal()!
=IDOK)return;
CString=dlg.GetPathName();〃获得打开的文件名称
FILE*fp;
if((fp=fopen(,"r"))==NULL
{
MessageBoX"文件打不开");
return;
}
FILE*fpw,*dmrfp;
CStringBin,Dmr;
Bin=(()-7)+".bin";//转换后bin格式的文件名
Dmr=(()-7)+".dmr";//转换后dmr格式的文件名
fpw=fopen(Bin,"wb");
if(fpw==NULLreturn;
dmrfp=fopen(Dmr,"wb");
if(dmrfp==NULLreturn;
//设置dmr格式的头文件信息(根据所使用的里程计信息)
charszHdr1;
szHdr1='$';
charszHdr2;
szHdr2=D;
charszHdr3;
szHdr3='M';
charszHdr4;
szHdr4=T;
charszHdr5;
szHdr5='R';
charszHdr6;
szHdr6='A';
charszHdr7;
szHdr7='W;
charszHdr8;
szHdr8='\0';
shortsHdrSize;
sHdrSize=512;
shortsRecSize;
sRecSize=16;
shortsValueType;
sValueType=O;
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);
fwrite(&szHdr3,
sizeof
(char),1,dmrfp);
fwrite(&szHdr4,
sizeof
(char),1,dmrfp);
fwrite(&szHdr5,
sizeof
(char),1,dmrfp);
fwrite(&szHdr6,
sizeof
(char),1,dmrfp);
fwrite(&szHdr7,
sizeof
(char),1,dmrfp);
fwrite(&szHdr8,
sizeof
(char),1,dmrfp);
fwrite(&sHdrSize,sizeof(short),1,dmrfp);
fwrite(&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);
fwrite(&szAxisName,sizeof(char),48,dmrfp);
fwrite(&dWheelSize,sizeof(double),1,dmrfp);
fwrite(&ITicksPerRevolution,sizeof(long),1,dmrfp);
fwrite(cExtra2,sizeof(char),420,dmrfp);
//读取原始文件的变量
intrecordnum;
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-1ifnotknowndoubledTime;
unsignedlonglValue;//values(counts)
lValue=0;
do
{//
读取原文件数据
fscanf(fp,
"%ld",&record_num);
fscanf(fp,
fscanf(fp,
"%ld",&flagl);
"%ld",&flag2);
fscanf(fp,"%lf",&gx);
fscanf(fp,
"%lf",&gy);
fscanf(fp,
"%lf",&gz);
fscanf(fp,
"%lf",&ax);
fscanf(fp,
"%lf",&ay);
fscanf(fp,
"%lf",&az);
fscanf(fp,
"%ld",&odo);
fscanf(fp,
"%ld",&GpsSynFlag);
fscanf(fp,
"%lf",&gpstime);
if(feof(fp))
break;
//提取.bin文件数据
gx=gx/3.149323846*180;〃陀螺计数据x由弧度每秒转换为度每秒
gy=gy/3.149323846*180;//陀螺计数据y由弧度每秒转换为度每秒gz=gz/3.149323846*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);
fwrite(&lgx,sizeof(long),1,fpw);
fwrite(&lgy,sizeof(long),1,fpw);
fwrite(&lgz,sizeof(long),1,fpw);
fwrite(&lax,sizeof(long),1,fpw);
fwrite(&lay,sizeof(long),1,fpw);
fwrite(&laz,sizeof(long),1,fpw);
//提取.dmr格式文件
dTime=gpstime;
lValue+=odo;
fwrite(&sSync,sizeof(short),1,dmrfp);
fwrite(&sWeek,sizeof(short),1,dmrfp);
fwrite(&dTime,sizeof(double),1,dmrfp);
fwrite(&lValue,sizeof(unsignedlong),1,dmrfp);
}while(!
feof(fp));
fclose(dmrfp);
MessageBoX"IMA转换为BIN和DMR格式处理完成!
");
2)WaypointInertialExplorer软件转换.bin文件为.imr文件
打开转换选项的界面,选择要转换的.bin文件
*Waypoint1MUD拭aConversion
Input/OutputFiles
InputBinaryIMUFile
1毗濟e|
OutputWaypointBinaryFile
OutputWavpontASCII冋I廉Forviewingtheda血fiist1000epochs)
—OutputASCII
Paih:
□\U#er$Wjmni5t旧⑹W声斷八刍三所\罠乡数据吃30304官
IMUProfiles
HT
iMAFtFJI0>c1yMJOOOHztdAHFMS0-x1-y2-z200HziMAR_FMS-0-x~1-y~2<_40DHzidAR_RQH12000Hz21-y2ziMAA'VRU'20dec/h
NewCop^ibodilyDeleteRename
IMUProfiles选项中点击NEV根据已有惯导的信息(之前A部分已提供)建立一个新的模型
Profile:
iimu33
Sensor/TimingSettings|SensorOrisutationDecodlerSettings|
eixt石
Invers«Gyrotie:
p■
厂Data辽delt4t]
liooonoo.00000000(】/GyroSc»l<)
Bataisangularrale
AccjcIerameterMeasurements
InvergeAceielerometerScale|1000000.00000000(1/Accel
CD&taiedelt«v^lif*ieelerat
TimingSettirLgs
D&ta|200aQ(Hz;
GFS~IWUtisnie_tagbi|16r0000
—ByteOrder
<*Inti?
「Motorola
TimieTag:
Format
雷GPS:
5«c$^ds買駅k
UTCsecQudao£*reek
TimeTagSoiffce席GPSCorrectedTimi
GPSReceivedTime
康消I
设置完成之后点击convet,转换为所需的.imr文件,点击关闭
运用WaypointInertialExplorer软件处理惯导和GPS数据
1)新建一个工程文件
打开projectwizard,新建一个工程路径和名称。
pi.^auEL^ELSJJ-!
r"二、_r^〔們“「”nxym
添加流动站数据和惯导数据(上面已经预处理好的)
点击下一步,默认不做修改
ProjectWimd
r)AnIrnnnMri
rie-zsesuttrr*ri^te-akte^iL-adet-uls.CIjzJetoccutiDTi^
Ft^ngr仍卄*5「lOFb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IE 处理 导数 方法