Catographer-for-SMMR安装踩坑记录

Catographer-for-SMMR安装踩坑记录

写在前面:在搭建环境时,我们总会遇到各种各样的问题,这些问题经常会比较搞人心态,心生放弃的念头。我不是一个特别喜欢麻烦别人的人,很多问题其实也没必要,实际上自己完全能够解决,除非走投无路的时候,我一般会借助网络的工具来查找自己的问题。我曾经也和其它的同学交流过,发现有一些同学问出一些问题的原因大部分就是不会去自己检索网上的信息资料,所以我在本文中加入了一些我利用网上的资料解决问题的思路,希望能够帮到大家安装环境增长经验。
准研一,目前假期在家学习。前段时间清华的一个老师参加了CAA云讲座,老师让我看一下,分享的主题是资源受限下多智能体协同环境探索方法,主要讲的是他们团队在该领域的一些成果,刚好与我未来的研究的方向类似,最重要的是他们开源的代码和平台,链接: Explore-Bench,根据介绍,该平台旨在以统一和全面的方式评估传统的基于前沿和基于深度学习的自主探索方法,如果能在他们的平台框架的基础上跑仿真,就会省去很多事情,不再需要重复造轮子,因此老师让我先按照Github上面开源的代码搭建环境,先把代码跑起来。
本文主要记录了在搭建环境安装依赖库Catographer-for-SMMR时踩的坑,也希望同样想要搭建环境的同学们能够少走一些弯路。
一、Catographer-for-SMMR与普通Catographer的区别
二、踩坑记录
1. 由于anaconda的lib与系统lib的冲突造成的报错
2. 未安装libgmock报错
3. protoc版本错误以及与anaconda的libprotoc冲突的报错
三、总结

一、Catographer-for-SMMR与普通Catographer的区别

作为一个刚刚接触ROS的小白,我开始并不知道Catographer是什么,我开始觉得Catographer-for-SMMR是清华团队自己做的库,后来在不断地检索资料过程中才渐渐了解。Catographer-for-SMMR实际上是在Catographer的基础上进行修改的,使其适用于多机器人的SLAM和探索,从文件的框架来看,它们是没有太大区别的,安装方式也差不多,都使用的是catkin_make,安装遇到的问题也都基本类似,而在内容上的区别还需要深入去研究才知道。
Github上面提供了Catographer-for-SMMR的源码,并详细介绍了其安装方式,链接: Cartographer-for-SMMR

二、踩坑记录

按照官网上面的流程,前面几步都比较顺利,主要是使用 apt-get install 安装一些库,以及创建catkin_ws工作空间,设置代码路径之类的,对于用过的同学来说都轻车熟路,但到了最关键的一步安装的时候,开始连续踩坑:

catkin_make_isolated --install

1.由于anaconda的lib与系统lib的冲突造成的报错

报错内容如下:
在这里插入图片描述
对于这个报错内容,我开始的关注点在于后面的函数未声明的报错上面,上网检索无果之后,后来又想了一下,感觉这是别人成功运行的代码,不应该会报这样的错误,于是我开始把工作重心放在了前面的报错上面。我关注到了“librt.so”文件,我按照提供的路径去找这个文件,发现找不到,这个路径实在是太奇怪了(我到现在还不知道这个路径到底是怎样生成出来的)。于是我开始上网查“librt.so”文件到底是什么,发现它是一个系统的文件,并且我找到了它所在的位置,与报错信息上面提供的路径有一些类似(但不相同):
在这里插入图片描述
路径:/usr/lib/x86_64-linux-gnu/librt.so
于是又开始了无止境的检索,百度,CSDN,知乎都找遍了,没能发现与我相似的报错,为此我在这里耗了接近2天的时间。正当我走投无路之时,我忽然发现我的路径是x86_64-linux-gnu,而报错的路径是x86_64-conda-linux-gnu,conda这个东西可真是太敏感了,于是我想到了是因为我之前安装了anaconda的原因,代码本来想找的就是系统的lib,结果找到了conda的lib。
解决方案:安装时会自动搜索librt.so路径,搜索路径是有优先级的,我出现这种情况的原因也是conda的路径比系统的路径高,搜索路径可以通过以下命令来查找:

echo $PATH

我的返回是:

/opt/ros/noetic/bin:/home/yzh/anaconda3/bin:/home/yzh/anaconda3/con
dabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
/usr/games:/usr/local/games:/snap/bin

可以看到anaconda的优先级是比系统库要高的,这时候只要在命令中把conda的路径去掉,或者调整一下优先级就可以了,调整方式:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/
usr/games:/usr/local/games:/snap/bin/opt/ros/noetic/bin:/home/yzh/a
naconda3/bin:/home/yzh/anaconda3/condabin:

调整之后不再报错。

2.未安装libgmock报错

这时又遇到了第二个报错,报错内容:

文件 /home/yzh/桌面/catkin_ws/build_isolated/cartographer/install/AllFiles.cmake 和 - 不同
CMake Warning at /usr/src/googletest/googlemock/CMakeLists.txt:43 (project):
  VERSION keyword not followed by a value or was followed by a value that
  expanded to nothing.
  CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
/home/yzh/桌面/catkin_ws/src/cartographer-master/GMOCK_INCLUDE_DIRS
   used as include directory in directory /home/yzh/桌面/catkin_ws/src/cartographer-master
   used as include directory in directory /home/yzh/桌面/catkin_ws/src/cartographer-master
 ...

报错没有列全,只列出了我当时认为可能出现错误的地方。上面是一个Warning还有一个Error,通常我们会去倾向于关注Error而不去关注Warning,而对于这个报错,我将两者结合起来看才看出出问题的地方。同时这个问题在Github的issue中也有人遇到了这个问题,而没有人回答。
Error的提示是缺少GMOCK_INCLUDE_DIRS的库,直接去搜索GMOCK_INCLUDE_DIRS,无功而返,而将两者结合起来,可以看出GMOKE应该是googlemock大概可能也许是一个东西,而Warning中提示的内容“expanded to nothing”似乎也是缺东西,由此去检索googlemock,看它是什么东西,最终的指向libgmock库没有安装。
解决方式:

sudo apt-get install libgmock-dev

安装libgmock库即可解决上述问题。

3.protoc版本错误以及与anaconda的libprotoc冲突的报错

直接上报错内容:

/home/yzh/桌面/catkin_ws/install_isolated/include/cartographer/mapping/proto/pose_graph.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
   17 | #error This file was generated by an older version of protoc which is
      |  ^~~~~
/home/yzh/桌面/catkin_ws/install_isolated/include/cartographer/mapping/proto/pose_graph.pb.h:18:2: error: #error incompatible with your Protocol Buffer headers. Please
   18 | #error incompatible with your Protocol Buffer headers.  Please
      |  ^~~~~
/home/yzh/桌面/catkin_ws/install_isolated/include/cartographer/mapping/proto/pose_graph.pb.h:19:2: error: #error regenerate this file with a newer version of protoc.
   19 | #error regenerate this file with a newer version of protoc.
      |  ^~~~~

这次的报错内容比较多,我只列出了其中的两个,也是问题所在,后面的报错内容和前面的不太一样,后面的把前面给吞了,我又重新运行一遍利用Ctrl+C终止程序才把前面的这些错误给显示出来。问题还是比较明显的,实际上就是protoc版本的问题,版本过高,需要降一下版本。
首先看一下目前的版本,直接上CSDN上找,找到命令:

# protoc --version

我的返回是libprotoc 3.20.1
并且还找到了查看用的是哪个protoc的命令:

which protoc

结果又给我找到了conda的库里面,因为我之前改PATH的时候因为又报错了,我把之前的终端给关了,那时候设置的命令到这里已经不适用了,因此再按照之前的命令改了一下PATH,这时再运行查找protoc版本的命令,返回是libprotoc 3.6.1,哪个/usr/bin/protoc,这次应该没问题了。但是这个版本我也不确定是否满足需求,在检索查资料的过程中,我无意中发现一些文件里面是有说自己需要什么版本的protoc,于是我就直接去找了报错的h文件,然后找到了:
在这里插入图片描述
连报错的内容和提示的行数都一模一样,由此可以确定,protoc的版本就是需要3.6.1,直接运行安装,不再报错。
至此,我的漫长的catkin_make_isolated --install安装终于结束了,后面就是一个将sh文件路径添加到~bashrc中。
在这里插入图片描述

三、总结

这是我第一次用Markdown写这一篇这样的文章,感觉还是挺累的,可能是暑假在家精力退化了吧,但还是挺有意思的,也希望越来越多的人能将自己的经验以文字的形式分享出来,惠及更多的人。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值