PX4FLOW flow c函式流程詳細解析

2021-08-16 02:35:25 字數 1181 閱讀 4331

近日研究過px4flow的光流演算法流程,這裡記錄分享一下:

flow.c:傳入引數:影象1,2 陀螺儀返回速率x,y,z,光流值x,y

1.計算黑森矩陣(疑似沒用上)

2.遍歷所有畫素點(圖一圖二同時遍歷),在圖一中計算compute_diff()也就是特徵點的強度,大於閾值之後,再以這個點為中心計算sad塊匹配

具體方法是:記錄下img1的該特徵點(p_1)的base1,然後在圖二中,也遍歷到了這個點(p_2),因此直接在圖二中以該點(p_2)為中心計算(winmin,winmax)領域,在領域內對每個點(point)進行adsdiff計算,該函式是進行的sad塊匹配,也就是對該點(point)再取領域進行計算。得到相似度,迴圈之下可以找到最小的dist(最大的相似度).同時記錄此時(p_2)的偏移sumx,sumy並且存入陣列dirx,diry和誤差dist,只有當誤差dist滿足小於threshold才會繼續進行(在這裡並沒有說不滿足怎麼辦,估計是預設滿足,如果不能出效果可以嘗試調大誤差容限threshold),滿足之後計算compute_subpixel()也就是計算出了(p_2)相對(p_1)的8個方向的累計誤差acc[0-8],然後與dist依次比較找到誤差最小的方向,就可以得到(p_2)在(p_1)的方向誤差的最小值mindir存入陣列subdir.到此為止,對特徵點的處理已經完成。綜上對img1中的角點(p_1), 我們得到了img2中的(p_2)同時得到了x,y方向的偏移量dirsx,dirsy和相對方向mindir, 以此為依據可以彌補後續光流運動。這部分是單個角點的操作。影象肯定有很多個角點。所有角點統計完我們能得到的是方向直方圖histx和histy。區分出的不同點的個數meancount,偏移量累加meanflowx,meanflowy.

3.不同點個數》10(小於10則視為沒有相對運動):取所有meanflowx,y的平均值。找出直方圖峰值和位置,也就是得到了最大可能偏移的sumx和sumy以及有多少個點具有這個偏移。然後是乙個if(1),else對應的是沒有相對運動。 if(1)裡面是乙個方法的選擇,滿足條件是直方圖均衡法,反之是位移累加值法,這個條件取決於setting(隨便選).直方圖均衡法:基於面積平均 位移累加求平均法。最後可以得到histflowx和histflowy作為整個影象的光流

4.得到全域性光流之後。可以選擇性進行是否要gyro補償,最後可以得到校正的全域性光流pixel_flow_x,pixel_flow_y. 還會返回乙個品質因數 也就是qual。統計的是可以區分的不同點個數

PX4原始碼分析4 PX4軟體結構

px4自動駕駛儀軟體可分為三大部分 實時作業系統 中介軟體和飛行控制棧。提供posix style的使用者操作環境,進行底層的任務排程。px4中介軟體執行於作業系統之上,提供裝置驅動和乙個微物件請求 micro object request broker,uorb 用於駕駛儀上執行的單個任務之間的非...

PX4原始碼分析5 PX4啟動流程

上電之後程式入口為firmware nuttx nuttx arch arm src stm32 stm32 start.c中的 start函式,負責stm32晶元的底層初始化,包括是時鐘,gpio等。start函式呼叫firmware nuttx nuttx sched os start.c中的o...

學習PX4前言

剛開始接觸px4原始碼很懵,覺得難,主要原因是以前看微控制器 邏輯很好理解,所以就進入了乙個誤區,把px4也像微控制器一樣去理解,如果你抱著搞懂px4,跟搞懂微控制器花一樣的時間成本去學習的心態,那確實很難 一條明明要走一天的路,你只花乙個小時去走 靜下心下來,會發現px4這座山其實並不陡,只是單純...