Ubuntu20.04的安装以及配置SLAM环境中报错

Ubuntu20.04的安装

1. 分配磁盘空间

右键“计算机”,点击“属性”,进入到磁盘管理
image

中间是之前装ubuntu18.04所用的空间,其实可以不用在这里“删除卷”,可以统一到安装ubuntu的时候在磁盘分区中进行删除
image

2. 进入系统BIOS,设置启动引导

image

image

3. 开始安装

image

image

image

image
image

image

此处注意选择最后一个,不然会删除win系统资料

image

分配空间,根目录“/”,选择“主分区,起始地址”

image

挂载,系统所在的磁盘分区

image

安装成功

image

4 Ubuntu20.04配置SLAM十四讲的环境时存在的问题

4.1 fmt报错

报错详情

/usr/bin/ld: CMakeFiles/pose_estimation_3d2d.dir/pose_estimation_3d2d.cpp.o: in function `void fmt::v8::print<Eigen::Transpose<Eigen::Matrix<double, 4, 1, 0, 4, 1> > >(fmt::v8::basic_format_string<char, fmt::v8::type_identity<Eigen::Transpose<Eigen::Matrix<double, 4, 1, 0, 4, 1> > >::type>, Eigen::Transpose<Eigen::Matrix<double, 4, 1, 0, 4, 1> >&&)':
/usr/local/include/fmt/core.h:3198: undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'
/usr/bin/ld: CMakeFiles/pose_estimation_3d2d.dir/pose_estimation_3d2d.cpp.o: in function `void fmt::v8::print<>(fmt::v8::basic_format_string<char>)':
/usr/local/include/fmt/core.h:3198: undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'

解决方案

修改CMakeLists
include_directories("usr/local/include/fmt" )
然后在target_link_libararies添加fmt
target_link_libraries(pose_estimation_3d2d
        g2o_core g2o_stuff
        ${OpenCV_LIBS}
        fmt)

【参考】https://blog.csdn.net/Evanzxh/article/details/119757742

4.2 ch8讲,C++编译标准的问题

需要修改c++编译标准

set(CMAKE_CXX_FLAGS "-std=c++14 -O2 ${SSE_FLAGS} -msse4")

image

4.3 ch13讲,运行slam系统报错

要采用C++11的标准

image

找不到这个链接库

先看有没有,有的话建立软链接

首先定位libglut.so*
locate libglut.so*

若没有相应的库,则安装
sudo apt-get install libglut-dev

若有建立软连接
cd /usr/lib/x86_64-linux-gnu/
sudo ln -s libglut.so.3 libglut.so

image

参考【https://www.jianshu.com/p/0695757d8111】

然后fmt又报错,

先把原来的卸载掉
xargs rm < install_manifest.txt
进入安装源文件 fmt/build中,找到CMakeCache.txt
改为CMAKE_CXX_FLAGS:STRING=-fPIC

再重新安装
make
sudo make install

image

5 ubuntu20.04编译ORB SLAM存在的问题

5.1 C++编译标准的问题

和前面ch8讲报错一样,可能是不支持C++11的编译,还是不兼容?

我直接修改CMakeLists中编译要求修改为

C++14的标准,并把前面判断编译标准的代码注释掉了

  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
   add_definitions(-DCOMPILEDWITHC0X)
   message(STATUS "Using flag -std=c++14.")

这个错误是因为pangoling教新的版文需要C++14以上的编译器,
最好安装pangoling0.3的版本

5.2 不知道的错误

:KeyFrame*, g2o::Sim3> > >’:
/home/hzhou/Documents/ORB_SLAM2-master/src/LoopClosing.cc:439:21:   required from here
/usr/include/c++/9/bits/stl_map.h:122:71: error: static assertion failed: std::map must have the same value_type as its allocator
  122 |       static_assert(is_same<typename _Alloc::value_type, value_type>::value,

image

打开LoopClosing.h,将

typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
        Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;

改为

typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
        Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;

参考【https://blog.csdn.net/lixujie666/article/details/90023059】

这个错误貌似也是因为C++编译器版本的问题

把gcc和g++的版本降低到7以后就没有这个问题了

[Ubuntu20.04终端安装、切换低版本gcc/g++](

5.3 chrono时间报错

报错

error: ‘std::chrono::monotonic_clock’ has not been declared

网上说可能是因为不支持monotonic_clock,

解决方法,直接在EXample里面的几个.cc文件中,定义

#define COMPILEDWITHC11
这样就默认采用的是std::chrono::steady_clock

【参考】https://blog.csdn.net/weixin_45983731/article/details/117969879?utm_medium=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaidudefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaidudefault-5.no_search_link

posted @ 2021-12-22 10:15  Weighting  阅读(1077)  评论(0编辑  收藏  举报