官术网_书友最值得收藏!

2.2 輪式機器人的轉向結構

筆者最終選用了雙驅動結構,其中兩個輪子是減速驅動輪,也就是電動機輸出軸通過齒輪結構箱和聯軸器連接,這兩個驅動輪并排在同一個軸線上,外形與生活中的三輪車相似,但筆者設計的兩只驅動輪并非連接在同一個軸上。

圖2-3 輪式機器人的底盤

圖2-3是輪式機器人的底盤,可以看到,兩個電動機(圖2-3中箭頭所示)并未連接到同一個軸上。那么這種輪式機器人如何實現轉彎呢?

2.2.1 輪式機器人的差速轉向

差速轉向結構利用兩個輪子的不同速度實現轉彎動作。在輪式機器人中,當兩個輪子的轉動速度不同時,便可以實現轉向,這就要求兩個輪子固定在兩個電動機上。如圖2-4所示,當A輪和B輪分別按照圖中的箭頭方向轉動時便實現了右轉彎的動作。

圖2-4 轉彎動作示意圖

這種結構很容易實現轉彎,但是卻有一個很明顯的問題,那就是很難實現直線行駛。即兩個輪子在行駛過程中很難保證速度一模一樣,這樣就會存在偏移誤差,即使短時間內偏移誤差只有0.01°,但是隨著時間積累,誤差被逐步放大,偏移角度會越來越大。速度差異是由于每個電動機的參數在生產過程中因材質的批次不同,或者一些其他因素造成的,這就好比天下沒有一模一樣的兩片葉子,所以即使用相同的電壓驅動兩個電動機,兩個電動機的轉速也不會完全一樣。

圖2-5 輪式機器人直行示意圖

筆者在實際實驗中發現,給兩個電動機提供相同的電壓,使其運動,當運動一段距離后,會發現所走的路線是有弧度的,如圖2-5所示。R是弧度的半徑,V1、V2分別是右輪和左輪的速度,V是向前的線速度,B是左、右輪之間的距離。筆者采用型號為 GA370的帶編碼測速的電動機,每個電動機接入約8 V電源(電源存在波動,實際會有偏差),通過編碼器獲取轉速值(編碼指將電動機的轉速通過傳感器變成可讀的電壓值序列,會在2.2.4節中講述),最終結果如表2-1所示。

表2-1 左、右編碼脈沖計數對比

那么輪式機器人無法走直線的問題怎么解決?通過引入閉環控制,即找到參照物可以實現。根據輪式機器人與參照物的偏差進行修正,從而保證輪式機器人走直線。在自動控制領域,有一種控制算法叫PID算法,能使采樣速度和設置速度無限接近。這也是1.1節中第5個問題的答案(如何控制機器人走直線)。截止到目前,本書中都是以差速轉向進行講述的。

2.2.2 輪式機器人的獨立舵機轉向

獨立舵機轉向依靠一個舵機實現轉向。該舵機安裝在兩個輪子中間,如圖2-6所示。

兩個輪子之所以發生轉向,是因為中間的舵機在轉動。舵機可以旋轉180°,180°指的是向左、向右分別旋轉90°。就像人的頭部正常情況下朝向正前方,可以向左轉頭或向右轉頭。

舵機有電源線、地線以及一根信號線。舵機的中間位置定義為舵機在順時針或逆時針方向上具有相同旋轉量的位置。舵機的旋轉可以由信號線上的PWM波實現,通過信號線上PWM波發送的脈沖的持續時間的不同,可以控制舵機轉向不同的位置。例如,周期為20 ms,高電平(脈沖)時間t=1.5 ms將使電動機從0°順時針旋轉90°,這是剛才所說的中間位置。高電平(脈沖)t=0.5 ms控制舵機恢復到0°位置,可以認為是從中間位置向左轉了90°。高電平(脈沖)t=2.5 ms控制舵機以順時針方向從0°轉動180°,可以認為是從中間位置向右轉了90°,如圖2-7所示。

圖2-6 四輪機器人底盤

圖2-7 脈沖示意圖

目前輪式機器人中常用的舵機是SG90小舵機,驅動電壓為5~12 V,PWM信號線可以直接連接單片機的IO引腳,不需要驅動模塊,這是因為單片機的IO引腳和舵機的信號線連接,而不是可流過大電流(500 mA~1 A)的電源線,舵機接線如圖2-8所示。

圖2-8 舵機接線示意圖

在STM32中用代碼實現舵機的轉動,指令如下:

A 指令:TIM_SetCompare2(TIM3,10); //左旋轉90°

B 指令:TIM_SetCompare2(TIM3,20); //右旋轉90°

C 指令:TIM_SetCompare2(TIM3,15);//正前方

無論當前舵機處于什么狀態,如果想讓舵機朝向正前方,只需要調用C指令即可。

2.2.3 阿克曼轉向結構

阿克曼轉向結構是四輪機器人中常用的轉向結構,它的特殊結構導致轉彎內徑R1小于轉彎外徑R2,如圖2-9所示。從圖中可以看到,圖中兩個輪子固定在同一個金屬連接軸上,每個輪子不能單獨橫向擺動,可以依靠控制力矩使整個金屬連接軸轉動,從而帶動兩個輪子,以旋轉中心實現轉彎。此類轉向結構驅動輪可以是后輪,用一個電動機就可以驅動兩個輪子同時轉動。

圖2-9 舵機轉向示意圖

2.2.4 輪式機器人轉向比較

差速轉向的轉彎半徑相對阿克曼轉向可以小很多,并且只要電動機轉動起來,立馬可以得到航向角的變化。而舵機轉向需要將傳感器安裝在舵機結構件上,才能知道指令發布后返回的結構,需要特殊的結構設計,轉彎半徑也相對較大,但是舵機的IO資源利用非常少,很適合四輪雙驅的車體。

對于差速轉向,前行速度v和角速度w不必同時存在數值。當前行速度v=0,角速度w≠0,同樣可以完成原地轉向。在筆者的機器人設計中,正是利用這一特性才完成的避障算法。

例如,機器人被一堵墻攔住了去路,如圖2-10所示。差速轉向機器人可以原地旋轉,實現轉彎動作。而阿克曼轉向需要考慮轉彎半徑,設計算法時需要考慮轉彎半徑。對于阿克曼轉向結構的機器人來說,要求轉彎時離墻的距離更遠,以免轉彎時撞到墻上。

圖2-10 差速轉向機器人“面壁”思考

綜上可見,差速轉向的機器人的機械結構則相對簡單,本書主要以差速轉向結構進行講解。

2.2.5 差速機器人里程計運動模型

2.6節將講解如何低成本DIY一個機器人,但是機器人的運動依舊需要科學地利用數學知識和運動學知識。

機器人運動學引入里程計運動模型,里程計運動模型是在基于平面的二維坐標系中,將機器人的坐標位置、航向角用數學的方法表示出來。機器人的位姿包括x軸坐標、y軸坐標以及與x軸的夾角,可用Pose(x,y,θ)表示,如圖2-11所示。相關公式如下。

其中,L是兩個輪子之間的距離,根據編碼器可得到兩輪的速度,可計算得到線速度v、角速度w、時間dt內機器人的最新位置,如圖2-12所示。

圖2-11 初始位姿示意圖

圖2-12 移動后的位姿

假設機器人有三個時刻,t0、t1、t2,為方便計算,角度單位為deg/s,t0時刻機器人上電,機器人坐標系原點與里程計坐標系原點重合,位于里程計坐標系(0,0,0)點,此時機器人以0.2 m/s的速度向前移動1s。t1時刻機器人停止運動,此時里程計下的位姿是(0.2,0,0)。然后機器人以30 deg/s的角速度旋轉1s,停止轉動后里程計下的位姿是(0.2,0,30)。t2時刻機器人再以0.2 m/s的速度運行1s,然后停止運動,此時里程計下坐標是(0.373,0.1,30)。

但在實際中,隨著時間的累積,誤差會增加,導致里程計的數據發生偏移,所以需要引入IMU傳感器(陀螺儀、加速度計等)進行校正。

主站蜘蛛池模板: 马关县| 淳化县| 资中县| 洛扎县| 淮阳县| 大丰市| 台中市| 视频| 连州市| 建阳市| 桑日县| 枣强县| 汝南县| 新和县| 明溪县| 西吉县| 宿州市| 荆州市| 合川市| 隆林| 大田县| 利辛县| 子长县| 盱眙县| 姜堰市| 宿松县| 南漳县| 蒲江县| 富顺县| 枝江市| 蕉岭县| 洛扎县| 营口市| 南涧| 鄂托克旗| 巴林左旗| 灵丘县| 澳门| 凉山| 法库县| 延寿县|