PSINS源码阅读—STIM300/GNSS组合导航

2023-05-16

文章目录

  • 前言
  • 代码解读
    • 主要框架
    • 代码阅读
    • 主要脚本
    • sinsgps函数
  • 结果测试

前言

严老师最近在PSINS网站上上传了一组STIM300-GNSS跑车数据,并且有光纤惯导数据作为真值参考,网站是一组STIM300-GNSS跑车数据(有姿态参考),为了使用该数据集,psins代码包采用最新的,即psins201210,严老师也提供了代码,算是提供了一套比较完整的SINS/GNSS松耦合算法。

代码解读

主要框架

STIM300属于业界顶级的MEMS IMU,STIM300只是一个IMU,本身不输出姿态角数据,STIM300在出厂之前已经做了严格的标定和温度补偿,代码中的姿态算法部分还是基于光纤惯导的思路,即基本上只是陀螺仪在参与姿态解算,加速度计参与速度解算。一般来说对于MEMS IMU,因为精度有限,加速度计也是要参与速度解算的,这部分可以参考MTI系列惯导数据手册,其对MTI中所使用的算法思路有一个大致的讲解。

代码阅读

首先代码中提供了一个18状态向量的卡尔曼滤波器,状态向量分别为:欧拉角误差、速度误差、位置误差、陀螺零偏误差、加速度计零偏误差以及杆臂误差,实际上通过设置Q矩阵和P矩阵杆臂部分为0,就没有考虑杆臂。

主要脚本

主要脚本如下:

close all;
glvs
ts = 1/125;
dd = binfile('mimuattgps.bin',16);
imu = dd(:,[1:6,10]); imuplot(imu);
att = dd(:,7:10); insplot(att,'a'); % FOG-Att
gps = no0(dd(:,[11:end,10]),1); gpsplot(gps);
% 设置IMU噪声,噪声含义如下:
% 陀螺仪偏置:100deg/h (设置初始零偏,设置P矩阵)
% 加速度计偏置:5000ug (设置初始零偏,设置P矩阵)
% 陀螺仪高斯噪声: 0.1deg/sqrt(h)
% 加速度计高斯噪声:10ug/sqrt(Hz)
imuerr = imuerrset(100, 5000, 0.1, 10);
% 欧拉角初始误差:pitch:3600角秒,roll:3600角秒,偏航角:300角秒
% 速度初始误差:1m/s
% 位置初始误差:1m
davp = avpseterr([3600;3600;300], [1;1;1], [1;1;1]*10);
ins = insinit([att(1,1:3),gps(1,1:6)]', ts); ins.nts=ts;
[avp, xkpk, ins1, kf1] = sinsgps(imu(10/ts:3000/ts,:), gps, ins, davp, imuerr);
avpcmpplot(att, avp(:,[1:3,end]), 'a', 'mu');

imuerrset中设置了陀螺仪和加速度计的零偏和高斯白噪声,分别用于设置P矩阵中对应的欧拉角误差以及速度误差,以及Q矩阵中对应的欧拉角误差以及速度误差。
avpseterr中设置了P矩阵对应的欧拉角误差、速度误差、位置误差,sinsgps函数是SINS/GNSS组合导航核心函数。
因为代码数据集中提供了光纤惯导的三个欧拉角,所以avpcmpplot函数通过STIM300/GNSS组合导航得到的欧拉角和光纤数据进行比较,得到组合导航误差,方便分析。

sinsgps函数

如下代码设置了GPS速度观测和位置观测的噪声,这个数据集中的GPS为单点GPS,并且提供了东北天导航坐标系下的GNSS速度。

        pos0=gps(1,1:3)'; r0=[10/glv.Re;10/glv.Re;30];  %设置GPS位置观测噪声
        if size(gps,2)>6
            pos0=gps(1,4:6)'; 
            r0=[[1;1;1]/10;r0];   %设置GPS速度观测噪声
        end

在kf.Qt的设置中也考虑了零偏的马尔科夫游走,即建模了零偏的缓慢变化,代码如下:

    % imuerr.sqg:一阶马尔科夫噪声
    % imuerr.sqa:一阶马尔科夫噪声
    % imuerr.web:高斯噪声
    % imuerr.wdb:高斯噪声
    kf.Qt = diag([imuerr.web; imuerr.wdb; zeros(3,1); imuerr.sqg; imuerr.sqa; zeros(3,1)])^2;

设置了kf.Pmin和kf.Pmax,即P矩阵的幅度限制,kf.adaptive = 1虽然打开了自适应卡尔曼滤波的开关,但是代码中已经把自适应部分代码屏蔽了,可能用起来不太好吧。
代码中使用了部分反馈校正原理,这部分在严老师的一篇论文中有叙述,kf.xtau设置了反馈系数,如下所示:

kf.xtau = [ [1;1;1]*10; [1;1;1]; [1;1;1]; [10;10;10]; [10;10;10]; [1;1;1] ];

imugpssyn做了SINS和GNSS的软件同步,说是同步,其实不算,就是找两个相邻的IMU数据中间有没有GPS数据,从这里也可以看到时间同步精度理想情况下不超过IMU输出周期,即8ms。
kfs = kfstatistic(kf); kfs1 = kfstat([],kf); 这两个函数目前没太研究,kfs 和kfs1在代码中没有使用。
kf.Phikk_1 = kffk(ins)是计算状态转移矩阵,就是高精度惯导最常用的15*15矩阵。
观测量为惯导速度解算,位置解算和GPS速度,位置之间的差值,代码如下所示:

zk = [ins.vnL;ins.posL]-gps(kgps,1:6)'; % 同时观测GPS速度和位置

观测转移矩阵的设置如下所示:

kf.Hk = [zeros(6,3), eye(6), zeros(6,6), [-ins.CW;-ins.MpvCnb]];

kfupdate函数中调用了了卡尔曼滤波的5个方程。
kffeedback函数中使用了部分反馈校正方法来更新AVP,欧拉角、速度、位置、陀螺零偏、加速度计零偏都进行了反馈。
这部分的整体注释代码如下:

function [avp, xkpk, ins, kf] = sinsgps(imu, gps, ins, davp, imuerr, lever, r0, fbstr)
% %% init
% imuerr = imuerrset(0.03, 100, 0.001, 1);
% davp = avpseterr([300;300;300], [1;1;1], [1;1;3]*100);
% ins = insinit(avp(1,1:9), ts); ins.nts=ts;
% %% kf
% lever = [0;0;0];
% rk = [10/glv.Re;10/glv.Re;30];
% [avp1, xkpk, ins1, kf] = sinsgps(imu, gps, ins, davp, imuerr, lever, rk, 'avp');
global glv
    if ~exist('fbstr', 'var'), fbstr='avped'; end %  fbstr:反馈量
    if ~exist('r0', 'var')
        % 注意r0
        pos0=gps(1,1:3)'; r0=[10/glv.Re;10/glv.Re;30];  %设置GPS位置观测噪声
        if size(gps,2)>6
            pos0=gps(1,4:6)'; 
            r0=[[1;1;1]/10;r0];   %设置GPS速度观测噪声
        end
    end
    if ~exist('lever', 'var'), lever = [0;0;0]; end
    if ~exist('imuerr', 'var'), imuerr = imuerrset(0.01, 100, 0.001, 1); end
    if ~exist('davp', 'var'), davp = avpseterr([300;300;300], [1;1;1], [1;1;3]*100); end
    [nn, ts, nts] = nnts(2, diff(imu(1:2,end)));
    if ~exist('ins', 'var')
        [att0, res0] = aligni0(imu(1:fix(200/ts),:), pos0);
        ins = insinit([res0.attk(1,1:3)'; 0;0;0; pos0], ts); ins.nts=ts;
    end
    gpspos_only = 0;
    if size(gps,2)<=5, gpspos_only = 1; end 
    psinstypedef(186);
    kf = [];
    % 状态变量: 18状态:欧拉角,速度,位置,陀螺零偏,加速度计零偏,杆臂
    % imuerr.sqg:一阶马尔科夫噪声
    % imuerr.sqa:一阶马尔科夫噪声
    % imuerr.web:高斯噪声
    % imuerr.wdb:高斯噪声
    kf.Qt = diag([imuerr.web; imuerr.wdb; zeros(3,1); imuerr.sqg; imuerr.sqa; zeros(3,1)])^2;
    kf.Rk = diag(r0)^2;
    kf.Pxk = diag([davp; imuerr.eb; imuerr.db; lever]*1.0)^2;
    % 最小欧拉角误差:[3;3;10]角秒
    % 最小速度误差:[0.01;0.01;0.01]/100m/s
    % 最小位置误差:
    % 陀螺仪最小偏置误差:[1;1;1]/1000 deg/h
    % 加速度计最小偏置误差:[1;1;10]ug
    kf.Pmin = [[3;3;10]*glv.sec; [0.01;0.01;0.01]/100; [[1;1]/glv.Re;1]/100; [1;1;1]/1000*glv.dph; [1;1;10]*glv.ug; [0;0;0]].^2;
    kf.Pmax = 10000*diag(kf.Pxk); kf.pconstrain = 1; %协方差限幅
    kf.adaptive = 1; % 自适应卡尔曼滤波
    kf.xtau = [ [1;1;1]*10; [1;1;1]; [1;1;1]; [10;10;10]; [10;10;10]; [1;1;1] ]; % ????
    kf.Hk = zeros(length(r0),18); %观测转换矩阵
    % kfinit0:初始化KF结构体
    kf = kfinit0(kf, nts);
    imugpssyn(imu(:,7), gps(:,end)); %imu,gps软件同步
    len = length(imu); [avp, xkpk] = prealloc(fix(len/nn), 16, 2*kf.n+1); %预分配空间
    timebar(nn, len, '18-state SINS/GPS simulation.'); ki = 1;
    kfs = kfstatistic(kf);    kfs1 = kfstat([],kf);
    for k=1:nn:len-nn+1
        k1 = k+nn-1; 
        wvm = imu(k:k1,1:6); t = imu(k1,end);
        ins = insupdate(ins, wvm);
        % kf.Phikk_1:状态转移矩阵
        kf.Phikk_1 = kffk(ins);  % kf.Phikk_1(1:3,1:3) = eye(3);
        kf = kfupdate(kf);      
        % kfs = kfstatistic(kfs, kf, 'T');   kfs1 = kfstat(kfs1, kf, 'T');
        % 由imugpssyn的同步机制可以知道INS数据和GPS数据的时间同步误差最大为:惯导数据周期:8ms
        % 找到了两个惯导数据之间的GPS数据,否则:kgps=0
        [kgps, dt] = imugpssyn(k, k1, 'F');
        if kgps>0 %如果有GPS数据
%             if gps(kgps,4)<4 && gps(kgps,4)>0   % DOP
                ins = inslever(ins); % 杆臂补偿
                if gpspos_only==1
                    % ins.posL:加入杆臂补偿之后的位置
                    zk = ins.posL-gps(kgps,1:3)'; 
                    kf.Hk = [zeros(3,6), eye(3), zeros(3,6), -ins.MpvCnb];
                else
                    % ins.vnL:加入杆臂补偿之后的速度
                    % ins.posL:加入杆臂补偿之后的位置
                    zk = [ins.vnL;ins.posL]-gps(kgps,1:6)'; % 同时观测GPS速度和位置
                    % kf.Hk:观测矩阵
                    % eye(6):速度和位置
                    % [-ins.CW;-ins.MpvCnb]:考虑到杆臂
                    kf.Hk = [zeros(6,3), eye(6), zeros(6,6), [-ins.CW;-ins.MpvCnb]];
                end
                kf = kfupdate(kf, zk, 'M');
    %          kfs = kfstatistic(kfs, kf, 'M');     kfs1 = kfstat(kfs1, kf, 'M');
%             end
        end
        [kf, ins] = kffeedback(kf, ins, nts, fbstr); % fbstr = 'avped'
        avp(ki,:) = [ins.avp; ins.eb; ins.db; t]'; % 注意是有时间的
        xkpk(ki,:) = [kf.xk; diag(kf.Pxk); t]'; ki = ki+1;
        timebar;
    end
%     kfs = kfstatistic(kfs);    kfs1 = kfstat(kfs1,kf);
    avp(ki:end,:) = []; xkpk(ki:end,:) = [];
    insplot(avp);
    kfplot(xkpk);

结果测试

  1. 从结果中可以看到陀螺仪和加速度计的零偏估计较为稳定。

在这里插入图片描述
在这里插入图片描述
2. 利用光纤惯导的欧拉角作为真值,可以间接估计出STIM300和光纤惯导之间的安装误差角,如下所示,整体较为稳定,中间有比较大的跳动,原因有待进一步分析。可以看到pitch在1500s处的误差在16角秒左右,roll的误差在21角秒左右,yaw的误差在2角秒左右。

在这里插入图片描述
3. 从2的分析中可以看到,欧拉角的组合导航精度还是比较高的,一方面是陀螺仪本身精度高,另一方面是GPS的修正作用。下面测试在没有GPS的修正作用时的欧拉角误差。屏蔽掉sinsgps函数中的kffeedback函数,欧拉角误差如下所示,可以看到yaw最大误差接近3°。

在这里插入图片描述
可见GNSS的修正作用对于欧拉角的正确性还是非常重要的。如下图所示,由于没有有效的估计零偏,roll和pitch一开始的偏差就已经很大了。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PSINS源码阅读—STIM300/GNSS组合导航 的相关文章

  • 小米2013校园招聘笔试题

    题目 xff1a 一个数组里 xff0c 除了三个数是唯一出现的 xff0c 其余的都出现偶数个 xff0c 找出这三个数中的任一个 比如数组元素为 1 2 4 5 6 4 2 xff0c 只有1 5 6这三个数字是唯一出现的 xff0c
  • NVIDIA Jetson NX 模组初始化(刷机+扩容)

    项目场景 xff1a 老师让我学习使用NVIDIA Jetson NX做项目开发 于是自己研究一下 由于第一次接触 前期踩坑用了两周时间 特此记录 1 刷机 使用的是NVIDIA Jetson NX 模组 xff0c 网上买大约4 5k x
  • centos+docker设置网易163镜像加速

    镜像加速 鉴于国内网络问题 xff0c 后续拉取 Docker 镜像十分缓慢 xff0c 我们可以需要配置加速器来解决 xff0c 我使用的是网易的镜像地址 xff1a http hub mirror c 163 com 新版的 Docke
  • WSL(ubuntu2204)xfce4安装中文环境和fcitx5框架及中文输入法

    安装中文语言包 sudo apt install language pack zh hans 配置中文显示 首先运行如下命令配置 locale sudo vi etc locale gen 找到 zh CN UTF 8 UTF 8 并取消注
  • detectron2: An object named ‘XXXX‘ was already registered in ‘META_ARCH‘ registry

    根据该作者 https blog csdn net qq 20793791 article details 107924375 所述的方法 xff0c 我又想到了 看我的目录文件是否是 python package xff0c 突然发现虽然
  • ubuntu20.04中python2和python3切换

    Ubuntu 20 04 LTS已经移除Python2 xff0c 默认安装python3 xff0c 但是很多时候还是会经常用到python2 7版本 xff0c 这里首先单独安装python2 7 xff0c 然后配置python2和p
  • ubuntu18.04 pycorrector安装

    今天尝试对语音识别转录后的文字进行纠错 xff0c 然后就试了一下pycorrector xff0c 在安装pycorrector的时候遇见了下面的问题 xff1a base pip install pycorrector Looking
  • libxcb-xinerama.so.0: cannot open shared object file: No such file or directory

    今天在ubutnu 18 04上装了mayavi 但是写代码可视化点云的时候出现了下面的情况 xff1a QLibraryPrivate loadPlugin failed on 34 home eric anaconda3 envs po
  • 生产者/消费者模式(转载)

    简介 在实际的软件开发过程中 xff0c 经常会碰到如下场景 xff1a 某个模块负责产生数据 xff0c 这些数据由另一个模块来负责处理 xff08 此处的模块是广义的 xff0c 可以是类 函数 线程 进程等 xff09 产生数据的模块
  • 【飞控学习】APM和PX4飞控源码下载及安装

    对于无人机开发的专业人员来说 xff0c APM和PX4是现今市面上最强大的2个开源无人机飞控 学习和查看他们2者的源码 xff0c 将会提高我们对整个无人机的姿态解算和控制的深入理解 现在我们就来下载2者的源码和安装查看2者源码的软件 1
  • Skye无人机换遥控接收机遇到的坑

    Skye的接收机是可以直接用天地飞对码的 xff0c 如果要更换接收机的话需要支持sbus协议或者要有个转码器 xff0c 要更换接收机的话要特别注意 xff0c skye主板上集成了一个反相器 xff01 如果用单片机自己做转码器的话直接
  • opencv算法移植到嵌入式平台(1): opencv工程打包成库

    1 将要用到的opencv 相关的库打包 xff0c 利用你要移植的平台第三方编译器进行交叉编译 xff0c 因为如果你利用其它编译器即使编译通过了 xff0c 在另外的工程调用时也会提示错误 xff0c 一般会报错误 xff1a unde
  • 值得你关注的Android6.0上的重要变化(一)

    伴随着众多新特性和新功能 xff0c Android6 0 xff08 API level 23 xff09 在系统和API上都有着诸多的改变 本文着重介绍几个关键变化 xff0c 以帮助你理解这些改变对你的APP产生的影响 一 运行时权限
  • 编译开源LibreOffice的Android版本——开源Office文档查看器

    项目近期需要用到文档查看器 xff0c 现有的WPS之类确实比较好用 xff0c 无奈还需要对应用做些处理 xff0c 只好寻找开源的实现 开源的文档查看器主要两种方式 xff0c 一种是完整的Android版本实现 xff0c 直接拿来即
  • Linux下利用信号的异步串口中断响应

    先悔过一下 因为一个月前就在学习这个 xff0c 当时解决的差不多了 xff0c 想着抽个空再记录这些 xff0c 没想到这么短的时间就已经忘得 差不多了 xff0c 真是不好 xff0c 应该趁热打铁 废话不多说了 xff0c 这里主要介
  • 值得你关注的Android8.0(Android O)上的重要变化

    刚适配完Android7 0还没多久 xff0c 就看到Google官方推出的Android8 0 xff08 Android O xff09 的开发者预览版新闻 xff0c 我的心情你可以好好想想 对于上层应用开发者的我来说 xff0c
  • Android应用流量统计——NetworkStatsManager使用

    在没有Root的情况下 xff0c Android应用流量统计在6 0之前一直没有太好的办法 xff0c 官方虽然提供了TrafficStats xff0c 但其主要功能是设备启动以来流量的统计信息 xff0c 和时间信息无法很好的配合 最
  • Java处理http协议相关初步(二)——httpserver

    这里的HttpServer xff0c 并不是哪里专门下载的类库了 xff0c 而是在JDK1 6中自带的 xff0c 在com sun net httpserver包中 xff0c 提供了简单的较高层次意义上的Http ServerAPI
  • Android源码下载与编译之emulator与adb

    最近碰到一个问题 xff0c 就是Android的emulator只能打开16个 xff0c 在网上找到文章有说adb连接数量是16个的 xff0c 但是没说这个avd也只能16个 xff08 当然是在一台电脑上 xff09 于是 xff0
  • 自动化刷EOS资金盘(类Fomo3D)游戏

    7月底在以太坊的Fomo3D游戏异常火爆 xff0c 两三天后 xff0c 在EOS主网上 xff0c 国内各种仿品相继上线 xff0c 留心观察 xff0c 这些游戏里都有着自动化交易的身影 本文为你分析如何实现一个简单的EOS自动化交易

随机推荐

  • 毕业后就是程序员——我的阿里、金山、中华、腾讯、360、网易面试总结(三)

    接着上篇 xff0c 这篇侧重于具体的笔试 面试的问题 xff0c 至于是哪个公司的就不去追究了 xff0c 但一定是经常问到的 xff0c 而且我嵌入式系统工程师和移动开发工程师都参与了 xff0c 问题要区别看待 xff0c 那么自然就
  • 你投资的那些EOS“侧链”都还好么?

    EOS侧链BOS的启动声势浩大 xff0c 引得一众EOS超级节点与公司参与支持 xff0c 也招来币圈大佬老猫的质疑 xff0c 直言 熊市 xff0c 我劝你善良 xff1b 近几日 xff0c 曾被称作是EOS上首条侧链的FIBOS开
  • 销毁3417万枚EOS与被刺激的EOS价格——理解增发与销毁机制

    eosio saving帐号销毁的3417万枚EOS与REX锁住的6000多万枚EOS xff0c 都刺激不了EOS价格 xff0c 甚至仍有下跌的趋势 xff0c 而几天后一觉醒来 xff0c 不管BTC还是EOS都在疯涨 xff0c 过
  • Error executing aapt: Return code -1073741819

    总会有让人喷血的事情勾起写博客的欲望 xff0c 希望能坚持 折腾了两天的是个小问题 xff0c 就是标题上的Error executing aapt Return code 1073741819 解决的方法也很简单参考1中所述 xff0c
  • EOS的危险信号——记主网上线一周年后

    市值已经跌落到第八 xff0c 除了期待即将推出的社交应用 Voice 能给 EOS 注入新的活力外 xff0c 我已经很难找到 EOS 上的新热点 xff0c 而一些危险的信号 xff0c 可能对 EOS 的发展带来负面的影响 xff0c
  • 五轴机械臂实现视觉抓取--realsense深度相机和五自由度机械臂

    前言 xff1a 要实现视觉抓取 xff0c 首先需要实现机械臂的驱动 xff0c 深度相机的目标识别 xff0c 能够反馈位置 1 实现机械臂在ROS层的控制 2 基于深度相机目标物体的空间坐标反馈 xff0c 需要知道摄像头中物体的像素
  • solvepnp三维位姿估算

    一 前言 关于PNP问题就是指通过世界中的N个特征点与图像成像中的N个像点 xff0c 计算出其投影关系 xff0c 从而获得相机或物体位姿的问题 opencv提供的solvepnp函数就是用来解决pnp问题 利用该函数可以实现测算相机 物
  • emwin自定义颜色

    颜色管理中已经帮助我们定义了这些颜色 xff0c 但是我们通常会使用自定义的颜色 xff0c 怎么怎么设置值呢 xff1f 通常情况下使用的是BGR颜色 就是蓝色和红色是相反的 GUI SetBkColor 0x00FFaa80 自定义调色
  • STemwin 实现滑动切换主页 滑动翻页 滑动解锁功能

    STM32上实现类似iPhone的解锁和滑屏功能 xff0c emwin这个库官方的文档中控件没有一样的 xff0c 但是有一个上下滑动的 xff0c 基本上能够完成大致上的功能 xff0c 但是如果想使用emwin实现类似的效果的话 xf
  • freeRTOS中断简介

    目录 参考材料 中断简介 中断管理简介 优先级分组定义 正点原子freertos手册 优先级设置 用于中断屏蔽的特殊寄存器 primask暂时屏蔽中断寄存器 xff08 RT THREAD使用 xff09 faultmask寄存器 base
  • 【01】初识ThreadX

    目录 简介 微内核 资料链接 入门索引 简介 ThreadX是一个成熟的商用硬实时嵌入式操作系统 xff0c 被广泛应用于消费电子 航空航天 通信 工业控制与医疗等应用领域中 xff0c 至今已服务超过62亿设备 它以轻量级的规模 xff0
  • [解决方案] VNC Viewer 连接灰屏问题 (能够连接上,但全是灰点,没有任何菜单、按钮,鼠标变为x)

    解决方案 VNC Viewer 连接灰屏问题 xff08 能够连接上 xff0c 但全是灰点 xff0c 没有任何菜单 按钮 xff0c 鼠标变为x xff09 情况1情况2情况3 情况1 登陆VNCviewer可能会发现服务器的mate桌
  • VNC Viewer 10061, connection refused

    在Windows系统下用VNC Viewer去连接Linux系统的VNC Server xff0c 双方都可ping通 xff0c 但是VNC Viewer连接不上 xff0c 显示connection refused 10061 xff0
  • 现代C++语言(C++11/14/17)特性总结和使用建议(一)

    C 43 43 语言在历史上经过了很多次的演进 最早的时候 xff0c C 43 43 语言没有模板 STL 异常等特性 xff0c 之后加入这些特性形成大多数人所熟悉的C 43 43 98 03标准 在此之后 xff0c C 43 43
  • 现代C++语言(C++11/14/17)特性总结和使用建议(二)

    override和final成员函数 以前C 43 43 中虚函数没有一个强制的机制来标识虚函数会在派生类里被改写 vitual关键字是可选的 xff0c 这使得阅读代码变得很费劲 因为可能需要追溯到继承体系的源头才能确定某个方法是否是虚函
  • 高通芯片方案的Wi-Fi6路由器汇总和推荐

    2017年 xff0c 高通宣布推出端到端的802 11ax产品组合 xff0c 其中包括用于网络基础设施的IPQ 8074 SoC 用于客户端设备的QCA 6290解决方案 xff0c 这让高通公司成为第一家宣布支持802 11ax的端到
  • (十)嵌入式:使用TCP协议实现图传

    这段时间做了通信相关的项目 xff0c 需要用到无线图传 xff0c 因此想到了用TCP协议实现 废话不多说 xff0c 直接上代码 xff1a 服务器端 xff1a include lt stdlib h gt include lt st
  • PnP 单目相机位姿估计(一):初识PnP问题

    简介理解更多 IDE xff1a visual studio 2013 使用库 xff1a Eigen opencv2 4 9 文档版本 xff1a 1 1 简介 PnP问题是求解3D 2D点对运动的方法 他描述了当知道n个三维空间点坐标及
  • 多传感器融合中的时间同步2-论文阅读

    文章目录 前言主要内容pps对于INS时间戳校准作用原理 测试结果参考文献 前言 阅读硕士论文 GPS INS组合导航系统研究及实现 xff0c 该论文第5章为时间同步系统设计 xff0c 为GPS INS系统设计的时间同步系统部分内容非常
  • PSINS源码阅读—STIM300/GNSS组合导航

    文章目录 前言代码解读主要框架代码阅读主要脚本sinsgps函数 结果测试 前言 严老师最近在PSINS网站上上传了一组STIM300 GNSS跑车数据 xff0c 并且有光纤惯导数据作为真值参考 xff0c 网站是一组STIM300 GN