显示三维图片序列_SLAM结合三维检测
11.11---11.17
? 在此前一周進行yolo與cube slam整合的時候,采用ros通信的方式。存在兩個問題:一個是darknet檢測不到目標,就不對外發布檢測結果,會造成檢測結果和圖片序列對不上。另一個問題是圖片發布給darknet和cube slam的時間戳難以對齊。本周采用將darknet編譯成動態鏈接庫的形式,可以像調用API一樣直接使用darknet預先定義的類型與模型。
? 在使用時只需要將動態鏈接庫的.so文件和頭文件darknet.h在cmakelist里包含進來就行。
? 這部分工作是在304的服務器上進行,但是304臺式機不能使用sudo命令,因此無法安裝ros,這一周剩下時間在給我的臺式機配置cuda和ros環境。
11.18---11.24
? 上周采用直接darknet編譯為動態鏈接庫的方式,測試可行。這周主要將yolo加入object_slam并實現功能。
object_slam包中實現的并非完整的SLAM算法,只能算一個VO,實際上作者是利用g2o做簡單的位姿估計與優化。
在將二維檢測加入三維檢測中遇到一個問題。算法的第一幀需要相機坐標系與世界坐標系的轉換關系,這個世界坐標系不是第一幀相機坐標系,而是x,y軸所在平面為地平面,z軸向上的一個坐標系,x軸和y軸指向無所謂。因此可以簡化問題,假設x軸指向相機,即指向相機坐標系z軸反方向。
https://www.zhihu.com/video/1185163673403912192? 為了方便計算旋轉矩陣,還可以假設相機的pitch和roll都為0,這樣世界坐標系變換到相機坐標的旋轉變換就是y軸90°,x軸180°。
但是實際這樣做檢測不到立方體,包括github上issue也有人提出這個問題,即采用這種旋轉矩陣或者四元數得不到結果,必須偏一點角度。實際上我測試TUM數據集的時候,提供的ground truth顯示相機pitch大約為-30°,攝像頭使用這個姿態測試的效果比較好。視頻如下:
11.25---12.1
本周主要是在orb slam中加入三維檢測功能,以實現最終需求。
由于三維檢測只與位姿有關,因此改動主要是在tracking線程里。
在主程序,例如mono_tum.cc,mono_kitti.cc中,
SLAM.TrackMonocular(im, tframe);TrackMonocular是http://system.cc中的類方法,在TrackMonocular函數的最后調用了http://Tracking.cc中的函數
GrabImageMonocular(im, timestamp, msg_seq_id);這個函數進入tracking線程,主要是講圖片轉成灰度圖,并調用orb slam提出的勻速模型函數
TrackWithMotionModel()yolo功能實現,線條檢測和三維檢測主要是在這個部分實現。
編譯的時候報錯:darknet定義的list結構體沖突了。原因是在前幾周的代碼中都沒有用到c++ STL里的list類型,但是orb slam里應該是用到了,因此才會沖突。
總結
以上是生活随笔為你收集整理的显示三维图片序列_SLAM结合三维检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ora-01092: oracle 实例
- 下一篇: 通过反射获得私有构造器,创建对象