機(jī)器人制作開源方案 | 桌面級(jí)全向底盤--slam導(dǎo)航
? ? ? 機(jī)器人的智能移動(dòng)可應(yīng)用于物流行業(yè)、交通行業(yè),本節(jié)內(nèi)容我們將利用鍵盤控制全向底盤運(yùn)動(dòng)完成slam建圖,并能在已建好的地圖里進(jìn)行自主導(dǎo)航。
1. 鍵盤控制底盤運(yùn)動(dòng)
實(shí)現(xiàn)思路
? ? ? 按下鍵盤上指定的鍵,實(shí)現(xiàn)全向底盤前進(jìn)、后退、轉(zhuǎn)向、平移;還可以靈活的設(shè)置底盤的角速度、線速度來調(diào)整底盤的運(yùn)動(dòng)。下面是本實(shí)驗(yàn)中規(guī)劃的控制全向底盤的鍵盤命令(如下表所示),大家可以先熟悉一下,稍后會(huì)在控制底盤時(shí)用到。
鍵盤命令及含義表

操作步驟
① 下載文末資料中的參考程序fourmacnum_car_ws\src\Arduino_Program\black_handle_BaseCar\black_handle_BaseCar.ino:
② 啟動(dòng)雷達(dá)、鍵盤、rosserial程序包。打開終端,輸入roslaunch robot_navigation_control robot.launch命令(見下圖),等待程序的運(yùn)行啟動(dòng)界面。

成功啟動(dòng)后,可以在終端看到底盤的當(dāng)前speed(線速度)為0.04,turn(角速度)為0.08。
注意:speed指的是線速度的大?。ò较颍?,turn指的是角速度的大小(包含方向)。

啟動(dòng)后的界面(如下圖所示):

③ 嘗試按下鍵盤命令,控制底盤的運(yùn)動(dòng)。 (注意:請(qǐng)先保證終端是激活狀態(tài);按鍵盤時(shí),稍微有點(diǎn)間隔,給底盤轉(zhuǎn)動(dòng)的時(shí)間)。
假如現(xiàn)在希望先增加底盤的最大速度,再降低底盤的最大速度,則分別按下鍵盤上q、z命令,則可以觀察到終端的結(jié)果(如下圖所示)。

更多命令大家可自行嘗試。
2. 底盤同步定位與建圖-SLAM
實(shí)現(xiàn)思路
? ? ? 利用Gmapping算法對(duì)底盤所在的未知環(huán)境進(jìn)行建立地圖、同步定位、最后保存此地圖。此地圖可供后續(xù)底盤導(dǎo)航使用。
器材準(zhǔn)備

操作步驟
① 下載文末資料中的參考程序fourmacnum_car_ws\src\Arduino_Program\black_handle_BaseCar\black_handle_BaseCar.ino:
② 啟動(dòng)雷達(dá)、鍵盤、rosserial。
? ? ? ?打開終端并輸入命令:roslaunch robot_navigation_control robot_car.launch,見下圖。

③ 啟動(dòng)構(gòu)建地圖服務(wù)。
? ? ? ?重新打開新終端并輸入:roslaunch four_macnum_slam four_macnum_slam.launch,見下圖。

? ? ? 界面啟動(dòng)后,在rviz中選擇“map”,可以在可視化界面看到有地圖出現(xiàn)。
? ? ? 下面根據(jù)實(shí)際環(huán)境進(jìn)行建圖:按下鍵盤相關(guān)指令(鍵盤指令請(qǐng)參考上述內(nèi)容--鍵盤命令及含義表)來控制全向底盤在場(chǎng)地內(nèi)遍地運(yùn)行,直至在Rviz內(nèi)可以看到構(gòu)建地圖的輪廓,如下圖所示(注意實(shí)際地圖環(huán)境不同,出現(xiàn)的輪廓也會(huì)不同)。

④ 為了后續(xù)在已知環(huán)境中運(yùn)行底盤,需把此次建立的地圖進(jìn)行保存。需要先進(jìn)入保存地圖的文件夾,然后給地圖命名,保存即可。
下面是實(shí)驗(yàn)中的具體操作:
重新打開新終端(ctrl+shift+t)并輸入:cd fourmacnum_car_ws/src/four_macnum_navigation/maps

之后輸入:rosrun map_server map_saver -f ./your_map_name

返回下圖紅色框的信息,代表成功保存地圖。

查看生成的地圖文件
? ? ? 上面我們用map_server來保存地圖,這里我們來簡單了解和查看一下剛才保存的地圖文件(見下圖)。其中:map_server是一個(gè)和地圖相關(guān)的功能包,它可以將已知地圖發(fā)布出來,供導(dǎo)航和其它功能使用,也可以保存SLAM建立的地圖。
? ? ? 地圖文件,通常為pgm格式 ?
? ? ? 地圖的描述文件,通常為yaml格式

打開your_map_name.pgm(見下圖):

打開your_map_name.yaml ,各個(gè)參數(shù)如下圖所示:

其中占據(jù)的概率 occ = (255-color_avg)/255.0,color_avg為RGB三個(gè)通道的平均值。
3. 底盤導(dǎo)航—Navigation
實(shí)現(xiàn)思路
? ? ? 加載上述實(shí)驗(yàn)中建好的地圖,全向底盤進(jìn)行姿態(tài)估計(jì)并實(shí)現(xiàn)導(dǎo)航效果。
操作步驟
① 將創(chuàng)建的地圖應(yīng)用到導(dǎo)航程序中。這里我們需要修改下four_macnum_navigation.launch文件,將your_map_name.yaml 添加到此launch文件中。步驟如下:
? ? ? ?打開終端并輸入:cd fourmacnum_car_ws/src/four_macnum_navigation/launch
? ? ? ?之后再輸入:gedit four_macnum_navigation.launch

② 啟動(dòng)雷達(dá)、鍵盤、rosserial。
? ? ? ?在該終端繼續(xù)輸入:roslaunch robot_navigation_control test_one.launch
③ 打開新終端并輸入:roslaunch four_macnum_navigation four_macnum_navigation.launch(見下圖)。

啟動(dòng)界面后,可以看到許多紅色的箭頭,這代表底盤的姿態(tài)估計(jì)還不準(zhǔn)確。

④ 開始調(diào)整底盤的姿態(tài)。
? ? ? ?使用2D Pose Estimate 標(biāo)定底盤位于地圖中的初始位置及車頭指向(見下圖)。

⑤ 鼠標(biāo)點(diǎn)擊有roslaunch robot_navigation_control test_one.launch的終端后,嘗試按下鍵盤命令控制全向底盤運(yùn)動(dòng)(鍵盤指令請(qǐng)參考上述內(nèi)容--鍵盤命令及含義表),最好盡可能多的消除地圖中的箭頭【這一步作用是確定底盤在地圖中的實(shí)際位置以及車頭指向】。
? ? ? ?下面是多次按下鍵盤命令控制底盤運(yùn)動(dòng)后,箭頭逐漸減少的效果。

下圖是最后調(diào)整完的底盤姿態(tài)(即底盤在地圖中的實(shí)際位置以及車頭指向)。

⑥ 嘗試給定全向底盤目標(biāo)位置。
【使用2D Nav Goal】,這里的目標(biāo)位置包含了目標(biāo)點(diǎn)及車頭指向,在可視化界面點(diǎn)擊且轉(zhuǎn)動(dòng)箭頭防線,機(jī)器人會(huì)移動(dòng)到指定點(diǎn)的位置。??
4. 資料下載
資料內(nèi)容:程序源代碼
資料下載地址:桌面級(jí)全向底盤-slam導(dǎo)航 https://www.robotway.com/h-col-260.html