SLAM 算法复现记录:Leg-KILO
- 腿部里程计slam
1. 项目基本信息
- 系统:Ubuntu 20.04
- ROS 版本:Noetic
- 项目地址:https://github.com/ouguangjun/Leg-KILO
- 主要问题:opencv 版本不兼容
- 这是我的复现过程记录,并非教程,因此会有一些不必要的操作
2. 问题与解决过程
2.1 OpenCV 版本不兼容
查看已安装 opencv 版本
# 这里放命令
dpkg -l | grep opencv
- 输出显示当前版本为 4.2.0,Leg-KILO 需要 3.2.0
下载并编译 OpenCV 3.2.0
- OpenCV 3.2.0 源码下载页面
- 解压并进入目录,进行编译安装,我选择安装在我的自定义路径:
cd opencv-3.2.0
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -D ENABLE_PRECOMPILED_HEADERS=OFF -DCMAKE_INSTALL_PREFIX=/home/sd10/third_party/opencv-3.2 -DBUILD_SHARED_LIBS=ON ..
编译报错截图

解决办法
- 参考 CSDN 解决方法链接
- 安装OpenCv 3.1的过程中要下载ippicv_linux_20151201,由于网络的原因,这个文件经常会下载失败,解决的办法是手动下载,手动下载
ippicv_linux_20151201.tgz,替换同名目录:
# 这里放命令
cp ~/Downloads/ippicv_linux_20151201.tgz /home/sd10/Downloads/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/
2.2 make 过程其它报错及解决
报错信息截图

error: 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope
error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
解决办法
- 参考 CSDN 解决方法链接
- 修改
cap_ffmpeg_impl.hpp文件顶端添加:
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
- 修改
/home/sd10/Downloads/opencv-3.2.0/modules/python/src2/cv2.cpp文件:
char* str = PyString_AsString(obj);
-改为:
char* str = (char *)PyString_AsString(obj);
3. 项目编译与安装
make -j8
sudo make install
4. 多版本 OpenCV 管理
- 修改
CMakeLists.txt,指定 OpenCV 3.2 路径
# find_package(OpenCV REQUIRED QUIET)
find_package(OpenCV 3.2 REQUIRED PATHS /home/sd10/third_party/opencv-3.2/share/OpenCV) #这是我的自定义路径注意修改
5. ROS 启动报错及解决
roslaunch报错信息截图

检查库文件是否存在
ls /usr/local/lib | grep libmetis-gtsam.so
ls -l /usr/local/lib | grep libmetis-gtsam.so
显示

修改权限
- 修改文件权限,为了确保其他用户(比如你的当前用户)能够执行这个库文件,我们可以修改它的权限,使其对所有用户都具有可执行权限
- 修改权限后,建议运行 ldconfig 来更新系统的库缓存
sudo chmod 755 /usr/local/lib/libmetis-gtsam.so sudo ldconfig