[Kimera-Multi]ubuntu部署过程

前言

本人在做无人车(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_catkinKimera-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

若有帮助,还望给一个小小的赞,不胜感激

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值