环境
https://github.com/neufieldrobotics/MultiCamSLAM
ubuntu 20.04
为了不影响其他代码,除了opencv安装到系统中, 其他第三方仓库均安装在home/$USER/Lib 里
BUILD
sudo apt -y install ros-noetic-desktop libopencv-dev
sudo apt -y install libgoogle-glog-dev libgflags-dev
源码编译libopencv-dev中不包含的sfm模块
mkdir -p ~/Lib/opencv4.2
mv opencv-4.2.0.tar.gz ~/Lib/opencv4.2
mv opencv_contrib-4.2.0.tar.gz ~/Lib/opencv4.2
cd ~/Lib/opencv4.2
tar -xvf opencv_contrib-4.2.0.tar.gz
tar -xvf opencv-4.2.0.tar.gz
mv opencv-4.2.0 opencv
mv opencv_contrib-4.2.0 opencv_contrib
cd opencv
mkdir build && cd build
cmake -D CMAKE_INSTALL_PREFIX=../install -D CMAKE_BUILD_TYPE=RELEASE -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
make -j16
make install
sudo cp -r /home/lucky/Lib/opencv4.2/opencv/install/include/opencv4/opencv2/sfm /usr/include/opencv4/opencv2/
sudo cp /home/lucky/Lib/opencv4.2/opencv/install/lib/libopencv_sfm.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_sfm.so.4.2.0
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_sfm.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_sfm.so.4.2
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_sfm.so.4.2 /usr/lib/x86_64-linux-gnu/libopencv_sfm.so
gtsam
mv gtsam-4.1.1.zip ~/Lib/
cd ~/Lib/
unzip gtsam-4.1.1.zip
cd gtsam-4.1.1
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=../install
make -j16
make install
opengv
cd ~/Lib/
git clone https://github.com/laurentkneip/opengv
In Opengv's CMakeLists.txt file, add the following below cmake_minimum_required
add_compile_options(-std=c++17)
cd opengv
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=../install
make install
DBoW2
cd ~/Lib/
git clone https://github.com/PushyamiKaveti/DBoW2
cd DBoW2
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../install
make install
DLib
cd ~/Lib/
git clone https://github.com/dorian3d/DLib
cd DLib
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../install
make install
Pangolin
cd ~/Lib/
unzip Pangolin-0.6.zip
cd Pangolin-0.6
mkdir build
cd build
cmake ..
make -j16
sudo make install
MultiCamSLAM
cuda可以不用
catkin_make -j16 \
-DCUDA_ROOT=/usr/local/cuda \
-DDBoW2_DIR=/home/lucky/Lib/DBoW2/build \
-DDLib_DIR=/home/lucky/Lib/DLib/build \
-Dopengv_DIR=/home/lucky/Lib/opengv/build \
-DGTSAM_DIR=/home/lucky/Lib/gtsam-4.1.1/build \
-DGTSAM_UNSTABLE_DIR=/home/lucky/Lib/gtsam-4.1.1/build \
-Dopengv_INC_DIR=/home/lucky/Lib/opengv/include
data准备
ls /work/data/MultiCam/ISEC_Ground1/
cam0 cam1 cam2 cam3 cam4 cam5 cam6
配置参数
ISEC_Ground1.cfg 内容:
debug_mode=0
data_path=/work/data/MultiCam/ISEC_Lab1
# calib_file_path=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Lab1/calib/02_23_2022_3cams_camchain.yaml
# calib_file_path=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Lab1/calib/02_23_2022_4cams_camchain.yaml
calib_file_path=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Lab1/calib/02_23_2022_5cams_camchain.yaml
# calib_file_path=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Lab1/calib/02_23_2022_cam0.yaml
# calib_file_path=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Lab1/calib/02_23_2022_nov.yaml # 0 1 5 6
# calib_file_path=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Lab1/calib/02_23_2022_NO_camchain.yaml # 2 5 6
# calib_file_path=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Lab1/calib/02_23_2022_stereo_cams_camchain.yaml
# calib_file_path=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Lab1/calib/02_23_2022_stereo_orbslam3.yaml
# calib_file_path=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Lab1/calib/02_23_2022_orbslam3.yaml
images_path=/work/data/MultiCam/ISEC_Lab1/
kalibr=1
frontend_params_file=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/lf_frontend.yaml
segmasks_path=segmasks
frames = 80 9092 2
radtan=1
ros=0
live_refocus=1
imgs_read=0
backend_params_file=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/lf_backend.yaml
#Segmentation params
use_segment=0
read_segmask=0
mask_type = bmp #( 1 for image , 2 for csv)
seg_settings_file=/home/auv/ros_ws/src/MC_slam_pack/MCApps/params/SegmentSettings.yaml
需要指定下列参数在src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Ground1.cfg中:
data_path=/work/data/MultiCam/ISEC_Ground1
calib_file_path=/home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/MCApps/params/MultiCam/calib/02_23_2022_5cams_camchain.yaml
images_path=/work/data/MultiCam/ISEC_Ground1/
需要指定下列参数在src/MultiCamSLAM/MCApps/params/lf_frontend.yaml中:
LogDir: /home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/log/
Vocabulary: /home/lucky/Lib/ORBvoc.txt
RUN
./devel/lib/MCApps/MCSlamapp --config_file src/MultiCamSLAM/MCApps/params/MultiCam/ISEC_Lab1/ISEC_Lab1.cfg
result
frontend:
LogDir: /home/lucky/ws_MultiCamSLAM/src/MultiCamSLAM/log/
slam_frontend.logFileName_ = "poses_landmark.txt"; // logFile_
slam_frontend.logFileName2_ = "poses_stats.txt"; // logFile2_
system:
DEFINE_string(traj_file, "./log/Tum_trajectory.txt", "trajectory file file path");