第14回Visual SLAM講座 第2版 ch13の作成と実行問題

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 シーケンスの直接追跡に失敗していることがわかります。

おすすめ

転載: blog.csdn.net/weixin_62952541/article/details/132175116