Hello返吻,大家好逮走,光天化日之下我又來(lái)擼狗了。距離上次擼狗已經(jīng)過(guò)去了個(gè)把月時(shí)間了重慢,那么這次又有什么新驚喜呢饥臂?
先來(lái)看一下本期的演示視頻吧。
https://v.qq.com/x/page/m3034lv677y.html
什么似踱?巡線隅熙?這也太簡(jiǎn)單了吧。不要急核芽,聽(tīng)我慢慢道來(lái)猛们。
哈士奇圖形模塊來(lái)了
上次視頻里說(shuō)了,DF 只給我提供了 HuskyLens (中文名:哈士奇)人工智能攝像頭的通信協(xié)議狞洋,所以只能靠擼代碼來(lái)體驗(yàn)哈士奇弯淘。你還不知道哈士奇是什么?更應(yīng)該看一看上期的教程了吉懊。
上期回顧:擼狗初體驗(yàn) | 手把手教你上手 HuskyLens 哈士奇人工智能攝像頭
但是這次庐橙,我拿到了哈士奇的新狗糧!那就是哈士奇的 Arduino 庫(kù)和 Mind+ 圖形模塊(Mind+ v1.6.2 測(cè)試版)借嗽。也就是說(shuō)态鳖,我們現(xiàn)在只要輕松拖動(dòng)圖形模塊,就可以很輕松地玩轉(zhuǎn)哈士奇了恶导,而且哈士奇的界面浆竭,終于支持中文了!
注意:哈士奇的圖形模塊和 Arduino 代碼庫(kù)目前處于工程測(cè)試階段,正式版很有可能會(huì)發(fā)生調(diào)整和改動(dòng)邦泄,請(qǐng)對(duì)照本文描述的原理酌情修改程序使用删窒。
巡線介紹
既然有了這些功能,那么玩哈士奇就簡(jiǎn)單多了顺囊。所以這一期我將帶大家來(lái)玩一玩哈士奇的視覺(jué)巡線功能肌索!
為了配合完成巡線功能,我用激光切割給麥昆小車做了一個(gè)可調(diào)節(jié)支架特碳,將哈士奇安裝到了麥昆小車上诚亚,如下圖所示。其中哈士奇的角度是可以旋轉(zhuǎn)調(diào)節(jié)的午乓。
智能車巡線站宗,相信大家都已經(jīng)很熟悉了,就是讓小車沿著規(guī)定的軌道(通常是黑線益愈,下圖視覺(jué)效果圖用了藍(lán)線)梢灭、按照一定的速度進(jìn)行移動(dòng)。一般情況下腕唧,我們只需要使用普通的巡線傳感器或辖,就可以完成相應(yīng)的功能瘾英。既然麥昆裝上了哈士奇枣接,我們這次就不用麥昆自帶的巡線傳感器來(lái)進(jìn)行巡線了,我們來(lái)試試哈士奇視覺(jué)巡線有什么奇特的功效缺谴。
視覺(jué)巡線跟普通巡線傳感器巡線有什么區(qū)別呢但惶?采用普通巡線傳感器時(shí),一般根據(jù)線寬湿蛔、巡線傳感器的間距膀曾、巡線傳感器的數(shù)量等,會(huì)有好幾種巡線模式阳啥,我們這里以麥昆小車自帶的雙巡線傳感器為例添谊,這也是最常見(jiàn)的巡線模式。如下圖所示察迟,我們可以很容易就可以根據(jù)巡線傳感器在黑線(視覺(jué)效果圖用了藍(lán)線)和白線上的位置來(lái)判斷麥昆小車什么時(shí)候需要直行斩狱、什么時(shí)候需要左轉(zhuǎn)、什么時(shí)候需要右轉(zhuǎn)扎瓶。
那么哈士奇視覺(jué)巡線的邏輯又是怎么樣的呢所踊?其實(shí)跟巡線傳感器的邏輯非常類似,我們只需要知道小車相對(duì)黑線是什么位置就行了:
- 當(dāng)麥昆小車在黑線的偏左位置時(shí)概荷,控制小車向右轉(zhuǎn)彎秕岛;
- 當(dāng)麥昆小車在黑線的偏右位置時(shí),控制小車向左轉(zhuǎn)彎;
- 當(dāng)麥昆小車與黑線相對(duì)居中時(shí)继薛,控制小車直行修壕。
在本文中,我們希望麥昆小車以盡可能快的恒定速度進(jìn)行巡線惋增,即麥昆小車的幾何中心速度保持不變叠殷。
開(kāi)始巡線吧
我們先來(lái)看一下,麥昆小車帶著哈士奇巡線時(shí)诈皿,哈士奇屏幕上顯示的信息林束。需要注意的是,為了巡線稽亏,我們需要將攝像頭斜向下調(diào)節(jié)壶冒,這樣能夠看到離麥昆小車更近距離的黑線,巡線效果更佳截歉。
為了方便說(shuō)明問(wèn)題胖腾,我們將上圖中哈士奇屏幕上的信息剝離出來(lái),抽象成下圖的幾何數(shù)學(xué)模型瘪松。
我們知道哈士奇屏幕的分辨率是 320×240咸作,屏幕左上角的頂點(diǎn)為屏幕的坐標(biāo)原點(diǎn)(0, 0),水平向右方向?yàn)?X 軸正方向宵睦,豎直向下方向?yàn)?Y 軸正方向记罚,因此屏幕右下角的坐標(biāo)為(320, 240)。上圖中紅色虛線為屏幕的中軸線壳嚎,這條線的橫坐標(biāo) x = 160桐智。上圖中黑色的線,為哈士奇攝像頭“看到”的巡線地圖烟馅,藍(lán)色箭頭為哈士奇計(jì)算出來(lái)的線條方向说庭。藍(lán)色箭頭的起點(diǎn)坐標(biāo)為(x1, y1),終點(diǎn)坐標(biāo)為(x2, y2)郑趁。
巡線算法1
經(jīng)過(guò)這樣的數(shù)學(xué)抽象之后刊驴,其實(shí)巡線邏輯就很簡(jiǎn)單了。當(dāng)哈士奇檢測(cè)到黑線在屏幕的左邊時(shí)寡润,也就是藍(lán)色箭頭的坐標(biāo) x1 < 160 時(shí)捆憎,控制小車左轉(zhuǎn);當(dāng)黑線在屏幕的右邊時(shí)悦穿,此時(shí) x1 > 160 時(shí)攻礼,控制小車右轉(zhuǎn);當(dāng)黑線在屏幕的中間時(shí)栗柒,此時(shí) x1 = 160 時(shí)礁扮,控制小車直行知举。
邏輯是不是很簡(jiǎn)單?我們馬上來(lái)編寫個(gè)簡(jiǎn)單的巡線程序試試吧太伊。
首先我們可以在 Mind+ 軟件或者 Arduino 軟件中雇锡,通過(guò)一個(gè)簡(jiǎn)單的圖形模塊或者一行簡(jiǎn)單的代碼,就可以獲攘沤埂(x1, y1)锰提、(x2, y2)的坐標(biāo)。
完整的巡線程序如下圖所示芳悲。
在上面的程序中立肘,我們定義了一個(gè)麥昆運(yùn)動(dòng)控制函數(shù),可以分別接收左名扛、右輪的速度參數(shù)谅年,然后控制麥昆的運(yùn)動(dòng)(下同,不再贅述)肮韧。在主程序或者巡線算法中融蹂,我們只要調(diào)用這個(gè)函數(shù)并改變速度就可以了。
巡線效果如下面的動(dòng)圖所示弄企,如果覺(jué)得 GIF 動(dòng)圖有點(diǎn)卡頓超燃,可以看文末的對(duì)比視頻。
這時(shí)的巡線的平均速度是 60 左右拘领,走完上面地圖 1 圈需要 62 秒意乓。試試改變巡線速度,看看你能以多快的速度巡線院究。我在編程時(shí)嘗試了更大的速度洽瞬,發(fā)現(xiàn)巡線效果不是很理想本涕。
在改變速度的過(guò)程中业汰,發(fā)現(xiàn)什么問(wèn)題了么?
- 小車在前進(jìn)中明顯左右晃動(dòng)菩颖,速度變化不連貫样漆,不能穩(wěn)定直行運(yùn)動(dòng);
- 速度不能設(shè)置太快晦闰,速度太快很容易脫線放祟;
- 不同的轉(zhuǎn)彎角度,需要的轉(zhuǎn)彎速度也不一樣呻右,當(dāng)巡線地圖中有好幾種轉(zhuǎn)彎角度時(shí)很容易脫線跪妥。
我們先來(lái)看第 1 個(gè)問(wèn)題:小車在前進(jìn)中明顯左右晃動(dòng),不能穩(wěn)定直行運(yùn)動(dòng)声滥。這是為什么呢眉撵?因?yàn)樾≤囍毙械奈恢脜^(qū)間太小了,只有當(dāng) x1 = 160 時(shí),才能直行纽疟。由于小車在運(yùn)動(dòng)過(guò)程中帶有慣性罐韩,所以這是很難達(dá)到的條件。
巡線算法2
那應(yīng)該怎么辦呢污朽?很簡(jiǎn)單散吵,增大直行的位置區(qū)間就好了。如下圖所示蟆肆,我們將 150 ≤ x1 ≤ 170 的區(qū)間設(shè)置為小車直行區(qū)間矾睦,當(dāng)檢測(cè)到黑線的起點(diǎn)坐標(biāo) x1 在這個(gè)區(qū)間內(nèi)時(shí),控制小車直行炎功;當(dāng) x1 < 150 時(shí)顷锰,控制小車左轉(zhuǎn);當(dāng) x1 > 170 時(shí)亡问,控制小車右轉(zhuǎn)官紫。
這樣一來(lái),是不是直行區(qū)間變大了州藕?我們改變一下程序試試看效果吧束世。
巡線效果如下面的動(dòng)圖所示,如果覺(jué)得 GIF 動(dòng)圖有點(diǎn)卡頓床玻,可以看文末的對(duì)比視頻毁涉。
通過(guò)這些調(diào)整,我們發(fā)現(xiàn)锈死,麥昆小車的巡線速度快了一些贫堰,這時(shí)的巡線的平均速度是 70 左右,走完上面地圖 1 圈需要 55 秒待牵,而且在直行路徑上其屏,速度變化也順滑了一些,但是仍然會(huì)左右輕微晃動(dòng)缨该。
可是這樣還是不能改善第 3 個(gè)問(wèn)題偎行,同一種轉(zhuǎn)彎速度并不能適應(yīng)所有的轉(zhuǎn)彎角度,一旦設(shè)置的速度太快了贰拿,在轉(zhuǎn)彎角度變化比較大的巡線地圖中蛤袒,還是很容易脫線。
巡線算法3
我們繼續(xù)來(lái)調(diào)節(jié)膨更,既然可以將檢測(cè)到的黑線位置分成 3 個(gè)區(qū)間妙真,我們是不是能如法炮制,將區(qū)間繼續(xù)分為 5 個(gè)呢荚守?黑線位置越靠?jī)蛇呎涞拢D(zhuǎn)彎速度越大癌椿;黑線位置越趨近于中間,越趨向于直行運(yùn)動(dòng)菱阵。
或者更進(jìn)一步踢俄,直接分為 7 個(gè)調(diào)速區(qū)間呢?
我們來(lái)改編程序試試效果吧晴及。
巡線效果如下面的動(dòng)圖所示都办,如果覺(jué)得動(dòng)圖有點(diǎn)卡頓,可以看文末的對(duì)比視頻虑稼。
這時(shí)琳钉,麥昆小車的巡線速度可以更快了,此時(shí)的巡線的平均速度是 80 左右蛛倦,走完上面地圖 1 圈需要 51 秒歌懒,而且不管是轉(zhuǎn)彎還是直行,速度變化都順滑很多了溯壶。
PID來(lái)了
經(jīng)過(guò)上面的調(diào)速過(guò)程及皂,你發(fā)現(xiàn)什么?
既然麥昆巡線時(shí)的運(yùn)動(dòng)狀態(tài)或巡線區(qū)間可以分為 2 檔且改、3 檔验烧、5 檔、7 檔又跛,那是不是還能繼續(xù)細(xì)分呢碍拆?9 檔?11 檔慨蓝?……直到無(wú)限細(xì)分感混。調(diào)速區(qū)間越細(xì)分,巡線效果越好礼烈。但是這樣寫程序會(huì)越來(lái)越長(zhǎng)弧满,有什么辦法呢?這里就要引出 PID 調(diào)速算法了济丘。
PID 算法谱秽,是控制理論中最常用洽蛀、最經(jīng)典的算法摹迷,在我們的生產(chǎn)和生活中應(yīng)用的非常廣泛。它并不是什么很神圣的東西郊供,大家一定都見(jiàn)過(guò) PID 的實(shí)際應(yīng)用:比如四軸飛行器峡碉,再比如平衡小車,還有汽車的定速巡航驮审、3D 打印機(jī)上的溫度控制器鲫寄、恒溫?zé)崴鞯燃础>褪穷愃朴谶@種:需要將某一個(gè)物理量“保持穩(wěn)定”的場(chǎng)合(比如維持平衡,穩(wěn)定溫度地来、轉(zhuǎn)速等)戳玫,PID 都會(huì)派上大用場(chǎng)。
它的公式為:
或者我們?cè)诰幊虝r(shí)更常用的是數(shù)字式的 PID 公式:
PID 控制系統(tǒng)是一種閉環(huán)控制系統(tǒng)未斑,閉環(huán)控制是根據(jù)控制對(duì)象輸出的反饋來(lái)進(jìn)行校正的控制方式咕宿。它能夠根據(jù)測(cè)量出的實(shí)際值與計(jì)劃值之間的誤差 Error,按一定的標(biāo)準(zhǔn)來(lái)進(jìn)行糾正蜡秽。
根據(jù)公式府阀,可以看到 PID 分為 3 個(gè)部分:比例調(diào)節(jié)(P)、積分調(diào)節(jié)(I)芽突、微分調(diào)節(jié)(D)试浙。那么這三者之間是什么關(guān)系呢?每個(gè)部分的調(diào)節(jié)對(duì)巡線會(huì)產(chǎn)生什么樣的影響呢寞蚌?我們一個(gè)一個(gè)來(lái)看田巴。
注意:如標(biāo)題所說(shuō),本文是寫給小學(xué)生看的 PID 調(diào)速算法挟秤,所以下文中描述的是已經(jīng)簡(jiǎn)化的 PID 算法固额,默認(rèn)沒(méi)有去計(jì)算每個(gè)程序的循環(huán)時(shí)間,也就是沒(méi)有去計(jì)算積分和微分時(shí)間煞聪。主要有幾個(gè)原因:一斗躏、是因?yàn)槌绦蚬δ鼙容^單一,每個(gè)循環(huán)時(shí)間差不多昔脯,在調(diào)節(jié) Kd啄糙、Ki 參數(shù)時(shí),將時(shí)間參數(shù) T 當(dāng)成一個(gè)整體進(jìn)行調(diào)試了云稚;二隧饼、省略了時(shí)間參數(shù)后,程序編寫會(huì)更加簡(jiǎn)單静陈,容易看懂與理解燕雁。
P:調(diào)節(jié)當(dāng)前的誤差
以視覺(jué)巡線為例,測(cè)量出來(lái)的實(shí)際值為黑線的起點(diǎn)坐標(biāo) x1鲸拥,但是我們希望黑線的起點(diǎn)坐標(biāo)能夠在屏幕中央拐格,也就是位于 x = 160 的位置。這時(shí)刑赶,誤差 Error = x1 - offset = x1 - 160捏浊。那么接下來(lái),我們就可以根據(jù)這個(gè)誤差大小來(lái)調(diào)節(jié)轉(zhuǎn)速的大小了撞叨,也就是我們上面分析的金踪,黑線越是遠(yuǎn)離屏幕中心浊洞,誤差越大,這時(shí)需要的轉(zhuǎn)速也越大胡岔。根據(jù) PID 公式法希,轉(zhuǎn)速 V_turn 的計(jì)算公式為:
V_turn = Vp_turn = Kp × Error = Kp × (x1 - 160)
我們知道,物體的運(yùn)動(dòng)一般可以由直線運(yùn)動(dòng)和轉(zhuǎn)彎運(yùn)動(dòng)組成靶瘸,所以速度也可以由直線運(yùn)動(dòng)速度 V_straught 與轉(zhuǎn)彎速度 V_turn 組成铁材。為了使麥昆小車保持一定的運(yùn)動(dòng)速度,我們可以分別給左右輪加上或減去一個(gè)轉(zhuǎn)彎速度 V_turn奕锌,這樣麥昆小車中心的速度就能夠保持不變著觉。
V_left = V_straught + V_turn
V_right = V_straught - V_turn
根據(jù)這個(gè)公式,我們可以簡(jiǎn)單的理解為惊暴,P 控制器的作用是根據(jù)誤差的大小產(chǎn)生一個(gè)轉(zhuǎn)彎速度 V_turn饼丘,用于疊加在左右輪的速度上。
那么 Kp 的值取多少合適呢辽话?這就需要我們根據(jù)實(shí)際巡線情況肄鸽,手動(dòng)進(jìn)行調(diào)節(jié)與設(shè)置了。多嘗試幾次油啤,應(yīng)該就能設(shè)置出一個(gè)比較合適的 Kp 值了典徘。
編寫程序并調(diào)節(jié) Kp 值如下。程序中的的offset
變量就是屏幕中軸線的坐標(biāo)益咬,其他參數(shù)前面都有說(shuō)明了逮诲,這里不再解釋。
巡線效果如下面的動(dòng)圖所示幽告,如果覺(jué)得 GIF 動(dòng)圖有點(diǎn)卡頓梅鹦,可以看文末的對(duì)比視頻。
此時(shí)的巡線的平均速度是 120 左右冗锁,走完上面地圖 1 圈需要 39 秒齐唆。不僅在速度變快的情況下還能正常巡線,而且速度的變化明顯順滑多了冻河。
到這里箍邮,你已經(jīng)比大部分巡線程序?qū)崿F(xiàn)的效果好多了。還能怎么繼續(xù)完善呢叨叙?
D:預(yù)測(cè)未來(lái)的誤差
上述程序增加了 P 比例調(diào)節(jié)之后锭弊,我們發(fā)現(xiàn)巡線效果好多了,速度的變化非常平滑摔敛,但是仍然會(huì)有晃動(dòng)情況廷蓉。這是因?yàn)閼T性,速度越大马昙,慣性越大桃犬,當(dāng)檢測(cè)到的黑線越靠近屏幕邊緣時(shí),V_turn 就越大行楞,導(dǎo)致慣性就越大攒暇。能不能想辦法改善這個(gè)問(wèn)題呢?
這個(gè)時(shí)候就是 D 微分調(diào)節(jié)要上場(chǎng)了子房。微分調(diào)節(jié)的作用如下圖形用,它可以理解為一個(gè)彈簧阻力,當(dāng)慣性越大的時(shí)候证杭,阻力或拉力也就越大田度,直到將慣性方向的速度變?yōu)?0,也就是下圖中彈簧下面的方塊解愤,始終會(huì)被限制在一個(gè)小范圍內(nèi)運(yùn)動(dòng)镇饺,不會(huì)產(chǎn)生太大范圍的抖動(dòng)變化。加上 D 微分調(diào)節(jié)之后送讲,我們就可以有效的抑制晃動(dòng)奸笤。但是也要去適當(dāng)?shù)恼{(diào)節(jié) D 微分調(diào)節(jié)的參數(shù),不然限制的阻力太大哼鬓,麥昆小車轉(zhuǎn)彎速度 V_turn 被限制的太小也不行监右,這會(huì)導(dǎo)致轉(zhuǎn)不過(guò)彎來(lái)。
可以說(shuō)异希,D 的功能健盒,就是根據(jù)之前的變化趨勢(shì),去防范于未來(lái)可能發(fā)生的失控問(wèn)題称簿。之前的變化趨勢(shì)越大(慣性越大)味榛,接下來(lái)阻力的作用越明顯。根據(jù) PID 公式予跌,D 調(diào)節(jié)也要計(jì)算一個(gè) Vd_turn 的分量:
Vd_turn = Kd × derivative = Kd × (Error - lastError)
其中搏色,Kd 是需要我們手動(dòng)調(diào)節(jié)的參數(shù),Error 為當(dāng)前測(cè)量的誤差券册,lastError 為上次測(cè)量的誤差频轿。
總的 V_turn 計(jì)算公式為:
V_turn = Vp_turn + Vd_turn = Kp × Error + Kd × derivative
編寫 PD 調(diào)速程序,并調(diào)節(jié) Kd 參數(shù)至合適的數(shù)值烁焙,程序如下:
巡線效果如下面的動(dòng)圖所示航邢,如果覺(jué)得 GIF 動(dòng)圖有點(diǎn)卡頓,可以看文末的對(duì)比視頻骄蝇。
此時(shí)的巡線的平均速度是 120 左右膳殷,走完上面地圖 1 圈需要 38 秒。巡線過(guò)程中的晃動(dòng)已經(jīng)明顯減弱了很多九火。
I:糾正過(guò)去的誤差
雖然在本文的效果中不是很明顯赚窃,但是單單 P 比例調(diào)節(jié)册招,可能會(huì)出現(xiàn)一個(gè)問(wèn)題:調(diào)節(jié)力度不夠,永遠(yuǎn)存在一個(gè)穩(wěn)定的誤差勒极。因?yàn)閷?shí)際情況中可能會(huì)存在各種各種的阻力或者影響輸出的情況是掰,具體例子可以看文末的參考文章:我對(duì)『PID算法』的理解 —— 原理介紹
在這種情況下,我們就需要引入 I 積分調(diào)節(jié)了辱匿。積分調(diào)節(jié)可以產(chǎn)生一個(gè)新的轉(zhuǎn)速 Vi_turn键痛。它的計(jì)算公式為:
Vi_turn = Ki × integral
積分調(diào)節(jié)的作用就是可以消除那個(gè)相對(duì)穩(wěn)定的誤差。它能將過(guò)去誤差累計(jì)起來(lái)匾七,只要存在誤差絮短,這個(gè)累計(jì)值 integral 就會(huì)越來(lái)越大,就會(huì)使調(diào)節(jié)力度越來(lái)愈大昨忆,逐漸就能抵消阻力產(chǎn)生的穩(wěn)定誤差的影響丁频。
總的 V_turn 的計(jì)算公式如下:
V_turn = Vp_turn + Vi_turn + Vd_turn
即:V_turn = Kp × Error + Ki × integral + Kd × derivative
編寫 PID 調(diào)速程序,并調(diào)節(jié) Ki 參數(shù)至合適的數(shù)值扔嵌。由于本示例中限府,幾乎沒(méi)有穩(wěn)定誤差的影響,所以 Ki 的值很小痢缎。程序如下:
巡線效果如下面的動(dòng)圖所示胁勺,如果覺(jué)得 GIF 動(dòng)圖有點(diǎn)卡頓掠哥,可以看下面的對(duì)比視頻奖唯。
此時(shí)的巡線的平均速度是 120 左右,走完上面地圖 1 圈需要 38 秒趁舀。跟 PD 算法巡線效果差不多嵌洼。
總結(jié)
最后放一個(gè)視頻案疲,做一下文中幾個(gè)算法整體的效果對(duì)比:
https://v.qq.com/x/page/q3034l3ljw7.html
當(dāng)然本文講的是最基本的 PID 算法,這個(gè)算法在實(shí)際應(yīng)用中還有很多可以進(jìn)一步完善的地方麻养『址龋基于 PID 控制理論設(shè)計(jì)的新算法也很多,但是最基本的原理都是類似的鳖昌。
最后用一張動(dòng)圖來(lái)總結(jié)一下本文講的 PID 算法备畦。從下圖中,我們可以直觀理解 PID 中三個(gè)參數(shù) Kp许昨、Ki懂盐、Kd 的作用。圖中紅色虛線為目標(biāo)位置糕档,藍(lán)色實(shí)線為系統(tǒng)輸出莉恼。
- 當(dāng)調(diào)節(jié) Kp 參數(shù)時(shí),可以讓系統(tǒng)輸出越來(lái)越接近目標(biāo)位置,但是存在抖動(dòng)俐银、以及存在穩(wěn)定誤差調(diào)節(jié)力度不夠的問(wèn)題尿背;
- 調(diào)節(jié) Ki 參數(shù),可以彌補(bǔ) Kp 參數(shù)調(diào)節(jié)力度不夠的問(wèn)題悉患,但是也會(huì)增加抖動(dòng)残家;
- 調(diào)節(jié) Kd 參數(shù)榆俺,會(huì)讓抖動(dòng)減小售躁,變化曲線更加平滑。
補(bǔ)充思考
在本文中茴晋,我們利用哈士奇攝像頭得到了黑線位置陪捷,這里我們只用了黑線的其中一個(gè)位置參數(shù):起點(diǎn)坐標(biāo) x1。但是另外三個(gè)參數(shù)都沒(méi)有用上(起點(diǎn)坐標(biāo) y1诺擅,終點(diǎn)坐標(biāo) x2市袖、y2)。
請(qǐng)你思考烁涌,是否將另外幾個(gè)參數(shù)利用起來(lái)效果會(huì)更好呢苍碟?我們?cè)谘簿€過(guò)程中,發(fā)現(xiàn)哈士奇屏幕中的黑線經(jīng)常是斜著的撮执,是否讓黑線整體保持豎直微峰,也就是讓黑線與哈士奇屏幕的中軸線重合效果會(huì)更好呢?不僅去調(diào)節(jié)黑線與屏幕中間位置的偏差抒钱,還要去調(diào)節(jié)黑線的方向蜓肆。
趕緊用本文講的 PID 算法試試吧,你能挑戰(zhàn)更快的速度么谋币?
代碼下載
請(qǐng)到知識(shí)星球下載本教程對(duì)應(yīng)的源代碼仗扬。