利用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文件的終端就會顯示已到達:
在這裏插入圖片描述
小車自動導航很慢的,小夥伴耐心等待就行了!
以上就是本次博客的全部內容啦,希望小夥伴通過對本次博客的閱讀,可以幫助小夥伴理解,如何進行賽道搭建並進行小車吧比賽建模,對小夥伴參加全國智能車大賽是非常有幫助的哦!
遇到問題的小夥伴評論區留言,林君學長看到會爲大家解答的,這個學長不太冷!

陳一月的又一天編程隨歲月^ _ ^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章