11月学习总结

因子图优化

贝叶斯网络

贝叶斯网络是种概率图,由随机变量节点和表达随机变量条件独立性的边组成,形成一个有向无环图。在 SLAM 中,由于我们有运动方程和观测方程,它们恰好表示了状态变量之间的条件概率,故SLAM 可以自然地表达成一个动态贝叶斯网络(Dynamic Bayes Network, DBN).下图是slam问题的贝叶斯网络表示:
在这里插入图片描述
从图中可以看出节点间存在着条件关系,z是由三维点和位姿产生的观测点,x基于上一时刻位姿和输入推出。随意贝叶斯网络计算位姿的根本问题就是,通过改变变量的取值,使得位姿后验概率达到最大。

因子图

贝叶斯网络是一个有向无环图,因子图是一种无向图,由两种节点组成:表示优化变量的变量节点,以及表示因子的因子节点。当使用于slam中用因子图表示时如下图所示。
在这里插入图片描述
这里圆圈是变量节点,需要进行优化。

但是对于因子图优化存在着和其他优化同样的问题,不能实现实时的全局优化,将优化结果返回前端,减小定位误差。
目前常见的解决方法有,构建局部地图,将新加入的帧影响到的局部地图进行局部优化。但是没有利用全部的帧,这会不会影响最终的运算结果,局部地图的选取是否合理,仍是个问题。
所以为了解决这一问题,提出了增量式优化的思想,该思想在从网上资料可知,有很多实现的方式,最简洁的有,提出一个固定的帧数n,因为当前位姿只受前n帧的数据影响,进行局部BA优化。有基于概率论的方法,根据贝叶斯树确定每一帧对于当前帧位姿的影响程度,选取概率阈值筛取帧,进行优化局部优化。以上两种方法都是利用部分帧,目前还有一种思想,利用全部的帧进行,但是在构造优化过程中的正规方程舒尔补方程时,为了减小计算量,设定以上二者改变的阈值,当其小于一定值时,则不对矩阵更新,利用了全部帧的数据,但是仍可以达到实时的计算效率。
以上处理方法都对数据有着一定的约减,所以最终的运行结果受应用场景影响较大,很难说明哪个更好。
为了更好了理解增量式优化,对于gtsam框架进行一定的了解。

gtsam

gtsam是基于因子图的C++库。
在这里插入图片描述
上图中的因子图由三步的隐马尔可夫模型组成。
黑块表示的就是因子,因子类似于一个函数,它依赖于连接的变量。
注:隐马尔可夫模型
隐马尔可夫模型 (Hidden Markov Model) 是一种统计模型,用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步的分析。
对 HMM 来说,有如下三个重要假设,尽管这些假设是不现实的。
  假设1:马尔可夫假设(状态构成一阶马尔可夫链)
  假设2:不动性假设(状态与具体时间无关)
  假设3:输出独立性假设(输出仅与当前状态有关)
详细可查阅下面的帖子。
隐马尔可夫模型(HMM)

gtsam例子

在这里插入图片描述
如上图所示,该模型中有一元因子和二元因子,一元因子被称为先验。o是来自里程计的观测值,根据观测值确定变量值。
该模型是基于二维平面的。

//创建一个空的非线性因子图
NonlinearFactorGraph graph;

// 添加一个高斯先验x_1
//Pose2 表示的是在一维平面里的旋转和二维平移量,组成了一个三维的变量
Pose2 priorMean(0.0, 0.0, 0.0);
noiseModel::Diagonal::shared_ptr priorNoise =
  noiseModel::Diagonal::Sigmas(Vector3(0.3, 0.3, 0.1));
//加入噪声,对角线高斯模型0.3m,0.1弧度
graph.add(PriorFactor<Pose2>(1, priorMean, priorNoise));

//添加两个里程因子
//也就是里程计观测到的位姿值
Pose2 odometry(2.0, 0.0, 0.0);
noiseModel::Diagonal::shared_ptr odometryNoise =
  noiseModel::Diagonal::Sigmas(Vector3(0.2, 0.2, 0.1));
//前两个变量指的是图中的变量序号
graph.add(BetweenFactor<Pose2>(1, 2, odometry, odometryNoise));
graph.add(BetweenFactor<Pose2>(2, 3, odometry, odometryNoise));

因子图通过练习概率,联系了整个轨迹。

//加入初始的位姿变量值
Values initial;
initial.insert(1, Pose2(0.5, 0.0, 0.2));
initial.insert(2, Pose2(2.3, 0.1, -0.2));
initial.insert(3, Pose2(4.1, 0.1, 0.1));

//使用非线性优化器进行优化
Values result = LevenbergMarquardtOptimizer(graph, initial).optimize();

得到优化后的输出值

Initial Estimate:
Values with 3 values:
Value 1: (0.5, 0, 0.2)
Value 2: (2.3, 0.1, -0.2)
Value 3: (4.1, 0.1, 0.1)

Final Result:
Values with 3 values:
Value 1: (-1.8e-16, 8.7e-18, -9.1e-19)
Value 2: (2, 7.4e-18, -2.5e-18)
Value 3: (4, -1.8e-18, -3.1e-18)

新概念飞行器

概念

众所周知,创新是事物发展的源动力,伴随着科技的不断进步和发展的推动,以及人们对高精尖飞行器的需求为牵引,促使了新概念飞行器的诞生。概念创新是未来各行业领军人士不可或缺的杀手锏。所谓新概念飞行器,即集空天、仿生、绿色、变体于一身的尚处于探索和研发状态的一类飞行器。新概念飞行器成为了人们探索空天领域,促进飞行相关事业发展的灵魂,是国内外争相研究的热点问题。

对比

新概念飞行器与传统飞行器相比在设计上,其飞行原理以及气动布局等方面有较大的提升,如果用时代性、节能性、作战性等词语来形容最为贴切。具体表现为以下几个方面:噪声污染、废气排放控制、气动一体化设计等方面均可应用于大型客机设计以及新一代环保型超声速客机的设计,使其在环保性方面突出优势;而高生存性综合设计方法则可用于大型军用运输机和第六代战斗机的设计,为提高其作战能效奠定基础;对于一些极端隐身性技术、远航程及超常续航能力方面的设计方法可用于先进布局无人机、高空长航时无人机设计;宽包络、多任务一体化设计将为设计适应性更强的高超声速飞行器模型提供保障,可用于吸气式和超高速飞行器的设计。简言之,新概念飞行器将具有高复杂性、高精密性、高先进性,其综合设计的方法将在现有多学科设计的基础上,向高度协同与学科耦合设计的方向发展。

国内外实例

在这里插入图片描述
有南安普敦大学机械学博士设计的Super B,该设计具有很好地避障能力。此凉席无人机的旋翼旋转面和车轮所在平面相互垂直,且四个机臂上各放置驱动车轮的电机,同时又构成一个四旋翼式飞行器,用来控制无人机飞行。其在车轮也采用了柔性塑料,具有很好地缓冲作用,即使车轮在坠落时受到冲击也不致损坏。

在这里插入图片描述
智能概念车POP.Up。这是由三个模块组成的交通系统,分别有车辆底盘、成员胶囊、无人机模块、它们可相互独立也可互相适配,是一款高效率、模块化、全电动、零排放的概念车。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java JDK 11是Java开发工具包的一个版本,是由Oracle公司研发和发布的。JDK(Java Development Kit)是一个用于开发和编译Java程序的软件包,它提供了Java语言的开发环境和一系列的工具。JDK 11是Java的最新版本,于2018年9发布。 JDK 11带来了许多新的特性和改进。其中一项重要的改变是,JDK 11中引入了模块化系统,即Java平台模块系统(JPMS)。该系统可以帮助开发者更好地管理和组织Java代码和依赖项。另一个重要的改进是JVM性能的提升,包括更快的启动时间和更低的内存占用。 除了这些改进,JDK 11还包含了一些新的API和功能,如HTTP Client API、新的垃圾收集器(ZGC)和低延迟的垃圾收集器(Shenandoah GC),以及对Unicode 10.0的支持。 CSDN是一个知名的IT技术社区和博客网站。它为开发者提供了大量的技术文章、博客、教程等资源。在CSDN上,你可以找到关于Java JDK 11的各种教程、问题解答、开发经验分享等内容。同时,CSDN还提供了很多其他与Java开发相关的资源,如Java框架、库、工具等的介绍和下载链接。 总结来说,Java JDK 11是Java开发工具包的一个版本,它带来了许多新的特性和改进。而CSDN是一个IT技术社区和博客网站,为开发者提供了很多与Java开发相关的资源。通过CSDN,你可以获取到关于Java JDK 11的各种教程和知识。 ### 回答2: Java JDK 11是Java开发工具包的最新版本,JDK是Java Development Kit的缩写,是开发Java应用程序所需的软件包。JDK 11具有许多新功能和改进,为Java开发者提供更好的工具和性能。 其中一个重要的新功能是模块系统的引入。模块系统允许开发者将代码划分为独立的模块,以提高代码的可重用性和维护性。这种模块化方法有助于构建更可靠和安全的应用程序。 此外,JDK 11还引入了新的语言特性和API。其中包括Lambda表达式的增强、局部变量类型推断和字符串API的改进。这些特性使得Java编程更加简洁和高效。 JDK 11还包含了Java Flight Recorder(JFR)的开源版本。JFR是一种强大的性能分析工具,可以实时监测和记录Java应用程序的性能指标。这使得开发者可以更好地识别和解决性能问题。 此外,JDK 11还具有增强的安全性和可扩展性。它支持TLS 1.3,这是一种更安全的网络协议。此外,JDK 11还提供了更好的内存管理和垃圾回收机制。 CSDN是中国最大的IT社区和技术交流平台。许多Java开发者在CSDN上分享他们的经验和知识。在CSDN上,你可以找到大量关于Java JDK 11的文章和教程,以帮助你学习和掌握JDK 11的新功能和用法。 总结来说,Java JDK 11是一个强大而且功能丰富的开发工具包,它提供了许多新功能和改进,使得Java的开发更加简便和高效。CSDN是一个优秀的资源平台,可以帮助开发者更好地学习和应用JDK 11

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值