當(dāng)前位置:首頁 > 公眾號精選 > 技術(shù)讓夢想更偉大
[導(dǎo)讀]關(guān)注、星標(biāo)公眾號,直達(dá)精彩內(nèi)容原文鏈接:http://nicekwell.net/項目作者:?老倪摘要:平衡小車大家應(yīng)該見到過很多了,比如最有名的要數(shù)野生鋼鐵俠稚暉君的自行車平衡小車了。那個玩意太高級一般人做不出來,作為學(xué)生或者DIY愛好者做一輛小型的mini平衡小車還是可以實現(xiàn)...

關(guān)注、星標(biāo)公眾號,直達(dá)精彩內(nèi)容



原文鏈接:http://nicekwell.net/


項目作者: 老倪



摘要:平衡小車大家應(yīng)該見到過很多了,比如最有名的要數(shù)野生鋼鐵俠稚暉君的自行車平衡小車了。那個玩意太高級一般人做不出來,作為學(xué)生或者DIY愛好者做一輛小型的mini平衡小車還是可以實現(xiàn)的。


隨著16屆恩智浦杯全國大學(xué)生智能汽車大賽新增單車?yán)M,平衡小車的實現(xiàn)正在成為電子愛好者最受歡迎的項目,如果你是電子專業(yè)愛好嵌入式開發(fā),平衡小車你一定要做一輛。今天給大家?guī)淼氖且粋€博主老倪制作的迷你的平衡自行車項目,雖然時間有點久遠(yuǎn),不過相信我們?nèi)匀荒軓闹袑W(xué)到一些新東西。


下面兩張圖是龍邱科技為16屆智能車競賽生產(chǎn)的電單車K車模高配版摩托車圖片



下圖是本項目要說的簡易mini版平衡小車




自行車平衡DIY分為3部分介紹:


  • 第一部分介紹自行車平衡基本物理原理;


  • 第二部分理論篇,對平衡自行車的算法進(jìn)行理論分析,包括模型分析、姿態(tài)檢測方法、PID算法,控制算法;


  • 第三部分實踐篇,具體介紹平衡自行車用到的元器件,動力、轉(zhuǎn)向、電路及代碼分析。


一、自行車平衡原理

自行車是怎么平衡的,老外做過一個非常好的視頻,這個視頻很好地證明了常見的”角動量守恒”的說法是錯誤的,并且正確的說明了自行車平衡原理是和轉(zhuǎn)向相關(guān)的,但沒有具體指出平衡和轉(zhuǎn)向的關(guān)系。


在這里我們就先來討論一下”角動量守恒”這種最常見的猜測為什么是錯誤的,大致討論一下轉(zhuǎn)向是如何使自行車保持平衡的。


1、角動量守恒說

角動量守恒說的意思就是:輪子跑的時候在轉(zhuǎn)動,此時輪子就類似于陀螺,角動量守恒使自行車保持不倒。


小時候也有過這樣的疑問,如果把自行車車輪固定從下坡推下,自行車能不能一直往前走?


到底能不能呢?老外的視頻做了這個試驗:



固定之后就會倒下,可見輪子的陀螺儀效應(yīng)并不是維持自行車不倒的原因。另外還有老外做了一個沒有陀螺儀效應(yīng)的自行車,該自行車也可以穩(wěn)定平衡:



以上足以說明陀螺儀效應(yīng)不是維持自行車平衡的根本原因。


2、離心力是自行車平衡的根本原因

那么什么才是維持自行車平衡的原因呢?


自行車可以看做是一個倒立擺(左右方向不穩(wěn)定),這個倒立擺受重力作用是一個不穩(wěn)定系統(tǒng),需要額外的回復(fù)力維持平衡,而提供回復(fù)力的正是自行車轉(zhuǎn)向時的”離心力”。


離心力是速度和把手轉(zhuǎn)向角的函數(shù),在一個固定的速度下,可以認(rèn)為控制把手轉(zhuǎn)向角度就是控制回復(fù)力。


我們先記住這一點:維持自行車平衡,需要通過一種合適的算法控制把手角度才能使自行車穩(wěn)定平衡。


機(jī)械自平衡

或許有人會奇怪,有些自行車只要推起來就可以自己平衡,如下面視頻:



我自己也買過一個如下面這樣的遙控摩托車想要研究一下:


拆開后發(fā)現(xiàn)里面并沒有精確的轉(zhuǎn)向控制結(jié)構(gòu),仿佛在行駛時根本沒有轉(zhuǎn)向控制,就類似于上面自行車一樣自己就可以平衡了。


這到底是怎么回事呢?其實這就是結(jié)構(gòu)設(shè)計者的牛逼之處,設(shè)計的機(jī)械結(jié)構(gòu)自帶回復(fù)功能,機(jī)械結(jié)構(gòu)使得轉(zhuǎn)向會根據(jù)車身傾斜而改變,這種改變的幅度正好可以使自行車穩(wěn)定平衡。


如果我們改變車身結(jié)構(gòu),可能就會破壞原有的參數(shù),使得自行車無法穩(wěn)定平衡。如在前輪綁一個重物:



在老外的視頻中,分析了車身傾斜對轉(zhuǎn)向的三個影響因素:


  • 前輪轉(zhuǎn)軸后傾,導(dǎo)致傾斜時前輪轉(zhuǎn)向。
  • 把手安裝在前面,導(dǎo)致傾斜時前輪轉(zhuǎn)向。
  • 前輪轉(zhuǎn)動時的陀螺儀效應(yīng),車身傾斜,陀螺儀效應(yīng)使得前輪轉(zhuǎn)向。


01:36



以上是所謂”機(jī)械自平衡”,平衡根本原因還是轉(zhuǎn)向,只不過巧妙的機(jī)械設(shè)計使得前輪轉(zhuǎn)向特性恰好很容易維持平衡。


手動自平衡

手動自平衡的意思就是我們自己手動控制讓它平衡。


我們既然分析平衡原理,還要做一個平衡自行車出來,這一部分要好好研究一下,將會在后面理論篇重點討論一下控制方法。


二、平衡自行車-理論篇

一、模型分析

1、倒立擺

很顯然我們知道自行車在左右方向上不穩(wěn)定,這是一個很常見的物理模型——倒立擺。


顧名思義,倒立擺的意思就是倒著的擺,比如一個倒著的桿,


倒立擺的特性:不穩(wěn)定,只要偏離平衡位置,就會有一個力(重力的分力)使系統(tǒng)更加偏離平衡位置,這樣偏差就會越來越大。


一般倒立的桿在前后左右方向都有可能倒下,在二維的平面上不穩(wěn)定;而自行車僅在左右方向上可能倒下,是一維的倒立擺,這要簡單一些。


以下是幾個生活中常見的倒立擺例子:


2、自行車的平衡控制

自行車屬于倒立擺模型,倒立擺是不穩(wěn)定的,那么倒立擺應(yīng)該如何控制才能平衡呢?


我們把問題拆分一下:


  • 怎樣的狀態(tài)才叫平衡?
  • 我們能控制的是什么?
  • 如何控制才能穩(wěn)定平衡?

2.1 怎樣的狀態(tài)才叫平衡

我們要對”平衡”進(jìn)行數(shù)學(xué)描述,所謂的平衡其實就是倒立擺的傾角穩(wěn)定在一個我們想要的值。


通常我們想要平衡在θ = 0處。


2.2 我們能控制的是什么

對于倒立擺模型,通常我們能控制的是底端的力或速度或位置,不同的控制量對應(yīng)的控制方法不同。


對于自行車來說,它的控制方式不像通常的倒立擺那樣直接控制底部,而是間接地通過轉(zhuǎn)向來控制,當(dāng)自行車以一個固定的速度前進(jìn)時,自行車把手以一定角度進(jìn)行轉(zhuǎn)向(設(shè)為α),自行車會做相應(yīng)半徑的圓周運動,產(chǎn)生相應(yīng)大小的”離心力”。


在自行車這個費慣性系里看來,只要對把手進(jìn)行一定角度的轉(zhuǎn)向(α),就會產(chǎn)生一個相應(yīng)大小的橫向力:


這就是我們進(jìn)行平衡控制時的實際控制量——把手轉(zhuǎn)角α,只要控制它就能控制回復(fù)力。


2.3 如何控制才能平衡

上面我們已經(jīng)能夠通過轉(zhuǎn)向產(chǎn)生回復(fù)力,這個回復(fù)力可以把倒立擺”掰回”平衡位置,有往回掰的回復(fù)力就能穩(wěn)定平衡了嗎?


并不是這樣,我們再來回顧一下中學(xué)物理:


過阻尼狀態(tài)的擺會以較慢的速度回到平衡位置;欠阻尼狀態(tài)的擺會很快回到平衡位置,但會在平衡位置來回擺動;臨界阻尼狀態(tài)的擺會以最快的速度穩(wěn)定在平衡位置。


結(jié)合到實際的自行車平衡中就是:


如果恢復(fù)力不夠大,就無法矯正,或者矯正速度很慢,這會導(dǎo)致系統(tǒng)不穩(wěn)定;如果回復(fù)力過大,就會導(dǎo)致矯正過度,這也會導(dǎo)致系統(tǒng)不穩(wěn)定;我們最希望的狀態(tài)就是回復(fù)力剛剛好,剛好使倒立擺快速回到平衡位置,又不至于矯正過度。


這是一個復(fù)雜的數(shù)學(xué)計算過程,回復(fù)力大小會在系統(tǒng)運行時不斷地計算(本平衡自行車是20ms計算一次),用到的是PID算法,會在后面詳細(xì)介紹。


3、自行車平衡需要解決的基本問題

  • 獲取左右方向傾角θ


  • 以合適的算法控制轉(zhuǎn)角α使系統(tǒng)穩(wěn)定平衡


這將會在下面詳細(xì)討論。


二、姿態(tài)檢測

1、檢測的是什么


檢測的是自行車左右傾斜的角度。


2、怎么檢測


用一個叫g(shù)y521的模塊,里面用的是mpu6050芯片,帶有陀螺儀和加速度傳感器。


gy521的具體使用會在第三篇-實踐篇介紹,這里我們知道通過這個模塊我們可以得到自行車各個方向的加速度和角速度。注意哦,我們不能直接得到傾斜角度,我們的到的是各個方向的加速度和角速度,需要進(jìn)行一些復(fù)雜的計算才能得到正確的傾斜角度。


常用的算法有互補(bǔ)平衡濾波、卡爾曼濾波。


三、PID算法

前面已經(jīng)分析了,我們通過控制把手轉(zhuǎn)角來控制回復(fù)力,我們需要實時計算一個合適的回復(fù)力使系統(tǒng)穩(wěn)定平衡。


有一個小球在光滑球面上,小球的位置是x,光滑球面頂端在L處,我們可以控制小球水平方向力F,現(xiàn)在要求讓小球穩(wěn)定平衡在x0處。


先看簡單情況x0=L,此時偏差為L-x,


我們給出一個比例項(P) F = kp*(L-x),這樣就會有一個回復(fù)力,當(dāng)偏差存在時就會有一個力把小球拉回L處。


這存在的問題是,小球接近L時是會有一定速度的,小球越來越接近L,此時的力仍然是在把小球往L處拉,這會導(dǎo)致小球到達(dá)L時(我們想要的位置)速度很大,小球無法立刻停下來,而是會沖過去。


這樣小球就會在L附近來回擺動,這是不穩(wěn)定的狀態(tài),屬于欠阻尼狀態(tài)。


為了解決上述問題需要加一個微分項(D) F = kd*dx/dt = kd*v,所謂”微分”指的是位置x對時間的微分,說白了就是速度。


意思就是當(dāng)速度越大,就產(chǎn)生一個反向的力使速度減小,這樣就可以防止出現(xiàn)上面小球沖過去的。


可以認(rèn)為這一項具有”預(yù)測”功能,預(yù)測小球下一時刻的狀態(tài)從而提前做出反應(yīng)(預(yù)測小球?qū)⒁竭_(dá)L處,提前減速),


也可以認(rèn)為這一項具有阻尼作用,相當(dāng)于系統(tǒng)中有一個和速度成比例的阻尼力。


這個”阻尼力”調(diào)得過小會導(dǎo)致欠阻尼狀態(tài),調(diào)得過大會導(dǎo)致過阻尼狀態(tài)。


積分項此時可以不用,積分項是當(dāng)平衡位置x0不等于L時使用的,


當(dāng)平衡位置不是L處,那么當(dāng)小球靜止在平衡位置x0時,由于在坡道上會有一個恒定的橫向偏移力,此時比例調(diào)節(jié)作用為0(Δx=0),微分調(diào)節(jié)作用也是0(v=0),所以小球在該處無法平衡,會在更遠(yuǎn)離平衡位置處達(dá)到平衡,那么就會有一個長時間存在的偏差。


積分作用就是檢測偏差進(jìn)行累積,對于上面這個長時間存在的偏差進(jìn)行積分(累積疊加),使系統(tǒng)在長時間范圍可以穩(wěn)定在要求的平衡位置。


三、平衡自行車-實踐篇

在本文將會介紹平衡自行車的具體制作過程,包括機(jī)械、電路和代碼。


平衡自行車完整的代碼托管在https://github.com/nicekwell/balance_bike


上GitHub網(wǎng)站卡的同學(xué)也可以在文末下載打包好的文檔。


一、材料

機(jī)械

名稱 數(shù)量 備注
銅柱、鐵絲、膠槍等基礎(chǔ)材料和工具 若干
輔助用具,果果小師弟
自行車架 1 自己做車架是很麻煩的,我是直接買的車架,淘寶上搜”自行車 拼裝 DIY”能搜到很多
舵機(jī) 1 轉(zhuǎn)向用的,對于我用的1:6車架,普通舵機(jī)有點大,我用的是9g舵機(jī)
N20電機(jī) 1 選扭力大一點,這樣轉(zhuǎn)速會比較穩(wěn)定
皮帶輪和皮帶 1 如上面的圖片,我是用皮帶來傳輸動力的

電路

名稱 數(shù)量 備注
電池、電池盒

lm1117-3.3 1 降壓芯片給控制系統(tǒng)供電
stm32f103c8t6核心板 1
gy521模塊 1 加速度傳感器 陀螺儀
升壓模塊 1 升到12v給電機(jī)供電,根據(jù)電機(jī)特性選擇是否使用升壓模塊
8050三極管板 1 驅(qū)動電機(jī),由于自行車不需要反轉(zhuǎn),所以不需要使用電機(jī)驅(qū)動芯片,用三極管就能方便地實現(xiàn)。我用了兩個三極管并聯(lián)提高功率。
自鎖開關(guān) 1 整個系統(tǒng)開關(guān)
led指示燈 1 配合1k限流電阻
藍(lán)牙模塊 1 可選,如果想要遙控的話就使用藍(lán)牙

二、動力部分

傳動方式

如圖,我用的是皮帶或者齒輪傳送的方式,因為比較好實現(xiàn)。


電機(jī)選擇

這個DIY是不考慮變速情況的,平衡的參數(shù)都是按照一個固定速度調(diào)的。


所以動力部分的作用就是提供一個恒定的速度,并且這個速度盡可能穩(wěn)定,盡可能不受外部影響。


電機(jī)應(yīng)選擇扭力大一些、轉(zhuǎn)速穩(wěn)定的減速電機(jī)。


電機(jī)供電

電機(jī)是直接供電還是使用升壓模塊供電要根據(jù)電機(jī)特性,有些電機(jī)用升壓模塊可以提高功率,有些大電流電機(jī)用升壓模塊反而可能限制了電流。


我這里用升壓模塊升到12v給N20電機(jī)供電的。


另外,電機(jī)通過三極管受stm32控制,通過控制占空比也可以限制電機(jī)輸出的功率。


三、轉(zhuǎn)向部分

轉(zhuǎn)向部分用一個舵機(jī)帶動把手轉(zhuǎn)動即可。


四、電路

在GitHub工程里有詳細(xì)的引腳連接表


https://github.com/nicekwell/balance_bike


供電

  • 用3.3v穩(wěn)壓芯片給整個控制系統(tǒng)供電,包括單片機(jī)、GY521模塊、藍(lán)牙模塊。
  • 用5v穩(wěn)壓芯片給舵機(jī)供電。
  • 用12v升壓模塊給電機(jī)供電。

下載

我是用串口給stm32下載程序的。


引腳 功能
PA9 下載TXD
PA10 下載RXD

GY521

這個模塊通過i2c通信,只需要連接4根線。


  • 3.3v
  • GND
  • PB0    GY521 I2C SCL
  • PB1    GY521 I2C SDA (用的是IO模擬i2c)

電機(jī)

點擊用12v升壓模塊供電,由于不需要反轉(zhuǎn),用三極管即可直接驅(qū)動,電路圖如下:


加三極管的目的是為了可以通過調(diào)節(jié)PWM占空比來限制輸出功率,但我的實際情況是100%輸出時動力才勉強(qiáng)足夠。所以如果你不需要限制電機(jī)輸出功率,或者通過其他方式限制輸出功率,也可以不要三極管,不通過單片機(jī)控制。


舵機(jī)

舵機(jī)是用5v供電的,而單片機(jī)是3.3v電平,對于pwm控制腳可以通過2個三極管實現(xiàn)同相的電平轉(zhuǎn)換:


藍(lán)牙模塊

下圖是我使用的藍(lán)牙串口模塊,可以實現(xiàn)串口透傳,只需要4根線連接:vcc、gnd、txd、rxd。


藍(lán)牙模塊是用來調(diào)試和遙控的,沒有它也能跑。建議還是加上這個模塊,在調(diào)試PID擦數(shù)時會非常方便。


五、代碼結(jié)構(gòu)

代碼提交在GitHub


https://github.com/nicekwell/balance_bike


主要分為3個部分:


1、基礎(chǔ)的驅(qū)動程序,實現(xiàn)電機(jī)、舵機(jī)、gy521數(shù)據(jù)讀?。?/span>


2、平衡控制系統(tǒng),核心是一個20ms定時器,每20ms進(jìn)行一次數(shù)據(jù)采集、計算和響應(yīng);


3、遙控和調(diào)試系統(tǒng),實現(xiàn)log輸出、接收遙控信息。


名稱 文件 功能(智果芯)
i2c i2c/i2c.c, include/i2c.h IO 模擬i2c驅(qū)動,提供i2c基礎(chǔ)操作
gy521 gy521/gy521.c, include/gy521.h gy521模塊驅(qū)動,基于i2c驅(qū)動,提供加速度和角速度的讀取接口
motor motor/motor.c, include/motor.h 電機(jī)驅(qū)動,提供占空比控制接口
angle angle/angle.c, include/angle.h 舵機(jī)驅(qū)動,提供角度控制接口

平衡控制

main函數(shù)會初始化一個定時器20ms中斷一次,調(diào)用 main/balance.c 里的 balance_tick 函數(shù),平衡算法在 main/balance.c 實現(xiàn)。


每20ms到來會執(zhí)行一次:


  • 讀取傳感器加速度和角速度信息。
  • 互補(bǔ)平衡濾波計算當(dāng)前姿態(tài)。
  • 用PID算法計算出前輪轉(zhuǎn)角。

遙控和調(diào)試

兩部分:狀態(tài)輸出和指令接收。


狀態(tài)輸出

在main函數(shù)的while循環(huán)里,利用串口中斷構(gòu)建一個簡單的界面顯示狀態(tài)。


指令接收

串口接收到的數(shù)據(jù)會傳給main/control.c,該文件分析串口數(shù)據(jù),解釋成相應(yīng)的操作。主要是PID參數(shù)調(diào)節(jié)。



參考資料


[1]動力老男孩: http://www.diy-robots.com/


[2]圖中龍邱小車圖片來自B站江小鑒、菜狗同學(xué)兩位up[3]


談一談單片機(jī)開發(fā)的幾種調(diào)試方案: http://nicekwell.net/blog/20170411/tan-[?]-tan-dan-pian-ji-kai-fa-de-ji-chong-diao-shi-fang-an.html


[4] 代碼github :https://github.com/nicekwell/balance_bike


????????????????  END  ????????????????
關(guān)注我的微信公眾號,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。


歡迎關(guān)注我的視頻號:




本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉