现在的SLAM算法在静态环境中表现良好,但在动态环境中很容易失败。最近的工作将基于深度学习的语义信息引入到SLAM系统以减轻动态对象的影响。然而,在资源受限的机器人的动态环境中应用鲁棒定位仍然具有挑战性。所以《RGB-D Inertial Odometry for a Resource-Restricted Robot in Dynamic Environments》提出了一种用于动态环境下资源受限机器人的实时RGB-D惯性里程计系统-Dynamic-VINS。系统包含三个主要并行运行的线程:目标检测、特征跟踪和状态优化。这里作者放出了Github代码。Dynamic-VINS采用基于网格的特征检测方法,提出了一种快速、高效的提取高质量FAST特征点的方法。应用IMU来预测运动,进行特征跟踪以及运动一致性检测。近年来,他们的实验室也在这方面做出了很多的贡献。这里CSDN上传空间有限,所以各位想看的直接去IEEE官网看即可。其方法和Github上的YOLO-DynaSLAM差异不大。但是效率更高。
RGB-D Inertial Odometry for a Resource-restricted Robot in Dynamic Environments
本文提出一种动态环境下资源受限机器人的实时RGB-D惯性里程计(dynamic - vins)。它使边缘计算设备能够以较小的计算负担为移动平台提供即时鲁棒的状态反馈。一种不需要高精度深度相机的高效动态特征识别模块可用于配备深度测量模块的移动设备。本文的主要贡献如下:
本文介绍的算法是基于VINS-Mono[2]和VINS-RGBD[25]对提出的SLAM系统进行了扩展;我们的框架如图1所示,主要贡献点的模块用不同的颜色突出显示。为了提高效率,Dynamic-VINS中有三个主线(由虚线包围)并行运行:目标检测、特征跟踪和状态优化。彩色图像被传递给目标检测线程和特征跟踪线程。对连续两帧之间的IMU测量值进行[26]预积分,用于特征跟踪、运动一致性检查和状态优化。

在特征跟踪线程中,利用IMU预积分实现特征跟踪,并通过基于网格的特征检测实现特征检测。对象检测线程实时检测每帧中的动态对象。然后,状态优化线程汇总特征信息、目标检测结果和深度图像来识别动态特征;针对漏检情况进行漏检补偿模块。运动一致性检测过程结合IMU预积分和历史位姿估计结果识别潜在动态特征。最后,利用稳定特征和IMU预积分结果进行姿态估计。IMU的传播产生IMU率的姿态估计结果。该系统也支持闭环,但重点关注与闭环无关的局部化。
对于每幅输入图像,使用KLT稀疏光流方法[27]跟踪特征点;利用帧间IMU测量值预测特征点的运动。通过减少光流金字塔层数,提供更好的特征初始位置估计,提高特征跟踪效率。它能有效地去除噪声等不稳定特征和运动不一致的动态特征。基本思想如图2所示(这部分类似vins的操作)。

在前一帧中,稳定的特征被标记为红色,新检测到的特征被标记为蓝色。当当前帧到达时,使用当前帧和前一帧之间的IMU测量值来预测当前帧中的特征位置(绿色)。光流将预测的特征位置作为初始位置,在当前帧中寻找匹配的特征。成功跟踪的特征被标记为红色,而失败的特征被标记为不稳定特征(紫色)。为避免特征检测的重复和聚合,设置以稳定特征为中心的橙色圆形掩模;将不稳定特征所在区域视为不稳定特征检测区域,并用紫色圆形掩码以避免不稳定特征检测。
根据掩码,从当前帧的未掩码区域检测到新的特征,并将其着色为蓝色。上述方法可以获得均匀分布的特征,捕捉综合约束,避免在模糊或弱纹理区域重复提取不稳定特征。长期的特征跟踪可以在接下来的基于网格的特征检测中减少时间消耗。
系统保持最小数量的特性以保持稳定性。因此,需要不断地从帧中提取特征点。采用基于网格的特征检测方法。将图像划分为网格,对每个网格的边界进行填充,以防止忽略网格边缘的特征;填充使当前网格能够获得用于特征检测的相邻像素信息。与遍历整个图像进行特征检测不同,只有特征匹配不足的网格才进行特征检测。对于纹理弱而未能检测到特征或被蒙版覆盖的网格单元,将在下一帧检测中跳过,避免重复无用检测。采用线程池技术来提高基于网格的特征检测的并行性能。因此,特征检测的时间消耗显著减少,且没有损失。
快速特征检测器[28]可以高效地提取特征点,但容易将噪声作为特征,提取相似的聚类特征。因此,结合第III-A节的mask和非极大值抑制的思想,选择高质量且均匀分布的快速特征。
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame
嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
有没有办法在Ruby中动态创建数组?例如,假设我想遍历用户输入的书籍数组:books=gets.chomp用户输入:"TheGreatGatsby,CrimeandPunishment,Dracula,Fahrenheit451,PrideandPrejudice,SenseandSensibility,Slaughterhouse-Five,TheAdventuresofHuckleberryFinn"我把它变成一个数组:books_array=books.split(",")现在,对于用户输入的每一本书,我想用Ruby创建一个数组。伪代码来做到这一点:x=0books_array.
我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO
首先,我使用的是rails3.1.3和来自master的carrierwavegithub仓库的分支。我使用after_init钩子(Hook)来确定基于属性的字段页面模型实例并为这些字段定义属性访问器将值存储在序列化哈希中(希望它清楚我是什么谈论)。这是我正在做的事情的精简版:classPage省略mount_uploader命令让我可以访问我想要的属性。但是当我安装uploader时出现错误消息说“nil类的未定义新方法”我在源代码中读到有方法read_uploader和扩展模块中的write_uploader。我如何必须覆盖这些来制作mount_uploader命令使用我的“虚拟
我正在尝试动态构建一个多维数组。我想要的基本上是这样的(为简单起见写出来):b=0test=[[]]test[b]这给了我错误:NoMethodError:undefinedmethod`test=[[],[],[]]而且它工作正常,但在我的实际使用中,我不会事先知道需要多少个数组。有一个更好的方法吗?谢谢 最佳答案 不需要像您正在使用的索引变量。只需将每个数组附加到您的test数组:irb>test=[]=>[]irb>test[["a","b","c"]]irb>test[["a","b","c"],["d","e","f"]]
如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail
如何在对象上调用方法名称的嵌套哈希?例如,给定以下哈希:hash={:a=>{:b=>{:c=>:d}}}我想创建一个方法,给定上面的散列,执行以下操作:object.send(:a).send(:b).send(:c).send(:d)我的想法是我需要从一个未知的关联中获取一个特定的属性(这个方法不知道,但程序员知道)。我希望能够指定一个方法链来以嵌套哈希的形式检索该属性。例如:hash={:manufacturer=>{:addresses=>{:first=>:postal_code}}}car.execute_method_hash(hash)=>90210