ROS學習【18】-----利用Gazebo搭建賽道,控制小車完成比賽目錄
現在很多小夥伴在爲全國大學生智能車比賽做準備,但在進行小車組裝之前,一定會通過ROS進行賽道模擬,調試,一切準備就緒後纔會進行現實中小車的組裝,因此,測試是非常重要的,本次博客,林君學長主要帶大家利用Gazebo搭建全國大學生智能車比賽的規則賽道,控制小車,跑完賽道,雖然只是簡單的模擬,但對參賽的小夥伴來說,可以說非常重要了,有了一個入門的基礎,接下來,一起看步驟瞭解吧!
- ubuntu版本:ubuntuKylin-16.04
- ROS版本:ROS-kinetic
- Gazebo版本:Gazebo-7.16
一、 ROS仿真功能包下載編譯
一下ROS的仿真功能包需要通過GitHub克隆下載,當然是網絡的大佬寫好了的,小夥伴如需要自己寫,可以參考其中的代碼,進行自行構建,這裏,林君學長推薦模仿該仿真功能包,進行自行搭建,畢竟對於才參賽的同學來說,動手能力非常的重要!
1、racecar功能包下載
1)、新建終端進入ROS工作空間的src目錄下
cd ~/lenovo/ros/src
2)、下載Gazebo搭建賽道功能包racecar
git clone https://github.com/xmy0916/racecar.git
3)、racecar功能包中資源展示
4)、建議及推薦
(1)、小夥伴如果下載過慢,可以嘗試通過手機開熱點後,通過電腦進行連接,然後下載,這樣可能會下載成功,因爲林君學長就是這樣下載成功的
(2)、小夥伴如果實在不能夠下載,林君學長已經將該源碼資源包啥貫穿到我的資源模塊,小夥伴可以去林君學長的後臺下載,下載鏈接如下所示:
https://download.csdn.net/download/qq_42451251/12483862
以上資源包的內容和林君學長下面講解資源包的內容完全一樣哦,接下來,讓我們進入正題吧!
2、安裝該功能包運行需要的控件
在上面的終端不關閉的情況下,新建一個終端,進行控件的安裝,控件的安裝是爲了本次實驗任務需要,不安裝,在編譯或者運行的時候會出現錯誤的哦!
1)、driver_base的控件安裝
sudo apt-get install ros-kinetic-driver-base
輸入y進行下載,以上截圖爲操作現狀,後面的控件下載將不給出截圖了哦,輸入y對應下載就好!
2)、controllers控件安裝
sudo apt-get install ros-kinetic-gazebo-ros-control
sudo apt-get install ros-kinetic-effort-controllers
sudo apt-get install ros-kinetic-joint-state-controller
3)、ackermann_msgs控件安裝
sudo apt-get install ros-kinetic-ackermann-msgs
4)、planner控件安裝
sudo apt-get install ros-kinetic-global-planner
sudo apt-get install ros-kinetic-teb-local-planner
以上就是需要編譯之前準備的控件安裝啦,控件安裝成功後,關閉這個終端;有些控件是之前在進行ROS學習的時候安裝過的,但也是本次任務需要的控件,小夥伴對應安裝就好,如果安裝過,他會提示已安裝的哦。接下來,我們開始進行編譯吧!
3、racecar功能包編譯
1)、返回ROS工作空間
cd ~/lenovo/ros
2)、編譯
catkin_make
3)、編譯成功如下所示:
編譯過程中,如果遇到問題,則可根據提示修改,由於林君學長在編譯之後,沒有遇到過問題,編譯很流暢,如果小夥伴遇到問題,可以給林君學長留言或者私信,看到後,能夠解決的會幫大家解決的哦!
4、測試是否編譯成功
1)、程序註冊
source ./devel/setup.bash
2)、在終端輸入以下命令,運行小車模型,測試編譯是否成功
roslaunch racecar_gazebo racecar.launch
以上命令運行之後,系統將會打開一個tk的控制界面小窗,控制小車的移動,同時,系統會打開Gazebo仿真軟件,裏面會有一個小車模型,如下所示:
該tk窗口可以通過鍵盤的WSAD來控制小車進行位移!
二、 運行功能包自帶的賽道
1、運行賽道,控制小車進行位移
1)、在上面ctrl+c結束gazebo的運行,然後運行如下命令,運行賽道
roslaunch racecar_gazebo racecar_runway.launch
2)、運行結果如下:
3)、控制小車進行位移:
2、進行gmapping建圖
1)、新建終端,運行rviz,進行gmapping建圖
cd ~/lenovo/ros
source ./devel/setup.bash
roslaunch racecar_gazebo slam_gmapping.launch
3)、控制小車跑完全圖,進行gmapping建圖
(1)、賽道跑到一半
(2)、賽道跑完
現在gmapping地圖就建立好了,操控小車進行跑圖需要有點耐心,需要一定的時間,而且操作不到位,可能導致小車翻車,所以小心操控呀!接下來就進行地圖的保存吧
4)、通過以下命令,保存gmapping圖
rosrun map_server map_saver -f test_map
保存的地圖如下所示:
注意: 由於我們是在ros下運行的,所以地圖在ros工作空間下,小夥伴也可以自行定位地圖保存的位置例如:
rosrun map_server map_saver -f xxx/xxx/test_map
一般來說,地圖需要保存到map文件夾內,該文件夾專門用來保存我們創建模型的gmapping地圖,如下所示:
好了,接下來,我們關閉上面運行的所有程序及所有終端,然後我們就可以開始進行我們自己搭建地圖了。
接下來,我們自己搭建一個地圖,然後添加障礙物進行小車跑圖吧!
三、 自行進行賽道搭建
爲了區別剛剛的地圖,我們自行創建一個較爲簡單的地圖吧,這也是爲了方便本次博客的講解,下面,我們開始吧!
1、新建終端,打開Gazebo
1)、輸入如下命令,打開gazebo
gazebo
2)、點擊Edit->Build Editor,進行模型創建
3)、模型創建完成圖如下所示:
對於gazebo怎麼創建模型圖,小夥伴們可以參考林君學長的另一篇博客,講解了如何通過gazebo創建仿真模型圖及對應的保存,博客鏈接如下所示:
https://blog.csdn.net/qq_42451251/article/details/105161520
4)、接下來,將創建好的地圖模型保存
在對應的位置,我們便可以看到我們創建的賽道模型了:
5)、關閉gazebo
2、運行小車模型,導入剛剛的模型框架,然後保存world文件
1)、通過以下代碼運行小車模型
cd ~/lenovo/ros
source ./devel/setup.bash
roslaunch racecar_gazebo racecar.launch
2)、拖入剛剛我們創建的地圖到合適的位置
3)、添加障礙物
4)、保存world文件到下載功能包中的racecar_gazebo包中的worlds文件夾中
(1)、選擇File->Save World AS
(2)、選擇racecar_gazebo包中的worlds文件夾進行保存,自己命名吧,不要和裏面的名字重複就好,學長命名爲track1
(3)、查看是夠保存成功
可以看到模型導入成功,接下來,我們就創建launch文件運行自己的地圖吧!
3、創建launch文件,填寫賽道配置參數
1)、新建終端,進入racecar_gazebo工程包中的launch文件夾
cd ~/lenovo/ros/src/racecar/racecar_gazebo/launch
2)、創建track1.launch文件
touch track1.launch
3)、打開track1.launch文件,寫入配置參數
gedit track1.launch
寫入如下代碼:
<?xml version="1.0"?>
<launch>
<!-- Launch the racecar -->
<include file="$(find racecar_gazebo)/launch/racecar.launch">
<arg name="world_name" value="track1"/>
</include>
</launch>
然後點擊保存後關閉!接下來就可以運行我們自己的賽道了
4、運行我們的地圖
1)、運行地圖
source ./devel/setup.bash
roslaunch racecar_gazebo track1.launch
2)、控制小車跑圖
5、進行gmapping建圖
1)、上面運行的終端不關閉,新建終端,接着輸入如下命令,進行gmapping建圖
roslaunch racecar_gazebo slam_gmapping.launch
2)、控制小車,跑完全圖,全圖如下所示:
3)、新建終端,保存gmapping創建的地圖
cd ~/lenovo/ros/src/racecar/racecar_gazebo/map
rosrun map_server map_saver -f track1_map
4)查看地圖是否保存成功
可以看到,地圖已經完整的保存了哦;到這裏,我們的基本任務就完成了哦,關閉以上運行的所有軟件,及所有終端;接下來,我們就讓小車自動導航吧,避免人工操作過於繁瑣,讓它自己跑起來!
四、 實現 小車自主定位導航
1、創建手工導航launch文件
1)、新建終端,創建track2.launch文件
cd ~/lenovo/ros/src/racecar/racecar_gazebo/launch
touch track2.launch
gedit track2.launch
2)、寫入配置文件代碼
<?xml version="1.0"?>
<launch>
<!-- Launch the racecar -->
<include file="$(find racecar_gazebo)/launch/racecar.launch">
<arg name="world_name" value="track1"/>
</include>
<!-- Launch the built-map -->
<node name="map_server" pkg="map_server" type="map_server" args="$(find racecar_gazebo)/map/track1_map.yaml" />
<!--Launch the move base with time elastic band-->
<param name="/use_sim_time" value="true"/>
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
<rosparam file="$(find racecar_gazebo)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find racecar_gazebo)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find racecar_gazebo)/config/local_costmap_params.yaml" command="load" />
<rosparam file="$(find racecar_gazebo)/config/global_costmap_params.yaml" command="load" />
<rosparam file="$(find racecar_gazebo)/config/teb_local_planner_params.yaml" command="load" />
<param name="base_global_planner" value="global_planner/GlobalPlanner" />
<param name="planner_frequency" value="0.01" />
<param name="planner_patience" value="5.0" />
<!--param name="use_dijkstra" value="false" /-->
<param name="base_local_planner" value="teb_local_planner/TebLocalPlannerROS" />
<param name="controller_frequency" value="5.0" />
<param name="controller_patience" value="15.0" />
<param name="clearing_rotation_allowed" value="false" />
</node>
</launch>
3)、如何改爲你們的?
小夥伴只需要如下圖所示,該其中兩個地方,改爲你們自己的模型名和保存地圖的yaml文件就可以了:
2、運行手工導航
1)、輸入如下命令,運行我們的賽道
cd ~/lenovo/ros
source ./devel/setup.bash
roslaunch racecar_gazebo track2.launch
2)、新建終端,運行RVIZ進行手工導航
cd ~/lenovo/ros
source ./devel/setup.bash
roslaunch racecar_gazebo racecar_rviz.launch
3)、新建終端,啓動導航的path_pursuit.py文件
cd ~/lenovo/ros
source ./devel/setup.bash
rosrun racecar_gazebo path_pursuit.py
3、選擇2D Nav Goal指針,進行手工導航
1)、選擇2D Nav Goal指針
2)、通過2D Nav Goal指針選擇地圖上面的一個點進行手工導航
3)、新建終端,運行路徑python文件,提示是否到達終點
cd ~/lenovo/ros
source ./devel/setup.bash
rosrun racecar_gazebo path_pursuit.py
4)、觀察小車的移動情況
到達終點之後,運行路徑python文件的終端就會顯示已到達:
小車自動導航很慢的,小夥伴耐心等待就行了!
以上就是本次博客的全部內容啦,希望小夥伴通過對本次博客的閱讀,可以幫助小夥伴理解,如何進行賽道搭建並進行小車吧比賽建模,對小夥伴參加全國智能車大賽是非常有幫助的哦!
遇到問題的小夥伴評論區留言,林君學長看到會爲大家解答的,這個學長不太冷!
陳一月的又一天編程隨歲月^ _ ^