19年电赛B题设计总结
? ? 這幾天2019年電賽結(jié)束了,感覺(jué)心里不是滋味,要問(wèn)為什么的話,當(dāng)然是因?yàn)槲乙呀?jīng)不是本科生了,不然的話我就又能拿國(guó)獎(jiǎng)了。(賤笑中。。。)
? ? 因?yàn)橐恍┰?#xff0c;我也參與到了一群學(xué)弟的指導(dǎo)中。(當(dāng)然是無(wú)償?shù)摹!!?#xff09;他們選擇了飛行器類的題目,我覺(jué)得飛行器類的題目是最難的,也是最簡(jiǎn)單的,其中的關(guān)鍵就是 “飛行控制器” 。 如果你想要從頭到腳,從慣性數(shù)據(jù)采集、姿態(tài)檢測(cè)、姿態(tài)控制到速度位置控制再到最后的圖像檢測(cè)、動(dòng)作決策等全部過(guò)一遍的話,那這無(wú)疑是地獄級(jí)別難度。而你如果并不是大神的話,捷徑也是存在的,那就是成品飛控。成品飛控相對(duì)于自制飛控明顯更加專業(yè),程序中的問(wèn)題也更少。而且今年的賽題中也沒(méi)有加入相關(guān)的限制,相信以后的電賽設(shè)計(jì)中,將會(huì)有更多人采用成品分控而不是自制。
? ? 在電賽準(zhǔn)備期間,因?yàn)殡娰惞俜浇o出的信息是會(huì)有一道題指定TI公司的芯片,很多人擔(dān)心這個(gè)限制,結(jié)果導(dǎo)致了“某名飛控”推出的基于TI芯片的飛控模塊直接銷量上千,而且售價(jià)不菲,整套飛控加傳感器下來(lái)得有一千多。。。(想想2015年的電賽我當(dāng)時(shí)的條件:風(fēng)力擺四個(gè)空心杯電機(jī)、L298N模塊、STM32F103核心板和MPU6050全套總共不到100塊錢),只能說(shuō)是真的壕。然而賽題下來(lái)一看都傻眼了,根本就沒(méi)有對(duì)飛信器的題目有任何芯片方面的限制。
? ? 好了,不說(shuō)廢話,進(jìn)入正題,先看題目:
? ? 基本任務(wù)1:巡線機(jī)器人從距 A 桿塔 1 米范圍內(nèi)的起飛點(diǎn)起飛,以 1 米定高繞桿巡檢,巡檢流程為:起飛→桿塔 A→電力線纜→繞桿塔 B→電力線纜→桿塔 A,然后穩(wěn)定降落;巡檢期間,巡線機(jī)器人激光筆軌跡應(yīng)落在地面虛線框內(nèi)。
? ? 基本任務(wù)1是整個(gè)題目中最基本也是技術(shù)含量最高的一項(xiàng)任務(wù),如果第一項(xiàng)都完不成,那之后那些分?jǐn)?shù)就不用想了。把上面的任務(wù)分解一下可以分為以下幾個(gè)子功能
基本功能要求
1.飛行器須有檢測(cè)和調(diào)節(jié)飛行高度的能力,且精度至少要精確到2cm以內(nèi)。
2.飛行器須有調(diào)整Yaw(偏航角,即朝向角)的能力,以及調(diào)整水平方向運(yùn)動(dòng)狀態(tài)的能力(可以是兩軸的速度或加速度)
3.飛行器須有檢測(cè)桿塔方位和距離的能力
4.飛行器須有檢測(cè)其與電纜線之間距離和Yaw偏角的能力
5.飛行器須有檢測(cè)自身在一段時(shí)間內(nèi)旋轉(zhuǎn)過(guò)的角度的能力
只要實(shí)現(xiàn)了上述五個(gè)功能,則這道題就很好做了。
整體流程
1.飛行器從指定地點(diǎn)起飛,到指定高度,這里用到了檢測(cè)和調(diào)節(jié)飛行高度的功能。
2.飛行器檢測(cè)周圍的桿塔,確定桿塔A方位和距離,然后到達(dá)桿塔A的前方。這里用到了檢測(cè)桿塔和水平運(yùn)動(dòng)狀態(tài)調(diào)整的功能
3.飛行器開始巡線,檢測(cè)線的傾角和距離,實(shí)時(shí)調(diào)整自身的朝向,使攝像頭始終垂直指向電纜線。并調(diào)整其與電纜線之間的距離。
4.飛行器在巡線三米后,到達(dá)桿塔B,此時(shí)檢測(cè)桿塔B的方位角和距離,然后啟動(dòng)繞桿程序
5.當(dāng)角度旋轉(zhuǎn)到一定值時(shí),說(shuō)明飛行器已經(jīng)繞過(guò)了B桿,重新啟動(dòng)巡線程序
6.最后返回A桿,降落。
由上可以看出,飛行器每時(shí)每刻都在采集被控對(duì)象的狀態(tài)并進(jìn)行控制。
接下來(lái)將上面的功能一個(gè)一個(gè)實(shí)現(xiàn)(默認(rèn)采用成品飛控)
功能實(shí)現(xiàn)
1.高度檢測(cè)和調(diào)整
? ? 首先對(duì)于飛行器而言,其高度檢測(cè)是不能使用超聲波測(cè)距模塊的,那種數(shù)據(jù)跳變的情況會(huì)讓你在調(diào)試的時(shí)候傷透腦筋。最好使用激光或者ToF,當(dāng)然如果你有條件的話,可以使用激光雷達(dá),有些激光雷達(dá)的測(cè)距范圍可以到12cm~3500cm,你只要讀取其中垂直指向地面的那個(gè)數(shù)據(jù)就可以得知高度。不過(guò)基本不會(huì)有人那么干。一般還是采用激光或者ToF的方法。當(dāng)然還有一種方法是使用激光筆和攝像頭,攝像頭與激光筆之間呈一定夾角,然后采集和處理圖像,得到紅點(diǎn)的位置(角度),通過(guò)三角測(cè)距也可以得到飛行器的高度。這些方案都是可行的,但是就要你就成本和重量等綜合考慮了。最后一定要確定測(cè)距的量程,一定要確保飛行器在地面上時(shí)傳感器也能讀取到數(shù)值。
? ? 關(guān)于高度的調(diào)整要看底層的飛控提供了何種接口,是加速度類的控制還是速度類的控制,需要根據(jù)飛控不同的接口編寫不同的控制器。對(duì)于加速度類的控制接口,可以編寫串級(jí)PID控制器以實(shí)現(xiàn)比較好的高度控制效果。
2.飛行器的Yaw角和水平方向的運(yùn)動(dòng)狀態(tài)控制
? ? 由于飛控基本采集不到比較精準(zhǔn)的Yaw數(shù)據(jù)(地磁傳感器并不能靠得住),因此在此控制飛行器的yaw角角速度,通過(guò)控制角速度來(lái)調(diào)整角度,一般飛控都會(huì)留有Yaw角速度的控制接口。然后是對(duì)水平運(yùn)動(dòng)狀態(tài)的控制,這里最好使用Pitch Roll 傾角的控制,也可以看做是水平加速度的控制,原因是飛控如果不配合可靠的光流信息的話,其無(wú)法獲知準(zhǔn)確的運(yùn)動(dòng)速度,自然無(wú)法準(zhǔn)確地調(diào)節(jié)。
3.飛行器檢測(cè)桿塔
? ? 飛行器要繞桿塔旋轉(zhuǎn),就必須要知道其與桿塔之間的相對(duì)位置,包括方位角和距離,然而使用單個(gè)攝像頭基本不可能實(shí)現(xiàn),這里有兩種方案:一種是雙目攝像頭,通過(guò)三角測(cè)量法,結(jié)合兩個(gè)攝像頭檢測(cè)的桿的位置以及兩個(gè)攝像頭之間的相對(duì)位姿,獲得桿塔的深度和方位角。但是實(shí)際上攝像頭和桿塔之間的相對(duì)安裝位置很難確定,因?yàn)橐紤]雜亂背景的影響,以及桿塔腳架的影響。第二種方法則更具備可行性,就是采用激光雷達(dá)。
?
激光雷達(dá)
3.1激光雷達(dá)
? ? 如果用激光雷達(dá)來(lái)檢測(cè)桿塔則會(huì)大大降低難度,但是一般激光雷達(dá)都是用于ROS,SLAM等場(chǎng)景,難以找到相應(yīng)的驅(qū)動(dòng),且成本較高。但是為了電賽也是拼了。我這里接觸過(guò)一個(gè)激光雷達(dá),是Turtlebot3機(jī)器人平臺(tái)上自帶的激光雷達(dá),此激光雷達(dá)的價(jià)格在一千多,但是在TB上,有二手拆機(jī)可用的同樣型號(hào)的價(jià)格在100左右,搜索turtlebot3激光雷達(dá)就能找到。激光雷達(dá)的使用方法其實(shí)很簡(jiǎn)單,用簡(jiǎn)單的STM32F103系列就能很輕易的處理。一般激光雷達(dá)是帶有串口接口的,它在上電后,無(wú)需進(jìn)行配置,就能自動(dòng)向外發(fā)送360度的測(cè)距信息。激光雷達(dá)相當(dāng)于一個(gè)激光測(cè)距的模塊在那一直轉(zhuǎn),每轉(zhuǎn)1°就會(huì)采集一次深度值。每轉(zhuǎn)一圈會(huì)輸出360個(gè)距離信息。每秒一般會(huì)轉(zhuǎn)5圈。
3.2激光雷達(dá)的使用
? ? 接下來(lái)我將以STM32F103型單片機(jī)為例介紹如何通過(guò)單片機(jī)采集激光雷達(dá)的數(shù)據(jù)。
? ? STM32單片機(jī)比較強(qiáng)大,支持DMA功能,為了減輕CPU的負(fù)擔(dān),我們使用DMA和USART外設(shè)配合,當(dāng)激光雷達(dá)的數(shù)據(jù)以230400的波特率傳來(lái)時(shí),直接將接收的字節(jié)保存在實(shí)現(xiàn)定義的環(huán)形緩沖區(qū)中。然后通過(guò)定時(shí)中斷每隔一段時(shí)間讀取緩沖區(qū)中的內(nèi)容,根據(jù)官方提供了的數(shù)據(jù)包結(jié)構(gòu)對(duì)激光雷達(dá)的數(shù)據(jù)進(jìn)行解析。(不同廠家設(shè)計(jì)生產(chǎn)的產(chǎn)品使用的數(shù)據(jù)包結(jié)構(gòu)不同)解析其實(shí)很簡(jiǎn)單,就是包頭包尾和校驗(yàn)之類的。緩沖區(qū)的大小要根據(jù)你每次讀取的時(shí)間間隔和雷達(dá)發(fā)送數(shù)據(jù)的速率來(lái)確定,比如我用的這個(gè)就是每秒5圈,每圈60個(gè)42字節(jié)的數(shù)據(jù)包,總共12600B/S。如果我要每秒100次解析緩沖區(qū),則緩沖區(qū)必須定義為126以上,為了穩(wěn)妥,最好定義為兩倍以上才可。還有就是每次解析時(shí)只需要提取出你最想要的東西(對(duì)應(yīng)角度的距離)即可,然后定義一個(gè)360長(zhǎng)度的short數(shù)組專門用來(lái)存放距離信息。
? ? 具體的代碼可以通過(guò)賄賂我的方式來(lái)獲取。
3.3桿塔的檢測(cè)算法
桿塔的檢測(cè)算法很簡(jiǎn)單,因?yàn)楸荣悎?chǎng)地除了桿塔沒(méi)有其他立著的物體,因此直接尋找距離數(shù)組中距離為最小值的那個(gè)角度索引即可。注意排除飛行器自身的影響(劃定一個(gè)角度范圍進(jìn)行掃描)。
4.飛行器檢測(cè)電纜線
? ? 飛行器檢測(cè)電纜線的方式有很多種,貌似可以通過(guò)電磁場(chǎng)等手段檢測(cè),不過(guò)一般的方式是采用攝像頭。相信很多人會(huì)因?yàn)殡娎|線后面的雜亂背景而感到頭疼,其實(shí)大可不必,只需要用支架將攝像頭抬高,使攝像頭往斜下方拍攝即可。整個(gè)飛行器的形狀就像是一只撲騰著翅膀的母雞。由于地面的背景顏色較為單一,因此可以去除幾乎所有干擾。如果采用這種安裝方法,則線檢測(cè)的算法可以說(shuō)是非常簡(jiǎn)單了,甚至可以用兩個(gè)線陣CCD來(lái)獲取線的位置和傾角。
?
攝像頭與線纜的相對(duì)位置
? ? 此時(shí)我檢測(cè)到線在畫面中的傾角和中心高度了,我要如何使用?我要得到的是什么信息? 線的傾角和中心高度不是我們想要的,我們想要的是飛行器攝像頭相對(duì)于電纜線所呈的傾角,以及飛行器與電纜線之間的距離。首先考慮傾角:當(dāng)攝像頭正對(duì)電纜線時(shí),會(huì)在畫面中得到水平的一條黑線。當(dāng)攝像頭的Yaw角發(fā)生了變化時(shí),攝像頭不再正對(duì)電纜線,此時(shí)畫面中的線就出現(xiàn)傾斜的情況。同時(shí)如果飛行器姿態(tài)調(diào)整時(shí)Roll角(就是左右傾斜的角)發(fā)生變化的話,也會(huì)影響到畫面中的線。
4.1畫面中線的傾角的利用
飛行器Yaw和Roll對(duì)畫面中采集的線的傾角影響
? ? 由上圖可得,畫面中的線的傾角主要反應(yīng)了飛行器的兩個(gè)角度,一個(gè)是Yaw,一個(gè)是Roll,考慮當(dāng)Yaw為偏轉(zhuǎn)90度以后,則畫面中線的傾角近似90度。當(dāng)Roll角偏轉(zhuǎn)90度后,畫面中線的傾角也為90度,因此可以認(rèn)為Yaw和Roll兩個(gè)角度直接相加得到了畫面中線的傾角。可能不太科學(xué),但是近似應(yīng)該是沒(méi)有太大問(wèn)題。所以當(dāng)我們要求的飛行器在Yaw方向與線纜所呈角度時(shí),只需在畫面中線的傾角量中減除Roll角即可。此時(shí)會(huì)得到一個(gè)近似的Yaw偏角。
4.2畫面中線的中心高度的利用
?
飛行器與線纜之間距離的計(jì)算
? ? 上面的圖已經(jīng)畫得很清楚了,對(duì)于定高性能較好的飛行器來(lái)說(shuō) h 是已知常量,攝像頭安裝的朝向(綠線)角度也是已知的。首先可以通過(guò)畫面中線中心的縱坐標(biāo)y和攝像頭的縱向可視角度獲取一個(gè)近似的線纜相對(duì)于攝像頭的方位角,然后再與攝像頭的安裝角度相加即可得出 θ 。已知θ和h,則l可以直接通過(guò)tan函數(shù)求出。當(dāng)然還需要考慮到飛行器的Pitch角,飛行器在面朝線纜前后仰時(shí),其Pitch角變化,導(dǎo)致攝像頭的安裝角度變化,為了消除這種影響,需要獲取飛行器的Pitch角并對(duì)θ進(jìn)行補(bǔ)償,更進(jìn)一步的,還需要對(duì)攝像頭的 h 進(jìn)行補(bǔ)償,最終得到比較精準(zhǔn)的距離數(shù)據(jù)。
? ? 經(jīng)過(guò)上面的兩個(gè)步驟,基本就能獲得比較精準(zhǔn)的飛行器Yaw偏移和與線纜的水平距離了。
5.獲取飛行器Yaw方向角度變化量
? ? 其實(shí)判斷飛行器是否繞滿180度有兩種策略,一種是根據(jù)角速度積分,另一種是記錄開始旋轉(zhuǎn)時(shí)的角度,然后用之后的實(shí)時(shí)角度與之前的角度進(jìn)行比對(duì),兩種方法都可以很容易的檢測(cè)到旋轉(zhuǎn)的角度。但是這里要注意的一點(diǎn)是,盡量不要將旋轉(zhuǎn)完畢的判定角度設(shè)為180,因?yàn)轱w行器在繞圈時(shí)存在慣性,很容易因?yàn)閬?lái)不及叉車而撞到線纜上,因此可以設(shè)成160或者170,這樣可以使得整個(gè)過(guò)程銜接更平滑,且節(jié)省時(shí)間。
?
三個(gè)典型的控制策略
1.桿塔定點(diǎn)控制
桿塔定點(diǎn)控制的功能是讓飛行器可以在以桿塔為遠(yuǎn)點(diǎn)的坐標(biāo)系中精準(zhǔn)穩(wěn)定的定(x,y)點(diǎn)懸停。而這個(gè)功能實(shí)現(xiàn)的前提是飛行器的Yaw在整個(gè)控制過(guò)程中內(nèi)沒(méi)有明顯的偏移。
?
飛行器與桿塔的相對(duì)位置求取
? ? 現(xiàn)在我們已經(jīng)通過(guò)激光雷達(dá)確定了桿的方位角和距離,很輕易就能求出以桿塔為原點(diǎn)的坐標(biāo)系中飛行器的坐標(biāo)值。現(xiàn)在如果指定一個(gè)給定值(10,-40),就可通過(guò)給定值減去實(shí)際值獲得偏差,通過(guò)設(shè)計(jì)控制器就能得到很好的控制效果。當(dāng)然一切的前提是Yaw角需滿足一定條件,也就是飛行器全程必須正面對(duì)著線纜的方向。如果飛行器擺不正,則無(wú)法獲取到精準(zhǔn)的相對(duì)位置。
2.巡線控制
巡線控制的目標(biāo)是可以使飛行器能夠以指定速度、與線纜相隔指定距離向右飛行。
?
? ? 前面已經(jīng)說(shuō)明了通過(guò)攝像頭采集的線纜的傾角和中心坐標(biāo)的處理方法,最終獲得飛行器的Yaw角偏差和飛行器與線纜之間的距離。1、在巡線過(guò)程中Yaw偏角的理想狀態(tài)為0,因此需要設(shè)計(jì)控制器通過(guò)控制飛行器的Yaw角速度使飛行器始終正面面向線纜的方向。2、巡線過(guò)程中飛行器需與線纜保持最佳距離,因此需要設(shè)計(jì)控制器,根據(jù)給定距離和實(shí)際距離的偏差通過(guò)控制飛行器的俯仰角度進(jìn)而控制飛行器的速度,實(shí)現(xiàn)距離的控制。3、巡線過(guò)程中需要以一定的速度向右滑行,這里有兩個(gè)方案,一是在巡線的整個(gè)過(guò)程中給一個(gè)固定的roll傾角,當(dāng)roll傾角提供的加速度與風(fēng)阻平衡時(shí),飛行器會(huì)勻速運(yùn)動(dòng),此種方法簡(jiǎn)單粗暴,但是易受氣流影響。二是通過(guò)光流傳感器等手段,實(shí)時(shí)獲知當(dāng)前的速度值,然后通過(guò)PID控制器精確控制側(cè)向飛行速度。
3.繞桿控制
? ? 繞桿控制實(shí)現(xiàn)的目標(biāo)是以指定速度,沿指定半徑繞桿旋轉(zhuǎn)。
?
?
通過(guò)雷達(dá)可以得知桿相對(duì)于飛行器的方位角和距離,如此一來(lái)控制起來(lái)就很簡(jiǎn)單了。1、Yaw角控制,根據(jù)雷達(dá)反饋的桿塔的方位角,設(shè)計(jì)控制器通過(guò)控制Yaw角速度,使飛行器始終正面面向桿(θ始終為0)。2、距離控制,與巡線相同。3、速度控制與巡線相同。
只要搞定了這三種典型的控制過(guò)程,基本這題就算是解決了。以上就是我分享的所有經(jīng)驗(yàn),至于什么拍照,二維碼之類的那全是沒(méi)啥意義的東西,就不說(shuō)了。
有什么高見的話,歡迎評(píng)論懟我。覺(jué)得有用的話,別猶豫,打賞吧,從11點(diǎn)到5點(diǎn)一直沒(méi)休息的我快餓死了(用寫文章的快感來(lái)麻痹饑餓已達(dá)到不吃飯省錢的目的的崇高境界我想你們是不會(huì)理解的)。
總結(jié)
以上是生活随笔為你收集整理的19年电赛B题设计总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 性价比高的蓝牙耳机排行榜,推荐200内最
- 下一篇: 信息系统项目管理师学习笔记5——信息化与