3

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

 1 year ago
source link: https://blog.csdn.net/feixiaoxing/article/details/132527401
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

嵌入式-老费 已于 2023-08-27 21:24:46 修改 178

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

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

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

ebdd1a6c41a54f0eb2ffd9182cbfff71.png

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK