視覺slam十四講 第6講非線性優化篇踩坑

2021-10-08 15:05:06 字數 1049 閱讀 2972

為了以後方便,我利用ros-kinetic實踐《視覺slam十四講》中的程式,其中在6.3節ceres實踐篇中,遇到了乙個坑,搞了一下午才搞出來。在按照書中內容編寫好程式及庫依賴後,編譯程式,出現了下面的錯誤 :

undefined reference to symbol 『pthread_rwlock_wrlock@@glibc_2.2.5』

這個搞了一下午,查到很多方法都集中再一點上,libpthread.a這個庫沒有引用好。但是每個方法試過後都不管用,直到我重新檢查我的cmakelists檔案後才發現問題,這裡是ceres庫沒有引用好,格式出錯了。正確的格式為:

find_package(ceres required)

include_directories($)

add_executable(cerescurvefitting cerescurvefitting.cpp)

target_link_libraries(cerescurvefitting $

$)

之前我一直把ceres大小寫搞錯了,真尷尬。不過在修改前,我也先用網上的方法自查了一遍libpthread.a中pthread_rwlock_wrlock()函式,後來發現這個真沒有,檢視pthread_rwlock_wrlock()方法為:

man -k pthread_rwlock_wrlock
新增方法為:

sudo apt-get install glibc-doc

sudo apt-get install manpages-posix-dev

編譯後有可能出現chrono庫里的函式沒有宣告的錯誤,這裡主要是c++的引用標準出現錯誤,可以在cmakelists檔案中加入一句話:

set(cmake_cxx_flags "-std=c++11"

)

最後,用ros編寫《視覺slam十四講》中的程式,其實在main函式中直接寫就可以了,相當於寫乙個普通的c++程式,之後再用ros編譯。

《視覺SLAM十四講》第2講

目錄本講主要內容 1 視覺slam中的感測器 2 經典視覺slam框架 3 slam問題的數學表述 想象乙個在室內的移動機械人在自由地探索室內的環境,那麼定位與建圖可以直觀地理解成 1 我在什麼地方?定位 2 周圍環境是怎樣的?建圖 而要完成定位和建圖則需要各種感測器的支援。感測器一般可以分為兩類,...

視覺SLAM十四講第四講

主要目標 理解李群與李代數的概念,掌握 so 3 se 3 與對應李代數的表示方式。理解 bch 近似的意義。學會在李代數上的擾動模型。使用 sophus 對李代數進行運算。旋轉矩陣自身是帶有約束的 正交且行列式為 1 它們作為優化變數時,會引入額外的約束,使優化變得困難。通過李群 李代數間的轉換關...

視覺SLAM十四講 第1講 預備知識

何為高斯分布?它的一維形式是什麼樣子?高維形式又如何?參考博文 1 2 3 答 高斯分布 gaussian distribution 又稱為正態分佈 normal distribution 是一種非常重要的概率分布。有幾種不同的方法用來說明乙個隨機變數,最直觀的方法是概率密度函式,這種方法能夠表示隨...