最近想要做一个基于深度学习的特征点的提取的VO实验平台,所以就想拿AirVO作为基础在上面进行改动。
实验环境
- OpenCV 4.2.0 (安装的时候会与Ceres 2.0.0冲突)
- Eigen 3
- Ceres 2.0.0
- G2O (tag:20230223_git)
- TensorRT 8.4
- CUDA 11.6
- python
- onnx
- ROS melodic(官方给的是noetic)
- Boost
- Glog
安装OpenCV 4.2.0
在配置中,OpenCV会和Ceres 2.0.0 ,ROS 中的cv_bridge起冲突。这个后面会介绍到。
- 下载OpenCV的源码:
https://opencv.org/releases/ - 下载OpenCV-contrib:
https://github.com/opencv/opencv_contrib,要选择下载tag4.2.0的opencv_contrib,并解压放到OpenCV4.2的源码里面。 - 在编译OpenCV之前,要先安装1.14.0版本的Ceres库,因为在OpenCV中使用的是g++11,而2.0.0版本的Ceres所用的是g++14,会产生冲突。
git clone https://github.com/ceres-solver/ceres-solver.git cd ceres-solver git checkout -b master 1.14.0 mkdir build cd build cmake .. make sudo make install
- 编译OpenCV
后面在CMakeLists.txt中找OpenCV文件可以通过这个build文件夹来找:cd opencv-4.2.0 mkdir build cd build cmake -D CMAKE_BUILD_TYPE=Release \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D CMAKE_INSTALL_PREFIX= 安装目录\ -D OPENCV_EXTRA_MODULES_PATH= opencv-contrib的module文件夹的绝对路径 .. make -j8 sudo make install
set(OpenCV_DIR "/home/andre/Documents/utils/opencv/opencv-4.2.0/build") find_package(OpenCV 4.2 REQUIRED)
安装g2o
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
git checkout -b master 20230223_git
mkdir build
cd build
cmake ..
make
sudo make install
下载TensorRT 8.4
https://developer.nvidia.com/nvidia-tensorrt-8x-download
找个地方解压出来就可以,不需要编译
编译AirVO
- 先将ceres的版本变成2.0.0
cd ceres-solver git checkout -b master 2.0.0 mkdir build cd build cmake .. make sudo make install
- 下载AirVO,然后编译(这里用的是官方的教程)
cd ~/catkin_ws/src git clone https://github.com/xukuanHIT/AirVO.git cd ../ catkin_make source ~/catkin_ws/devel/setup.bash
- 在这里有可能会编译成功,但是运行的结果会没有任何信息的停止,这是由于ROS中的cv_bridge与当前OpenCV4版本存在冲突,因此我们需要为这个工程编译一个自己的cv_bridge.
- 下载cv_bridge
下载地址:链接
不管是melodic还是noetic都下载noetic版本。 - 将cv_brige拷贝到ros工作空间的src下,为了不影响原来的包,将这个文件夹重命名为cv_bridge_new,并将文件夹下CMakeLists.txt文件中project名称修改为
cv_bridge_new
并且修改package.xml中包的名称:prject(cv_bridge_new)
在 CMakeLists.txt 文件中指定我们自己的功能包中所用的 opencv4:<package format="2"> <name>cv_bridge_new</name> ...
... set(OpenCV_DIR opencv路径/opencv/build) set(_opencv_version 4) find_package(OpenCV 4 QUIET) ...
- 编译cv_bridge
cd 到工作空间的根目录下,执行
如果是ros melodic 会有两个问题:catkin_cmake
Could not fild the following Boost libraries: boost_python37
可以直接修改CMakeLists文件:
... if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8") # Debian Buster find_package(Boost REQUIRED python3) ...
继续编译还会发现错误
修改cv_bridge_new/src/module.hpp文件下的void * do_numpy_import()
函数为:
static void do_numpy_import( )
{
import_array( );
}
修改完成后,就能成功通过编译。
7. 将AirVO中的CMakeLists.txt
中的cv_bridge
替换为 cv_bridge_new
。
8. 将package.xml
文件中的cv_bridge
也替换为cv_bridge_new
这样程序就能顺利运行了