天天看點

移動機器人嵌入式系統詳細篇

接觸了移動機器人這麼久,我覺得應該寫點什麼東西,分享一下最基礎的自己關于移動機器人的了解,也作為筆記總結,留到以後查閱。目前我還是覺得自己剛入門,有時候總想的太多,不如實踐來的更直接,下面總結之前的實踐經驗,來系統的梳理一下什麼是移動機器人軟硬體系統問題。文中涉及到的開源項目網站位址如下:

開源項目網站Handsfree(https://github.com/HANDS-FREE/OpenRE);

項目網站和教程: http://wiki.hfreetech.org/

開源代碼 : https://github.com/hands-free

移動機器人嵌入式系統詳細篇

圖 1 移動機器人的實體樣機

圖1所示的是實驗中常用的移動智能小車的架構,其中裝置和接口是嵌入式軟硬體系統最底層的一部分,CPU 需要對其它裝置或者傳感器進行通信,控制,操作則是通過這裡的接口實作的。

這裡借用github 上的開源項目Handsfree(https://github.com/HANDS-FREE/OpenRE),對 移動智能車的底層嵌入式系統做個簡單的介紹,完成整個小車的搭建。

本課題專門為機器人系統所設計的嵌入式系統架構,主要包含裝置和 IO 接口,作業系統元件和應用軟體。

  1. 其中硬體裝置和 IO 接口總是緊密相連的,裝置一般都需要 IO 接口和處理器進行通信,其中裝置又可以細化為傳感器裝置和普通 IO 裝置。傳感器裝置主要包含了加速計,陀螺儀,磁力計,氣壓計,編碼器等,IO 裝置主要有存儲器,驅動器,還有遙控器,液晶顯示等。
  2. 作業系統元件則包含系統核心,圖形庫,檔案系統等。移植一個實時作業系統不僅僅增加了軟體系統功能,還增加了系統的魯棒性,多任務程式設計也便于整個系統代碼的維護管理。
  3. 應用軟體則是建立在前兩者基礎上的功能軟體或者獨立于嵌入式的代碼庫,比如電機控制庫,機器人控制庫,或者數學運算庫等。由于軟體的最終功能,基本都是這一部分來決定的。

1 最底層之裝置與接口

圖3 HANDS FREE硬體裝置與接口

如圖 3,則是 HANDS FREE 為了上層應用跨平台建立的底層軟體架構,其隔離了不同CPU環境下的裝置和接口代碼 。接口方面封裝了USRT,IIC,SPI,CAN 等常用通信接口,以及 pwm 電機控制輸出,encoder 編接口等。裝置方面封裝了常用的陀螺儀,加速計,磁力計等傳感器,以及直流電機,伺服舵機,遙控器等裝置。

1.1 慣性測量傳感器與 IIC 接口(具體的子產品使用,請看前面的部落格)

IIC 即 Inter-Integrated Circuit(內建電路總線),IIC 是一種多向控制總線,半雙工通信方式,也就是說多個晶片可以連接配接到同一總線結構下,同時控制每個晶片的實時資料傳輸。

IIC 是串行總線的一種,一般是有兩根信号線構成,一根是可以雙向通信的資料線并連接配接着每個裝置的 SDA,另一根是所有裝置的時鐘線SCL。每個 IIC 裝置有一個屬于自己的位址,通信是 IIC 通信協定會先進行位址比對,進而有條不紊的分别操作 IIC 總線上不同的裝置。

圖1的系統中,使用 IIC 接口的裝置非常多,有儲存資料用的可擦寫存儲器 AT24C0X,512KB 的 EEPROM,也有測量角速度,重力加速計的傳感器MPU6050,測量磁場的磁力計 HMC5883L,測量氣壓的氣壓計 MS5611。

1.2 射頻子產品與 SPI 接口(具體的子產品使用,請看前面的部落格)

SPI 是串行外設接口(Serial Peripheral Interface)的縮寫,是一種高速度,全雙工,同步通信的總線結構,一般占用 4 根線,分别是主裝置的輸出、從裝置輸入的 MOSI,主裝置輸入、從裝置輸出的 MISO,和公用時鐘線 SCLK,以及每個裝置都有一個屬于自己的使能信号,又叫片選限号 CS。

SPI 的通信速度是以自己的時鐘為依據的,比如使用的 STM32F407 最高可達 42Mbits/s,比起 400K 的 IIC 快了不少,是以現在很多系統都盡量選擇 SPI 的裝置,包括之前所說的 IIC 的傳感器,也有支援 SPI 的同類型替代品。

使用的 SPI 通信的射頻子產品 NRF24L01,一對該子產品即可構成雙向無線通信,通信速度理論可達 2Mbits/s,使用它可以友善的構成機器人的無線通信網絡,友善開發測試。(具體的子產品使用,請看前面的部落格)

1.3序列槽與 PC 端通信(具體的子產品使用,請看前面的部落格)

這裡的序列槽主要指異步串行通信方式,異步串行是指 UART(Universal Asynchronous Receiver/Transmitter),通用異步接收/發送,UART 包含 TTL 電平的序列槽和 RS232 電平的序列槽。

 TTL 電平是 3.3V 的,也是單片機端的電平,而RS232 是負邏輯電平,它定義+5~+12V 為低電平,而-12~-5V 為高電平,PC 端則是這種邏輯。

是以單片機的序列槽和 PC 的序列槽不能直接通信,需要進行電平轉換。由于現在 PC 端 USB 接口非常的友善實用,是以有很多序列槽轉 USB 的轉換晶片,比如 FT232RL,CP2102 等。單片機連接配接子產品通過 USB 資料線和 PC 進行通信。

2 中間層之運動控制

整個嵌入式系統通過控制電機驅動和讀取電機編碼器的資料實作電機的PID速度環控制,通過運動學解算實作機器人運動控制和坐标計算,通過各種 IO 擴充接口實作多超音波、IMU 等傳感器資料的采集和處理,通過RoboLink 協定實作和上層軟體系統的資料和指令通信。

2.1電機速度環控制(具體代碼參考前面的電機控制部落格)

電機控制是指對電機的啟動、加速、運轉、減速及停止進行的控制。又可以劃分為開環控制和閉環控制。

閉環控制,是指通過對編碼器回報的資料和希望值進行比較得到誤差,并将誤差進行分析和運算,不斷調節控制力度的的控制方式。開環控制,是指沒有回報調節的控制方式,通過提前預估系統的特性,并在控制時根據該特性和希望值做出相應的控制力度。

移動機器人嵌入式系統詳細篇

圖 5  HANDS FREE 電機 PID 控制流程

如圖 5,為 HANDS FREE 電機 PID 控制的流程,通過目标速度和編碼器測量的速度作比較形成誤差,并通過 PID 控制的輸出控制電機以消減誤差,進而達到目标速度,這是電機控制中最普遍的方式,即速度環控制。

2.2 底盤運動控制(參見之前的編隊部落格)

底盤控制是首要任務,主要可以分為運動學控制和坐标解算兩部分。

坐标解算其實是一個逆運動學解算的過程,關于運動學控制模型和之間的數學關系會略去,後續補,此處隻介紹軟體的實作過程。

運動學控制負責控制三個電機機體或者使底盤達到期望的速度向量,由于該機器人是在平面上運動,是以這是一個三維向量 x、y、w,分别代表前後、左右、和旋轉。在課題試驗中,機體速度的更新頻率不需要太高,上位機以 10HZ 左右要求底盤更新自己的機器人坐标速度,當軟體每次更新速度時則會重新配置設定三個電機的旋轉速度,進而不斷使機體的運動保持自己想要的速度向量。同時電機控制則是一個簡單的速度環控制,通過 50~200HZ 的 PID 控制使電機的速度一直保持希望值。

坐标解算,則和運動學控制相反,它的主要任務是采集分析編碼器的資料,解算出目前機器人的速度、坐标等資訊,通過這一步可以讓軟體确認目前的運動是否正确實施,并且是否到達自己想要的位置。編碼器以 50~200HZ 的頻率進行采樣,同時坐标解算任務以 20~50HZ 的頻率計算目前的坐标偏移,并通過不斷積分得到總的坐标偏移進而得到基于起始點坐标系的位置,并将這些資訊回報給上位機友善其進行路徑規劃,避障導航等任務的實施。