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、有个实际的项目推动

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

相关推荐
corey9311 分钟前
Linux 学习 - 第十四周作业
linux·运维·学习
可乐_不渴18 分钟前
# C语言文件操作全解析:从 fopen 到 fclose,一文吃透文件 IO
linux·服务器·c语言
草莓熊Lotso34 分钟前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
Ruiery9 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
欧米欧9 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery9 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
qetfw10 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
逆风的蚂蚁12 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器
沫璃染墨15 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
AI_Lab0117 小时前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器