Catalogue
GNSS-INS-SIM
GNSS-INS-SIM是GNSS/INS模拟项目,它生成参考轨迹,IMU传感器输出,GPS输出,里程表输出和磁力计输出。用户选择/设置传感器模型,定义航路点并提供算法,gnss-ins- sim可以为算法生成所需的数据,运行算法,布局仿真结果,保存仿真结果并生成摘要。
基本使用方式
import
1 | import os |
选择或定义IMU误差模型
选择现成的模型
内置了三种IMU模型:“低精度”,“中精度”和“高精度”:
1 | imu = imu_model.IMU(accuracy='mid-accuracy', axis=6, gps=False) |
自定义误差模型
1 | imu_err = {'gyro_b': np.array([5.0, -5.0, 2.5]) * 3600.0, |
设置运动轨迹
初始值
- 初始位置应以LLA(纬度,经度和高度)形式给出。
- 初始速度在车身框架中指定。
- 初始姿态由ZYX顺序的欧拉角表示。
Ini lat (deg) | ini lon (deg) | ini alt (m) | ini vx_body (m/s) | ini vy_body (m/s) | ini vz_body (m/s) | ini yaw (deg) | ini pitch (deg) | ini roll (deg) |
---|---|---|---|---|---|---|---|---|
32 | 120 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
初始欧拉角为0度俯仰角,0度侧倾角和0度偏航角,这意味着车辆处于水平状态且其x轴指向北方
运动指令
运动命令定义了车辆如何从其初始状态开始运动。仿真将根据命令生成真实的角速度,加速度,磁场,位置,速度和姿态。结合传感器误差模型,这些真实值将用于生成陀螺仪,加速度计,磁力计和GPS输出。
您可以添加更多的运动命令来指定车辆的姿态和速度。 您还可以为每个命令定义车辆的GPS可见性。
支持五种命令类型:
命令类型 | 功能 |
---|---|
1 | 直接定义欧拉角变化率(角速度)和速度变化率(加速度)。变化率在第2〜7栏给出。单位是度/秒 和米/秒/秒 。第8列给出了命令将持续多长时间。如果要完全控制每个命令的执行时间,则应始终将运动类型选择为1 |
2 | 定义要达到的绝对姿态和绝对速度。目标姿态和速度由第2〜7列给出。单位是deg 和m/s 。第8列定义了执行命令的最长时间。如果实际执行时间少于最大时间,则将不使用剩余时间,并且将立即执行下一条命令。如果命令不能在最大时间内完成,则在最大时间后直接执行下一个命令。 |
3 | 定义姿态变化和速度变化。姿态和速度变化在第2〜7列中给出。单位是度和m / s。第8列定义了执行命令的最长时间。 |
4 | 定义绝对姿态和速度变化。绝对姿态和速度变化由第2〜7列给出。单位是度和m / s。第8列定义了执行命令的最长时间。 |
5 | 定义姿态变化和绝对速度。姿态变化和绝对速度由第2〜7列给出。单位是度和m / s。第8列定义了执行命令的最长时间。 |
例子
创建算法对象
alan
1 | algo = allan_analysis.Allan() # an Allan analysis demo algorithm |
积分
积分接口如下:
1 | class FreeIntegration(object): |
- ini_pos_vel_att: 9x1的numpy数组,包括初始位置(LLA)、速度(body-frame)、姿态(ZYX)
- earth_rot: 是否考虑地球自转
使用案例:
1 | #### Algorithm |
Manhony
使用Manhony算法进行姿态解算
1 | #### Algorithm |
loosely couple (松耦合) ——算法未完成
1 | #### Algorithm |
创建仿真器对象
1 | # start simulation |
具体接口描述如下:
- fs: [fs_imu, fs_gps, fs_mag] , 包括imu采样频率,也是仿真频率,gps频率
- motion_def: 设备日志或者仿真运动规划
- ref_frame:参考坐标系
- 0:表示使用
NED
坐标系,x轴指向正北(地理北,而不是磁北),y轴指向东,z轴指向地,位置使用LLA表示 - 1:虚拟的惯性坐标系?
- 0:表示使用
- imu: imu误差模型,如果使用的是设备的日志输出来仿真,则把imu误差模型设置为None,即
imu=None
- mode: 使用默认的
None
即可 - env: 振动模型,有三种
- algorithm: 算法模型
开始仿真
1 | sim.run() # run for 1 time |
结果显示
1 | # generate a simulation summary, |
完整imu数据仿真示例
生成6轴imu数据
1 | import os |
一些数据成员说明
名称 | 描述 |
---|---|
'ref_frame' | 参考坐标系用作导航框架和姿态参考。0:NED(默认),x轴指向地理北部,y轴指向东,z轴指向下。位置将以LLA形式表示,并且车辆相对于ECEF框架的速度将以本地NED框架表示。1:虚拟惯性系,其常数g,x轴指向地理或磁北,z轴指向g,y轴构成右手坐标系。在此帧中,位置和速度都将为[xyz]形式。注意:对于此虚拟惯性框架,位置确实是ecef中的初始位置与病毒性惯性框架中的相对位置之和。实际上,不应添加在不同帧中表达的两个向量。这是在此处以保留所有有用信息以生成.kml文件的方式完成的。如果使用此结果,请记住这一点。 |
'fs' | IMU的采样频率,单位:Hz |
'fs_gps' | GNSS的采样频率,单位:Hz |
'fs_mag' | 磁力计的采样频率,单位:Hz |
'时间' | 时间序列对应于IMU样本,单位:秒。 |
'gps_time' | 时间序列对应于GNSS样本,单位:秒。 |
'algo_time' | 对应于算法输出的时间序列,单位:['s']。如果您的算法输出数据速率与输入数据速率不同,则应在算法输出中包含“ algo_time”。 |
'gps_visibility' | 指示GPS是否可用。1表示是,0表示否。 |
'ref_pos' | 导航框中的真实位置。当用户选择NED(ref_frame = 0)作为导航框时,位置将以[纬度,经度,高度]的形式给出,单位为['rad','rad','m']。当用户选择虚拟惯性框架时,位置(初始位置+相对于框架原点的位置)将以[x,y,z]的形式给出,单位为['m','m','m ']。 |
'ref_vel' | NED帧中表示的导航/参考帧的真实速度,单位:['m / s','m / s','m / s']。 |
'ref_att_euler' | 真实姿态(欧拉角,ZYX旋转顺序),单位:['rad','rad','rad'] |
'ref_att_quat' | 真实态度(四元数) |
'ref_gyro' | 车架中的真实角速度,单位:['rad / s','rad / s','rad / s'] |
'ref_accel' | 车身框架中的真实加速度,单位:['m / s ^ 2','m / s ^ 2','m / s ^ 2'] |
'ref_mag' | 车架中的真实地磁场,单位:['uT','uT','uT'](仅当IMU对象中的axis = 9时可用) |
'ref_gps' | NED(LLA)的真实GPS位置/速度,['rad','rad','m','m / s','m / s','m / s'],['m','m ','m','m / s','m / s','m / s']用于虚拟惯性框架(xyz)(仅当gps = IMU对象中为True时可用) |
陀螺仪 | 陀螺仪测量结果“ ref_gyro”出现错误 |
'加速' | 加速度计测量,“ ref_accel”有错误 |
'mag' | 磁力计测量,“ ref_mag”有错误 |
'全球定位系统' | GPS测量,“ ref_gps”有错误 |
'ad_gyro' | 陀螺仪的Allan std,单位:['rad / s','rad / s','rad / s'] |
'ad_accel' | 加速度的Allan std,单位:['m / s2','m / s2','m / s2'] |
“ pos” | 来自算法的仿真位置,单位:对于NED(LLA)为['rad','rad','m'],对于虚拟惯性系(xyz)为['m','m','m']。 |
'vel' | 来自算法的仿真速度,单位:['m / s','m / s','m / s'] |
'att_euler' | 来自算法的模拟态度(Euler,ZYX),单位:['rad','rad','rad'] |
'att_quat' | 来自算法的模拟态度(四元数) |
'wb' | 陀螺仪偏差估计,单位:['rad / s','rad / s','rad / s'] |
'ab' | 加速度计偏差估计,单位:['m / s ^ 2','m / s ^ 2','m / s ^ 2'] |
'gyro_cal' | 校准陀螺仪输出,单位:['rad / s','rad / s','rad / s'] |
'accel_cal' | 校准的加速器输出,单位:['m / s ^ 2','m / s ^ 2','m / s ^ 2'] |
'mag_cal' | 校准的磁力计输出,单位:['uT','uT','uT'] |
'软铁' | 3x3软铁校准矩阵 |
'hard_iron' | 硬铁校准,单位:['uT','uT','uT'] |