GNSS-INS组合导航:KF-GINS(五)——绘图工具

跑完KF-GINS在dataset会得到以下几个文件

 其中每部分文件的格式github与说明文档给出来了准确的含义。

第一部分:IMU GNSS数据

 第二部分:TRUTH文件与计算的NAV文件(文本格式)

 第三部分:IMU error 、STD(bin二进制格式)

本文章介绍如何用python读取第三部分bin二进制文件,并简单绘图。

1、需要numpy pandas matplotlib random

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import random

2、读取IMU_ERR.bin文件、设置列名

# xyz一起版, 折线
# 颜色列表
color_choice = ['#e791c8' , '#d695e5', '#a8aceb', '#54acd2', '#4faaaf'
               , '#4aab98', '#4ab067', '#8ca547', '#b39d4a', '#dd9250'
               , '#ea96a3',]
time = df['time (s)']-456300.009412

3、设置画布、颜色、绘图

# 设置画布
fig = plt.figure(figsize=(12,8))

#随机在color_choice中选择三个颜色
color_a, color_b, color_c = random.sample(color_choice, 3)

# 选择 -->  'X axes gyroscope biases (deg/h)' 列
col_name1 = data_columns[1]
# 线段图
plt.plot(time, df[col_name1],label=col_name1[:1], color=color_a)
# 散点图
#     plt.scatter(time, df[col_name1],label=col_name1[:1], color=color_a)

col_name2 = data_columns[2]
plt.plot(time, df[col_name2],label=col_name2[:1], color=color_b)
col_name3 = data_columns[2]
plt.plot(time, df[col_name3],label=col_name3[:1], color=color_c)

# 显示图例
plt.legend(frameon=False, fontsize='16')
plt.ylabel(col_name1[6:],fontsize='20')
plt.xlabel(data_columns[0],fontsize='20')
# 显示网格
plt.grid()
plt.xticks(fontsize='16')
plt.yticks(fontsize='16')

# 设置保存图片的的名称
file_name_save = 'xxx .jpg'
# 保存图片
plt.savefig(file_name_save, dpi=600, format='jpg', bbox_inches = 'tight')

其中散点图出来的结果比较丑.....不够平滑,我就去掉了。

4、循环版

#############################################################################
# 循环版
color_choice = ['#e791c8' , '#d695e5', '#a8aceb', '#54acd2', '#4faaaf'
               , '#4aab98', '#4ab067', '#8ca547', '#b39d4a', '#dd9250'
               , '#ea96a3',]
time = df['time (s)']-456300.009412

for i in range(4):
    fig = plt.figure(figsize=(12,8))
    
    number = i*3
    color_a, color_b, color_c = random.sample(color_choice, 3)
    col_name1 = data_columns[number+1]
    plt.plot(time, df[col_name1],label=col_name1[:1], color=color_a)
    col_name2 = data_columns[number+2]
    plt.plot(time, df[col_name2],label=col_name2[:1], color=color_b)
    col_name3 = data_columns[number+3]
    plt.plot(time, df[col_name3],label=col_name3[:1], color=color_c)
    plt.legend(frameon=False, fontsize='16')
    plt.ylabel(col_name1[6:],fontsize='20')
    plt.xlabel(data_columns[0],fontsize='20')
    plt.grid()
    plt.xticks(fontsize='16')
    plt.yticks(fontsize='16')

    file_name_save = col_name1[7:-7] + '.jpg'
    plt.savefig(file_name_save, dpi=600, format='jpg', bbox_inches = 'tight')

5、绘制STD图片

#################  STD code     #################
# 读取数据
data = np.fromfile("STD.bin", dtype='double', )
data_columns=['time (s)', 'North 3-D position STD', 'East 3-D position STD', 'Down 3-D position STD'
             , 'North 3-D velocity STD', 'East 3-D velocity STD', 'Down 3-D velocity STD'
             ,'Roll 3-D attitude STD', 'Pitch 3-D attitude STD', 'yaw 3-D attitude STD'
             , 'X axes gyroscope biases STD (deg/h)', 'Y axes gyroscope biases STD (deg/h)', 'Z axes gyroscope biases STD (deg/h)'
             , 'X axes accelerometer biases STD (mGal)', 'Y axes accelerometer biases STD (mGal)', 'Z axes accelerometer biases STD (mGal)'
             , 'X axes gyroscope scale factor STD (ppm)' , 'Y axes gyroscope scale factor STD (ppm)' , 'Z axes gyroscope scale factor STD (ppm)'
             , 'X axes accelerometer scale factor STD (ppm)', 'Y axes accelerometer scale factor STD (ppm)', 'Z axes accelerometer scale factor STD (ppm)']
df = pd.DataFrame(data.reshape(29328,22),columns=data_columns)

# 颜色
color_choice = ['#e791c8' , '#d695e5', '#a8aceb', '#54acd2', '#4faaaf'
               , '#4aab98', '#4ab067', '#8ca547', '#b39d4a', '#dd9250'
               , '#ea96a3',]
time = df['time (s)']-456300.009412

for i in range(7):
    fig = plt.figure(figsize=(12,8))
    
    number = i*3
    color_a, color_b, color_c = random.sample(color_choice, 3)
    col_name1 = data_columns[number+1]
    label_a = col_name1.split(' ')[0]
    label_y = ' '.join(col_name1.split(' ')[1:])
    if 'axes ' in label_y:
        label_y = label_y.strip('axes ')
        
    plt.plot(time, df[col_name1],label=label_a, color=color_a)
    
    col_name2 = data_columns[number+2]
    label_b = col_name2.split(' ')[0]
    plt.plot(time, df[col_name2],label=label_b, color=color_b)
    
    col_name3 = data_columns[number+3]
    label_c = col_name3.split(' ')[0]
    plt.plot(time, df[col_name3],label=label_c, color=color_c)
    
    plt.legend(frameon=False, fontsize='16')
    plt.ylabel(label_y,fontsize='20')
    plt.xlabel(data_columns[0],fontsize='20')
    plt.grid()
    plt.xticks(fontsize='16')
    plt.yticks(fontsize='16')
    if i >= 3:
        file_name_save =  label_y[:-7] + '.jpg'
    else:
        file_name_save = label_y + '.jpg'
        
    plt.savefig(file_name_save, dpi=600, format='jpg', bbox_inches = 'tight')

 

 结果如下:

完整代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import random

# 读取文件
data = np.fromfile("IMU_ERR.bin", dtype='double', )
# 设置列名
data_columns = ['time (s)', 'X axes gyroscope biases (deg/h)', 'Y axes gyroscope biases (deg/h)',
                'Z axes gyroscope biases (deg/h)'
    , 'X axes accelerometer biases (mGal)', 'Y axes accelerometer biases (mGal)', 'Z axes accelerometer biases (mGal)'
    , 'X axes gyroscope scale factors (ppm)', 'Y axes gyroscope scale factors (ppm)',
                'Z axes gyroscope scale factors (ppm)'
    , 'X axes accelerometer scale factors (ppm)', 'Y axes accelerometer scale factors (ppm)',
                'Z axes accelerometer scale factors (ppm)']
# 381017个数据,13列,29309行数据
print(type(data.shape[0]))
row_n = int(data.shape[0]/13)
df = pd.DataFrame(data.reshape(row_n,13),columns=data_columns)



# xyz一起版, 折线
# 颜色列表
color_choice = ['#e791c8', '#d695e5', '#a8aceb', '#54acd2', '#4faaaf'
    , '#4aab98', '#4ab067', '#8ca547', '#b39d4a', '#dd9250'
    , '#ea96a3', ]
time = df['time (s)'] - df.iloc[0, 0]

# 设置画布
fig = plt.figure(figsize=(12, 8))

# 随机在color_choice中选择三个颜色
color_a, color_b, color_c = random.sample(color_choice, 3)

# 选择 -->  'X axes gyroscope biases (deg/h)' 列
col_name1 = data_columns[1]
# 线段图
plt.plot(time, df[col_name1], label=col_name1[:1], color=color_a)
# 散点图
#     plt.scatter(time, df[col_name1],label=col_name1[:1], color=color_a)

col_name2 = data_columns[2]
plt.plot(time, df[col_name2], label=col_name2[:1], color=color_b)
col_name3 = data_columns[2]
plt.plot(time, df[col_name3], label=col_name3[:1], color=color_c)

# 显示图例
plt.legend(frameon=False, fontsize='16')
plt.ylabel(col_name1[6:], fontsize='20')
plt.xlabel(data_columns[0], fontsize='20')
# 显示网格
plt.grid()
plt.xticks(fontsize='16')
plt.yticks(fontsize='16')

# 设置保存图片的的名称
file_name_save = 'xxx .jpg'
# 保存图片
plt.savefig(file_name_save, dpi=600, format='jpg', bbox_inches='tight')

#############################################################################
# 循环版
color_choice = ['#e791c8', '#d695e5', '#a8aceb', '#54acd2', '#4faaaf'
    , '#4aab98', '#4ab067', '#8ca547', '#b39d4a', '#dd9250'
    , '#ea96a3', ]
time = df['time (s)'] - df.iloc[0, 0]

for i in range(4):
    fig = plt.figure(figsize=(12, 8))

    number = i * 3
    color_a, color_b, color_c = random.sample(color_choice, 3)
    col_name1 = data_columns[number + 1]
    plt.plot(time, df[col_name1], label=col_name1[:1], color=color_a)
    col_name2 = data_columns[number + 2]
    plt.plot(time, df[col_name2], label=col_name2[:1], color=color_b)
    col_name3 = data_columns[number + 3]
    plt.plot(time, df[col_name3], label=col_name3[:1], color=color_c)
    plt.legend(frameon=False, fontsize='16')
    plt.ylabel(col_name1[6:], fontsize='20')
    plt.xlabel(data_columns[0], fontsize='20')
    plt.grid()
    plt.xticks(fontsize='16')
    plt.yticks(fontsize='16')

    file_name_save = col_name1[7:-7] + '.jpg'
    plt.savefig(file_name_save, dpi=600, format='jpg', bbox_inches='tight')

#################  STD code     #################
# 读取数据
data = np.fromfile("STD.bin", dtype='double', )
data_columns = ['time (s)', 'North 3-D position STD (m)', 'East 3-D position STD (m)', 'Down 3-D position STD (m)'
    , 'North 3-D velocity STD ', 'East 3-D velocity STD ', 'Down 3-D velocity STD '
    , 'Roll 3-D attitude STD (deg)', 'Pitch 3-D attitude STD (deg)', 'yaw 3-D attitude STD (deg)'
    , 'X axes gyroscope biases STD (deg/h)', 'Y axes gyroscope biases STD (deg/h)',
                'Z axes gyroscope biases STD (deg/h)'
    , 'X axes accelerometer biases STD (mGal)', 'Y axes accelerometer biases STD (mGal)',
                'Z axes accelerometer biases STD (mGal)'
    , 'X axes gyroscope scale factor STD (ppm)', 'Y axes gyroscope scale factor STD (ppm)',
                'Z axes gyroscope scale factor STD (ppm)'
    , 'X axes accelerometer scale factor STD (ppm)', 'Y axes accelerometer scale factor STD (ppm)',
                'Z axes accelerometer scale factor STD (ppm)']
row_n = int(data.shape[0]/22)
df = pd.DataFrame(data.reshape(row_n,22),columns=data_columns)

# 颜色
color_choice = ['#e791c8', '#d695e5', '#a8aceb', '#54acd2', '#4faaaf'
    , '#4aab98', '#4ab067', '#8ca547', '#b39d4a', '#dd9250'
    , '#ea96a3', ]
time = df['time (s)'] - df.iloc[0, 0]

for i in range(7):
    fig = plt.figure(figsize=(12, 8))

    number = i * 3
    color_a, color_b, color_c = random.sample(color_choice, 3)
    col_name1 = data_columns[number + 1]
    label_a = col_name1.split(' ')[0]
    label_y = ' '.join(col_name1.split(' ')[1:])
    if 'axes ' in label_y:
        label_y = label_y.strip('axes ')

    plt.plot(time, df[col_name1], label=label_a, color=color_a)

    col_name2 = data_columns[number + 2]
    label_b = col_name2.split(' ')[0]
    plt.plot(time, df[col_name2], label=label_b, color=color_b)

    col_name3 = data_columns[number + 3]
    label_c = col_name3.split(' ')[0]
    plt.plot(time, df[col_name3], label=label_c, color=color_c)

    plt.legend(frameon=False, fontsize='16')
    plt.ylabel(label_y, fontsize='20')
    plt.xlabel(data_columns[0], fontsize='20')
    plt.grid()
    plt.xticks(fontsize='16')
    plt.yticks(fontsize='16')
    if i >= 3:
        file_name_save = label_y[:-7] + '.jpg'
    else:
        file_name_save = label_y + '.jpg'

    plt.savefig(file_name_save, dpi=600, format='jpg', bbox_inches='tight')

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
GNSS-INS-SIM是一种用于仿真全球导航卫星系统(GNSS)和惯性导航系统(INS)的软件工具。其安装过程如下: 首先,需要从官方网站或其他资源下载GNSS-INS-SIM的安装包。确保选择与您的操作系统兼容的版本。 接下来,运行安装包,按照安装向导的提示逐步进行操作。可能需要同意许可协议并选择安装路径。建议将软件安装在系统默认的应用程序目录下。 一旦安装完成,打开安装目录,并找到主要的执行文件。通常,这个文件是一个可执行文件或一个批处理脚本。 单击或双击该文件,打开GNSS-INS-SIM软件。您将看到一个图形用户界面,其中包含各种仿真和配置选项。 在使用GNSS-INS-SIM之前,您可能需要导入一些GNSSINS数据。您可以在软件界面上找到这些数据的导入选项。选择导入数据的方法,并按照提示将数据文件加载到软件中。 一旦数据导入成功,您可以根据需要进行各种配置和设置,例如导航算法、时间分辨率、传感器误差模型等。 最后,点击“开始仿真”按钮或类似的选项来运行GNSS-INS-SIM仿真。您将看到仿真结果在软件界面上显示出来。可以通过图表、地图或其他形式对仿真结果进行详细的分析和评估。 总之,安装GNSS-INS-SIM是一个相对简单的过程。按照上述步骤进行,您将能够成功安装并运行这个强大的GNSSINS仿真工具

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值