在個人想象中機器人首先應該能自由的走來走去,而後應該能流利的與主人對話。朝着這個理想,我準備設計一個能自由行走,而且能夠與人語音對話的機器人。實現的關鍵是讓機器人能經過傳感器感知周圍環境,並經過機器人大腦處理並輸出反饋和執行動做。本章節涉及到的傳感器有激光雷達、IMU、輪式里程計、麥克風、音響、攝像頭,和用於處理信息的嵌入式主板。關於傳感器的ROS驅動程序開發和在機器人上的使用在後面的章節會展開,本章節重點對機器人傳感器和嵌入式主板進行講解,主要內容:html
1.ydlidar-x4激光雷達python
2.帶自校準九軸數據融合IMU慣性傳感器nginx
4.音響麥克風與攝像頭django
5.機器人大腦嵌入式主板性能對比ubuntu
6.作一個能走路和對話的機器人centos
在移動機器人中,獲取機器人周圍障礙物和環境的輪廓形狀是很是重要的。使用激光雷達正是爲了實現這個目的。利用掃描獲得的障礙物信息,機器人就能夠利用SLAM創建地圖、並進行避障和自主導航。考慮到成本,推薦你們選用低成本的2D激光雷達,這裏推薦的ydlidar-x4激光雷達正是一款極低成本的2D激光雷達,做爲學習性能足夠用了。網絡
(圖1)ydlidar-x4激光雷達實物架構
雷達主體由激光測距模組和電機構成,雷達主體須要鏈接轉接板,用於實現外部供電和UART轉USB,如圖1。ide
(圖2)ydlidar-x4激光雷達性能參數
測距頻率是指每秒鐘測距的次數(即激光測距模組的採樣率),測距頻率默認爲5KHz;掃描頻率是指電機每秒鐘轉過的圈數,掃描頻率默認爲8Hz;測距範圍是指落在此距離範圍的障礙物才能被測量,測距範圍爲0.12~10m;掃描角度爲0~360度,也就是可以360度全方位掃描;測距分辨率就是測距精度;角度分辨率就是兩個相鄰掃描點之間的夾角。ydlidar-x4激光雷達性能參數,如圖2。
關於激光雷達的性能參數對SLAM建圖與避障導航的影響,這裏作一個簡短的分析。
掃描頻率:
掃描頻率越高,電機轉動一圈的時間約短,掃描獲取1幀雷達數據的時間越短,這樣可使SLAM建圖和避障導航實時性更好。簡單點說就是機器人運動速度很快時,掃描到的點雲數據連續性也比較好,這有利於SLAM算法創建穩定的地圖,有利於避障導航算法及時發現並避開障礙物。
測距範圍:
小於測距範圍最小值的區域就是雷達的測量盲區,處於盲區中的障礙物沒法被探測,因此,盲區固然是越小越好以保證機器人不發生碰撞;大於測距範圍最大值的區域就是雷達超量程的區域,在超量程的區域的障礙物沒法被探測或者能夠探測但偏差很大,因此,在比較開闊的環境下應該採用遠距離量程的雷達。
掃描角度:
大部分雷達都是0~360度全方位掃描的,因此就沒什麼太大的區別了,其實就是機器人不用轉動身體的狀況下就能一次性掃描出四周的障礙物信息。
測距分辨率:
測距分辨率也就是測距精度,測距精度越高固然有利於SLAM建圖和避障導航,可是測距精度越越高的雷達成本固然也越高,如今國產低成本的雷達廣泛爲釐米級(cm)的精度,差一點的雷達5cm左右的精度,稍微好一點的雷達2cm左右的精度,若是要達到毫米級(mm)的精度成本就很是高了。
角度分辨率:
角度分辨率決定了兩個相鄰點雲之間的夾角,因爲雷達是經過旋轉進行掃描的,隨着距離增長點雲會愈來愈稀疏。若是角度分辨率比較低,在掃描遠距離物理時只能獲得很是稀疏的幾個點雲,這樣的點雲基本上沒有什麼用處了。
角度分辨率 = 360 /(測距頻率 / 掃描頻率)
從上面的角度分辨率計算公式來看,通常測距頻率爲常數值(由激光模組特性決定),那麼經過下降掃描頻率能夠提高角度分辨率,但同時掃描頻率下降會影響雷達的實時性,因此這是一個權衡的過程,根據實際狀況作選擇。
激光雷達之因此流行,得益於它可以精確的測距。主流的激光雷達基於兩種原理:一種是三角測距法,另外一種是飛行時間(TOF)測距法。其實很好理解,就是利用了最基本的數學與物理知識。
(圖3)三角測距原理
三角測距原理如圖3,激光器發射一束激光,被物體A反射後,照射到圖像傳感器的A’,這樣就造成了一個三角形,經過解算能夠求出物體A到激光器的距離。激光束被不一樣距離的物體反射後,造成不一樣的三角形。咱們不難發現隨物體距離不斷變遠,反射激光在圖像傳感器上的位置變化會愈來愈小,也就是愈來愈難以分辨。這正是三角測距的一大缺點,物體距離越遠,測距偏差越大。
(圖4)TOF測距原理
飛行時間(TOF)測距原理如圖4,激光器發出激光時,計時器開始計時,接收器接收到反射回來的激光時,計時器中止計時,獲得激光傳播的時間後,經過光速必定這個條件,很容易計算出激光器到障礙物的距離。因爲光速傳播太快了,要獲取精確的傳播時間太難了。因此這種激光雷達天然而然成本也會高不少,可是測距精度很高。
(圖5)在機器人中使用ydlidar-x4激光雷達
ydlidar-x4激光雷達經過串口與機器人相鏈接,機器人中經過運行雷達ROS驅動,來實現讀取串口的雷達數據和將雷達數據發佈到/scan這個主題,這樣機器人上的其它節點就能夠經過訂閱/scan主題來獲取激光雷達數據了。關於雷達ROS驅動在機器人上的具體使用,將在後面的章節中具體講解。
------SLAM+語音機器人DIY系列【目錄】快速導覽------
第1章:Linux基礎
第2章:ROS入門
第3章:感知與大腦
第4章:差分底盤設計
第5章:樹莓派3開發環境搭建
第6章:SLAM建圖與自主避障導航
2.google-cartographer機器人SLAM建圖
第7章:語音交互與天然語言處理
第8章:高階拓展
2.centos7下部署Django(nginx+uwsgi+django+python3)
----------------文章將持續更新,敬請關注-----------------
若是你們對博文的相關類容感興趣,或有什麼技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流羣,一塊兒討論學習^_^
關於咱們:
視頻教程: