前言
本人在做无人车(UGV)的多机SLAM,自然想了解以UGV为无人系统的前沿开源程序,于是选择了2022年的TRO文章(还是Best Paper):Kimera-Multi,对应的Github仓库。以下是安装(踩坑)经验
安装
1 添加SSH 密钥到远程仓库账户(Github账户)
对应的Github仓库中对于代码的部署使用的命令为:
git clone git@github.com:MIT-SPARK/Kimera-Multi.git kimera_multi
而不是常见的 git clone https://github.com/xxx
。因此,若按照上述命令,需要添加SSH 密钥到远程仓库账户,否则:
Permission denied (publickey).
fatal: Could not read from remote repository.
具体配置过程见:生成新的 SSH 密钥并将其添加到 ssh-agent–Github文档
当然,也可以使用如下命令:
git clone https://github.com/MIT-SPARK/Kimera-Multi.git
mv Kimera-Multi kimera_multi
从以下部分开始,可以使用我fork后更新的仓库,也(准备)提交PR。
2 安装依赖项
按照对应的Github仓库的命令:
sudo bash kimera_multi/install/dependencies.sh
2.1 不需要安装 ros-melodic-mesh-tools
详见:Github issue
简单来说,不需要安装 ros-melodic-mesh-tools
2.2 注意ROS版本
需要注意的是,原仓库对应的是ubuntu18.04版本,对应的ROS版本是melodic,需要根据不同的ROS版本进行相应地调整。我这边是ubuntu20.04,就将 melodic
修改为 noetic
。改成 ${ROS_DISTRO}
也可以。
3 补充安装
sudo apt install -y libgtk2.0-dev opencl-clhpp-headers ros-${ROS_DISTRO}-pcl-ros ros-${ROS_DISTRO}-tf-conversions ros-${ROS_DISTRO}-camera-info-manager ros-${ROS_DISTRO}-interactive-markers ros-${ROS_DISTRO}-rviz
pip install vcstool empy==3.3.4 catkin_pkg numpy
不然编译的过程中会各种报错。另外,关于 ros-noetic-tf-conversions
可能会安装不通过,此时见3.1部分,否则可以跳过。
3.1 使用 apt
安装 ros-noetic-tf-conversions
等包不通过
使用原来的源:
Could not connect to packages.ros.org:80 (64.50.233.100), connection timed out
换源,使用官方提供的各种镜像源:
关于镜像源及换源方法,见 ROS-UbuntuMirrors
E: Unable to locate package ros-noetic-tf-conversions
单走一个6
其实,主要问题在于 Unmet dependencies
,所以只需要:
sudo apt --fix-broken install
4 构建工作空间
4.1 前置步骤
打开以下文件(注意,我是在 miniconda
里使用基于 python3.9
的虚拟环境,所以不能完全复制,但是相对路径是一样的):
# /home/xx/miniconda3/envs/yy/lib/python3.9/site-packages/numpy/core/include/numpy/__multiarray_api.h
vim /path/to/your/virtual/envs/lib/python3.9/site-packages/numpy/core/include/numpy/__multiarray_api.h
找到以下部分:
#define import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return NULL; } }
去掉 return NULL;
或者 参照 Github issues 的处理方式,使用 std::cout
报告错误。由于我不想额外添加 iostream
库,所以就直接去掉了。
4.2 查看错误的方式(附 SSL connect error
的解决方法)
由于构建工作空间过程中会输出许多消息,特别是警告消息(众所周知,警告消息可以忽略),这样会刷掉许多重要的消息,比如错误消息。比如:
Failed << opencv3_catkin:make [ Exited with code 2 ]
但我在终端找不到报告的错误,因为被刷掉了。那么,可以去 ./logs/opencv3_catkin/build.make.log
以及文件名类似的相关文件,如 build.make.000.log.stderr
,查看(虽然会有乱码,但总体不影响),这里以 opencv3_catkin
为例。
于是找到了错误为:
[Kboostdesc_bgm.i: No such file or directory
以及前文的:
xfeatures2d/boostdesc: Download failed: 35;"SSL connect error"
For details please refer to the download log file:
/path/to/catkin_ws/build/opencv3_catkin/opencv3_build/CMakeDownloadLog.txt
是网络问题导致下载不了。
可以重新构建,当然这是玄学操作。最根本的解决方法:
参考opencv配置–MinGW+CMake+Clion–知乎
打开CMakeDownloadLog.txt
并找到下载的网址,存放的位置及其名字,然后手动操作
4.3 找不到opengv的问题
截至2024/04/06,在构建 Kimera-Multi-LCD
工作空间的时候会报错:“找不到 opengv
”,这是因为在 /kimera_multi_LCD/package.xml
里对于依赖项 opengv
的描述是:
<depend>opengv</depend>
工作空间里没有这个,ROS构建系统会假设已经在系统上安装好,在确定了所有依赖项均满足后开始构建。但是,在源文件中就有 opengv_catkin
,对照 /kimera_multi_LCD/*
中对于 opengv
的导入,可以发现是对应的。但是,opengv_catkin
与 Kimera-Multi-LCD
的构建是同时进行的,因此出现“找不到依赖项”的问题。
更改方式也很简单,将 /kimera_multi_LCD/package.xml
对应的 <depend>opengv</depend>
改为:
<depend>opengv_catkin</depend>
即可。目前已在原仓库中提交PR。
4.4 开始构建工作空间
接下来按照原仓库的步骤开始即可
# For full install
vcs import . --input kimera_multi/kimera_multi.repos --recursive
cd ..
# Configure build options and build!
catkin config -a --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo -DGTSAM_TANGENT_PREINTEGRATION=OFF -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF -DOPENGV_BUILD_WITH_MARCH_NATIVE=OFF
catkin build --continue -s
完结撒花
P.S. 我是完全按照原仓库的步骤进行,所以会有各种报错,基本上是缺少各种库,所以和这里的步骤不同,没有任何补充安装和前置步骤的。在这里感谢大模型(Kimi.ai)以及原仓库的issue,特别是 Conflicting requirements during installation leading to failed build #11
若有帮助,还望给一个小小的赞,不胜感激