SLAM+語音機器人DIY系列:(六)SLAM建圖與自主避障導航——1.在機器人上使用傳感器

摘要                                            

經過前面的基礎學習,本章進入最爲激動的機器人自主導航的學習。在前面的學習鋪墊後,終於迎來了最大樂趣的時刻,就是賦予咱們的miiboo機器人能自由行走的生命。本章將圍繞機器人SLAM建圖、導航避障、巡航、監控等內容展開。本章內容:html

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

2.google-cartographer機器人SLAM建圖nginx

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

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

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



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

SLAM建圖須要用到底盤、激光雷達和IMU,因此這裏詳細介紹如何在機器人上使用這些傳感器。要使用這些傳感器也很簡單,就是在機器人上開啓相應傳感器的ROS驅動節點,在設置合適的可配參數就好了。django

須要注意的是,底盤激光雷達IMU這三個傳感器都使用串口與樹莓派通訊,爲了防止每次開機這三個設備的串口號發生變更,須要將串口號進行綁定與重映射,操做方法在前面已經介紹過了,若是尚未綁定直接前往前面相關內容參考ubuntu

這裏將創建一個叫catkin_wsROS工做空間,專門用於存放機器人傳感器相關的ROS驅動功能包。關於建立ROS工做空間的操做,請參考前面相應部份內容,這裏就不作講解。centos

1.1.使用底盤                

在機器人上只須要使用miiboo這個驅動包就能夠驅動底盤了。將miiboo這個驅動包拷貝到~/catkin_ws/src/中,編譯後就可使用了。miiboo驅動包文件結構,如圖1miiboo驅動包中含有兩個ROS功能包miiboo_bringupmiiboo_description,驅動miiboo底盤、底盤PID整定、里程計標定這些功能包含在miiboo_bringup中,miiboo底盤urdf模型包含在miiboo_description中。數組

(圖1miiboo驅動包文件結構

底盤控制可配參數:

關於底盤控制可配參數都放在miiboo_bringup/launch/minimal.launch中,如圖2

參數com_port是底盤控制的串口號,因爲前面已經作了綁定,因此直接填入綁定好的名稱/dev/miiboo就好了;

參數speed_ratio是里程計走直線標定值,這個值經過標定獲得。

參數wheel_distance是里程計轉角標定值,這個值經過標定獲得。

其他參數通常不須要修改,若有須要能夠結合閱讀源碼來了解參數含有和作相應修改。

(圖2)底盤控制可配參數

驅動miiboo底盤:

其實很簡單,一條命令啓動miiboo底盤控制。

roslaunch miiboo_bringup minimal.launch

底盤PID整定:

咱們的miiboo機器人底盤的stm32控制板中已經內置了整定好的PID參數,若是選用咱們提供的控制板和電機,通常狀況下是不須要整定PID的。

對於想體驗一下PID參數整定過程或將咱們的miiboo機器人底盤的stm32控制板應用到其餘地方的朋友,這裏給出了整定PID的整個操做過程和思路,方便你們學習和更深層次的研究。這裏主要講解PID整定的操做,關於原理性的東西能夠參考前面相關內容進行了解。

因爲底盤PID整定是非必須的功能,因此沒有對底盤PID整定的串口(DEBUG-uart1)作綁定,須要先手動插入該串口到樹莓派3,而後手動查看該串口的設備號,並修改該設備號的可讀寫權限。而後將該設備號填入miiboo_bringup/launch/pid_set.launch中的com_port參數中。而後,須要啓動底盤控制節點、底盤調試節點、鍵盤控制節點。鍵盤控制節點teleop_twist_keyboard須要經過apt-get命令來安裝,rqt_plotROS提供的繪圖工具。

#打開終端,啓動底盤控制節點 roslaunch miiboo_bringup minimal.launch #再打開一個終端,啓動底盤調試節點,按提示輸入命令 roslaunch miiboo_bringup pid_set.launch #安裝鍵盤控制工具 sudo apt-get install ros-kinetic-teleop-twist-keyboard #再打開一個終端,啓動鍵盤控制節點, source ~/.bashrc rosrun teleop_twist_keyboard teleop_twist_keyboard.py #再打開一個終端,用rqt_plot對底盤速度曲線進行繪製,指定曲線數據來源的topic rosrun rqt_plot rqt_plot

ROS提供的繪圖工具rqt_plot用法很簡單,在rqt_plot界面中,在Topic欄輸入曲線數據來源,咱們這裏爲左、右輪速度,而後點擊旁邊的「+」將曲線加入繪製界面,人如圖3

(圖3)用rqt_plot顯示速度曲線

而後,經過在啓動teleop_twist_keyboard節點的終端經過I/</J/L四個按鍵來控制底盤前進/後退/左轉/右轉控制,並觀察速度曲線的變化,根據PID整定規則對PID參數進行整定,在啓動 pid_set.launch的終端下按相應提示輸入PID參數實現對整定參數的編輯。直到獲得一個比較好的速度曲線,就能夠結束整定過程了。實時速度曲線顯示,如圖4

(圖4)實時速度曲線顯示

里程計標定:

機器人底盤運行的精度是衡量底盤的重要指標。底盤精度受里程計的走直線偏差和轉角偏差影響。所以,須要對里程計的走直線和轉角進行標定,儘可能減少偏差。miiboo機器人底盤的ROS驅動中已經寫好了相應的標定程序,跟里程計標定有關的文件主要有:

.../miiboo_bringup/launch/check_linear.launch爲里程計走直線標定啓動文件

.../miiboo_bringup/launch/check_angular.launch爲里程計轉角標定啓動文件

.../miiboo_bringup/launch/minimal.launch爲設置標定參數及底盤控制啓動文件

下面是標定步驟過程。

因爲標定過程在前面已經講解過了,請直接前往相應內容參考。

miiboo底盤urdf模型:

urdf模型描述了機器人底盤的形狀、傳感器之間的安裝關係、各個傳感器在tf tree中的關係。其實,miiboo底盤urdf模型的主要做用是提供各個傳感器在tf tree中的關係,這些關係將在SLAM和導航算法中被使用。

(圖5miiboo機器人底盤中各個傳感器tf關係

5miiboo機器人底盤中各個傳感器tf關係,base_footprint是底盤的運動中心,base_laser_link是激光雷達的中心,imu_linkIMU模塊的中心。以base_footprint爲原點,創建機器人底盤的座標系,座標系爲標準右手系,即底盤正前方爲x軸、正左方爲y軸、正上方爲z軸、以x軸起始逆時針方向爲theta軸。以base_footprint爲父座標系,創建base_footprint->base_laser_link關係,創建base_footprint->imu_link關係,就實現了各個傳感器tf關係的構建,構建的具體實如今miiboo_description/urdf/miiboo.urdf中完成。如圖6,爲miiboo.urdf的具體內容。

(圖6miiboo底盤urdf模型描述文件

要使用這個urdf模型就很簡單了,直接一句命令啓動。

roslaunch miiboo_description miiboo_description.launch

1.2.使用激光雷達            

在機器人上只須要使用ydlidar這個驅動包就能夠驅動ydlidar-x4雷達了。將ydlidar這個驅動包拷貝到~/catkin_ws/src/中,編譯後就可使用了。ydlidar驅動包文件結構,如圖7ydlidar驅動包中的其餘文件咱們不須要關心,這些都是由雷達廠商提供的標準驅動,只須要設置咱們本身創建的ydlidar/launch/my_x4.launch文件,這個用於啓動雷達。

(圖7ydlidar驅動包文件結構

激光雷達數據可配參數:

關於激光雷達數據可配參數都放在ydlidar/launch/my_x4.launch中,如圖8

參數port激光雷達的串口號,因爲前面已經作了綁定,因此直接填入綁定好的名稱/dev/lidar就好了;

參數range_minrange_max是設置激光雷達數據的有效值區間。

其他參數通常不須要修改,若有須要能夠結合閱讀源碼來了解參數含有和作相應修改。

(圖8)激光雷達數據可配參數

驅動ydlidar-x4激光雷達:

其實很簡單,一條命令啓動ydlidar-x4激光雷達。

roslaunch ydlidar my_x4.launch

激光雷達數據格式:

激光雷達採用右手座標系,雷達正前方爲x軸、正左方爲y軸、正上方爲z軸、以x軸起始逆時針方向爲theta軸。激光雷達的掃描數據以極座標的形式表示,雷達正前方是極座標0度方向、雷達正左方是極座標90度方向,紅色點爲掃描到的數據點,如圖9所示。

(圖9)激光雷達數據格式

激光雷達的數據在ROS中是以sensor_msgs/LaserScan消息類型進行表示,如圖10angle_increment表示激光數據點的極座標遞增角度,ranges數組存放實際的極座標點距離值。

(圖10)激光雷達數據sensor_msgs/LaserScan消息類型

1.3.使用IMU                                                  

在機器人上只須要使用miiboo_imu這個驅動包就能夠驅動mpu9250模塊了。將miiboo_imu這個驅動包拷貝到~/catkin_ws/src/中,編譯後就可使用了。miiboo_imu驅動包文件結構,如圖11ydlidar驅動包中的其餘文件咱們不須要關心,只須要設置ydlidar/launch/my_x4.launch文件,這個用於啓動IMU

(圖11miiboo_imu驅動包文件結構

IMU數據可配參數:

關於IMU數據可配參數都放在miiboo_imu/launch/imu.launch中,如圖12

參數come_portIMU的串口號,因爲前面已經作了綁定,因此直接填入綁定好的名稱/dev/imu就好了;

其他參數通常不須要修改,若有須要能夠結合閱讀源碼來了解參數含有和作相應修改。

(圖12IMU數據可配參數

驅動IMU模塊:

其實很簡單,一條命令啓動IMU模塊。

roslaunch miiboo_imu imu.launch

IMU數據格式:

IMU模塊採用右手座標系,IMU模塊正前方爲x軸、正左方爲y軸、正上方爲z軸。IMU模塊提供3軸加速度、3軸角速度、3軸磁力計、經數據融合後用歐拉角表示的姿態。

IMU數據在ROS中是以sensor_msgs/Imu消息類型進行表示,如圖13

(圖13IMU數據sensor_msgs/Imu消息類型

1.4.使用攝像頭               

miiboo機器人上使用的是USB攝像頭,用ROS驅動USB攝像頭能夠採用如下3中方法。

方法1

使用usb_cam這個ROS包直接驅動

方法2

使用gscam這個ROS包直接驅動

方法3

自制OpenCVcv_bridgeimage_transport驅動ROS

爲了方便起見,我採用的是方法1,直接安裝usb_cam這個ROS包直接驅動。

usb_cam攝像頭驅動安裝:

usb_cam下載到~/catkin_ws/src/中,直接編譯就好了。

cd  ~/catkin_ws/src/ git clone https://github.com/ros-drivers/usb_cam.git
 rosdep install usb_cam cd ~/catkin_ws/ catkin_make

攝像頭數據可配參數:

關於攝像頭數據可配參數都放在usb_cam/launch/usb_cam.launch中,如圖14

參數video_device是攝像頭的設備號,因爲直插了一個USB攝像頭,因此直接填入名稱/dev/video0就好了;

其他參數通常不須要修改,若有須要能夠結合閱讀源碼來了解參數含有和作相應修改。

(圖14)攝像頭數據可配參數

驅動USB攝像頭:

其實很簡單,一條命令啓動USB攝像頭。

roslaunch usb_cam usb_cam.launch

攝像頭遠程顯示:

攝像頭數據遠程顯示的方法有兩種,方法一是在PCrviz中訂閱攝像頭髮布的圖像topic,方法二是用Android手機上miiboo機器人APP直接顯示。

先說方法一,在PC端打開rviz,在rviz中添加須要顯示的Topic,這樣就能夠看到圖像了。如圖1516

(圖15)在rviz中添加須要顯示的圖像Topic

(圖16)在rviz中顯示圖像Topic

方法二,就很簡單了,只要Android手機上miiboo機器人APP鏈接到機器人端成功後,就能自動顯示圖像了。如圖17

(圖17)在Android手機的miiboo機器人APP中顯示圖像Topic

1.5.局域網內廣播機器人本身的IP                 

這個很簡單,由broadcast_ip這個功能包實現,我已經寫好放入~/catkin_ws/src/並編譯了。只須要一句命令啓動就好了。

roslaunch broadcast_ip broadcast_udp.launch

後記                                                      

------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

 

原文出處:https://www.cnblogs.com/hiram-zhang/p/10412509.html

相關文章
相關標籤/搜索