ROS智能車自主導航仿真
一、準備工作
新建一個工作空間:
此時工作空間是空的,但是可以進行編譯:
編譯後的工作空間:
註冊:
下載源碼包:
cd ~/car_ws/src
git clone https://github.com/xmy0916/racecar.git
下載成功:
下載相應的插件:
sudo apt-get install ros-melodic-driver-base
sudo apt-get install ros-melodic-gazebo-ros-control
sudo apt-get install ros-melodic-effort-controllers
sudo apt-get install ros-melodic-joint-state-controller
sudo apt-get install ros-melodic-ackermann-msgs
sudo apt-get install ros-melodic-global-planner
sudo apt-get install ros-melodic-teb-local-planner
二、編譯運行
編譯:
出現了一下錯誤:
是因爲OpenCV的路徑問題,要把OpenCV路徑換成自己的,打開~/car_ws/src/racecar/racecar_gazebo/CMakeLists.txt,這是代碼自帶的路徑:
自己的OpenCV路徑可以使用locate命令查看,然後修改就可以了:
再次編譯就編譯成功:
編譯之後就添加環境變量,用這種方法在打開新的終端窗口就可以不用重新註冊工作空間了,如果用上面的創建工作空間的時候那種方法每次打開一個新的終端就需要註冊一次很麻煩:
運行小車模型:
roslaunch racecar_gazebo racecar.launch
剛打開的時候可能看不見小車,是因爲小車有一個初始位置,偏離了座標原點,需要用鼠標移動一下Gazebo的視角就可以看見了:
如果你想可以修改這個值,就可以改變小車的起始位置,如下:
啓動地圖運行軌道(源代碼包自帶的):
roslaunch racecar_gazebo racecar_runway.launch
如果電腦性能不太好,這裏加載需要一段時間,耐心等待:
加載完成:
啓動Rviz進行建圖:
roslaunch racecar_gazebo slam_gmapping.launch
在左下角窗口還可以看見小車的視角,可以看見障礙物:
控制小車移動:
這個過程要有耐心,建圖完成:
保存地圖:
rosrun map_server map_saver -f test_map
默認是保存在主目錄下(home)的,把它複製到我們工作空間的map文件夾下面(~/car_ws/src/racecar/racecar_gazebo/map)。
自主導航:
修改下面文件的內容,改成自己剛剛保存的地圖的路徑:
啓動導航和環境地圖:
roslaunch racecar_gazebo racecar_runway_navigation.launch
啓動rviz:
roslaunch racecar_gazebo racecar_rviz.launch
用2D Nav Goal設計小車運動軌跡:
啓動導航腳本:
rosrun racecar_gazebo path_pursuit.py
小車開始運動,中間的紅色就是小車走過的軌跡:
三、搭建新模型並進行自主導航
由於我的虛擬機已經不堪重負,很卡,前面的部分都是花了很久才完成的,這一部分就只講一些關鍵步驟了。
打開gazebo:
然後就可以設計自己想要的地圖模型:
設計好之後保存:
修改小車起始位置:
把圖中座標改成原點:
運行小車模型:
拖入剛剛創建的模型:
按照自己的喜好加入障礙物:
保存:
保存到這個目錄下:
新建一個launch文件,紅框部分改爲自己的模型名字:
然後運行:
然後後面進行建圖、自主導航的步驟跟前面一樣的,我的電腦太卡了運行不下去了,這裏就不繼續貼圖了。
roslaunch racecar_gazebo slam_gmapping.launch
控制小車跑完整個地圖。然後保存地圖:
rosrun map_server map_saver -f test_map
後面的自主導航跟着前面的做就可以了。
四、無人車自動避障
下載功能包:
sudo apt-get install ros-melodic-navigation
下載源代碼包:
鏈接:https://pan.baidu.com/s/1xMoJ8LBSIga6wRP535bt9Q
提取碼:5ket
下載好後面解壓。
編譯:
註冊程序:
運行,一開始顯示權限不夠是因爲沒有把該文件設爲可執行程序,把apm_navigation.sh文件設爲可執行程序文件就可以了:
在Rviz中用2D Nav Goal爲小車設定目標,小車就會開始運動了:
再次爲小車設定目標:
在小車運動過程可以在Gazebo裏給它添加障礙物:
然後小車檢測到障礙物之後就會自動更改到達目的地的路線:
最後小車成功越過障礙物: