Robofun 機器人論壇

標題: [分享]兩輪平衡車 [打印本頁]

作者: white    時間: 2007-10-18 17:17
標題: [分享]兩輪平衡車
畢業後等當兵這段期間真的是有夠閒
剛好去高雄看機器人展有看到兩輪機器人
而樓下又有新版segway可以玩
既然如此 乾脆也弄一台來玩玩吧

材料...說真的要搞起來還必須花不少...
還好我有實驗室的報廢品可以撿來改裝加減用XD
----------------------------------------------------------
首先機體部分..就隨便電子材料行買個鋁製整理盒
馬達部份 兩顆帶有減速齒的DC馬達

輪子的話拿遙控飛機用的輪子擴孔塞進軸裡....

sensor部分的 gyro我拿實驗室摔機壞掉的直升機用陀螺儀剪線接類比訊號出來用
加速規呢..在Y***O拍賣買的  一顆NT250 3軸+/-2G 銲好的封裝

(說實在我也不知道為啥他焊好的還可以這麼便宜 但還不錯用)
只是..需要自己弄放大跟濾波電路..要不然 嘿嘿...一定摔的很難看
A/D 部分用了microchip MCP3208 12bit ADC
馬達控制部份  我用了L293D這顆IC來控正反轉  轉速自己寫code產生PWM

控制部份用了一顆PIC 18F258 超頻成40MHz

而控制率用了fuzzy
---------------------------------------
整體流程 :
1. 收AD資料得到原始加速度跟角速度
2. 加速度求傾角
3. 原始傾角跟角速度進2階互補濾波估測真實傾角
4. 角度跟角速度進控制率
5. 得到的output丟給馬達控制板輸出
6. 回到第一步





目前整體機構總重1.4公斤
有點重 馬達都是40~60%左右在修正(當然我機構設計也不好)
所以還是會在中立點微晃...
但是還站的起來 受到小擾動沒問題
成本除了那顆陀螺儀外其他的應該都不貴...1.5K內可以搞定
甚至IC我都是跟國外microchip要sample不用錢
借此說明希望大家也能建造自己的mini segway囉

不囉唆 看影片吧
影片中間我刻意丟重物在他身上...
http://tw.youtube.com/watch?v=uOy-eOt2QiI
作者: funny    時間: 2007-10-18 23:52
讚喔...

可以請教 FUZZY 程式段的寫法嗎?
作者: white    時間: 2007-10-19 00:30
fuzzy寫法喔
這恐怕不是三言兩語可以寫完的吧
定義歸屬函數範圍形狀 設計規則庫
然後一堆if判斷 然後重心法或其他方法求output
光C程式碼就幾十行了吧
建議去看fuzzy的書  自然會寫
當然我記得有些書會附source code
不過大部分都寫的很複雜..因為要用在各種情況
當然你必須看懂然後消化去簡寫囉

不過如果你只是要學怎嚜寫控制  最簡單的恐怕就是PID了吧
C語言程式碼不超過5行就搞定
作者: x1576    時間: 2007-11-9 20:05
可以提供完整的教學嗎?
我自己想做一台來玩
但不知道要怎樣開始動手
作者: peng1748    時間: 2007-11-10 03:08
我也想要一台segway
作者: doubletime    時間: 2007-11-11 23:00
請教white 大大幾個問題
1、您有使用kelman filter嗎?
2、您有acceleremeter  是使用  sin-1 (2軸) 還是  tan-1(1軸)  ?
3、小弟有在您的youtube 裡面發現您有把車子從靜止  直接站起,這是利用全速衝刺讓車身立起嗎?
4、您假如加入了encoder回授是否可以更穩?
5、您有使用強健系統或是適應性系統嗎?
謝謝您
作者: white    時間: 2007-11-13 00:18
請教white 大大幾個問題
1、您有使用kelman filter嗎?
     ans: 有..後期改良姿態部分是用kalman filter估測
2、您有acceleremeter  是使用  sin-1 (2軸) 還是  tan-1(1軸)  ?
     ans: 正確來說要用atan2   懂INS領域的大概都知道 roll pitch可以用 atan2(ax,az) atan2(ay,sqrt(ax^2+ay^2+az^2))
3、小弟有在您的youtube 裡面發現您有把車子從靜止  直接站起,這是利用全速衝刺讓車身立起嗎?
     ans: 基本上只要馬達夠力 還有姿態不會估的太差就可以這樣 但是我反覆測試還是跟主要的機構配置有關 (輪子大小跟你的重心位置)
4、您假如加入了encoder回授是否可以更穩?
      ans: 沒錯..有encoder就可以定位在同以點...目前我是靠加大了控制器的I gain讓他強制收斂在原地附近
5、您有使用強健系統或是適應性系統嗎?
     ans: 我測過了fuzzy..PID..sliding mode control....結論是PID最好用 ...但是目前是使用 PID+sliding mode 混合控制
謝謝您

[ 本帖最後由 white 於 2007-11-13 00:24 編輯 ]
作者: doubletime    時間: 2007-11-13 00:31
請教一下 2、您有acceleremeter 是使用 sin-1 (2軸) 還是 tan-1(1軸) ?
ans: 正確來說要用atan2 懂INS領域的大概都知道 roll pitch可以用 atan2(ax,az) atan2(ay,sqrt(ax^2+ay^2+az^2)) 關於這個
是否有更清楚的資料或是APPLICATION NOTE 之類的 可以參考
謝謝
作者: white    時間: 2007-11-13 00:52
sorry 前面有部分打錯  一個是atan2(ax,az) 另一個應該是atan2(ay,sqrt(ax^2+az^2))
哪個是roll 哪個是pitch看你怎麼定義座標系 還有 出來是rad喲

參考阿... 我都是翻書的耶
只要是講INS或是INS\GPS 整合的書都應該會提到
就是從一堆旋轉方程式或 DCM(direct cosine matrix)導來的
一堆數學而已......
如果你有roll pitch同時存在可以用這個方式估"靜態"姿態
如果你只有一軸的話 其實也可以用asin之類的方式去估也可以拉
還有 這個只是利用加速度估"靜態"姿態  因為只要你在移動
加速度就會有變化 你就不知道這個變化是因為你姿態在變還是有額外加速度在變化
所以這時候就需要filter進來  整合這個姿態跟陀螺儀積分後的姿態囉
(因為兩個都不準 一個受加速度影響 一個積分會飄移)

[ 本帖最後由 white 於 2007-11-13 01:04 編輯 ]
作者: lvzhong    時間: 2008-5-22 02:08
不好意思~小弟最近我要做機器人的平衡~所以最近才爬文~

因次看到這篇文章~Good!!

有幾項問題想請問一下~

有關第3步~ 將加速度計的傾斜角+陀螺儀的角速度做真實傾斜角

這個部份是用怎麼做的?

是把角速度經一次積分變角度 與 加速度計的角度

把這2個輸入做這個"2階互補濾波"演算法即可得到真實傾斜角嗎?

還是都不積分 直接做2階互補濾波?

------------------------------------
第4步 若我是只用PID做 我不是只要將我的cmd(傾角)進控制器算就可以嗎?

那你多一個角速度是做什麼用途呢~

請幫麻解惑一下^^謝謝 感謝

[ 本帖最後由 lvzhong 於 2008-5-22 03:05 編輯 ]
作者: sansam    時間: 2008-5-22 21:52
我想買輪胎
可以告訴我哪邊有像平衡車的輪胎
感激
作者: white    時間: 2008-5-25 09:45
標題: 回復 10# 11# 的帖子
to lvzhong
Q:將加速度計的傾斜角+陀螺儀的角速度做真實傾斜角這個部份是用怎麼做的?
A:加速度傾角跟陀螺儀角速度積分得到的兩個不太準的角度值(一個會受動態影響 一個積分會爆炸)
   一起丟入filter估測一個近似真實的角度
Q:若我是只用PID做 我不是只要將我的cmd(傾角)進控制器算就可以嗎?那你多一個角速度是做什麼用途呢
A:兩個角度進filter後只會輸出一個估測角度~所以直接一個角度進控制器(不過我是兩層控制器 內迴圈控角速度 外迴圈控角度)

to sansam
那個輪胎我是去遙控飛機模型店買的 只要跟他講要買大型遙控飛機的橡皮輪胎就可以了
(遙控飛機輪胎有兩種 一種是橡皮的 一種是類似海綿的)
作者: lvzhong    時間: 2008-5-27 01:52
謝謝你的回答~

還有幾個問題請教~

1、陀螺儀的積分是用梯形積分嗎?還是有利用其他的方法?

2、將2個感測器進入互補式濾波器~而互補式濾波 其實就是有點類是lowpass filter~

     請問你給lowpass filter的截止頻率在哪邊呢?

3、不知道是否願意分享一下你2個迴路的PID呢?

不好意思 第一次接觸 所以問題多一點!!

感謝^^

[ 本帖最後由 lvzhong 於 2008-5-27 02:22 編輯 ]
作者: white    時間: 2008-5-28 09:19
標題: to lvzhong
1.yep~不會的話可以去參考數值分析的書囉..相信會更增加你的功力
2.我忘了當初的截止頻率設在哪了 要回去找code看..因為後來我就改用kalman filter了
   這個效果比互補率波好太多了
3.我畫個簡圖給你看~你如果有學過自動控制應該會看的懂
   
大致上就是有兩組PID gain (內迴圈其實用P就夠了)
先計算內迴圈..會得到一組你要輸出的值
再算外迴圈 也會得到一組值
最後的總輸出就是兩者相加囉

祝你早日成功喲~成功了也記得po個文讓大家欣賞欣賞

[ 本帖最後由 white 於 2008-5-28 09:21 編輯 ]
作者: mzldongnan    時間: 2008-7-17 08:44
你的控制程序能發給我嗎?mzldongnan@163.com
關於fuzzy看了一些,但還是不知道怎麼用來控制電機
作者: mzldongnan    時間: 2008-7-17 13:23
你是用兩個MCU做的嗎?你說用陀螺積分求角度,是不是一個MCU負責對陀螺實時取樣,另一個進行電機控制?
作者: sj602127    時間: 2009-1-21 23:39
標題: 初學模糊控制的新手
不好意思,我也很想參考一下原PO的程式碼,因為初學模糊控制,借了一些書來看,發現大部份都是講理論以及數學算式的部份,實際在程式的部份都比較少著墨,很想要自行嘗試寫看看,卻一直弄不好,希望可以參考一下PO的程式碼,謝謝。信箱:sj602127@hotmail.com
作者: then0011    時間: 2009-8-21 11:26
請問你的電路是自己做的嗎?  如果是自己做的 可以提供參考嗎?  如果你是買的  可以提供地址嗎?謝 謝
作者: mac1    時間: 2009-8-21 17:30
現在才發現這個好東西,真是太晚了
想請教一下,

最後提到,這用了 PID+sliding control,
如果只用 sliding control, 效果不好嗎?
問題在哪裡? 反應不夠快嗎? 還是會反映過度了?
作者: tensl    時間: 2009-9-15 16:28
本人剛開始研究自平衡小車,誰能發我一份原Code文件,謝謝了
作者: KMD    時間: 2010-2-27 00:32
樓主!我怎麼才可以找得到你,我的QQ1300188925,聯繫一下可以嗎。
作者: yrhsieh    時間: 2010-5-13 10:01
回復 1# white


    White您好:可否請教您在kalman filter在程式中的寫法?(或告知kalman filter 的algorithm)

master.yrhsieh@msa.hinet.net
作者: g921002    時間: 2010-5-13 16:32
http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf

超入門Kalman filter,再看不懂我也沒辦法了。




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2