隨著科學(xué)技術(shù)的不斷發(fā)展,服務(wù)機器人等諸多智能產(chǎn)品逐漸進入人們的視線,不管是家庭中常見的掃地機器人、還是商場里的導(dǎo)購機器人,要讓他們智能化的完成任務(wù),智能移動與導(dǎo)航是不可或缺的關(guān)鍵技術(shù)。
ROS作為機器人軟件平臺,能為異質(zhì)計算機集群提供類似操作系統(tǒng)的功能,在研究機器人行走等方面起著重要的作用。Llidar作為機器人定位導(dǎo)航的核心傳感器,在機器人自主行走、定位導(dǎo)航方面扮演著重要角色。兩者的結(jié)合使用,使得機器人自主定位導(dǎo)航效果更佳。
1、RPLIDAR 產(chǎn)品簡介
RPLIDAR是思嵐科技自主研發(fā)的激光雷達,目前有RPLIDAR A1/A2/A3/RPLIDAR S1及SLAMTEC Mapper五款成熟的商業(yè)激光雷達產(chǎn)品。五款產(chǎn)品均可從官網(wǎng)獲取相應(yīng)的SDK和開發(fā)指導(dǎo)文檔。其中SLAMTEC Mapper是思嵐科技近日推出的全新激光雷達品類,內(nèi)置實時建圖及定位功能,其中包含了思嵐第三代高性能SLAM引擎和激光雷達,無需任何外部依賴,上電即用。適用于機器人導(dǎo)航定位、環(huán)境測繪、手持測量等多個領(lǐng)域。
針對RPLIDAR,官網(wǎng)提供SDK下載,并且包含相應(yīng)的frame_grabe可視化測試界面。具體操作流程如下:
(1)設(shè)備管理器找到對應(yīng)串口;
(2)打開frame_grabe,選擇對應(yīng)端口查看;
(3)frame_grabber界面;
詳細(xì)資料請參閱官網(wǎng)(http://m.shhzfl.com/cn/Support),包括:
簡介與規(guī)格書(Datasheet)、開發(fā)套裝使用手冊、通訊接口協(xié)議與應(yīng)用手冊、SDK 用戶手冊。
2、RPLIDAR的ROS package rplidar_ros 介紹
rplidar_ros是國內(nèi)第一款面向全球ROS開發(fā)者推出相應(yīng)package的激光雷達,超高的性價比大大推動了RPLIDAR在ROS中的使用,為國內(nèi)服務(wù)機器人的移動導(dǎo)航和避障相關(guān)技術(shù)的發(fā)展和人才儲備起了很大的推動作用。
ROS之所以能夠很好的在開發(fā)者中間推廣起來,主要是因為它建立了一套通用的通訊框架和操作系統(tǒng)服務(wù),不同的開發(fā)者只需要按照一定的通訊協(xié)議,關(guān)注相應(yīng)的數(shù)據(jù)接口,完成每個模塊的功能即可,大大避免了機器人重復(fù)造輪子的繁瑣過程。
任何一個ROS生態(tài)里面的package,往往只需找到相應(yīng)的wiki和github頁面,就可以清楚的了解其數(shù)據(jù)接口和內(nèi)部的實現(xiàn)。
2.1 rplidar_ros viki:http://wiki.ros.org/rplidar
wiki主要包含對應(yīng)rplidar產(chǎn)品功能和package接口和參數(shù)的說明和相應(yīng)的使用流程介紹,以及當(dāng)前ros生態(tài)支持的版本信息。
2.2 rplidar _ros github:
https://github.com/robopeak/rplidar_ros
rplidar_ros的github主要包含package對應(yīng)的源碼和package的版本管理和開發(fā)者問題對話。
issue(open|closed): 里面主要包含開發(fā)者關(guān)于rplidar_ros使用的相關(guān)問題的對話,如果開發(fā)者在使用某個package時遇到問題都可以先在此搜索是否有相關(guān)問題的解釋與解決方法;
pull request:相關(guān)使用者針對原有代碼的改進,希望加入到本倉庫,以提高或增強相應(yīng)的功能;
wiki: 包含更加具體的說明和使用介紹,
commit、branch、release、contributors是rplidar_ros開發(fā)迭代的記錄。
2.3 rplidar_ros消息機制
rplidar_ros的在ROS里面的通訊接口,主要有1個話題(topic) /scan和2個服務(wù)(service)stop_motor和start_motor.。/scan主要用于向外部發(fā)送雷達數(shù)距消息(message),消息格式采用的是sensor_msgs/LaserScan,像避障或slam功能模塊對應(yīng)的ROS package就需要調(diào)用這個話題的雷達數(shù)據(jù)完成建圖或避障的功能。stop_motor和start_motor主要是用于客戶端調(diào)用服務(wù)器端關(guān)閉和啟動雷達的接口,使系統(tǒng)可以依據(jù)需要選擇關(guān)閉和開啟雷達。
rplidar_ros給出的rplidar.launch,實際使用中依據(jù)具體的使用往往關(guān)注的參數(shù)有 端口號(serial_port)、坐標(biāo)系名稱(frame_id)、正反裝(inverted)。
2.4 rplidar_ros坐標(biāo)系說明:
rplidar是按照順時針旋轉(zhuǎn),SDK數(shù)據(jù)輸出是帶距離和角度信息的左手系數(shù)據(jù),rplidar_ros輸出已經(jīng)將其轉(zhuǎn)化為右手坐標(biāo)系輸出。雷達數(shù)據(jù)坐標(biāo)系參照雷達數(shù)據(jù)線的位置(A2)/形狀(A1)和下面的圖示判斷。
2.5 rplidar_ros啟動說明:
首先要查看插上rplidar后對應(yīng)端口權(quán)限(每次插拔都要賦予一次權(quán)限):
ls -l /dev |grep ttyUSB
sudo chmod 666 /dev/ttyUSB0
如果沒有讀寫權(quán)限,需要添加其讀寫權(quán)限(每次插拔都要賦予一次權(quán)限):
sudo chmod 666 /dev/ttyUSB0
每次這樣插拔都要添加權(quán)限很麻煩,可以試試添加設(shè)備的udev規(guī)則,賦予符合相應(yīng)規(guī)則的設(shè)備端口固定權(quán)限和端口名稱的映射。執(zhí)行相應(yīng)的rplidar端口映射的腳本:
./s/create_udev_rules.sh
啟動rplidar_ros節(jié)點,并在rviz中顯示出雷達數(shù)據(jù):
$ roslaunch rplidar_ros view_rplidar.launch
matlab2016版本當(dāng)前還提供了ROS的功能接口,我們也可以通過matlab參看激光數(shù)據(jù)。
3、搭建帶rplidar的機器人系統(tǒng):
前面詳細(xì)介紹了rplidar_ros package的相應(yīng)功能,那么,如果我要在一臺機器人本體上搭載激光雷達,需要怎么設(shè)置呢?
利用好ROS里已有package搭建系統(tǒng)實現(xiàn)基本功能,再關(guān)注一下topic/service和TF frame是否協(xié)調(diào)。TF是ROS里面主要的概念,它維護著每個數(shù)據(jù)對應(yīng)坐標(biāo)系之間的位姿變換關(guān)系。要搭建帶rplidar的機器人ROS系統(tǒng), 你就需要依據(jù)實際安裝信息統(tǒng)一好rplidar坐標(biāo)系與機器人本體base坐標(biāo)系的變換關(guān)系。實現(xiàn)這種變換關(guān)系主要有三種,分別如下:
3.1 通過模型的URDF文件的方式:
在已知的機器人模型的URDF中添加描述雷達的joint和描述在機器人本體上的link。下面是曾在turtlebot仿真模型添加rplidar模型的urdf設(shè)置。
3.2 TF靜態(tài)變換static_transform_publisher方式:
在機器人啟動的launch文件添加靜態(tài)TF變換的信息即可。
<node name="base2laser" pkg="tf" type="static_transform_publisher" args="0.07 0 0 0 0 0 1 /base_link /laser 50"/>
3.3 通過rqt/tf_echo查看TF tree的構(gòu)建情況:
4、利用RPLIDAR在ROS環(huán)境建圖:
4.1 當(dāng)前開源的2D激光雷達slam的ROS package主要有:
gmapping
ros-perception/slam_gmapping
ros-perception/openslam_gmapping
Hector
tu-darmstadt-ros-pkg/hector_slam
karto
ros-perception/slam_karto
ros-perception/open_karto
skasperski/navigation_2d
cartographer
googlecartographer/cartographer
googlecartographer/cartographer_ros
4.2 TF tree(gmapping為例)
4.3 rqt_graph(gmapping為例)
4.4 SLAM建圖效果:
搭建系統(tǒng)取決統(tǒng)一好topic/service和tf的接口名稱,系統(tǒng)運行效果取決于里面的算法實現(xiàn),可能變現(xiàn)在具體的啟動配置文件的參數(shù)設(shè)置和內(nèi)部算法實現(xiàn),那就需要查看相應(yīng)論文和代碼中涉及的算法原理和算法實現(xiàn)。
5.與RPLIDAR 相關(guān)問題匯總與說明:
5.1 樹莓派等單板系統(tǒng)出現(xiàn)雷達無法啟動,請檢查是否是供電不足導(dǎo)致的問題;
5.2 rplidar_ros啟動前需要設(shè)置端口權(quán)限;
5.3 rplidar原始數(shù)據(jù)輸出是非固定角度增量的輸出形式,rplidar_ros輸出是修正式固定角度增量輸出的數(shù)據(jù)格式;
5.4 當(dāng)前版本的rplidar_ros發(fā)出的激光數(shù)據(jù)中的ntenstity數(shù)據(jù)是fake的無效數(shù)據(jù),不建議在實際中使用;
5.5 rplidar_ros 是360全角度輸出的rplidar驅(qū)動,如有固定角度需求,請自行添加角度濾波的節(jié)點;
5.6 使用過程中如有問題,先自行檢查端口權(quán)限,tf_tree和rqt_graph是否正常,如還是有問題,返回windows系統(tǒng)檢查官方驅(qū)動是否有問題;
如上述自檢均沒發(fā)現(xiàn)問題,但仍運行不正常,可附上檢查的信息以及難點一起發(fā)送至support@slamtec.com郵箱,我們將及時為各位小伙伴們解答!
關(guān)鍵字:ROS与RPLIDAR结合使用