从卫星接收机到组合导航【六】(执行系统级标定并得到标定参数)

您所在的位置:网站首页 什么叫惯导加速度激励器 从卫星接收机到组合导航【六】(执行系统级标定并得到标定参数)

从卫星接收机到组合导航【六】(执行系统级标定并得到标定参数)

2024-06-30 05:51| 来源: 网络整理| 查看: 265

文章目录 惯导安装惯导转位数据处理标定参数处理标定数据结构 标定参数使用

惯导安装

将惯导安装在三轴转台上,并重新配平、接好电源等操作。下图惯导已安装在转台上, 在这里插入图片描述 由于没有相应的工装,故这里使用惯导上垫了纸并用压杆压着😅。

惯导转位

等到惯导内部热平衡(这里我等待了3个多小时),惯导再按照如下位置旋转(坐标系为前-上-右、北-上-东),

旋转次序转位X轴Y轴Z轴1初始位置北上东2+90°Z上南东3+90°Z南下东4-90°Z下北东5-90°Z南下东6-90°Z上南东7+90°X北上东8+90°Y北东下9+90°Y上东北10+90°Y南东上11-90°Y下东南12-90°Y南东上13-90°Y上东北14+90°X北东下15+90°X北下西16-90°X北西上17-90°X北下西18-90°X北东下19最后位置北上东

旋转角速度为10度/秒,每个位置停的时间为4分钟左右(由于是人工旋转,所以不是4分钟整),整个下来需要1个小时左右,整体加起来需要4~5小时,相对来说时间还是比较久的。如果是分立式标定,可以不用等待惯导内部温度完全稳定就可以标定(分立式标定时间短,在标定时间惯导内部温度变化小)。

数据处理

采集的系统级标定的数据链接为:链接:https://pan.baidu.com/s/13uuEnuBJKCIE7Da7h1VFFA 提取码:tmi3 最小二乘法标定程序还需要改进,大家不要喷哈。 其中压缩包文件描述如下表

文件名描述Data20230723-142244.txt标定数据(数据里面X-Y-Z为右-前-上)run.bat执行脚本SystemCalbrationLS.exe系统级标定可执行程序rotation_imu.dat分立出来的单转位的数据Vn.dat最小二乘中最后一次静态导航的速度 标定参数处理

在无中文目录下,双击run.bat运行,出现如下对话框, 在这里插入图片描述 等待处理完成后可得到如下对话框: 在这里插入图片描述

可以看到陀螺和加速度计标定参数(参数未分离采样时间等)打印出来了,并在运行目录下重新生成了rotation_imu.dat、Vn.dat文件。 rotation_imu.dat文件为转位时的三个轴的角速度,如下图: 在这里插入图片描述 Vn.da为每个位置导航东速、北速、天速,如下图: 在这里插入图片描述

在这里插入图片描述 每个速度跳变为一个位置导航的开始,这里北速、东速、天速感觉都偏大,后续还需要排查一下原因。

标定数据结构

其中一行是由帧计数,X陀螺脉冲数,Y陀螺脉冲数,Z陀螺脉冲数,X陀螺温度,Y轴陀螺温度,Z轴陀螺温度,X轴加速度,Y轴加速度,Z轴加速度,Y轴陀螺温度,Z轴陀螺温度,X轴角速度,Y轴角速度,Z轴角速度,X轴加速度,Y轴加速度,Z轴加速度,PPS与导航中断间隔,PPS更新标志,导航计算时间,导航中断间隔组成 数据采样率为200HZ。

标定参数使用

由于暂时还没有开始编写导航算法,只能先进行跑车,采集好数据进行后处理。 数据链接:链接:https://pan.baidu.com/s/1E2KtTwSGExljTHiaPgWQKw 提取码:ekyg 杆臂值:X:-0.691 Y:-0.132 Z:0.898

通过C下面代码,可以得到打完时标的IMU数据。

struct { int count; int imu_pluse[6]; int imu_temp[6]; int imu_err_flage[6]; int pps_udata; double pps_time; int week; double week_se; int time_flag; }sins_data; double Kg[3][3] = { { 1.4230626097e-03, 5.0403508167e-06, -6.9935531995e-07}, { -2.5581883894e-07,1.42199243e-03,1.0602620904e-07 }, { 1.2001133046e-06,4.1583218994e-07,1.4283906644e-03 } }; double Ka[3][3] = { { -4.8812031852e-09,0.0000000000e+00,0.0000000000e+00 }, { 1.8731078587e-11,5.0746174407e-09,0.0000000000e+00 }, { -5.6085850171e-12,-5.0247060001e-12,-4.9876480175e-09 } }; double eb[3] = { -2.1636263195e-04,1.8461819477e-04,-1.8008627586e-04 }; double db[3] = { 1.7494033334e-04,1.4568710079e-04,-1.7714978932e-04 }; double g=9.8014068513; int time_flag=0; void main() { FILE *read_file; FILE *write_file; char buffer[512]; read_file = fopen("imu-data.dat", "rb"); write_file = fopen("rawdata.dat", "wb"); int imu[6]; double imu_temp; int week=0; double week_time=0; while(!feof(read_file)) { fgets(buffer, 512, read_file); sscanf(buffer, "%d," //计数 "%d,%d,%d," "%d,%d,%d," "%d,%d,%d," "%d,%d,%d," "%d,%d,%d,%d,%d,%d," "%d,%lf," "%d,%lf,%d,", &sins_data.count, &sins_data.imu_pluse[0], &sins_data.imu_pluse[1], &sins_data.imu_pluse[2], &sins_data.imu_temp[0], &sins_data.imu_temp[1], &sins_data.imu_temp[2], &sins_data.imu_pluse[3], &sins_data.imu_pluse[4], &sins_data.imu_pluse[5], &sins_data.imu_temp[3], &sins_data.imu_temp[4], &sins_data.imu_temp[5], &sins_data.imu_err_flage[0], &sins_data.imu_err_flage[1], &sins_data.imu_err_flage[2], &sins_data.imu_err_flage[3], &sins_data.imu_err_flage[4], &sins_data.imu_err_flage[5], &sins_data.pps_udata, &sins_data.pps_time, &sins_data.week, &sins_data.week_se, &sins_data.time_flag); //右前上->前上右 double imu_cal_temp[6]; imu_cal_temp[0] = sins_data.imu_pluse[1]; imu_cal_temp[1] = sins_data.imu_pluse[2]; imu_cal_temp[2] = sins_data.imu_pluse[0]; imu_cal_temp[3] = sins_data.imu_pluse[4]; imu_cal_temp[4] = sins_data.imu_pluse[5]; imu_cal_temp[5] = sins_data.imu_pluse[3]; double imu_cal[6]; //开始计算 imu_cal[0] = Kg[0][0] * imu_cal_temp[0] + Kg[0][1] * imu_cal_temp[1] + Kg[0][2] * imu_cal_temp[2]; imu_cal[1] = Kg[1][0] * imu_cal_temp[0] + Kg[1][1] * imu_cal_temp[1] + Kg[1][2] * imu_cal_temp[2]; imu_cal[2] = Kg[2][0] * imu_cal_temp[0] + Kg[2][1] * imu_cal_temp[1] + Kg[2][2] * imu_cal_temp[2]; imu_cal[0] = imu_cal[0] - eb[0]; imu_cal[1] = imu_cal[1] - eb[1]; imu_cal[2] = imu_cal[2] - eb[2]; imu_cal[3] = Ka[0][0] * imu_cal_temp[3] + Ka[0][1] * imu_cal_temp[4] + Ka[0][2] * imu_cal_temp[5]; imu_cal[4] = Ka[1][0] * imu_cal_temp[3] + Ka[1][1] * imu_cal_temp[4] + Ka[1][2] * imu_cal_temp[5]; imu_cal[5] = Ka[2][0] * imu_cal_temp[3] + Ka[2][1] * imu_cal_temp[4] + Ka[2][2] * imu_cal_temp[5]; imu_cal[3] = imu_cal[3] - db[0]; imu_cal[4] = imu_cal[4] - db[1]; imu_cal[5] = imu_cal[5] - db[2]; double imu[6]; //前上右->右前上 imu[0] = imu_cal[2]; imu[1] = imu_cal[0]; imu[2] = imu_cal[1]; imu[3] = imu_cal[5]*g; imu[4] = imu_cal[3]*g; imu[5] = imu_cal[4]*g; //授时 if (time_flag == 0) { if ((sins_data.time_flag == (int)1) && (sins_data.pps_udata == (int)1)) { week = sins_data.week; double temp_s; temp_s = ((int)sins_data.week_se) + 0.5; if (sins_data.week_se > temp_s) { week_time = floor(sins_data.week_se) + 1 + sins_data.pps_time / 1000.0; } else { week_time = floor(sins_data.week_se) + sins_data.pps_time / 1000.0; } time_flag = 1; } } else { if ((sins_data.time_flag == (int)1) && (sins_data.pps_udata == (int)1)) { double temp_s; temp_s = ((int)sins_data.week_se) + 0.5; if (sins_data.week_se > temp_s) { week_time = floor(sins_data.week_se) + 1 + sins_data.pps_time / 1000.0; } else { week_time = floor(sins_data.week_se) + sins_data.pps_time / 1000.0; } } else { week_time = week_time + 0.005; } } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3