調車總結,留存備份;
一年的飛思卡爾調車結束了,在這個過程中學到了很多。我調的是雙車追逐組,c車模,用的是鷹眼ov7725攝像頭,主控為arm kl26。調車不是乙個人就能幹好的,只有大家一塊共同努力,才能取的好的成績。
下面我就按照自己的理解講一下雙車組。因為感測器選用的是攝像頭,所以影象處理是很大的問題,也是關鍵的問題。
一、攝像頭的選擇
剛開始的時我們用的是藍宙捕食者4的攝像頭,但是用kl26晶元沒能把影象採集好,所以換成了鷹眼7725。在後期的調車中發現這兩個攝像頭還是有很多區別的。鷹眼7725是硬體二值化,相對來說更好一點,因為省去了軟體二值化的部分,加快了程式的執行週期,但是乙個主要問題是鷹眼是乙個比較型的攝像頭,如果看到的影象絕大部分是黑色(藍膜),那麼他的影象就會變得很亂,在原本該是黑色的部分會出現很多白的。藍宙捕食者倒沒這個問題,但根據學長講好像捕食者只能50幀,而鷹眼最多可以設定成150幀。
二、廣角鏡的選擇與失真矯正
我們選擇的是150°的廣角鏡,如果不進行矯正的話失真還是很嚴重的(左圖),會大大影響中線的提取與影象分析。經過縱向矯正後如右圖,可見影象水平方向畸變已經校正的差不多,對於賽道資訊判斷干擾幾乎可以消除。校正方法為找出影象中畸變的最大值和最小值,然後擬合線性關係,將原影象按照擬合出的關係對映至新的影象陣列。
三、尋邊線方式
對於攝像頭組來說,其根本就是根據影象找出賽道的中心線,然後根據中心線的偏差經過一系列處理控制舵機打角。所以重中之重就是找中心線。一副影象有好多的點,選擇乙個好的方法找中心線將會大大縮短程式的執行週期,更有利於對於小車的控制。總的來說尋線有三種方法,一、從中間向兩邊,二、根據上一行的中心線所在往兩邊。三、在上一行左邊界附近找左邊界,在上一行右邊界附近找右邊界。很顯然第三種方法效率更高。對於第三種方法也就是邊沿跟蹤檢測法,很可能出現一邊邊線有跳變,然後在你查詢的這個範圍內沒找到邊線的情況。如左圖。右邊界上面有跳變,在上一行 「右邊界附近」並不能找到跳變點,所以找線失敗。這時就要加乙個判斷,如果沒找到跳變,而且大部分是黑點,說明是在賽道外,如果是找右邊界時出現這種情況,就接著往左找跳變,相反如果大部分是白,則證明是在賽道內,就往右找。同理找左邊界時出現這種情況處理方式一樣。
還有就是從中間向兩邊找線,大部分採取的是從最長的白線行(右圖紅線)往兩邊找邊線,這樣找線簡單而且準確率高,就是執行時間長,並不是乙個太好的方法。 (最長白線行尋找方法:從影象底部往上掃瞄,如果是白就++,是白到黑跳變就結束本列的尋找,開始尋找下一列,就是取最大白點數所在列往兩邊掃瞄。)
四、中線提取
邊線提取完畢後就是根據邊線找中心線了,最簡單的就是左右邊界都找到,這時候直接左右邊界中心就是中心線所在了。但是在彎道,或者在直道貼邊跑時,往往會出現一邊丟線的情況,這時候如果還是左右邊界取中線的話得到的影象就如左圖所示,這樣的中線無疑偏離了實際賽道的中線,很容易車就會拐出界。所以在彎道處出現一邊丟線情況時應該根據另一邊界平移合適的距離得到中線(如右圖)。
這種方法的話會出現中線不連續的情況,但是發現他並不影響實際的控制。如果看不過去可以採取一些措施,首先判斷是彎道,然後才採取平移邊線的方式找中線。
五、特殊元素處理
1、十字
十字處兩邊都丟,或者一邊丟線另一邊不正常的趨勢(比如左邊界呈減小趨勢,右邊界呈增加趨勢),根據這一特徵可以很簡單的判斷出十字。
如果對十字不進行特殊處理,當稍微斜點進入十字的話影象就會亂,如圖。這樣車很明顯會往左稍微拐一下,很可能就出界。分析十字處的影象可以發現他有乙個明顯的特徵,就是中線存在跳變。這樣我們就能找到上下兩個跳變,然後把這兩個跳變點之間用直線連線起來就好了。十字處理好後,單車跑就沒有太大問題了。
2、黑三角
分析可知黑三角肯定出現在十字處(圖為沒對三角處理圖形)進行黑三角是否存在的判斷。
分析影象知黑三角有幾個特徵
1、在十字中心處出現;2、左右都是白的;3、上下都是白的。
根據這三個特徵,我選擇從影象底部中心左右各八行向上找,碰到黑就截止。如果有一部分黑線截止行明顯小於最大黑線截止行,而且這些長度都差不多,就可以大致判斷可能存在三角。然後看在這些可能存在三角的區域左右是不是都是白,如果是,就可以判斷存在黑三角。只要十字不誤判,這種方法幾乎沒誤判。
識別到黑三角之後就是判斷三角的方向了。這個相對來說就比較簡單了,再判斷黑三角是否存在的時候,建立過乙個陣列,用來存放影象底部左右八行黑線截止行的長度。三角存在的情況下,判斷陣列裡面長度大致相等幾個數的趨勢,如果是增加趨勢,則三角向右,反之減小趨勢則三角向左。判斷出三角方向後就可以進行相應的補線控制車拐彎了。
具體補線方式:三角向左,車應該向左拐,所以從上向下尋找左邊界的跳變,找到後令該行中線為0,令有效行為(rowmax---該行座標)如果尋找到中線下邊乙個跳變,就直接把跳變點和左邊界的跳變點連起來當中線(左),如果沒跳變,就令最下行中線為40 ,然後連線兩個點(右)、
(實際三角上部分中線應該不存在,存在也不處理ㄟ(⊙ω⊙ㄟ) 因為沒有好的圖了)
前車遇到三角應該直走,所以前車的話直接十字處理就行了,不需要再單獨處理三角,因為我們選擇上下跳變補線的方式三角不影響 其補線。
3、直道超車區
分析影象知直道超車區明顯特徵是一邊邊線正常,另一邊有跳變,而且還是在直道上才有。根據這些特徵就能判斷了,在直道上一邊線突然跳變,而且接下來的十行賽道寬度均大於跳變行處的賽道寬度,則可以判斷 是直道超車區。直道超車區判斷出來後,就可以對中線進行相應處理讓車靠邊停或者直走。如果進超車區,在跳變行上 中線就是該邊界減15(減多少自己嘗試出來),實際效果不錯。車能進入直道超車區。如果直走 ,則中線就根據左邊界平移合適距離即可。
從直道超車區出來後,不需要進行特殊處理,只要不要讓他檢測黑三角就行。
至此,影象處理算是結束。
影象處理,說白了就是翻來覆去的對那麼多資料進行分析,尤其是特殊元素,更是乙個「找不同」的過程,只要找到不同元素對所獨有的特徵,接下來的就好弄了。
六、雙車通訊
要讓兩個車實現超車,什麼時候拐彎,什麼時候進直道超車區,就是乙個邏輯時序問題。
如圖,掌握好標誌位的傳送與接收,還有什麼時候清除標誌位就ok
七、方向速度控制
獲得中心線後,就可以根據中心線求出偏差,然後pid控制舵機。加權對控制有很好的效果,速度的話注意道前減速,即直道進彎使減速,入彎後加速。調pid引數很磨人,要堅持。
總之
一年的調車是乙個漫長的過程,中間會發生很多事情,唯有堅持下來,才能獲得好成績。很多時候 ,你會發現自己找了幾天的錯誤其實就是乙個變數定義錯了型別,又或者是少寫了乙個符號,這真的是很煩人的情況,但是也是在所難免。堅持!唯有堅持下來,一切才有希望,苦點自己沒什麼,在這個過程中學到的才是最重要的。共勉~
攝像頭雙車追逐程式
十一屆藍橋模擬 擺動序列
問題描述 如果乙個序列的奇數項都比前一項大,偶數項都比前一項小,則稱為乙個擺動序列。即 a 2i a 2i 小明想知道,長度為 m,每個數都是 1 到 n 之間的正整數的擺動序列一共有多少個。輸入格式 輸入一行包含兩個整數 m,n。輸出格式 輸出乙個整數,表示答案。答案可能很大,請輸出答案除以100...
第十一屆藍橋杯
問題描述 小藍要為一條街的住戶製作門牌號。這條街一共有 2020 位住戶,門牌號從 1 到 2020 編號。小藍製作門牌的方法是先製作 0 到 9 這幾個數字字元,最後根據需要將字 符貼上到門牌上,例如門牌 1017 需要依次貼上字元 1 0 1 7,即需要 1 個 字元 0,2 個字元 1,1 個...
恩智浦斥資17 8億美元收購Marvel無線業務
techweb 荷蘭晶元製造商恩智浦半導體公司週三表示,其全資子公司已與marvell達成最終協議,恩智浦將以17.6 億美元的全現金資產交易收購marvell的無線連線組合,收購包括marvell的程式設計客棧wifi連線業務部門 藍芽技術組合和相關資產。marvell在全球擁程式設計客棧有約 5...