高精度组合导航里的松耦合、紧耦合、深耦合

松耦合是什么? 松耦合是一种软件设计原则,在软件系统中各个组件之间的耦合度尽可能降低,即组件之间的依赖关系尽可能简单和灵活,使得系统更加可扩展和易维护。松耦合通常是基于消息的系统,此时客户端和远程服务并不知道对方是如何实现的,客户端和服务之间的通讯由消息的架构支配。只要消息符合协商的架构,则客户端或服务的实现就可以根据需要进行更改,而不必担心会破坏对方。在松耦合架构本质上是在 client/server 模型之间加入一个代理,把 CS 模型变成 CAS 模型。 阅读详情

高精度定位,是自动驾驶车辆一切丰满理想实现的前提。它用于判断自动驾驶功能是否处于可激活的设计运行条件内;它用于支撑自动驾驶车辆的全局路径规划;它用于辅助自动驾驶车辆的变道、避障策略。

不同的场景特点、不同的驾驶自动化级别、不同的精度要求、不同的传感器配置也催生了异常丰富的高精度定位方法,包括但不限于:

  • 通过GNSS获取定位卫星信号,辅以地面参考基准值站差分信号,实现高精度定位;

  • 通过INS测量载体自身的三轴加速度和三轴角速度,进行航迹推算,实现高精度定位;

  • 激光雷达实时扫描的点云与预存的高精度地图进行点云配准,实现高精度定位;

  • 比较相机拍摄到的同一物体在前后多帧图像的差异,运用视觉里程计方法,实现高精度的定位。

在多传感器融合的大方针指引下,融合定位也成为高精度定位的主流方案,以便提供更加精确、可靠、稳定的高精度定位方案。而对于自动驾驶车辆全局定位来说,功能最为强大的非融合GNSS、RTK、INS于一身的高精度组合导航莫属,空旷地带、短暂遮挡场景都是它施展才华的舞台。

1. GNSS、RTK和INS介绍

1.1. GNSS

全球卫星导航系统 (Global Navigation Satellite System, GNSS),是一种能在地球表面或近地空间的任何地点,为用户提供全天候的三维坐标、速度以及时间信息的空基无线电导航定位系统。中国的北斗、美国的GPS、俄罗斯的GLONASS和欧洲的Galileo均属于GNSS。

GNSS主要由空间卫星、地面监控系统、用户接收机三部分组成。空间卫星按照一定的频率昼夜不停的通过高频载波信号广播自己的位置和发送时间戳。用户接收机收到卫星高频载波信号后,通过光速乘以载波传播的时间,便可以计算出与卫星的距离,用公式表达如下。

\sqrt{(x_1-x)^2+(y_1-y)^2+(z_1-z)^2}+ct_l =c \Delta t

式中,(x_1, y_1, z_1)为卫星坐标,已知量;(x, y, z)为接收机位置,未知量;c为光速,已知量;△t为卫星载波到达接收机所经历的时间,已知量。卫星和接收机使用各自的时钟计时,卫星上使用精度极高的原子钟,可以认为是无误差的时钟源。而接收机上一般为普通的石英钟,存在较大的且不可忽略的时钟误差 t_l,因此在计算时需要其影响,未知量。

从以上公式可知,存在四个未知量,需要四个方程式才可以求解。因此还需要接收到另外卫星载波信号,才可计算出接收机的位置。这也是为什么,GNSS需要在可以接收到四颗及以上数量卫星信号的地方才能正常工作。

但由于内部和外部误差的存在,包括卫星高频载波穿透电离层和对流层产生的误差、卫星高速移动产生的多普勒效应引起的误差、轨道误差,卫星钟差、星历误差等,单纯GNSS的定位精度只能达到米级,无法满足自动驾驶对厘米级的定位需求。

而为了更好的消除误差,提高定位精度,GNSS通常会引入一些天基或地基的辅助手段。而现在比较常用的,是通过地基的无线通信网络,传送增强修正数据,提供辅助信息,加强和加快卫星导航信号的搜索跟踪性能和速度,缩短定位时间,提高定位精度。

1.2. RTK

实时动态差分 (Real-Time Kinematic, RTK) 技术便是地基增强系统的关键技术,一种具有实时处理两个测量站载波相位观测量的差分方法。RTK系统组成和通信链路示意图如下所示。

RTK系统组成及通信链路示意图

通过在地面建设参考基准站,并进行测绘,我们能够获知这个参考基准站的准确位置数据,并将这个位置数据写入参考基准站控制器内部。参考基准站内部接收机同时接收卫星载波信号来获取观测数据(伪距观测值,相位观测值),并将测绘数据和观测数据打包作为作为差分数据,通过无线通信网络广播给覆盖范围内的接收机。

接收机收到参考基准站差分数据后,结合自身观测数据,调用RTK结算算法,修正观测数据误差,从而获得厘米级的定位。对于一个参考基准站来讲,与其半径几十公里覆盖范围内的接收机产生的误差认为是相同的,因此RTK的网络建设也是一个超级基建工程。

但融合了RTK技术的GNSS还是存在如下缺点:

  • 在完全遮蔽或严重遮蔽的场景(比如隧道、高层密集建筑、浓密树荫等),由于无法接收到卫星信号或可接收卫星信号数量较少,无法输出准确的定位数据;
  • 在无线通信网络无法覆盖或通信链路断连时,无法获得参考基准站的差分数据,导致无法输出准确的定位数据;
  • 在不增加额外硬件条件下,无法输出载体的姿态(航向、俯仰、横滚角)数据;
  • 在多金属的工作场景,由于严重的多径影响,会导致定位数据的假固定;
  • 定位数据输出频率较低(通常为10Hz左右),短期精度较低。

从以上缺点可以看出,GNSS+RTK在大部分场景下表现优秀,是全局定位当之无愧的主心骨。但在部分恶劣场景下存在短期的定位不准情况,因此自然而然的想增加一位成员,来弥补这方面的不足,INS便是在这样的背景下被引入。

1.3. INS

惯性导航系统 (Inertial Navigation System, INS) 是一种彻底自主的导航系统,它不需要从外部接收信号,只靠内部的硬件,并在在牛顿三大定律的“魔法”下,输出定位和姿态数据。

惯导测量单元 (Inertial Measurement Unit, IMU) 是INS系统里的主流硬件,主流产品中一般集成了一个三轴加速度计和陀螺仪,俗称六轴IMU。加速度计可以测量物体在其坐标系下的三轴加速度,陀螺仪可以测量物体在其坐标系下的三轴角速度,通过对加速度和角速度数据进行积分运算,可以解算出载体一个相对的定位和姿态数据。

与GNSS一样,IMU也是起源于军工。长期以来,受限于高昂的成本,一直仅为国防和航天所用。俄罗斯的导弹如何能准确击中乌克兰的军事目标而不误伤民用建筑,其中便有IMU的巨大苦劳。

随着价格更加亲民的微机电系统 (Micro-Electro-Mechanical System, MEMS) 加速度计和陀螺仪出现,普通民众才开始享受IMU的红利。手机屏幕的自动旋转功能、智能手环的计步功能、虚拟现实头盔、无人机,无不是IMU发光发热的地方。

IMU可以输出高频(200HZ左右)定位和姿态数据,具有优秀的短期定位精度,但是单独使用INS同样存在以下缺点:

  • 由于解算模块存在积分计算,因此存在累积误差,随着时间的延长,误差会越来越大。
  • 高频振动会降低INS中IMU硬件的可靠性和精度;
  • 高精度的IMU成本(光纤陀螺)依旧很高。

但是这些缺点又是上文GNSS+RTK可以完美解决的,于是农村俗语:“男女搭配,干活不累”也在此处很好的应验了。既然GNSS+RTK和INS各有所长,又都是定位界的狠角色,那就将两者组合在一起,共同实现全局高精度定位,这就是高精度组合导航名称的由来。

2. 高精度组合导航的组成

从硬件层面划分,高精度组合导航包括射频芯片、基带芯片、IMU模组、数据处理单元等硬件部分,详细组成如下图所示。

高精度组合导航硬件组成

从系统架构层面划分,高精度组合导航主要由GNSS模块、INS模块和数据处理模块三大得力干将组成。

GNSS模块又可细分为射频前端、信号捕获、信号跟踪、RTK解算四大模块。

  • 射频前端是最重要的硬件部分,主要用于频率搬移、信号放大、噪声抑制;

  • 信号捕获是指通过伪码对齐、载波对齐实现对信号的捕获;

  • 信号跟踪,通过动态调整策略,实现对捕获到的伪码和载波信号的稳定跟踪;

  • RTK解算结合伪距值和差分数据,输出RTK定位结果。

INS模块主要包括测量单元IMU和解算单元,IMU负责测量三轴加速度和三轴角速度数据,解算单元负责处理IMU输入数据及数据处理模块反馈的误差数据。

数据处理模块是组合导航的核心,是实现“天人合一”境界的关键。卡尔曼滤波是数据处理单元最常用的算法,通过建立运动方程和测量方程,不仅考虑当前所测得的数据,而且还充分利用过去测得的数据,以后者为基础推测当前应有的输出,而以前者为校正量修正,从而获得当前参量值的最佳估算。

3. 三种耦合方式介绍

可是在将两者组合的时候,问题又出现了。是选择在卫星信号跟踪阶段与INS惯性测量数据融合,还是在观测量生成阶段再与INS惯性测量数据融合,还是等到RTK解算完成进入滤波器后再与INS惯性测量数据进行融合。

不同的融合方式,将高精度组合导航分成了松耦合、紧耦合和深耦合三种形态。目前业界普遍认为从定位精度、定位稳定性、定位可靠性等方面,深耦合最好,紧耦合次之,松耦合次次之。下文我们逐一介绍三种耦合方式的系统原理。

3.1. 松耦合

单从名字来看,“松耦合”是最简单的一种组合方式。在松耦合结构中,GNSS模块和INS模块独立工作,GNSS模块低频输出RTK定位结果,INS模块高频输出惯性测量结果,两者都将数据送入数据处理模块中。

在没接收到RTK定位结果的时候,卡尔曼滤波器以INS模块测量结果为基础推测当前应有的定位数据。在接收到RTK定位结果的时候,卡尔曼滤波器通过比较RTK和INS模块计算结果的差值,建立误差模型,估计INS模块的累计误差,并将误差补偿反馈给INS模块,同时输出定位数据的最佳估计值。INS模块收到误差补偿后,修正累积误差,循环往复。松耦合系统原理下图所示。

松耦合系统原理

松耦合的优点是易于实现,性能比较稳定。缺点是当卫星数量少于一定数量时,GNSS模块的输出就会失效。在信号存在遮挡的场景中,松耦合的定位稳定性、可靠性都不如另外两种耦合方式。

3.2. 紧耦合

从名字来看,两者融合的程度加深。在紧耦合结构中,将GNSS模块输出的观测量(伪距、伪距率)与INS模块输出的惯性测量结果相减,并将差值输出给卡尔曼滤波器,用于估计INS模块测量累计误差。并将计算出来误差补偿反馈给INS模块,经过校正的INS模块惯性测量结果同步输入到数据处理模的卡尔曼滤波器中,结合RTK定位结果最终得到组合导航解。紧耦合系统原理如下图所示。

紧耦合系统原理

紧耦合在原始GNSS观测量端进行融合,因此当卫星数量少于一定数量时,RTK定位模块无法求得固定解,紧耦合的模式依然可以提供GNSS信号的更新。但紧耦合在结构上会比较复杂,复杂带来的好处就是在相同硬件配置下,紧耦合的鲁棒性会更上一层楼。

紧耦合的难点在于RTK算法需要高精度组合导航的厂家自研。若非RTK专业厂家很难把算法打磨到行业一流水平。毕竟卫星离我们3万公里,速度4千米/秒,通过载波相位双差,要使得行驶在各种场景下的载体保持实时厘米级精度且无论何时、何地都稳定运行还是有很大难度的。

3.3. 深耦合

深耦合在紧耦合的基础上,将INS模块的部分数据直接送到基带芯片里,将INS的惯性数据作为GNSS解算的一部分。通过INS准确的相对多普勒变化信息,辅助信号跟踪,提高恶劣环境下多普勒的估计准确度,从而提高载波相位、伪距等观测量的精度和连续性,减少观测量中断和跳变的问题,从而有效提高组合导航精度和可靠性。紧耦合系统原理如下图所示。

深耦合系统原理

从图中可以看到,深耦合直接在基带模拟端进行融。因此,除了具备紧耦合算法能力外,还需要具备GNSS基带芯片模拟端接收能力,因此只有自研基带芯片能力的公司才有做深耦合的能力。这也导致目前仅有少数公司掌握这深耦合的技术。

4. 三种耦合比较

在空旷、无遮挡环境,三种耦合方式都能稳定地接收到三四十颗卫星,实现厘米级的定位精度简直是小菜一碟,因此在这种环境下,三者没有多大差别。

在完全遮挡环境下(地库、隧道等),三种耦合方式也几乎没有差别,都是一颗卫星也搜不到,这个时候即使深耦合可以辅助信号跟踪,可射频前端没有输入信号,后端再强也无济于事。因此在这种完全遮挡环境下,只能靠INS的输出结果,累积误差大小完全取决于INS中IMU的精度及对接入车辆里程计数据的处理逻辑。

因此,三种耦合的区别主要体现在有部分遮挡的环境(比如高楼林立的城市、高大金属林立的港口等),卫星信号时有时无、时好时坏(搜星数量多时可达40多颗,少时不超过10颗)的情况下。此时极易出现频繁失锁、观测量跳变等引发定位异常的问题。而基于更前端融合的深耦合可以通过辅助信号跟踪来解决这个问题,紧耦合次之。某厂家某款产品实测发现,在部分遮挡环境下,深耦合定位精度是紧耦合定位精度的3倍,是松耦合定位精度的5倍。紧耦合绝对是定位Corner Case领域的“屠龙宝刀”。

然而,深耦合固然是好,但是系统复杂,成本高。而且也不是所有场景都需要深耦合。在高速行驶的工况下,卫星信号追踪存在实时性和精准性的问题,所以深耦合会很合适;在低速行驶的工况下,不存在卫星追踪的实时性和精准性问题,也就不需要INS的惯性测量数据进行辅助,松耦合反而会更加经济实惠。这一细节,也充分体现自动驾驶对场景理解能力的高要求。

归根结底,无论哪种耦合算法,对于高精度组成导航厂商来讲,是性能、品质、价格和售后的一个折中。对于最终消费者来讲,是实实在在的用户体验。一套高精度组合导航产品,上得了高速公路,下得了城市道路,那才是终极目标。三种耦合结构的主要性能对比如下表。

5. 三种耦合主要性能对比

6. 主流厂商现状

据佐思汽研统计,除了现有量产车型,2021年以来各主机厂又相继推出了10多款搭载高精度定位技术的车型。伴随着自动驾驶在各细分领域的落地加速,高精度组合导航厂商迎来了难得的发展契机。

目前做组合导航产品的厂商少说也有四五十家,但总结起来,这些厂商主要分为三类:

  • 非GNSS和IMU自研厂商,全外购做系统层面集成,以松耦合算法产品为主。
  • GNSS自研厂家,外购IMU,以紧耦合或深耦合算法产品为主。
  • IMU自研厂家,外购GNSS,以松耦合/紧耦合算法产品为主。世面上量产的高精度组合导航产品,九成都是松耦合算法产品,紧耦合算法产品可谓是凤毛麟角,深耦合算法产品真是可遇而不可求了。

吸取前车之鉴,作者就不指名道姓点评某家产品的优劣。只选择六家主流厂商的六款主流产品在高架桥底测试的一段结果,来让读者欣赏一下当前主流高精度组合导航产品的水平。六款产品里面包含一款深耦合算法产品,一款紧耦合算法产品,四款松耦合算法产品。高架桥底天线上方卫星信号大部分被遮挡,因此主要测试高精度组合导航产品的抗遮挡性能。

测试部分结果汇总如下表(2021年7月测试时,各家产品软硬件均为当时最新状态),表格中加粗数据为这一列中性能表现最好的。

7. 发展趋势

当前阶段,高精度组合导航多以一个单独控制器的形态存在,单纯的分享高精度定位数据给车上的其他兄弟模块使用。从架构优化的角度,部分主机厂也尝试将高精地图模块或4G/5G通讯模组或C-V2X模组集成到高精度组合导航中,以提供更加丰富的功能。

但在域架构/中央集中式架构的演进浪潮中,高精度组合导航势必将被集成到域控制器或中央计算单元中。而这一步实现的关键在于高精度组合导航是否具有芯片化的解决方案,这也将决定未来高精度组合厂商的何去何从。

上文我们介绍过,高精度组合导航硬件部分主要包括射频芯片、基带芯片、IMU模组和数据处理单元。想要实现芯片化,必须同时具备这四大模块的自主研发能力。

目前多数厂家的主流产品将一块卫导板卡(包括射频芯片、基带芯片和数据处理单元)和惯导模块(IMU和数据处理单元)集成在一块大的PCB板上,加上自己的RTK及松/紧/深耦合算法,来提供零件级解决方案。

已有部分厂商(诺瓦泰、天宝、北斗星通、北云等)推出板卡级别产品,通过在一块小的PCB上集成卫导模块、惯导模块和数据处理单元。上游自动驾驶厂商可灵活的进行集成、开发,从而实现集成度更高的板卡级的解决方案。

少部分厂家在积极布局集成卫导板卡和IMU模块的SOC解决方案,这意味着他们将具备所有模块的自研能力,也为最终的芯片化铺平道路。

【设计模式】理解高内聚、松耦合 “高内聚、松耦合”是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。很多设计原则都以实现代码的“高内聚、松耦合”为目的,比如单一职责原则、基于接口而非实现编程等。 实际上,“高内聚、松耦合”是一个比较通用的设计思想,可以用来指导不同粒度代码的设计与开发,比如系统、模块、类,甚至是函数,也可以应用到不同的开发场景中,比如微服务、框架、组件、类库等。为了方便讲述,接下来就以“类”作为这个设计思想的应用对象来展开讲解,其他应用场景读者可以自行类比。 在这个设计思想中, 阅读详情

相关推荐

组合导航(八):INS/GPS组合导航

INS/GPS组合导航1 误差反馈1.1 开环INS/GPS架构1.2 闭环INS/GPS架构2 组合导航的类型2.1 松耦合 的INS/GPS组合导航2.2 紧耦合 的INS/GPS组合导航2.3 深度耦合的 INS/GPS组合导航3 INS方程的动态误差模型4 松耦合的INS/GPS组合导航模型4.1 系统模型4.2 测量模型4.3 INS/GPS松耦合总框图5 紧耦合的INS/GPS组合导航模型5.1 系统模型5.2 测量模型 INS/GPS组合导航 对比INS与GPS导航方法,二者都有其各自的优.

weixin_43793960的博客 3万+

紧耦合(Tight Coupling)和松耦合(Loose Coupling)

在上述示例中,首先实例化了具体的 Inventory 类对象,并将其传递给 Order 类的构造函数。总结:松耦合是一种良好的软件设计原则,它通过使用抽象、接口和依赖注入等技术来降低模块之间的依赖关系,提高代码的可维护性、可测试性和可扩展性。紧耦合的代码往往更加脆弱、难以修改和扩展,因此在开发过程中应尽量避免紧耦合的设计。紧耦合(Tight Coupling)和松耦合(Loose Coupling)是描述模块或组件之间耦合程度的两个概念。类与具体实现解耦,提高了松耦合性。类,并在构造函数中实例化了该类。

ultramand的博客,重生之我在cad上二次开发猛猛敲C#代码~ 5157

组合导航+多传感器融合算法

1、INS/GPS的组合导航系统可以输出高频率的导航参数信息(位置、速度、姿态),并且在长、短期的导航过程中均能具备较高精度。(输出数据的意义什么,PDR是步长+航向) 2、误差反馈系统 (1)在开环结构中,位置校正、速度校正和姿态校正均在INS外部完成,其中估计误差在每次迭代时从INS解中减去。在这一过程中,误差与状态校正不会反馈给INS系统。 (2)在闭环结构中,KF估计的误差通过反馈的形式对INS进行校正。在误差估计反馈后,KF的位置、速度和姿态估计被重置为零。kalman滤波估计的加速度计误差

haode90的博客 8104

耦合,紧耦合,松耦合,解耦

一、耦合 耦合是两个或多个模块之间的相互关联。在软件工程中,两个模块之间的耦合度越高,维护成本越高。因此,在系统架构的设计过程中,应减少各个模块之间的耦合度,以提高应用的可维护性。 二、紧耦合 紧耦合架构本质是Client/Server的模型,如下图所示: 优点是:架构简单、设计简单、开发周期短、能够快速的开发、投入、部署、应用。 但随着集群规模的扩大,系统的稳定性逐渐变差,主要原因如下: 1、...

宫凯宁的博客 1万+

SLAM面试笔记(3) - 视觉SLAM

SLAM面试笔记,持续更新中!

几度春风里的博客 4105

【通信协议-RTCM】MSM语句(1) - 多信号GNSS观测数据消息格式

注释:RTCM响应消息1020为GLONASS星历信息,暂不介绍,前公司暂未研发RTCM消息类型版本的DR/RTK模块,DR/RTK模块仅NMEA消息类型使用注释:公司使用的多信号语句类型为MSM4&MSM7,也应该是运用最广泛的语句类型,例如本人之前在公司开发的工具全是基于MSM7语句类型来进行的。

qxj2422640226的博客 2086

松耦合通俗解释

松耦合: loose coupling. 英英解释: a device for connecting parts of machinery. coupling的同义词 link, join, tie。 注意tie有绑的意思。 不管是松耦合还是紧耦合。 两者都是有联系的。 紧耦合可以两个人绑在了一起, 行动起来相互限制。 两个人最好都别动。 松耦合可以比喻为两个人结队行动。 但是没有绳...

u013985241的博客 2万+

1、Ovirt 开源虚拟化平台安装

Ovirt虚拟化Node和Engine安装

大鱼 6260

高精度组合导航里的松、紧、深耦合

交流群 | 进“滑板底盘群”请加微信号:xsh041388交流群 |进“域控制器群”请加微信号:ckc1087备注信息:滑板底盘/域控制器+真实姓名、公司、岗位高精度定位,是自动驾驶车辆一切丰满理想实现的前提。它用于判断自动驾驶功能是否处于可激活的设计运行条件内;它用于支撑自动驾驶车辆的全局路径规划;它用于辅助自动驾驶车辆的变道、避障策略。不同的场景特点、不同的驾驶自动...

jiuzhang_0402的博客 2150

GR00TN1.7国内本地下载+模型下在+hugingface无法连接,本地模型下载

GR00TN1.7

alsj123456的博客 90

『与善仁』Appium基础 — 19、元素定位工具之UI Automator Viewer

文章目录(一)uiautomatorviewer定位工具1、uiautomatorviewer介绍2、uiautomatorviewer工具打开方式3、uiautomatorviewer布局介绍4、uiautomatorviewer工具的使用 之前我们在做web页面自动化的时候就说过,元素定位是页面自动化的第一步。 同理App自动化测试的第一步,也是元素的定位。 在APP中定位元素的话,需要借助一些元素定位工具。 APP中的元素定位工具大致有三种: uiautomatorviewer Appium Ins

繁华似锦Fighting 1512

GNSS/INS组合导航(八):INS/GPS组合导航

INS/GPS组合导航 对比INS与GPS导航方法,二者都有其各自的优缺点。 惯性导航系统INS是一种全自主的导航系统,可以输出超过200Hz的高频信号,并且具有较高的短期测量精度。除了提供位置与速度之外还可以提供姿态信息。但由于算法内部存在积分,惯性传感器的误差会不断累积,使得长期导航误差无限制增长。 与INS相反,GPS具有良好的长期精度,导航误差大致为几米,设备成本低于100美元。但是,它短期精度与输出频率较低。一个常规的GPS接收机通常无法提供姿态信息,除非采用一些额外的硬件或软件。此外,全球卫星

努力努力努力 1万+

Cesium实战:如何在前端直接渲染TIFF影像(附完整代码与避坑指南)

本文详细介绍了如何在前端利用Cesium直接加载和渲染TIFF影像的完整技术方案。针对TIFF格式的地理影像数据,文章提供了从文件解析、坐标转换到像素处理与Cesium集成的全流程代码实现,并分享了性能优化与常见问题的避坑指南,帮助开发者高效实现三维地理可视化。

weixin_29290947的博客 310

【组合导航之不同组合模式(松组合/紧组合/深组合)的特点及优势?】

SINS(捷联惯导系统)与GNSS(全球卫星导航系统)的结合展现出了优势互补的特性。通过合理的集成方式能够克服它们各自的局限性,实现比单独使用时更高的导航精度。根据应用要求及参与组合观测量的深度,SINS/GNSS/组合导航可以分为松组合、紧组合和深组合(超紧组合)三种组合模式,下面简要概述三种模式的特点,以及各自的优缺点。

qq_45976653的博客 2180

布尔可满足性问题(SAT)深度研究

布尔可满足性问题(Boolean Satisfiability Problem, SAT)是计算机科学和数理逻辑中的一个核心决策问题。其定义为:对于一个给定的布尔逻辑公式,判断是否存在一组对其变量的真值赋值(即,为每个变量指定真 (True) 或假 (False)),使得该公式的最终计算结果为真。如果存在这样的赋值,则称该布尔公式是可满足的 (satisfiable);否则,称其为不可满足的 (unsatisfiable)。

步子哥的博客 484

UWB:FiRa Consortium UCI Generic Technical Specification v1.1.0(1)- UCI架构和通用数据包头

如果大家学习过WiFi的SPEC,比如从我的资源里面下载 IEEE 802.11-2007,应该很容易发现,FiRa的spec定义实在是太差了。有现成的好例子不学,非得自己来一套,搞一堆新的名词,其实都是一个意思。比如GID,OID等,而且GID、OID是最先出现的,但是对应表格 还得去附件的最后一项去找。 FiRa是UWB联盟,希望跟WIFi联盟学习一下,把UWB做大做强,而不是自成一派,自命不凡。

Ankie资深技术项目经理 2426

从零入门激光SLAM(十九)——松耦合与紧耦合到底怎么区分

随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激光SLAM,也方便想入门SLAM的同学和小白学习参考,相信看完会有一定的收获。如有不对的地方欢迎指出,欢迎各位大佬交流讨论,一起进步。博主创建了一个科研互助群,欢迎大家加入讨论。

HUASHUDEYANJING的博客 5654

【01】Python解释器的安装

工欲善其事必先利其器。君欲学PYthon,则必先安装Python解释器。安装过程相对简单,大致跟着如下步骤走即可。

侯小啾技术博客 1252

国内首款软、硬件开源GNSS/INS组合导航开发平台(一)

RTK、GNSS、INS、组合导航、开源算法

weixin_46591153的博客 4039

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

组合导航系统:GNSS+INS组合导航耦合方式深度解析

摘要:GNSS/INS组合导航系统根据耦合深度分为松耦合、紧耦合和深耦合三种方式。松耦合在位置/速度层面融合GNSS输出与INS数据,实现简单但对GNSS依赖性强;紧耦合直接利用GNSS原始观测值(伪距、多普勒频移)与INS深度融合,提升弱信号环境下的性能;深耦合则深入到GNSS接收机信号跟踪环节,效果最优但实现复杂。不同耦合方式的选择取决于对精度、稳定性和实现难度的权衡,其中紧耦合和深耦合在遮挡环境下表现更优。

嵌入山脊的博客 4466

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

高精度组合导航系统:深耦合与松耦合技术的对比与选择指南

本文深入解析了高精度组合导航系统中深耦合与松耦合两种核心技术的原理、性能差异与适用场景。通过对比分析,为自动驾驶、无人机、测绘等领域的开发者提供了清晰的选型指南,帮助其在复杂环境下实现连续、稳定且高精度的定位,并强调了高精度定位在组合导航中的核心价值。

game4的博客 184

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

组合导航(九):INS/GPS紧耦合与松耦合的实战对比与选型指南

本文深入对比了INS/GPS组合导航中紧耦合与松耦合两种架构的实战差异。松耦合实现简单、调试方便,但依赖GPS有效输出,在弱信号环境下易失效;紧耦合直接融合原始观测数据,在卫星数不足时仍能工作,复杂环境下鲁棒性与精度优势显著,但实现复杂度高。文章结合具体场景与性能数据,为无人机、自动驾驶等高精度导航应用的架构选型提供了清晰指南。

rice5的博客 546

GNSS/INS紧组合和松组合的区别 [学习笔记]

它们的区别主要在于数据融合方式、计算复杂度、性能以及适用场景。

rygwang的博客 2137

从松耦合到紧耦合:IMU与GPS融合导航的进阶之路

本文深入探讨了IMU与GPS从松耦合到紧耦合的数据融合进阶之路。松耦合结构简单但依赖完整GPS信号,在复杂环境中易失效;而紧耦合通过直接融合原始观测数据,显著提升在信号遮挡环境下的导航可靠性与精度,是应对城市峡谷、隧道等挑战的关键技术。

509
上一篇: 自动驾驶高精定位
下一篇: 超像素分割
瞻邈
博客等级 码龄11年 2548粉丝 630原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值