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

来源:https://www.cnblogs.com/hiram-zhang/archive/2019/02/21/10412509.html
-Advertisement-
Play Games

摘要 通過前面的基礎學習,本章進入最為激動的機器人自主導航的學習。在前面的學習鋪墊後,終於迎來了最大樂趣的時刻,就是賦予我們的miiboo機器人能自由行走的生命。本章將圍繞機器人SLAM建圖、導航避障、巡航、監控等內容展開。本章內容: 1.在機器人上使用感測器 2.google-cartograph ...


摘要                                            

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

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

2.google-cartographer機器人SLAM建圖

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

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

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



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

SLAM建圖需要用到底盤、激光雷達和IMU,所以這裡詳細介紹如何在機器人上使用這些感測器。要使用這些感測器也很簡單,就是在機器人上開啟相應感測器的ROS驅動節點,在設置合適的可配參數就行了。

需要註意的是,底盤激光雷達IMU這三個感測器都使用串口與樹莓派通信,為了防止每次開機這三個設備的串口號發生變動,需要將串口號進行綁定與重映射,操作方法在前面已經介紹過了,如果還沒有綁定直接前往前面相關內容參考

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

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》QQ技術交流群,一起討論學習^_^

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天在linux里修改腳本文件時,不小心非正常關閉了腳本文件,再次編輯時,每次都提示 如下錯誤: E325: 註意發現交換文件 ".bqh.sh.swp" 所有者: root 日期: Wed Feb 20 03:51:12 2019 文件名: /server/scripts/bqh.sh 修改過: ...
  • 1、curl -X POST “http://XXXXXXX”這種請求方式參數直接寫在URL裡面的,而不是body ...
  • 本周,運維告知部署的服務被掃描發現漏洞,涉及的軟體分別為 ,`ZooKeeper Elasticsearch`. 因為最近任務繁重,人力資源緊張,因此無法抽出更多時間調整代碼,添加許可權認證. 與軟體部署人員確認,上述三個軟體均為內網訪問,因此採用以下方式進行處理: (1) 設置訪問 地址,即僅允許同 ...
  • wc wc命令用於報告文本文件的一些統計計數,例如行數、單詞數、位元組數等。 語法如下。 --files0-from=F:這個選項幾乎沒見過有人使用,我也看不懂,因此就忽略掉了。 預設情況下顯示3個計數,從左往右分別是行數、單詞數和位元組數。 如果被統計的文件數大於1,那麼還會顯示一行總計。 可以通過選 ...
  • 內核版本:Linux 4.19 操作系統通過系統調用為運行於其上的進程提供服務。 那麼,在應用程式內,調用一個系統調用的流程是怎樣的呢? 我們以一個假設的系統調用 xyz() 為例,介紹一次系統調用的所有環節。 如上圖所示,系統調用執行的流程如下: ~~~ 1. 應用程式代碼調用 xyz(),該函數 ...
  • 一、Linux操作系統版本 二、背景:在項目中當我們配置好JDK環境變數、Tomcat環境變數,通過 使環境變數生效時,發現會報錯,如圖 三、解決 個人尚不知出現原因,只知道註釋掉下麵這兩行後即可使環境生效 ...
  • 一、LCD顯示圖像的過程如下: 其中,VSYNC和HSYNC是有寬度的,加上後如下: 參數解釋: HBP(Horizontal Back Porch)水平後沿:在每行或每列的象素數據開始輸出時要插入的象 素時鐘周期數 HFP(Horizontal Front Porch )水平前沿:在每行或每列的象 ...
  • mysql配置文件 mysql的配置文件為/etc/my.cnf 配置文件查找次序:若在多個配置文件中均有設定,則最後找到的最終生效 mysql常用配置文件參數: 參數 |說明 : |: port = 3306 | 設置監聽埠 socket = /tmp/mysql.sock | 指定套接字文件位 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...