[随笔]2019省电赛无人机题(B题)总结
生活随笔
收集整理的這篇文章主要介紹了
[随笔]2019省电赛无人机题(B题)总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 2019/8/7~2019/8/10在江蘇賽區參加了省電子設計競賽,這次也是省電賽和全國電賽重合的一年
- 選擇的題目是無人機題
- 先說結果吧,直接白給了,挺遺憾的
- 電賽結束挺久了,作為一個從飛行器設計轉到計算機科學的大三學生,嵌入式和自動控制相關的東西一直作為業余愛好研究,實在占精力,轉專業要好好學習,以后估計不再搞了。最后一場比賽也沒取得啥成績還是挺遺憾的, 正好替代社會實踐要交總結,這里隨便寫點回顧總結好了
- 想做無人機題這個想法蠻久以前就有了,當時還在做RM。一直以來做了太多控制題了,從電賽的智能窗簾、智能臺燈、寫字機器人,到RM的步兵車控制,再到去年電賽搞得手勢識別裝置,再做一個類似的東西,一來控制題通常難度不高面臨的競爭壓力太大,二來也沒法學到什么東西,沒多大意思??赡苁亲詈笠淮螀⒓与娮釉O計類的比賽了,要做就做個難的!正好還有一個和多旋翼控制解藕相關的項目在做,于是就有了做四旋翼的念頭。
- 今年七月初開始準備電賽時統計了一下前幾年的題目,根據趨勢來看,傳統控制題似乎在逐漸退出,取而代之的是一種人工智能題。比如去年的手勢識別裝置,今年的紙張檢測裝置似乎也是的。這些題偽裝成傳感器應用題,表面上看十分簡單,只要把傳感器調通就好了,但只這樣做毫無競爭力,組委會真正想要的是讓你設計一個特征,利用指定傳感器檢測它,并通過不斷測試獲取大量樣本,然后用人工智能的方法去學習這個特征,這樣做的隊如果搞好了效果拔群,比傳統方法強很多。我們去年就吃了這個虧了,印象深刻。。。??紤]到時間緊張,現在去嘗試這個新題型不確定因素太多,所以更加堅定了做四旋翼題的想法。
- 今年是ti贊助的,考慮到以前瑞薩時期限制過飛控芯片,我們需要搞一個ti傳感器的飛控。最初是打算學習相關原理完全從底層寫的,但是因為各種原因拖到7月放假才準備,寫肯定來不及了,轉而考慮用成品飛控代碼改,還要自己制版仿造一個飛控,這樣如果限定飛控自制也不怕啦。
- 放假第二天,商討后購買了匿名的tm4c版本飛控,立即開始準備。我負責飛控改編,買了和匿名同型號的tm4c123g lunchpad,開始學習ti的庫函數。另一個隊友G負責視覺部分,他是飛設的需要實習,于是帶著openmv去西安了。還有一個隊友Z,他之前也是做RM電控的,于是也在一起看飛控,隊伍里只有他會制版,所以制版搞電路相關的工作也是他來搞。
- 時間過得很快,憑借32的基礎,很快就學了不少ti板子的使用方法(相關內容放在博客上了),但還是不夠快,想要完全學到可以從底層寫肯定來不及了,于是轉而直接研究匿名的程序。
- 不得不說匿名的代碼習慣真的8行,注釋太少,還有好多不知道是開發一半去掉了,還是版本變更沒刪的奇怪內容,看得相當費勁。不過還是基本看了大概。我是從外圍的數據存儲、上位機通信、任務調度開始看的,最后看到飛行控制任務、飛行數據這些,關于傳感器配置什么的因為底層不太會直接沒看。
- 大概7月中旬飛控看差不多了,這時候隊友G也回了,一起把飛控框架梳理了一遍。隊友Z這會去蘇州呆了幾天,于是我和G開始搞視覺聯調。
- 先做了一個水平的色塊追蹤,雖然openmv幀率低點,但是因為飛機速度慢,所以表現還不錯。(注意這里要調整一下openmv數據串口中斷優先級到1)。做通訊的時候遇到了一些問題,因為不太會Python,所以在數據類型處理這塊繞了不少彎路,好在最后也搞定了
- 之后做了個機腹俯拍的色塊追蹤,對標前年跟隨小車那個題。發現效果差了很多,肯定不是幀率的問題,可是pid調來調去都很晃。經過一番討論,認定問題出在openmv的安裝上,因為是直接粘在機腹的,當飛機移動時相機也會傾斜,這樣色塊在相機視野的位置也變了,形成了一個正反饋。找到問題后做了一個坐標變換補償,效果就很好啦。關于這個補償,詳見 ANO匿名飛控分析(3)— 姿態解算原理及代碼分析 開頭簡介部分的舉例
- 這期間匿名的飛控燒了好幾次二極管,也不知道是為什么,雖然修好了,但是影響進度影響蠻多的,最后湊錢又買了一個新飛控以求穩妥。眼看快比賽了,前幾年的題來不及搞了,最后匆匆做了一個視覺巡線,沒怎么調效果也就一般吧,做好的時候已經是比賽前一天晚上了。
- 隊友Z從蘇州回來后就不看好飛機題了,總覺得我們準備不行,系統穩定性太差,拿不了獎,經常勸我們改做控制。我和G都是早就想搞飛機了,但是看這個情況也難免有點動搖。Z回來之后就不看飛控了,主要在搞仿制的飛控轉接版(直接插lunchpad),于是讓他也搞點控制題的東西備用,到時侯看題行事。
- 在比賽前還做了一個小東西,因為聽說openmv不可以現場調閾值,擔心現場燈光影響識別,我拿stm32做了一個openmv閾值調試器。大概原理就是32和omv通信,獲取原始閾值和圖像lab信息。因為320*240的圖像lab信息有300k左右,stm32f407的RAM空間不足,直接開數組就爆棧了,所以不得已只好做成ROM暫存。ROM讀寫速度慢,存數據的時候搞了一個雙緩沖避免丟包。利用外接編碼器調整閾值,顯示的時候分段讀出圖像lab數據,按閾值判斷黑白顯示在lcd屏上,每次只刷新現實顏色變化的點。最后效果還是蠻好的,可惜32的spi通訊沒調通,不得已用了串口dma接受,讀圖速度太慢,波特率50000估計要讀個3到5秒。
- 終于到了出題的日子,看了眼題,果然又沒有控制題,四旋翼出了一個電力巡線。我心里其實還是蠻高興的,這下沒有借口了,好好做好四旋翼就好了!但是隊友Z悶悶不樂,后來一直勸我們搞電磁炮那個題。。。我們搞電基本沒搞過,真的不怎么想弄,搞得團隊士氣一直不高,天天都有不少負能量。
- 總之先做題吧,因為Z沒怎么看飛控和omv,基本沒法參加編程工作,感覺他一直不知道要干啥,無所事事的感覺,三個人不能齊心協力感覺真的很差,我和G的壓力也更大了,賊難受。
- 比賽第一天想了想方案,可是沒啥好想法。電線太細,從側面實在不好識別,難以做成閉環控制,B桿處的180度掉頭也是難點。嘗試了一下開環飛,發現飛遠了就很飄,可能會撞桿或者撞線,只能作罷。這一天下午飛機還炸了一次,損壞了自制的飛控板。炸雞原因是Z焊的xt60一轉二接頭虛焊。。。所幸沒傷到光流什么的飛控組件,到晚上才修好
- 晚上終于商量出一個差不多的方案,一個攝像頭側拍識別桿,一個攝像頭伸出去到槳護位置并且架高,這樣就可以利用較大的視野,在不把omv伸到線正上方的情況下拍到電線的俯視角度。飛行流程是:自動起飛到1m1高度,前飛直到識別到桿A,穩定一下,開環前飛50cm,慢慢左平移直到識別到線,利用線位置做閉環飛到B,利用期望速度積分推測飛行距離,快到b的時候轉為開環前飛以免識別到b桿底座,找到b之后穩定一下,掉頭按同樣的流程飛回來。拍照選用了穿越機相機小方狗,無限連拍策略,只求拍到就可以。
- 第二天上午搭好了初始結構,用一根5mm碳管做成L形支架把openmv架了出去,試飛的時候抖動很嚴重,完全沒法識別。只能改方案,把架高的部分去掉,但是還是抖,再次修改成兩個碳桿伸出來,中間用一個木片鏈接,終于不抖了。
- 搞好結構已經晚上了,趕緊開始測試掛線,效果卻不理想。分析原因是因為沒有架高,視野很窄,飛機稍微調節一下就會超出視野邊界。沒辦法重新想方案實在來不及,干脆把openmv伸遠一點,直接伸到線正上方。這樣再測試就可以穩定掛線了,手動控制前后飛行也不會脫出。架出去的一個問題是openmv會撞桿,這樣只能靠積分測算距離,在b桿前解鎖脫出,還好飛行距離較近,誤差不會大到撞桿
- 接下來的難點就在于轉180度了,本來想著鎖死yaw軸全程平移的,但因為飛機左右不對稱,這樣返航時就不能閉環了,只好選擇轉yaw軸掉頭。轉yaw軸有一個問題,就是沒法閉環,因為室內磁力計誤差太大,yaw指向反饋不準。雖然可以在線上靠線斜率調整,但是比較危險,所以還是希望盡量不要轉yaw軸。
- 總之先寫了一個原地轉動的程序試驗一下,結果飛機剛轉了一點就開始亂飄,差點撞墻。分析了一番,應該是光流消旋的問題。匿名的光流是閉源的,所以也沒法調整。最后找到了一個折衷方案,就是減小旋轉角度,加大旋轉速度,這樣飛機轉動時間短,光流失效時間也短,不會漂太多。最終的掉頭方案改為:找到b桿后,前飛50cm,左轉90度,前飛直到識別到b桿,再前飛70cm,左轉90度,這樣就接入到重復A至B的流程中了。這里還做了一個保險,轉過第一個90后的平飛段會進行積分,如果飛了很遠都沒檢測到b桿,或者飛了很近就檢測到,通通認為桿識別錯誤,這時就完全靠積分來確定轉向時機了。
- 這時比賽時間也差不多快要結束,隊友Z寫完報告后表示不玩了,于是只有我和G繼續奮戰。
項目二的自動懸停測試過沒啥問題,因為沒仔細看規則,還以為項目二可以換程序,所以單獨做了一個自動起飛懸停的程序,這也為最后的白給埋下禍根。 - 很快比賽結束,到了測評的日子。比賽場地鋪了了灰白條紋,測試飛行時直接開始亂飛了。當時直接傻了,還以為程序不對,心中做好了白給的準備。最后向評委提議,要求換到白布的場地,這才恢復正常。想來應該是光流在灰白地面上失效了。
- 換到白布地面的第一輪飛行很成功,一路飛回了A,可惜最后自動降落不成功。第二輪試飛誤識別到場地邊上的窗戶了,沒有成功完成。這一結果可以說超出了預期,應該也是我們學校表現數一數二的隊伍了,評委老師也表示我們的方案很好。
- 接下來項目二因為程序不對直接放棄了。這個非常可惜,項目三完成得還可以,就是用時比較長。
- 出了賽場感覺還不錯,雖然項目二很可惜,但是繞桿真的完成得超出預期。聽說第一天20個隊只完成了2個隊,心里感覺還是有個交代了
- 過了兩天出成績了,很可惜啥都沒得著。因為項目一沒降落所以一分都沒有,項目二也沒分,相當于只有一個自主編程分,這樣肯定是涼涼沒跑??戳丝雌渌?#xff0c;應該是飛個懸停就可以省二的,花了那么多精力做繞桿卻沒拿到分,又被規則坑了一波,真的是挺傷的。
- 雖然結果不好,但是這次電賽也是一次難忘的經歷了,學到了很多東西,也做到了自己滿意的程度,就寫到這里吧
以下是準備比賽期間的一些學習總結,飛控分析還有幾篇沒寫,包括pid和濾波什么的,以后有空再說吧
- TM4C123G學習記錄(1)–時鐘
- TM4C123G學習記錄(2)–GPIO
- TM4C123G學習記錄(3)–外部中斷
- TM4C123G學習記錄(4)–關于ROM前綴函數和HWREG函數
- TM4C123G學習記錄(5)–PWM輸出
- TM4C123G學習記錄(6)–UART
- TM4C123G學習記錄(7)–輸入捕獲
- ANO匿名飛控分析(1)— 遙控器解碼
- ANO匿名飛控分析(2)— 任務調度
- ANO匿名飛控分析(3)— 姿態解算原理及代碼分析
2021.9.20 update:
- 這是我們當初賽前準備時做的飛控-視覺聯調(P1)和 OpenMV 閾值調試器(P2)的測試視頻:無人機視覺追蹤
- 補上兩張飛機的照片,這樣機械結構看得比較清晰。伸出來木片上的 OpenMV 就是專門用來向下識別電線位置的,因為地面按題目要求是灰白色,識別起來沒有太多干擾。另一個 OpenMV 裝在機腹下側拍標識桿
總結
以上是生活随笔為你收集整理的[随笔]2019省电赛无人机题(B题)总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MDK配色方案更改
- 下一篇: 防止IT技术人员被挖走的五大措施