1. Gteset ライブラリをインストールする
sudo apt-get install libgtest-dev
cd /usr/src/gtest
sudo mkdir build
cd build
sudo cmake .. //一定要以sudo的方式运行,否则没有写入权限
sudo make //这个也一样要以sudo的方式
sudo cp libgtest*.a /usr/local/lib //将生成的libgtest.a 和 libgtest_main.a 拷贝到系统的lib路径下
2.fmtを変更する
すべての CmakeList ファイルの後に追加します fmt,需要修改的有以下几处:
/app下的:
add_executable(run_kitti_stereo run_kitti_stereo.cpp)
target_link_libraries(run_kitti_stereo myslam ${THIRD_PARTY_LIBS} fmt )
SHARE
/src: ここでも次のように変更する必要があります。STATIC:
add_library(myslam STATIC
frame.cpp
mappoint.cpp
map.cpp
camera.cpp
config.cpp
feature.cpp
frontend.cpp
backend.cpp
viewer.cpp
visual_odometry.cpp
dataset.cpp)
target_link_libraries(myslam
${THIRD_PARTY_LIBS} fmt )
/test の下:
SET(TEST_SOURCES test_triangulation)
FOREACH (test_src ${TEST_SOURCES})
ADD_EXECUTABLE(${test_src} ${test_src}.cpp)
TARGET_LINK_LIBRARIES(${test_src} ${THIRD_PARTY_LIBS} myslam fmt )
ADD_TEST(${test_src} ${test_src})
ENDFOREACH (test_src)
3. kitti_stereo.cppを変更する
行assert(vo->Init() == true)をコメントアウトし、vo->Init()に変更する必要があります。
myslam::VisualOdometry::Ptr vo(
new myslam::VisualOdometry(FLAGS_config_file));
// assert(vo->Init() == true);
vo->Init();
vo->Run();
4. データセットをダウンロードする
Baidu Netdisk を共有しましょう: kitti 抽出コード: 2p1k
(ファイル全体は約 22G と非常に大きいので、最初に 00 シーケンスをダウンロードできます)
5. /config の下のdefault.yaml にあるデータセットのパスを変更します。
%YAML:1.0
# data
# the tum dataset directory, change it to yours!
# dataset_dir: /media/xiang/Data/Dataset/Kitti/dataset/sequences/00
//下面是需要你根据自己的路径修改:
dataset_dir: /media/tzy/TZY-YP/VSLAM/Dataset/KITTI/data_odometry_gray/dataset/sequences/00
# camera intrinsics
camera.fx: 517.3
camera.fy: 516.5
camera.cx: 325.1
camera.cy: 249.7
num_features: 150
num_features_init: 50
num_features_tracking: 50
6. コンパイルして実行する
cd ch13
mkdir build
cd build
cmake ..
make
テスト:
cd bin
./test_triangulation
走る:
/bin パスの下で実行しないように注意してください。/ch13 の下で実行する必要があります。
回到上一级目录:
cd ..
./bin/run_kitti_stereo
実行結果:
7. すべてのマップトラックを表示する必要がある場合
viewer.cpp の UpdateMap() 関数を変更します。
void Viewer::UpdateMap() {
std::unique_lock<std::mutex> lck(viewer_data_mutex_);
assert(map_ != nullptr);
active_keyframes_ = map_->GetActiveKeyFrames();
//active_landmarks_ = map_->GetActiveMapPoints();
active_landmarks_ = map_->GetAllMapPoints(); // 改为all mappoints,显示整体地图
map_updated_ = true;
}
再コンパイルして実行すると、結果は図のようになり、軌跡とマップが大きくずれており、01 シーケンスの直接追跡に失敗していることがわかります。