NXP飛思卡爾回顧

2021-10-19 22:33:39 字數 1290 閱讀 2263

二、難點與處理方法

三、總結

我們需要完成一輛搭載攝像頭智慧型車,並且成跑在規定賽道內,成功識別並且通行各種賽道元素,然後同時完成一圈賽道耗時越少越好,我們做的是提高的雙車會車,即兩場車背道而行,先達到斷道的a車停在場外,等待另外一輛b車到來,等到b車通過後,a車再自己回到賽道,然後最終一起回到起跑線。

說明我們首先要懂的電機舵機控制,理解pwm,理解占空比,然後讓車能夠動起來,然後發現k60的庫對電機舵機的驅動支援很高。

這個很關鍵,這個的專案輸入就是攝像頭,輸出就是電機舵機對應的pwm,對應關係就是演算法。難點之一就是輸入輸出的實時要求高,因為是競速的。

因為要保證實時性,所以必須保證我們真正用於演算法輸入的資料是越輕量越好的,所以我們把影象一般進行灰度話,或者二值化,選用ov7725攝像頭,自帶硬體二值化。這樣大大減小了輸入資料的大小,使實時效能得到保障。

及得到了處理後的輸入後怎麼去對映輸出,涉及到pid,簡單地講pid就是水的故事,就如同給缸子灌水,具體可以參考我最早的部落格,不同水位的時候用不同的容器,其次就是乙個基本的原理分析,當賽道是直路時,所採集的二值化影象應該是對稱的黑線,因為賽道是白色,賽道周圍邊界是藍色(二值化後肯定為黑色),那麼小車最好的行駛軌跡自然是最好,因為左右轉動都及時方便,其次當彎道出現時,自然中線就發生變化,根據變化來做出相應的調整。很有意思的一點,pid這裡用了c語言的乙個整數型相除,在乙個數比另外乙個數小時,都為0,即不會過擬合,然後在p調節不到位時又能用乙個二次的關係去時給予乙個更合理的修正,同時做到這些事情竟然沒有用到乙個條件判斷語句,666!輸出 = midpoint + p * err0+d * lasterro * lasterro;

1.電機驅動硬體那邊的驅動能力之前不足,給滿pwm都跑不起來。 解決方法:乙個字,修

2.兩個電機給相同pwm其速度略微有差距,在速度2.3公尺以上時成為大問題。解決方法:找出誤差區間,給乙個補償給相對較慢的。

3.反光和賽道滑。洗潔精帕子擦輪子,反光比賽方會解決,我當時想用濾光片來著。

4.各個賽道元素識別。識別的方式自然就是利用不同元素的差異,自然不是我們差異,而是攝像頭識別到的。就是車跑著的時候我們如何知道它的一些情況呢,這個時候自然就要用硬體debug,點燈,而且是高亮的燈。

5.兩車通訊我們用的nrf,這個也有注意的,你注意到了這個,這個方式就很好,就nrf通訊是跟頻道有關係的,記得自己改改,不要收到別人的命令了。因為nrf的傳輸距離還是挺遠的,所以當時還蒙了誰讓它動的。

這個專案就是磨練人的意志力,然後也學會了很多東西,也是第一次接觸到演算法類的東西,當你看到自己的車飛快的駛過賽道時你覺得一切都值得,那個時候經常調車調到四五點,然後紅旗連鎖吃盒回鍋肉雙拼,這是值得懷戀的日子啊

飛思卡爾ATD模組

s12xs系列mcu的atd模組有27個暫存器,六個轉換控制暫存器,兩個轉換狀態暫存器,乙個比較使能暫存器,乙個比較方式暫存器和16個轉換結果暫存器,附上一段例程 void atd init void 一般常用到的也就是這段例程中用到的幾個暫存器。include include derivative...

飛思卡爾中斷設定

對於飛思卡爾codewarrior的中斷使用,一般有3種方法 1.把 pragma trap proc放在中斷程式前面,並把中斷向量表放到 prm。例如 pragma trap proc void pit1 void 例如 interrupt void intpit1 void 向量表的首位址放入 ...

飛思卡爾智慧型車準備

第乙個兩周的計畫 1.eda 電子設計自動化 的學習 掌握 vhdl硬體描述語言的基礎,學習語法規範並進行程式設計,做好功能和時序 為進一步學習cpld 和 fpga的燒錄程式 製作電路板做好基礎。例程 多路選擇器的vhdl描述 暫存器描述及其vhdl語言現象 一位二進位制全加器的vhdl描述等。2...