在工作中需要对DM-VIO算法进行测试,于是配置并记录了一下:
首先运行ros接口的dm-vio,一定要先配置源码
https://github.com/lukasvst/dm-vio在这个网址把源码下载下来并解压,并安装一下依赖:
sudo apt-get install cmake libsuitesparse-dev libeigen3-dev libboost-all-dev libyaml-cpp-dev
然后安装GTSAM,这个是dm-vio的后段优化库,一定要是 4.2a6版本的,先安装下依赖:
sudo apt install libtbb-dev
然后在 https://github.com/borglab/gtsam.git下载:
然后解压并执行:
mkdir build && cd build
cmake -DGTSAM_POSE3_EXPMAP=ON -DGTSAM_ROT3_EXPMAP=ON -DGTSAM_USE_SYSTEM_EIGEN=ON -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
make -j12
sudo make install
这个过程很慢,大家耐心等待。
然后是opencv,这个我们装过ros,用自带的就可以,笔者是ubuntu18.04 ros melodic的自带3.2.0版本的opencv。
然后是pangolin,github上需要0.6版本,但是笔者环境中存在0.5版本的,为了不影响其他项目运行且不污染环境,笔者这里选择多版本共存,具体可看笔者之前写的opencv3.4.5多版本共存,原理是一样的。
还有一个问题是笔者这个版本的boost是1.65的,但是gtsam要求最低为1.73的boost,于是笔者又安装了boost1.73,去官网https://archives.boost.io/release/1.73.0/source/下载好包后:
./boottrap.sh --with-libraries=all
./b2
sudo ./b2 install --prefix=/usr/local/boost1.73
依旧是在用的时候set一下就好
修改cmakelists.txt:
set(Pangolin "/usr/local/pangolin-0.6/include/pangolin")
set(BOOST_ROOT "/usr/local/boost-1.73")
还有一处如果不修改汇报错:
CMake Error at CMakeLists.txt:198 (add_executable):
Target “dmvio_t265” links to target “Boost::regex” but the target was not
found. Perhaps a find_package() call is missing for an IMPORTED target, or
an ALIAS target is missing?
CMake Error at CMakeLists.txt:191 (add_executable):
Target “dmvio_dataset” links to target “Boost::regex” but the target was
not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
这里在cmakelist.txt中find boost时做添加就好了:
find_package(Boost 1.73 REQUIRED COMPONENTS system thread filesystem chrono serialization date_time timer regex)
然后安装boost1.73后又会在yaml-cpp中报错:/usr/include/yaml-cpp/node/detail/iterator.h:48:54: error: ‘next’ is not a member of ‘boost’ 48 | void increment() { this->base_reference() = boost::next(this->base()); }这是因为比较新的boost版本中可能出现找不到迭代器next方法
在/usr/include/yaml-cpp/node/detail/iterator.h这个路径下,找到这个文件:sudo gedit iterator.h之后,添加头文件#include<boost/next_prior.hpp>就好了。
然后应该就没什么问题了,小伙伴有什么报错都可以发在评论区,我有时间会看,能解答的一定解答给大家
mkdir build
cd build
cmake ..
make -j12
接下来是ros接口,在刚刚的子文件路径下建一个文件夹,把ros接口的包放在里面解压,在编译之前,我们要确保可以找到刚刚编译的:
sudo gedit ~/.bashrc,在里面加上:
export DMVIO_BUILD=/PATH/TO/dm-vio/build
然后修改cmakelist.txt:
还是刚刚的pangolin和boost,这里还要在大概90行左右加:
add_dependencies(${PROJECT_NAME}_node ${PROJECT_NAME}_generate_messages_cpp)
不然编译的时候会因为找不到生成的msg格式而报错
catkin_make
source devel/setup.bash
这里可能会出现刚刚安装的新版本boost库中的某些包找不到的情况,
/home/shikai/dm-vio-catkin_ws/src/dm-vio-master/ROS/devel/lib/dmvio_ros/node: error while loading shared libraries: libboost_serialization.so.1.73.0: cannot open shared object file: No such file or directory
这是因为之前没设置环境变量:
sudo gedit /etc/ld.so.conf
#将如下我们自己的so所在路径添加到这个文件中
/usr/local/boost-1.73/lib
然后还要执行才可以生效:
cd /etc
ldconfig
笔者到这里就配置完成了。
网上的博客接下来大多是如何运行数据集,但是笔者要使用t265实时跑,并初步查看下建图效果
roscore
rosrun dmvio_ros node nogui=0 useimu=1 quiet=1 mode=3 calib=/home/shikai/dm-vio-catkin_ws/src/dm-vio-master/configs/tumvi_calib/camera02.txt imuCalib=/home/shikai/dm-vio-catkin_ws/src/dm-vio-master/configs/tumvi_calib/test1-camchain-imucam.yaml gamma=/home/shikai/dm-vio-catkin_ws/src/dm-vio-master/configs/pcalib_linear_8bit.txt vignette=/home/shikai/dm-vio-catkin_ws/src/dm-vio-master/configs/realsense/vignette_t265.png settingsFile=/home/shikai/dm-vio-catkin_ws/src/dm-vio-master/configs/t265_noise_tumvi.yaml resultsPrefix=/home/shikai/dm-vio-catkin_ws/result cam0/image_raw:=/camera/fisheye1/image_raw imu0:=/camera/imu
这是笔者的执行命令,根据github中给的改的,
nogui=0: 启动时不显示 GUI(图形界面)。这里设置为 0,意味着不禁用 GUI。
useimu=1: 使用 IMU 数据(设置为 1 表示启用 IMU 数据)。
quiet=1: 静默模式,减少输出。
mode=3: 模式设置为 3,表示使用特定的校准模式(比如没有曝光控制但有光晕校准),这通常与相机配置(如曝光、增益等)有关。
calib=/PATH_TO/RealsenseCalibration/camera.txt: 相机的校准文件,包含相机内参和外参。
imuCalib=/PATH_TO/RealsenseCalibration/factory_camchain.yaml: IMU 校准文件,包含与 IMU 相关的校准数据。
gamma=PATH_TO/dm-vio/configs/pcalib_linear_8bit.txt: Gamma 校正文件,用于相机图像的后处理。
vignette=PATH_TO/dm-vio/configs/realsense/vignette_t265.png: 鱼眼镜头的光晕校正文件,用于校正相机图像中的光晕效应。
settingsFile=/PATH_TO/dm-vio/configs/t265_noise_tumvi.yaml: VIO(视觉惯性里程计)系统的配置文件,包含噪声参数等。
resultsPrefix=/PATH_TO_RESULTS/: 结果保存的文件夹路径。
cam0/image_raw:=/camera/fisheye1/image_raw: 重映射 ROS 话题,将 /camera/fisheye1/image_raw 数据传递到 cam0/image_raw。
imu0:=/camera/imu: 重映射 IMU 话题,将 /camera/imu 数据传递到 imu0。
同时打开t265的lanunch文件,将相机启动:工作原因,(将image打马了)
初始化代价太大了,不过可以看到半稠密建图效果还是很顶的,这个只是看下效果,考虑精度的话需要做光度标定,先留个坑,过一段时间再来填