畢業三年了,現在是第二份工作,第一份工作已經結束一年半了,這意味著,我有一年半的時間沒有搞視覺SLAM相關的東西了,雖然在第二份工作也是做視覺相關的,但是只是用到一些目標識別和跟蹤的知識,并鍛煉了一下工程實現能力,編程能力,一直是我的一塊心病,哈哈,由此可見我不用適合做程序員,至少不會是出色的程序員,但是這畢竟是我一個比較靠譜的職業,他可以讓我生活的更好一些,所以,我還是在不斷堅持,我去面試視覺SLAM崗位,面試官都會問,你有沒有做過什么改進,可笑的是,我只是對一些開源的視覺SLAM代碼熟悉一些而已。但是不積跬步無以至千里,我還是把基礎的工作做好,隨緣吧,哈哈,佛系程序員是這樣的嗎。
今年年初我用了一年的時間完成了兩個工作,單房間和多房間掃地機的覆蓋率測試軟件,從場地搭建到軟件開發,都是我一個人,雖然很多時候感覺到孤寂,但是看到其他同事跟項目經理扯皮時,被項目經理追著不放時,我感覺我是幸運的。完成了上面的項目后,領導讓我開始調研視覺SLAM,想在我們現有的掃地機算法上加上視覺算法,重操舊業,感覺不錯,但是壓力還是不小的,我沒有信息能做好,最初的一段時間我忙著去醫院保胎,還得趕緊把駕照考出來,所以調研的進度比較慢,后來胎兒穩定了,駕照也考出來了,我的心也安定下來,專心做起工作來。
雖說是調研,但是還得實踐,不能說光看看論文,博客就可以了,那就不得不搭建環境,把算法跑起來。說到大環境,不得不讓我想起來,我在研究生時剛開始研究視覺SLAM時,那那基本上兩三天重裝一次Ubuntu系統,我還有個電子文檔專門記錄我的一些成功的操作,哪個庫怎么安裝,但是壓力確實很大,Linux系統知識,編程能力,視覺SLAM基礎知識,數學基礎,真的讓我吃不消,不知道當初為啥非要選這個方向。大概是沒有自知之明,真是慘不忍睹。
話說回來,正是有了之前的無數次失敗的經驗,以及五六年里的知識沉淀,所以這次重新搭建環境就感覺輕松很多,因為我堅信,我遇到的問題,在網上一定會找到答案的,當時你如果能跳墻那是很好的,你的視野大了不是一點半點。之前一直用的是Ubuntu16.04,現在用的是Ubuntu8.04,差別不是很大。之前搭建過orb-slam3的環境,這次也比較順暢,下一個是svo,尤其是svo2.0,費了老鼻子勁了。很多問題是因為網絡問題導致的,一個是Ubuntu上我不能跳墻,在著就是,公司網速不好,一個東西要重復下載好幾次,才有可能成功。所以第二次下載是我就使用手機熱點,確實要好很多。
一、在原有win10系統的基礎上安裝Ubuntu18.04系統
?
Windows10安裝ubuntu18.04雙系統教程 - 不妨不妨,來日方長 - 博客園
Ubuntu上安裝一個sogou輸入法,好使
搜狗輸入法linux-安裝指導搜狗輸入法for linux—支持全拼、簡拼、模糊音、云輸入、皮膚、中英混輸https://shurufa.sogou.com/linux/guide?
二、Ros melodic安裝
我按照官網和一些博客文章安裝最后在rosdep update出了問題一直解決不了,不過這篇文章有解決方法?
ubuntu18.04 ROS melodic完整版教程及錯誤處理(附帶 catkin_ws工作空間搭建)_黃宏智的博客-CSDN博客_ubuntu18.04安裝catkin
?我是用上面的方法解決的rosdep update失敗的問題,后來公司來了一個實習生,在遇到同樣的問題時,他找到了下面這個解決方案,感覺要簡單很多。
本文之后,世上再無rosdep更新失敗問題!如果有....小魚就...造福國內用戶的rosdepc出來啦,再也不用擔心rosdep初始化失敗問題。\x0a大家好,我是小魚,經過小魚的不懈努力,rosdep國產替代品rosdepc終于完成,一行代碼搞定初始化失敗問題。https://mp.weixin.qq.com/s/VGs8oWdhHH6XsHcx21lN4Q
三、 orb-slam3環境搭建
ubuntu18.04配置ORB-SLAM3(包含ROS)完整版教程_黃宏智的博客-CSDN博客
?四、svo2.0
SVO2.0 安裝編譯_HR19的博客-程序員ITS203 - 程序員ITS203
在執行catkin build指令后,需要下載很多東西,好幾個庫會因為網速的問題,無法下載,可以嘗試使用手機熱點聯網進行編譯下載,再者出現“無法獲取某個網址”錯誤時,那就重新編譯,多執行幾次編譯命令,再次編譯時不要刪除掉上一次已經下載的build等文件夾中的東西。
除了網速問題,我還遇到了幾個明顯的問題,
(1)如果遇到“std::automic<int> a;不可以在定義式直接初始化”的錯誤時,
解決方案:那就在提示出錯誤的這個文件上添加頭文件 #include<automic.h>
? (2) 如果遇到“next is not a member of boost : in /usr/include/yaml-cpp/node/detail/iterator.h”
在/usr/include/boost/next_prior.hpp中實現了boost::next的功能
解決方案:在iterator.h文件中添加 #include<boost/next_prior.hpp>
(3)如果遇到“/usr/local/include/sigslot/signal.hpp:1160:65 error: 'slots_reference ' was not declared in this space”
解決方案:將所有CMakeLists.txt中的所有的c++11替換為c++14
五、安裝realsense t265相機驅動
按照官網“librealsense/installation.md at development · IntelRealSense/librealsense · GitHub”上說的步驟來安裝,太過漫長,所以我就使用下面的方法來安裝,還有安裝ros Wrapper的步驟
(69條消息) ubuntu18.04 Intel Realsense T265與Realsense D435i 使用教程_xtdx_xty的博客-CSDN博客
六、使用realsense t265運行svo2.0
首先t265相機是omni-direction相機,對于這種相機使用的相機鏡頭比較特殊,構建鏡頭畸變模型時常用的模型有"Kannala Brandt", "MEI", "Scaramuzza",開源的框架中orb-slam3使用的是Kannala Brandt模型,vins使用的是MEI模型,svo2.0 使用的是scaramuzza模型,前兩種模型都可以用kalibr進行標定,但是kalibr 不能標定scaramuzza模型,只能用ocam_clib庫標定,所以你需要安裝matlab,然后運行ocam_calib進行標定。標定出來還需要根據svo_ros/scripts/omni_matlab_to_rpy.py進行轉換,得到一個24維的矩陣。
參考calib/blufox_25000826_fisheye.yaml文件,還需要一個mask,下面是參考vins的mask的生成方式,得到一個mask。
cv::Mat image = cv::Mat::zeros(800, 848, CV_8UC1);
cv::circle(image, cv::Point2f(424, 400), 424, cv::Scalar(255), -1, 8, 0);
cv::imwrite("mask.png", image);
cv::imshow("mask", image);
cv::waitKey(0);
return 0;
然后在launch/fronted/run_from_bag.launch文件中,將"cam0_topic” value修改為t265相機發布的話題,“camera/fisheye1/image_raw”, 然后是將pinhole.yaml改為fisheye.yaml.
然后首先將t265相機的話題發布出來
roslaunch realsense2_camera rs_t265.launch
然后運行svo2
roslaunch svo_ros realsense.launch cam_name:=realsense_t265_fisheye(這里的realsense.launch是從run_from_bag.launch文件修改過來的,我創建的t265相機的配置文件命名為 realsense_t265_fisheye.yaml)
上面的工作都做完后,我終于在周五下班前的一分鐘,運行成功了,這周工作總算有個交代。但是這周一我跑了一下比較長的走廊,視覺里程計的跟蹤效果不好,角度沒有漂移,但是尺度在開始測試后不久漂移了很多,尺度一直在縮小,不知道是不是我的相機標定結果不精確有關系。
?總結:拿到最后的結果,上面五步是不可或缺的,也用了不少時間,最后是卡在了t265相機的畸變模型上面,其實在svo pro的GitHub上也是有介紹calibration這一塊的,但是剛開始并沒有放心上,不敏感,大概是剛開始對于上面提到的那三種相機模型不熟悉緣故,后來慢慢了解了這三種模型,自己的下一步工作才清晰。要不,剛開始,不知道自己到底該做些什么,怎么做。
上面測試結果,尺度漂移的厲害,肯定是有原因的,我先從我自己的工作上找問題,看看能不能解決這個問題。然后是把imu的數據也加上,再看一下效果。