原创 重讀數據結構之爬樓梯問題(動態規劃)

leetcode能讓人身心愉悅(誤),每天抽出一點時間做一道題更是養生之道。今天做一道最經典的爬樓梯問題,即一次可以上一級或者兩級臺階,求上n級臺階有多少種組合。這樣的問題屬於動態規劃問題,也就是說,我們只需要關注之前一步的子問題的求解,

原创 軟件開發隨筆:用C++實現上下層級的類的數據共享

一般在工程的實現中,我都喜歡把oop發揮到極致,也就是把一切都封裝成類,並且用指針實現類之間的層級調用,那麼在面臨類之間的數據流通與共享時,存在一個原則,稱作接口與實現分離,下層的類提供接口,上層通過接口獲取下層的數據,或者向下層寫數據。

原创 ros源碼分析(四)service的實時反饋機制

服務(service)向來不是一個陌生的詞彙,它在我們的領域一般成對存在,分爲客戶端和服務器,客戶端提出請求,服務器處理並給予迴應。在ros節點間的通信過程中,如果需要獲取對面進程的一些信息,利用話題通信需要兩次來回通訊來確認該次請求與回

原创 ros源碼分析(三)ros::spin( )背後發生的事

接收器subscriber的demo大家也耳熟能詳,它和發佈器一樣,在nodehandle中調用subscribe函數,實現話題名與回調函數的註冊,而在進程的main函數中,又在調用ros::spin函數,那麼就從這兩個部分依次分析接收器

原创 ros源碼探索(二)publish之後發生了什麼?

隔了很久才寫第二篇實在是抱歉。繼續從ros wiki的角度下手,最開始接觸的publisher和subscriber的demo十分經典,而進程間通信這一過程本身就是它的最大賣點,發佈器、接收器這樣的名詞以及advertise、publis

原创 三維SLAM算法SegMap源碼閱讀(二)前端篇

上一篇對SegMap整體的流程與模塊進行了概括,接下來我們看看slam的前端部分。 一、匹配器 SegMatch是SegMap的最大創新點,利用點雲分割進行地圖的語義化,能夠更好的實現迴環。這篇論文的地址是https://arxiv.or

原创 三維SLAM算法SegMap源碼閱讀(一)概要篇

今天來閱讀一下比較前沿的三維點雲與SLAM技術的SegMap,望文生義,它是基於點雲的分割(segmentation)與語義識別,從而降低數據的處理量,這樣也降低了對環境的依賴,增強了魯棒性。要注意,在下載源碼的同時需要下載laser_s

原创 記錄一下TX2,ros,Python,opencv與TensorFlow的血海深坑

最近爲了讓機器人更加聰慧而善解人意,準備在英偉達的TX2上開發一下視覺目標檢測與速度預判,需要一種比較好的方案,因此選擇了Retinanet(Resnet)殘差網絡進行圖像的識別。它需要配置TensorFlow1.4.0以上級別的框架,以

原创 哈希表的C++實現

哈希表是一種基於鍵值映射的快速搜索的數據結構,時間複雜度基本上是O(n)。針對鍵與值的映射,我們通過哈希函數(散列函數)來實現,它大致有數字分析法、平方取中法、摺疊法、除留餘數法等,而除留餘數法對我們來說最爲常見,也更適合初學者理解。但是

原创 三維SLAM算法LeGO-LOAM源碼閱讀(四)

最後一個部分是對位姿信息的融合計算,難得代碼不長,先看看構造函數: //綜合後發送的里程計信息 pubLaserOdometry2 = nh.advertise<nav_msgs::Odometry> ("/integrated_to_

原创 三維SLAM算法LeGO-LOAM源碼閱讀(三)

再來看看第三部分,這一節是建圖部分,與原有LOAM不同的是增加了迴環檢測,我們可以用經典的graphSLAM的思想來看它的過程。 定位到主函數,它與上一個節點類似,也是一個run函數不停輪轉,它對實時性要求較高。 void run(){

原创 三維SLAM算法LeGO-LOAM源碼閱讀(二)

接下來是featureAssociation.cpp,里程計部分,它分爲特徵點的提取與匹配兩部分。這是一個非常長的代碼,首先進入主函數: int main(int argc, char** argv) { ros::init(a

原创 三維SLAM算法LeGO-LOAM源碼閱讀(一)

LeGO-LOAM是LOAM的增強版,在LOAM的基礎上增加了迴環檢測。論文地址:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM/blob/master/Shan_Englot_IR

原创 KNN算法的KD樹C++實現

KD樹本質上是一種二叉樹,它擁有具備特定排列順序的分裂節點以便查找數據,即在二叉排序樹之中,某個分裂節點左子樹的值均小於分裂節點的值,而右側均大於分裂節點的值,如果用中序遍歷這棵樹,它的打印順序將是從小到大遞增的順序。當然剩下的科普就不說

原创 Dijkstra算法以及鄰接表與堆優化

Dijkstra算法是最經典的單源最短路算法,它很像是廣度優先遍歷與最小生成樹的結合,從出發點開始向四周擴散,直到搜索完畢所有節點爲止,因此它很適合用來計算節點較少的稀疏圖的最短路徑問題,但是它以簡單粗暴著稱,算法思想屬於貪心法的範疇。