视觉slam学习之路(一)看高翔十四讲所遇到的问题
目前实验室做机器人,主要分三个方向,定位导航,建图,图像识别,之前做的也是做了下Qt上位机,后面又弄红外识别,因为这学期上课也没怎么花时间在项目,然后导师让我们确定一个方向来,便于以后发论文什么。上个礼拜看了些论文,感觉视觉slam方向还可以,图像识别毕竟不是计算机科班,可能真正要弄也很难有成果,slam也是最近才研究起来,也挺适合我们搞,需要一些高数、c++、ros等知识,学的东西也挺多的,但这样才能体现研究生的价值,不然本科生也能做,然后确定了这个研究方向,希望好好研究个一两年有所成就,研三一个师兄搞的是激光slam,找的工作待遇也不错,前景还是可以的。然后这个礼拜就主要安装了ubuntu、kde,看十四讲书,运行里面的程序,也遇到不少问题,所以就记录下来,下面这些遇到的问题也是自己写的记录,粘贴过来可能不适合大家看,不过希望有所帮助吧,凑合着看,后面希望能更新,像高博 @半闲居士 那样开个博客,哈哈。
2018年1.18 1.高翔P28 g++ helloSLAM.CPP 遇到问题:g++ error:没有那个文件目录 解决:需找到文件目录 cd /home/cy/slambok/ch2/ (文件目录有空格需跳 用tab? cmake . 编译 make (%有问题 ./helloSLAM 【g++就 ./a.out
2.30页要删除之前生成的中间文件,即删除CMakelists.txt和helloSLAM.cpp以外的所有文件。否则make时会报错
3.31页增加库文件,先前第2步建的build要保存,因为cmakelists.txt有之前的构建,我的错误是新建libHelloSLAM.CPP时cpp竟然是大写,然后make时报错makefile找不到,弄了半天才发现这个错误。
4从编程的角度讲,通常有静态库文件和动态库文件。windows静态库文件就是.lib文件,动态库文件就是.dll文件。内容一样,都是将函数封装在一起编译后供自己或他人调用。好处在于编译后的库文件看不到源代码,可保密;同时不会因为不小心修改了函数而出问题,便于维护。 两种库的区别在于静态库被调用时直接加载到内存,而动态库再是在需要的时候加载到内存,不使用的时候再从内存释放。
unix系统的静态库文件和动态库文件后缀分别是.a和.so
5.main函数的源文件生车可执行文件 其他源文件编译成库文件。
6.有个疑问就是,书上调用的库文件printHello最终输出,但是之前的helloSLAM.cpp的源文件执行的却没有? 后面试了下在配置启动器更改配置文件为helloslam,则输出helloslam.cpp的源程序,增加两个配置不知为什么还是只执行usehello.难道一次只能执行一个执行文件?
7.按debug模式竟然闪现,不能调试。 解决:问了师兄解决了,原来是配置启动器设置的调试断点不是当前启动配置,然后会出现闪现。
8.齐次坐标 参考:http://blog.csdn.net/janestar/article/details/44244849
2018年1月19日
1.欧拉角https://www.zhihu.com/question/47736315
2.58页useGeometry程序,书上源程序命名useGeometry.cpp,然后我自己编写源程序名是按的书上的,CMakelists按高的源代码,但是高给的源代码命名是eigenGeoetry.cpp,CMakeLists.txt中add_executable( eigenGeometry eigenGeometry.cpp )然后导致我在终端时cmake出现找不到源程序的错误eigenGeoetry.cpp,因为我命名的是useGeometry.cpp。后面MAKE完总按./useGeometry 然后出现“没有那个文件或目录”错误
解决:add_executable( eigenGeometry eigenGeometry.cpp )改为add_executable( useGeometry useGeometry.cpp )。也就是前面那个程序名可以自己改,但是后面终端执行时./useGeometry与程序名一致,后卖弄那个需与命名的源程序名一致。