日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

19年电赛B题设计总结

發布時間:2024/1/8 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 19年电赛B题设计总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 這幾天2019年電賽結束了,感覺心里不是滋味,要問為什么的話,當然是因為我已經不是本科生了,不然的話我就又能拿國獎了。(賤笑中。。。)

? ? 因為一些原因,我也參與到了一群學弟的指導中。(當然是無償的。。。)他們選擇了飛行器類的題目,我覺得飛行器類的題目是最難的,也是最簡單的,其中的關鍵就是 “飛行控制器” 。 如果你想要從頭到腳,從慣性數據采集、姿態檢測、姿態控制到速度位置控制再到最后的圖像檢測、動作決策等全部過一遍的話,那這無疑是地獄級別難度。而你如果并不是大神的話,捷徑也是存在的,那就是成品飛控。成品飛控相對于自制飛控明顯更加專業,程序中的問題也更少。而且今年的賽題中也沒有加入相關的限制,相信以后的電賽設計中,將會有更多人采用成品分控而不是自制。

? ? 在電賽準備期間,因為電賽官方給出的信息是會有一道題指定TI公司的芯片,很多人擔心這個限制,結果導致了“某名飛控”推出的基于TI芯片的飛控模塊直接銷量上千,而且售價不菲,整套飛控加傳感器下來得有一千多。。。(想想2015年的電賽我當時的條件:風力擺四個空心杯電機、L298N模塊、STM32F103核心板和MPU6050全套總共不到100塊錢),只能說是真的壕。然而賽題下來一看都傻眼了,根本就沒有對飛信器的題目有任何芯片方面的限制。

? ? 好了,不說廢話,進入正題,先看題目:

? ? 基本任務1:巡線機器人從距 A 桿塔 1 米范圍內的起飛點起飛,以 1 米定高繞桿巡檢,巡檢流程為:起飛→桿塔 A→電力線纜→繞桿塔 B→電力線纜→桿塔 A,然后穩定降落;巡檢期間,巡線機器人激光筆軌跡應落在地面虛線框內。

? ? 基本任務1是整個題目中最基本也是技術含量最高的一項任務,如果第一項都完不成,那之后那些分數就不用想了。把上面的任務分解一下可以分為以下幾個子功能

基本功能要求

1.飛行器須有檢測和調節飛行高度的能力,且精度至少要精確到2cm以內。

2.飛行器須有調整Yaw(偏航角,即朝向角)的能力,以及調整水平方向運動狀態的能力(可以是兩軸的速度或加速度)

3.飛行器須有檢測桿塔方位和距離的能力

4.飛行器須有檢測其與電纜線之間距離和Yaw偏角的能力

5.飛行器須有檢測自身在一段時間內旋轉過的角度的能力

只要實現了上述五個功能,則這道題就很好做了。

整體流程

1.飛行器從指定地點起飛,到指定高度,這里用到了檢測和調節飛行高度的功能。

2.飛行器檢測周圍的桿塔,確定桿塔A方位和距離,然后到達桿塔A的前方。這里用到了檢測桿塔和水平運動狀態調整的功能

3.飛行器開始巡線,檢測線的傾角和距離,實時調整自身的朝向,使攝像頭始終垂直指向電纜線。并調整其與電纜線之間的距離。

4.飛行器在巡線三米后,到達桿塔B,此時檢測桿塔B的方位角和距離,然后啟動繞桿程序

5.當角度旋轉到一定值時,說明飛行器已經繞過了B桿,重新啟動巡線程序

6.最后返回A桿,降落。

由上可以看出,飛行器每時每刻都在采集被控對象的狀態并進行控制。

接下來將上面的功能一個一個實現(默認采用成品飛控)

功能實現

1.高度檢測和調整

? ? 首先對于飛行器而言,其高度檢測是不能使用超聲波測距模塊的,那種數據跳變的情況會讓你在調試的時候傷透腦筋。最好使用激光或者ToF,當然如果你有條件的話,可以使用激光雷達,有些激光雷達的測距范圍可以到12cm~3500cm,你只要讀取其中垂直指向地面的那個數據就可以得知高度。不過基本不會有人那么干。一般還是采用激光或者ToF的方法。當然還有一種方法是使用激光筆和攝像頭,攝像頭與激光筆之間呈一定夾角,然后采集和處理圖像,得到紅點的位置(角度),通過三角測距也可以得到飛行器的高度。這些方案都是可行的,但是就要你就成本和重量等綜合考慮了。最后一定要確定測距的量程,一定要確保飛行器在地面上時傳感器也能讀取到數值。

? ? 關于高度的調整要看底層的飛控提供了何種接口,是加速度類的控制還是速度類的控制,需要根據飛控不同的接口編寫不同的控制器。對于加速度類的控制接口,可以編寫串級PID控制器以實現比較好的高度控制效果。

2.飛行器的Yaw角和水平方向的運動狀態控制

? ? 由于飛控基本采集不到比較精準的Yaw數據(地磁傳感器并不能靠得住),因此在此控制飛行器的yaw角角速度,通過控制角速度來調整角度,一般飛控都會留有Yaw角速度的控制接口。然后是對水平運動狀態的控制,這里最好使用Pitch Roll 傾角的控制,也可以看做是水平加速度的控制,原因是飛控如果不配合可靠的光流信息的話,其無法獲知準確的運動速度,自然無法準確地調節。

3.飛行器檢測桿塔

? ? 飛行器要繞桿塔旋轉,就必須要知道其與桿塔之間的相對位置,包括方位角和距離,然而使用單個攝像頭基本不可能實現,這里有兩種方案:一種是雙目攝像頭,通過三角測量法,結合兩個攝像頭檢測的桿的位置以及兩個攝像頭之間的相對位姿,獲得桿塔的深度和方位角。但是實際上攝像頭和桿塔之間的相對安裝位置很難確定,因為要考慮雜亂背景的影響,以及桿塔腳架的影響。第二種方法則更具備可行性,就是采用激光雷達。

?

激光雷達

3.1激光雷達

? ? 如果用激光雷達來檢測桿塔則會大大降低難度,但是一般激光雷達都是用于ROS,SLAM等場景,難以找到相應的驅動,且成本較高。但是為了電賽也是拼了。我這里接觸過一個激光雷達,是Turtlebot3機器人平臺上自帶的激光雷達,此激光雷達的價格在一千多,但是在TB上,有二手拆機可用的同樣型號的價格在100左右,搜索turtlebot3激光雷達就能找到。激光雷達的使用方法其實很簡單,用簡單的STM32F103系列就能很輕易的處理。一般激光雷達是帶有串口接口的,它在上電后,無需進行配置,就能自動向外發送360度的測距信息。激光雷達相當于一個激光測距的模塊在那一直轉,每轉1°就會采集一次深度值。每轉一圈會輸出360個距離信息。每秒一般會轉5圈。

3.2激光雷達的使用

? ? 接下來我將以STM32F103型單片機為例介紹如何通過單片機采集激光雷達的數據。

? ? STM32單片機比較強大,支持DMA功能,為了減輕CPU的負擔,我們使用DMA和USART外設配合,當激光雷達的數據以230400的波特率傳來時,直接將接收的字節保存在實現定義的環形緩沖區中。然后通過定時中斷每隔一段時間讀取緩沖區中的內容,根據官方提供了的數據包結構對激光雷達的數據進行解析。(不同廠家設計生產的產品使用的數據包結構不同)解析其實很簡單,就是包頭包尾和校驗之類的。緩沖區的大小要根據你每次讀取的時間間隔和雷達發送數據的速率來確定,比如我用的這個就是每秒5圈,每圈60個42字節的數據包,總共12600B/S。如果我要每秒100次解析緩沖區,則緩沖區必須定義為126以上,為了穩妥,最好定義為兩倍以上才可。還有就是每次解析時只需要提取出你最想要的東西(對應角度的距離)即可,然后定義一個360長度的short數組專門用來存放距離信息。

? ? 具體的代碼可以通過賄賂我的方式來獲取。

3.3桿塔的檢測算法

桿塔的檢測算法很簡單,因為比賽場地除了桿塔沒有其他立著的物體,因此直接尋找距離數組中距離為最小值的那個角度索引即可。注意排除飛行器自身的影響(劃定一個角度范圍進行掃描)。

4.飛行器檢測電纜線

? ? 飛行器檢測電纜線的方式有很多種,貌似可以通過電磁場等手段檢測,不過一般的方式是采用攝像頭。相信很多人會因為電纜線后面的雜亂背景而感到頭疼,其實大可不必,只需要用支架將攝像頭抬高,使攝像頭往斜下方拍攝即可。整個飛行器的形狀就像是一只撲騰著翅膀的母雞。由于地面的背景顏色較為單一,因此可以去除幾乎所有干擾。如果采用這種安裝方法,則線檢測的算法可以說是非常簡單了,甚至可以用兩個線陣CCD來獲取線的位置和傾角。

?

攝像頭與線纜的相對位置

? ? 此時我檢測到線在畫面中的傾角和中心高度了,我要如何使用?我要得到的是什么信息? 線的傾角和中心高度不是我們想要的,我們想要的是飛行器攝像頭相對于電纜線所呈的傾角,以及飛行器與電纜線之間的距離。首先考慮傾角:當攝像頭正對電纜線時,會在畫面中得到水平的一條黑線。當攝像頭的Yaw角發生了變化時,攝像頭不再正對電纜線,此時畫面中的線就出現傾斜的情況。同時如果飛行器姿態調整時Roll角(就是左右傾斜的角)發生變化的話,也會影響到畫面中的線。

4.1畫面中線的傾角的利用

飛行器Yaw和Roll對畫面中采集的線的傾角影響

? ? 由上圖可得,畫面中的線的傾角主要反應了飛行器的兩個角度,一個是Yaw,一個是Roll,考慮當Yaw為偏轉90度以后,則畫面中線的傾角近似90度。當Roll角偏轉90度后,畫面中線的傾角也為90度,因此可以認為Yaw和Roll兩個角度直接相加得到了畫面中線的傾角。可能不太科學,但是近似應該是沒有太大問題。所以當我們要求的飛行器在Yaw方向與線纜所呈角度時,只需在畫面中線的傾角量中減除Roll角即可。此時會得到一個近似的Yaw偏角。

4.2畫面中線的中心高度的利用

?

飛行器與線纜之間距離的計算

? ? 上面的圖已經畫得很清楚了,對于定高性能較好的飛行器來說 h 是已知常量,攝像頭安裝的朝向(綠線)角度也是已知的。首先可以通過畫面中線中心的縱坐標y和攝像頭的縱向可視角度獲取一個近似的線纜相對于攝像頭的方位角,然后再與攝像頭的安裝角度相加即可得出 θ 。已知θ和h,則l可以直接通過tan函數求出。當然還需要考慮到飛行器的Pitch角,飛行器在面朝線纜前后仰時,其Pitch角變化,導致攝像頭的安裝角度變化,為了消除這種影響,需要獲取飛行器的Pitch角并對θ進行補償,更進一步的,還需要對攝像頭的 h 進行補償,最終得到比較精準的距離數據。

? ? 經過上面的兩個步驟,基本就能獲得比較精準的飛行器Yaw偏移和與線纜的水平距離了。

5.獲取飛行器Yaw方向角度變化量

? ? 其實判斷飛行器是否繞滿180度有兩種策略,一種是根據角速度積分,另一種是記錄開始旋轉時的角度,然后用之后的實時角度與之前的角度進行比對,兩種方法都可以很容易的檢測到旋轉的角度。但是這里要注意的一點是,盡量不要將旋轉完畢的判定角度設為180,因為飛行器在繞圈時存在慣性,很容易因為來不及叉車而撞到線纜上,因此可以設成160或者170,這樣可以使得整個過程銜接更平滑,且節省時間。

?

三個典型的控制策略

1.桿塔定點控制

桿塔定點控制的功能是讓飛行器可以在以桿塔為遠點的坐標系中精準穩定的定(x,y)點懸停。而這個功能實現的前提是飛行器的Yaw在整個控制過程中內沒有明顯的偏移。

?

飛行器與桿塔的相對位置求取

? ? 現在我們已經通過激光雷達確定了桿的方位角和距離,很輕易就能求出以桿塔為原點的坐標系中飛行器的坐標值。現在如果指定一個給定值(10,-40),就可通過給定值減去實際值獲得偏差,通過設計控制器就能得到很好的控制效果。當然一切的前提是Yaw角需滿足一定條件,也就是飛行器全程必須正面對著線纜的方向。如果飛行器擺不正,則無法獲取到精準的相對位置。

2.巡線控制

巡線控制的目標是可以使飛行器能夠以指定速度、與線纜相隔指定距離向右飛行。

?

? ? 前面已經說明了通過攝像頭采集的線纜的傾角和中心坐標的處理方法,最終獲得飛行器的Yaw角偏差和飛行器與線纜之間的距離。1、在巡線過程中Yaw偏角的理想狀態為0,因此需要設計控制器通過控制飛行器的Yaw角速度使飛行器始終正面面向線纜的方向。2、巡線過程中飛行器需與線纜保持最佳距離,因此需要設計控制器,根據給定距離和實際距離的偏差通過控制飛行器的俯仰角度進而控制飛行器的速度,實現距離的控制。3、巡線過程中需要以一定的速度向右滑行,這里有兩個方案,一是在巡線的整個過程中給一個固定的roll傾角,當roll傾角提供的加速度與風阻平衡時,飛行器會勻速運動,此種方法簡單粗暴,但是易受氣流影響。二是通過光流傳感器等手段,實時獲知當前的速度值,然后通過PID控制器精確控制側向飛行速度。

3.繞桿控制

? ? 繞桿控制實現的目標是以指定速度,沿指定半徑繞桿旋轉。

?

?

通過雷達可以得知桿相對于飛行器的方位角和距離,如此一來控制起來就很簡單了。1、Yaw角控制,根據雷達反饋的桿塔的方位角,設計控制器通過控制Yaw角速度,使飛行器始終正面面向桿(θ始終為0)。2、距離控制,與巡線相同。3、速度控制與巡線相同。

只要搞定了這三種典型的控制過程,基本這題就算是解決了。以上就是我分享的所有經驗,至于什么拍照,二維碼之類的那全是沒啥意義的東西,就不說了。

有什么高見的話,歡迎評論懟我。覺得有用的話,別猶豫,打賞吧,從11點到5點一直沒休息的我快餓死了(用寫文章的快感來麻痹饑餓已達到不吃飯省錢的目的的崇高境界我想你們是不會理解的)。

總結

以上是生活随笔為你收集整理的19年电赛B题设计总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。