SLAM+語音機器人DIY系列:(三)感知與大腦——3.輪式里程計與運動控制

摘要                                              

在個人想象中機器人首先應該能自由的走來走去,而後應該能流利的與主人對話。朝着這個理想,我準備設計一個能自由行走,而且能夠與人語音對話的機器人。實現的關鍵是讓機器人能經過傳感器感知周圍環境,並經過機器人大腦處理並輸出反饋和執行動做。本章節涉及到的傳感器有激光雷達、IMU、輪式里程計、麥克風、音響、攝像頭,和用於處理信息的嵌入式主板。關於傳感器的ROS驅動程序開發和在機器人上的使用在後面的章節會展開,本章節重點對機器人傳感器和嵌入式主板進行講解,主要內容:html

1.ydlidar-x4激光雷達python

2.帶自校準九軸數據融合IMU慣性傳感器nginx

3.輪式里程計與運動控制算法

4.音響麥克風與攝像頭django

5.機器人大腦嵌入式主板性能對比ubuntu

6.作一個能走路和對話的機器人centos



3.輪式里程計與運動控制             

底盤提供輪式里程計與運動控制,是機器人SLAM建圖與避障導航的基礎。因此對底盤進行了解,和熟悉輪式里程計與運動控制的底層原理是頗有益處的。這裏以咱們的miiboo機器人的底盤爲例,對底盤上的輪式里程計和運動控制的原理進行分析。網絡

3.1.硬件概述                  

20miiboo機器人底盤架構

底盤主要由電機控制板和帶編碼器的減速電機構成,如圖20。電機控制板經過串口與機器人的大腦(如樹莓派3)相鏈接,經過接收大腦下發的控制指令,利用PID算法對電機進行控制;同時,採集電機上的編碼器數據發送給大腦,利用航跡推演算法獲得底盤的里程計信息。併發

3.2.輪式里程計與運動控制          

21)輪式里程計與運動控制

如圖21,爲輪式里程計與運動控制的系統框圖。首先是機器人大腦發送控制命令,其實就是指望左、右電機達到的目標轉速,咱們都知道在一個控制系統中,被控對象很難徹底按照指望目標來運行,這就須要引入反饋對被控對象進行實時的閉環控制,讓被控對象儘可能逼近指望目標,電機控制板主要就是用來實現這個過程。同時,電機控制板還負責對電機編碼信號進行採樣,將單位採樣時間(通常爲10ms)內的編碼脈衝累計值做爲里程數據發送給機器人大腦,機器人大腦利用航跡推演算法求解出里程計信息。

通訊協議:

電機控制板與機器人大腦之間採用串口通訊。電機左、右輪指望轉速被封裝到串口的字符串中,做爲控制命令發送給電機控制板;單位時間(通常10ms)內採樣到的電機編碼脈衝累計值(等效爲實際電機速度)做爲里程數據,以一樣的方式被封裝到串口的字符串中發送給機器人大腦。能夠看出,控制命令與里程數據遵循同樣的封裝協議,協議具體形式如圖22

(圖22)通訊協議

電機控制:

(圖23PID算法流程

電機控制最經常使用的就是PID控制算法,如圖23PID算法流程。以電機轉速控制爲例,r(t)就是給定的目標轉速,c(t)就是電機實際運行時的轉速,經過閉環反饋能夠求得r(t)c(t)的誤差值e(t)PID控制算法中的比例(P)、積分(I)、微分(D)調節器利用e(t)生成新的控制量u(t)u(t)經過執行機構(電機驅動器)做用於被控對象(電機),電機的實際運行速度c(t)經過閉環反饋,進入下一次PID調節。就這樣,不斷的經過閉環反饋調節,使電機實際運行速度c(t)最終逼近給定的目標速度r(t)

在連續和離散時間域上PID會有不一樣的表現形式,在連續時間域上積分、微分調節經過積分計算、微分計算實現,而在離散時間域上積分、微分調節經過累加和、差分計算實現。因爲電機控制須要在程序上進行實現,因此須要採用離散域的PID。按照PID算法生成的調節量的形式,又能夠分爲位置式PID和增量式PID;位置式PID生成的u(t)爲直接的控制量,增量式PID生成的Δu(t)是控制量的修正量,須要疊加上一次的u(t-1)才能做爲控制量。離散形式的位置式與增量式PID數學表達如圖24

(圖24)離散形式的位置式與增量式PID數學表達

能夠看出,利用位置PID的數學表達式通過簡單的變形就能獲得增量PID的數學表達式。增量算法不須要作累加,控制量增量的肯定僅與最近幾回偏差採樣值有關,計算偏差或計算精度問題,對控制量的計算影響較小。而位置算法要用到過去的偏差的累加值,容易產生大的累加偏差。增量式算法得出的是控制量的增量,例如閥門控制中、只輸出閥門開度的變化部分,誤動做影響小,必要時經過邏輯判斷限制或禁止本次輸出,不會嚴重影響系統的工做。而位置算法的輸出是控制量的全量輸出,誤動做影響大。增量型PID的程序實現,如如圖25。關於PID參數的整定,將放在後面的文章進行詳細講解。

(圖25)增量型PID的程序實現

差動兩輪底盤輪式里程計:

輪式里程計是機器人底盤的重要組成部分,採用航跡推演算法對機器人的位姿進行估計,並對機器人當前的速度、旋轉速度、左右輪速度進行轉換。不管是機器人的定位導航仍是普通的運動控制,都須要輪式里程計。

(圖26)經過航跡推演計算里程計

如圖26,爲經過航跡推演計算里程計的過程。隨時間推移機器人底盤的實時位姿p1p2p3...pn鏈接起來就造成了機器人的航跡,考慮很短的時間內兩相鄰機器人位姿p1p2,在已知機器人位姿p1和機器人當前左右輪速度vlvr的條件下,利用微積分的思想能夠推算出機器人在下一個時刻的位姿p2,經過這樣不斷的推演,就能夠計算出機器人當前的位姿以及速度、角速度等信息,這就是所謂的航跡推演。關於航跡推演的具體數學推導和程序實現,將在後面的文章中進行展開講解。

底盤電機控制板軟件框架:

(圖27stm32電機控制板軟件架構

如圖27,爲stm32電機控制板軟件架構。底盤中的電機控制與里程數據採集的程序在stm32單片機上實現,TIM1定時器產生週期性的循環,循環中進行電機編碼器數據採集、PID計算、電機速度pwm控制,剩下的就是usart1串口與usart2串口跟機器人大腦之間的通訊了,底盤debug接口是用於stm32程序開發階段使用的,因此在機器人正常運行的過程當中只須要使用底盤控制接口。關於stm32部分的代碼和對應機器人大腦中ROS驅動代碼將在後面介紹。

3.3.在機器人中使用底盤           

經過前面的講解,咱們已經對機器人底盤的用途及工做原理有了必定的瞭解,而且知道了電機控制和里程計的工做過程。這時候確定很想知道如何在機器人中把底盤使用起來呢?其實很簡單,和激光雷達、IMU這些傳感器同樣,底盤也能夠當作一個傳感器來使用,只不過不一樣之處是這個傳感器與機器人大腦是雙向交互的,機器人大腦向底盤發送控制命令,底盤反饋里程數據給機器人大腦。可是,不論交互的細節如何,只須要裝上底盤的ROS驅動包,上層算法只須要發佈和訂閱相應的主題就能達到使用底盤的目的。

28在機器人中使用底盤

底盤經過串口與機器人相鏈接,機器人中經過運行底盤控制ROS驅動,來實現讀取串口的速度反饋,利用航跡推演算法計算獲得里程計併發布到/odom這個主題;底盤控制ROS驅動訂閱/cmd_vel主題的運動控制數據,並轉換爲速度控制指令經過串口發送給底盤。這樣機器人上的其它節點就能夠經過發佈/cmd_vel主題來對底盤進行控制,經過訂閱/odom主題獲取底盤的里程計。關於底盤控制ROS驅動、底盤裏程計標定、底盤的debug,將在後面的章節中具體講解。

後記                  

------SLAM+語音機器人DIY系列【目錄】快速導覽------

第1章:Linux基礎

1.Linux簡介

2.安裝Linux發行版ubuntu系統

3.Linux命令行基礎操做

第2章:ROS入門

1.ROS是什麼

2.ROS系統總體架構

3.在ubuntu16.04中安裝ROS kinetic

4.如何編寫ROS的第一個程序hello_world

5.編寫簡單的消息發佈器和訂閱器

6.編寫簡單的service和client

7.理解tf的原理

8.理解roslaunch在大型項目中的做用

9.熟練使用rviz

10.在實際機器人上運行ROS高級功能預覽

第3章:感知與大腦

1.ydlidar-x4激光雷達

2.帶自校準九軸數據融合IMU慣性傳感器

3.輪式里程計與運動控制

4.音響麥克風與攝像頭

5.機器人大腦嵌入式主板性能對比

6.作一個能走路和對話的機器人

第4章:差分底盤設計

1.stm32主控硬件設計

2.stm32主控軟件設計

3.底盤通訊協議

4.底盤ROS驅動開發

5.底盤PID控制參數整定

6.底盤裏程計標

第5章:樹莓派3開發環境搭建

1.安裝系統ubuntu_mate_16.04

2.安裝ros-kinetic

3.裝機後一些實用軟件安裝和系統設置

4.PC端與robot端ROS網絡通訊

5.Android手機端與robot端ROS網絡通訊

6.樹莓派USB與tty串口號綁定

7.開機自啓動ROS節點

第6章:SLAM建圖與自主避障導航

1.在機器人上使用傳感器

2.google-cartographer機器人SLAM建圖

3.ros-navigation機器人自主避障導航

4.多目標點導航及任務調度

5.機器人巡航與現場監控

第7章:語音交互與天然語言處理

1.語音交互相關技術

2.機器人語音交互實現

3.天然語言處理雲計算引擎

第8章:高階拓展

1.miiboo機器人安卓手機APP開發

2.centos7下部署Django(nginx+uwsgi+django+python3)

----------------文章將持續更新,敬請關注-----------------

 

若是你們對博文的相關類容感興趣,或有什麼技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流羣,一塊兒討論學習^_^

關於咱們:

視頻教程:

 

https://www.bilibili.com/video/av61448040

相關文章
相關標籤/搜索