SLAM从入门到精通(开始篇)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

很多同学喜欢学习linux,但是他们只是把linux当成是一个嵌入式技术在学习,而不是当成工具在使用。平时,要么是自己做板子,要么是烧入别人的固件,要么就是不停折腾驱动和kernel。我的建议是,不妨找一个linux或者rtos擅长的行业去深挖,在精进自己技术的同时,还能发现行业的需求,结合自己以往的经验,开发出满足市场的产品,这样也能有一定的回报,形成正向循环。类似的场景其实很多,比如医疗电子、运动控制、图像处理、机器人等等。

slam就是这样一个比较适合linux应用的场合,它的全程是simultaneous localization and mapping。换成大白话,就是边定位、边制图。听着有些扯,但是确实是这么做的。学习slam有很多的方法,每个人都有自己的路径,不妨试试下面这个方法,

1、安装虚拟linux

对于slam来说,linux几乎说是标配。然而,目前大家工作电脑安装的OS几乎都是windows,所以这个时候建议大家可以安装一个virtual box虚拟机。在虚拟机中安装一个linux版本即可。现在比较流行的是linux发行版是ubuntu,可以选一个近期发布的ubuntu使用,但又不是最新的版本,比如ubuntu 20.04就可以。

2、学好c++

关于slam这一块,要真正在产品上用起来,ros这一块是逃不了的。ros本身用的是c++,所以我们得学好c++。当然,也有人说,ros也支持python。但是工业上部署和运行,没有python一说,这是需要注意的。目前c++版本很多,c++11、c++17等等,建议还是学习经典的c++语法就好。

3、用好ros,但这是起步

ros是个好东西,对于学习机器人的同学来说,它几乎是标配。有了它,大家只需要关注在算法等创新领域。此外ros里面有现成的模块、框架和成熟算法代码,但是离产品本身还有很大的差距。但是,只是会对ros算法调参,这是远远不够的。很多人学习ros,到最后把自己搞成了调参和标定工程师,这反而得不偿失了。

4、阅读paper、编写新的算法

很多时候,ros里面的算法并不能解决实际场景的问题。举个例子,客户的场景有可能地面是不平的、自然光是不满足计算机视觉要求的、cpu性能也无法满足实时性的。这上面的问题都很有代表性,所以靠ros调参,或许可以做一个demo,但是没有办法做一个产品。

5、模块优化的能力

优化分成两个方面,一个方面是软件,比如参数标定、上位机编写、先验知识添加、多传感器融合等等,这些都算;另外一方面是硬件,比如说算法加速,fpga加速、gpu加速等等,这些也算。甚至为了提高效率,魔改linux kernel都是有可能的。

6、自己编写驱动

ros驱动和普通的驱动不一样,其实的大部分还是以协议适配为主,包括usb、can、232、485、ethernet等各种接口的协议适配。这和linux下面的kernel驱动还是不一样的。

7、了解和掌握底盘

从输入、输出的角度看,slam只是机器人的一个模块,定位和地图做好后,本质还是要为机器人服务的。所以,在做好了ros仿真之后,下一步就可以了解下机器人的底盘,单轮、双轮、三轮、四轮、六轮等各种运动底盘,这里面大部分用的都是mcu,控制算法以pid和mpc为主,了解一下我们的控制目标,对于理解整个slam框架很有帮助。

8、提高数学能力

所谓数学能力,主要是和slam相关的一些数学库或者优化库,比如eigen、sophus、ceres、g2o等等,扩展的一些应用库,比如opencv、pcl点云库这些,最好也要看看。有一本书《视觉slam十四讲》,上面谈到了很多的数学,用作自己平时资料查询,十分有必要。

9、有个实际的项目推动

学习一个东西本身能够长久,关键还是要有一个项目能够做长期支撑为好。因为,有的时候学习总是枯燥无聊的,会遇到很多的问题,如果没有一个真实的需求做依靠的话,很容易中途放弃的。

相关推荐
火龙kess1 小时前
使用FreeNAS软件部署ISCSI的SAN架构存储(IP-SAN)练习题
linux·运维·服务器·网络·windows·tcp/ip·架构
huapiaoy1 小时前
JavaSE---String(含一些源码)
java·linux·前端
云计算DevOps-韩老师2 小时前
【网络云计算】2024第52周-每日【2024/12/23】小测-理论&实操-解析
linux·运维·服务器·开发语言·网络·云计算·perl
☆凡尘清心☆2 小时前
CentOS-stream-9安装ansible
linux·centos·ansible
得物技术2 小时前
Java程序中的潜在危机: 深入探讨NullPointerException|得物技术
linux·javascript
码农君莫笑2 小时前
Blazor项目中使用EF读写 SQLite 数据库
linux·数据库·sqlite·c#·.netcore·人机交互·visual studio
无为之士3 小时前
Linux自动备份Mysql数据库
linux·数据库·mysql
岑梓铭3 小时前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
努力学习的小廉3 小时前
深入了解Linux —— make和makefile自动化构建工具
linux·服务器·自动化
MZWeiei3 小时前
Zookeeper基本命令解析
大数据·linux·运维·服务器·zookeeper