2016 - 2024

感恩一路有你

matlab怎么画地图底图详细步骤 研究SLAM,对编程的要求有多高?

浏览量:4572 时间:2023-04-02 11:33:30 作者:采采

研究SLAM,对编程的要求有多高?

说到SLAM,很多人会提到MATLAB。主要是因为大部分人都是在本科阶段接触MATLAB,所以希望在以后的SLAM学习中用到。

MATLAB确实有很多优点:语法简单,开发速度快,调试方便,功能丰富。但是在SLAM领域,MATLAB的缺点也很明显,主要是这三个:

1.你需要正版软件(你可以 t在真机上安装一个盗版的MATLAB

2.操作效率不高;

3.需要一个巨大的安装包。

另一方面,C的优势在于直接使用,运行效率高,但开发速度和调试比MATLAB慢。

但是光是运行效率就足以让很多SLAM方案选择C作为开发语言,因为运行效率真的很重要。

同样的算法,如果它能 MATLAB写的不能实时,但是C写的可以实时,你说哪个?

当然,MATLAB也有一些用处。我看过一些SLAM相关的公开课,让学生用MATLAB做仿真,交作业。这个没问题,比如SLAM工具箱。

同样,类似于MATLAB的Python(和octave)也经常这样使用。它们的快速发展带来了很多便利。当你想验证一些数学理论和想法的时候,这些都是很好的工具。It 掌握MATLAB和Python是很棒的。

但是说到实用性,你会发现几乎所有的方案都在用c .因为运行效率是如此的重要。

好吧,既然有心学MATLAB,为什么不学好C呢?

让 让我们谈谈C将学到多少。

在程序员 s的话,C语言比较特殊。你可以说你精通Java,但千万不要说你精通C,C非常博大精深,有数不清的特点,而且会随着时间不断变化更新。然而,大多数人不。;不需要学习所有的C特性,因为很多东西永远不会用到。

作为SLAM的研究人员,我们主要面对的是算法的开发,所以我们更关心的是如何有效的实现各种相关算法。另一方面,那些复杂的软件架构和设计模式,我个人认为在SLAM中起次要作用。毕竟使用SLAM的目的是计算位置,构建地图,而不是编写一个可以自动更新,具有多人在线对战功能的机器人战争平台。

你的主要精力可能花在矩阵运算、分块、实现非线性优化和图像处理上;你可能对并发、指令集加速、GPU加速等主题感兴趣。,或者可以花点时间学习;你也可以使用模板来扩展你的算法,或者你也可以试一试。

相应的,很多功能性的东西,比如UI,网络通讯等。,用的时候不妨摸一下。但是当你专注于SLAM的时候,你不会 我不需要专门学习。

说了这么多,SLAM要求的C级一般比你在书上看到的那些样例代码要高。因为那些代码是作者用来给初学者介绍语法的,所以会尽量简单。实际的代码往往结合了各种奇怪的技能,乍一看会显得深不可测。

地理对话

学习SLAM对编程的要求有多高?半闲散俗人2016-11-22 19 :16

说到SLAM,很多人会提到MATLAB。主要是因为大部分人都是在本科阶段接触MATLAB,所以希望在以后的SLAM学习中用到。

MATLAB确实有很多优点:语法简单,开发速度快,调试方便,功能丰富。但是在SLAM领域,MATLAB的缺点也很明显,主要是这三个:

1.你需要正版软件(你可以 t在真机上安装一个盗版的MATLAB

2.操作效率不高;

3.需要一个巨大的安装包。

另一方面,C的优势在于直接使用,运行效率高,但开发速度和调试比MATLAB慢。

但是光是运行效率就足以让很多SLAM方案选择C作为开发语言,因为运行效率真的很重要。

同样的算法,如果它能 MATLAB写的不能实时,但是C写的可以实时,你说哪个?

当然,MATLAB也有一些用处。我看过一些SLAM相关的公开课,让学生用MATLAB做仿真,交作业。这个没问题,比如SLAM工具箱。

同样,类似于MATLAB的Python(和octave)也经常这样使用。它们的快速发展带来了很多便利。当你想验证一些数学理论和想法的时候,这些都是很好的工具。It 掌握MATLAB和Python是很棒的。

但是说到实用性,你会发现几乎所有的方案都在用c .因为运行效率是如此的重要。

好吧,既然有心学MATLAB,为什么不学好C呢?

让 让我们谈谈C将学到多少。

在程序员 s的话,C语言比较特殊。你可以说你精通Java,但千万不要说你精通C,C非常博大精深,有数不清的特点,而且会随着时间不断变化更新。然而,大多数人不。;不需要学习所有的C特性,因为很多东西永远不会用到。

作为SLAM的研究人员,我们主要面对的是算法的开发,所以我们更关心的是如何有效的实现各种相关算法。另一方面,那些复杂的软件架构和设计模式,我个人认为在SLAM中起次要作用。毕竟SLAM的目的是计算一个位置,然后建造它。这个地图不是要写一个可以自动更新,具有多人在线对战功能的机器人战争平台。

你的主要精力可能花在矩阵运算、分块、实现非线性优化和图像处理上;你可能对并发、指令集加速、GPU加速等主题感兴趣。,或者可以花点时间学习;你也可以使用模板来扩展你的算法,或者你也可以试一试。

相应的,很多功能性的东西,比如UI,网络通讯等。,当你使用它们时可能会被触动,但你不会。;当你专注于SLAM时,你不必特别研究它们。

说了这么多,SLAM要求的C级一般比你在书上看到的那些样例代码要高。因为那些代码是作者用来给初学者介绍语法的,所以会尽量简单。实际的代码往往结合了各种奇怪的技能,乍一看会显得深不可测。比如你在课本上读到的是这样的:

int main ( int argc,char** argv)

{

vectorltstringgt vec

vec.push_back(abc)

for ( int i0 () i)

{

// ...

}

返回0

}

你看《C Primer Plus》的时候,觉得C也不过如此,没有什么特别难懂的地方。然而,实际的代码是这样的:

嵌套模板类(g2o中的块求解器):

g 2 o: :blocksolv: :blocksolv:lin: :lin: :blocksolvertlt g 2 oecho-@ . com :blocksolverlt g 2 oech 23-@ . com :blocksolvertraitslt 3,1gt gt(linear solver)g 2 oech 25-@ . com :optimizationalgorithmlevenberg * solver new g 2 oech 27-@ . com :optimizationalgorithmlevenberg(solver _ ptr)g 2 oech 29-@ com

模板元素(从ceres自动派生):

虚拟bool Evaluate(双常量*常量*参数,

双*残差,

double * * Jacobian)const {

如果(!雅各宾派){

r: :variadicevaluatelt

CostFunctor,doubl:: call(* functor _,参数,残差)

}

r::autodiffltcostfunctor,doubl:: differential(

*函子_,

参数,

SizedCostFunctionltkNumR:: num _ residuals(),

残差,

雅各布)}

C11项新功能(来自SVO功能提取部分)

void fram::s:: for _ each(FTS _。b:: updateseed(const float x,const float tau2,Seed* seed){

float norm _ scal::is nan(norm _ scal: : math: : normal _ distributionltfloatgt nd(seed-gtmu,norm_scale)

浮动s2 1。/(1./seed-gtsigma2 1。/tau2)

浮点m s2*(种子-gtmu/种子-gtsigma2 x/tau2)

浮动C1 s:: math::pdf(nd,x)

浮动C2种子-gtb/(种子-gta种子-gtb) * 1。/seed-gtz_range

浮点归一化_常数C1 C2

C1 /归一化_常数

C2 /正常化_公司nstant

浮动f C1*(种子-gta 1。)/(种子-gta种子-gtb 1。)C2*seed-gta/(seed-gta seed-gtb 1。)

浮动e C1*(种子-gta 1。)*(种子-gta 2。)/((种子-gta种子-gtb 1)。)*(种子-gta种子-gtb 2。))

C2 * seed-GTA *(seed-GTA 1.0f)/((seed-GTA seed-gtb 1.0f)*(seed-GTA seed-gtb 2.0f))

//更新参数

浮动管理部门_新C1 * C2 * seed-gtmu

种子-gtsigma2 C1*(s2 m*m) C2*(种子-gtsigma2种子-gtmu *种子-gtmu) - mu_new*mu_new

seed-gtmu mu_new

seed-gta(英-法)/(法-英/法)

seed-gtb seed-gta*(1.0f-f)/f}

我不 我不知道你看到这些代码的感受,但我当时的内心感受是:这怎么和课本上的完全不一样?而且研究了很久,发现人其实是对的!

[我 我不太会发表情。无论如何,它 it'下定决心对你有好处

总之,C的水平要求应该在课本之上。而且,这种水平的提高,大多是建立在不断看别人的过程 s代码和编写您自己的代码。是反复练习的,不仅仅是看书。特别是对于视觉SLAM问题,很多时候你可以 不要根据论文实现一套方案,这很大程度上取决于你的理论和代码技能。

所以,请尽快开始学习C,使用C,这才是学习SLAM的正确方法。

唐 不要在你的舒适区里犹豫太久,所以没有进步。(同样适用于想学SLAM但是不 我不想学Linux。)

关于闭环检测的库,稍微列举几个。

1.DBoW系列

TRO12的一篇文章,其中使用了k-means训练的字典树。它与OpenCV结合紧密,原理相对简单。

GitHub-dorian3d/DBoW2:增强的C语言层次词库()

GitHub-rmsalinas/DBow3: dbo w2的改进版本

()

2.FABMAP系列

周柳树,康明斯系列论文。作者自己提供了一个开源版本,有人在OpenCV中实现了一个,所以一共两种。

FabMap原始(~)

OpenCV:OpenFABMAP

()

3.DLoopDetector

基于DBoW2()开发的循环检测库

建议从DBoW2或DBoW3开始。原理和实现都比较简单,效果不错。

matlab与stk怎么连?

步骤:

1.确保matlab是32位的;

2.在 "安装路径agistk9in "

SLAM 种子 MATLAB 代码

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。