【易科無人車】2.搭建Gazebo模擬環境
APMRover+Gazebo+ROS+MAVproxy
無人車模擬環境搭建步驟
圖1 使用了Pixhawk2作為小腦運動控制器
圖2 硬體使用了巨匠無人車平台
1 前言
機器人學的本質就是與物理世界的互動。拋開物理硬體,在純軟體的環境里進行模擬,似乎與機器人學背道而馳。但是從節約成本,節約時間的角度出發,模擬也是必不可少的。
當我個人使用低速、廉價的模型車時,我也是不做模擬的,直接在車上測試程序!簡單粗暴,直觀有效!但隨著車越來越大,速度越來越高,成本越來越貴。我也不得不重新考慮通過模擬先驗證一些危險的程序了。
就像下面是一次撞到台階上,扯斷了線,不得不維修了一天的小車車。
當需要進行一些較為複雜、危險的功能時就必須要考慮先在模擬環境下進行測試了。
我們知道Gazebo有著強大的模擬功能,可以方便的進行ROS程序的模擬驗證。上層的高級導航程序想基於ROS和香蕉派進行開發。但我們底層又想使用成熟可靠的開源自動駕駛儀項目Ardurover,有什麼好的辦法嗎?
感謝Erler Robotics做了一些列ROS+Ardurover的教程,原文鏈接如下:
http://docs.erlerobotics.com/simulation/intro
我們按照教程進行了嘗試,填了一些小坑,最後終於成功把模擬環境搭建起來了,總結如下:
系統介紹
開發環境:ROS Indigo
使用ROS / Gazebo模擬器對ArduPilot代碼進行軟體在環模擬(SITL),對控制器等演算法的的正確性和穩定性進行驗證。
通信方式
自動駕駛儀應用程序通過MAVROS在相關的ROS主題中發布數據。MAVROS為支持MAVLink通信協議的各種自動駕駛儀提供ROS驅動程序。另外,它還為地面控制站提供UDPMAVLink橋。使用這個協議,ROS可以通過MAVROS直接向無人車控制器發送特定的命令。
其他插件有:
- sim_vehicle.sh:簡化的ROS / Gazebo模擬啟動,可以通過使用SITL啟動腳本的參數完全配置
- Hector插件:提供GPS感測器數據
- MavProxy:提供地理參考重疊地圖圖像,以更好地評估無人車相對於模擬環境的位置
模擬器模擬的感測器數據包括:
- 慣性測量單元(IMU),提供線性加速度,角速度
- 大氣計,提供高度
- 指南針,提供航向
- GPS,提供經度、緯度和高度
- 攝像頭,前方圖像
- 聲納感測器,前方障礙物
- 激光雷達
- 深度攝像機
- 模擬遙控器操縱
2 安裝軟體
建議安裝Ubuntu14.04 64位。
我嘗試了Ubuntu 16.0464位,16.04中沒有所需的Gazebo和drcsim7包,需要手動編譯,比較麻煩。
安裝步驟:
1) Ubuntu 14.04
2) APM / Ardupilot
a) arduRover的Erle Gazebo分支
3) JSBSim模擬器 (四旋翼專用,無人車可省略)
4) ROS Indigo
5) 創建ROS工作區
6) 安裝Gazebo
a) 選項1:使用Ubuntu Deban包安裝Gazebo
b) 選項2:從源代碼安裝Gazebo
7) 編譯工作空間
8) Gazebo模型下載
2.1 安裝基礎包
首先,安裝基礎包
sudo apt-get update
sudo apt-get install gawk make git curl cmake -y
2.2 MAVProxy
安裝MAVProxy的依賴包
sudo apt-get install g++ python-pippython-matplotlib python-serial python-wxgtk2.8 python-scipy python-opencvpython-numpy python-pyparsing ccache realpath libopencv-dev -y
安裝MAVProxy
sudo pip install future
sudo apt-get install libxml2-dev libxslt1-dev -ysudo pip2 install pymavlink catkin_pkg --upgradesudo pip install MAVProxy==1.5.2
註:pip是一個python包管理工具,如果在先前機器上並未安裝,可按照以下步驟安裝。
首選使用軟體管理器安裝:在Linux系統中,可以在系統的軟體管理器中安裝最新版本的pip.
如Debian 和 Ubuntu:
$ sudo apt-get installpython-pip
或是使用腳本安裝和升級pip
要安裝或升級pip,首先需要下載 get-pip.py
下載鏈接:https://bootstrap.pypa.io/get-pip.py
然後運行以下命令 (需要管理員許可權):
$ sudo pythonget-pip.py
2.3 ARUco
下載並安裝ArUco.
首先下載1.3.0版本 ArUco(aruco-1.3.0.tgz),注意不要用其他版本,可能會導致編譯不通過。
https://sourceforge.net/projects/aruco/files/OldVersions/
安裝ArUco
cd~/Downloads # Replace this with your Download directory
tar-xvzf aruco-1.3.0.tgz cdaruco-1.3.0/ mkdirbuild && cd build cmake.. make sudomake install
2.4 APM/ Ardupilot
ArduPilot項目是一個開源的無人機自動駕駛儀。我們將使用erlerobot的gazebo分支進行模擬:
編譯ardupilot特定的分支
mkdir -p ~/simulation; cd ~/simulation
git clone https://github.com/erlerobot/ardupilot -b gazebo
2.5無人機模擬界面JSBSim(可忽略)
cd ~/simulation
git clone git://http://github.com/tridge/jsbsim.git# Additional dependencies requiredsudo apt-get install libtool automake autoconf libexpat1-devcd jsbsim./autogen.sh --enable-librariesmake -j2sudo make install
2.6 ROS Indigo
設置你的電腦接受來自http://packages.ros.org的軟體,設置你的鑰匙並安裝(確保你的Debian軟體包索引是最新的):
sudo sh -c echo "debhttp://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" >/etc/apt/sources.list.d/ros-latest.list
sudo apt-key adv --keyserverhkp://http://ha.pool.sks-keyservers.net --recv-key 0xB01FA116sudo apt-get update
僅安裝ROS基礎包,不包括GUI等工具。
sudo apt-get install ros-indigo-ros-base -y
或是乾脆來個完整安裝:
sudo apt-get install ros-indigo-desktop-full -y
初始化rosdep
在可以使用ROS之前,需要初始化rosdep。當你想需要編譯並運行一些ROS的組件時,rosdep使你能夠輕鬆地安裝系統的依賴關係。
sudo rosdep init
rosdep update
將ROS環境變數將自動添加到您的bash會話:
echo "source/opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
安裝rosinstall和本項目所需的依賴關係
sudo apt-get install python-rosinstall
ros-indigo-octomap-msgsros-indigo-joy
ros-indigo-geodesy ros-indigo-octomap-ros ros-indigo-mavlink ros-indigo-control-toolbox ros-indigo-transmission-interface ros-indigo-joint-limits-interface unzip -y
創建ROS工作區
mkdir -p ~/simulation/ros_catkin_ws/src
初始化工作空間
cd ~/simulation/ros_catkin_ws/src
catkin_init_workspacecd ~/simulation/ros_catkin_wscatkin_makesource devel/setup.bash
2.7 git下載源碼
下載這些文件到src文件夾中:
cd ~/simulation/ros_catkin_ws/src
git clonehttps://github.com/erlerobot/ardupilot_sitl_gazebo_plugingit clonehttps://github.com/tu-darmstadt-ros-pkg/hector_gazebo/git clonehttps://github.com/erlerobot/rotors_simulator -b sonar_plugingit clonehttps://github.com/PX4/mav_comm.gitgit clonehttps://github.com/ethz-asl/glog_catkin.gitgit clonehttps://github.com/catkin/catkin_simple.gitgit clonehttps://github.com/erlerobot/mavros.gitgit clone https://github.com/ros-simulation/gazebo_ros_pkgs.git-b indigo-devel#Add Python and C++ examplesgit clonehttps://github.com/erlerobot/gazebo_cpp_examplesgit clonehttps://github.com/erlerobot/gazebo_python_examples
2.8 安裝Gazebo
選項1:安裝Gazebo使用Ubuntu包
設置你的電腦從http://packages.osrfoundation.org接收軟體
sudo sh -c echo "debhttp://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs`main" > /etc/apt/sources.list.d/gazebo-stable.list
設置秘鑰
wgethttp://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
安裝gazebo7
sudo apt-get update
sudo apt-get remove .*gazebo.* .*sdformat.*.*ignition-math.* && sudo apt-get update && sudo apt-getinstall gazebo7 libgazebo7-dev drcsim7 -y
選項2:從源代碼安裝Gazebo
按照以下指令從源代碼安裝Gazebo。
http://gazebosim.org/tutorials?cat=install&tut=install_from_source&ver=default
編譯Gazebo需要等很長時間喔!
2.9 集成編譯
cd ~/simulation/ros_catkin_ws
catkin_make --pkg mav_msgs mavros_msgsgazebo_msgssource devel/setup.bashcatkin_make -j 4
最後下載模擬所需的Gazebo模型
mkdir -p~/.gazebo/models
git clone https://github.com/erlerobot/erle_gazebo_modelsmverle_gazebo_models/* ~/.gazebo/models
3 運行模擬
3.1啟動APMrover2
source~/simulation/ros_catkin_ws/devel/setup.bash
cd ~/simulation/ardupilot/APMrover2../Tools/autotest/sim_vehicle.sh -j 4 -f Gazebo
第一次使用會此腳本會自動對一些包進行編譯,需要聯網下載所需包,編譯完成後,以後便可直接運行。
此時會啟動MAV的控制台(上)和一個ardupilot顯示台(下)。
然後調用你無人車的param參數表。第一次可使用默認的param
param load /[path_to_your_home_directory]/simulation/ardupilot/Tools/Frame_params/3DR_Rover.param
將[path_to_your_home_directory]替換成你所在的文件夾,如:
paramload ~/simulation/ardupilot/Tools/Frame_params/3DR_Rover.param
打開另一個終端運行Gazebo
source~/simulation/ros_catkin_ws/devel/setup.bash
roslaunch ardupilot_sitl_gazebo_pluginrover_spawn.launch
是不是覺得圖像好單調啊!可以進入launch文件夾,裡面其實有好多複雜的世界模型。
source~/simulation/ros_catkin_ws/devel/setup.bash
roscd ardupilot_sitl_gazebo_plugin/launch
我們使用一個迷宮世界試試:
source~/simulation/ros_catkin_ws/devel/setup.bash
roslaunch ardupilot_sitl_gazebo_plugin rover_maze.launch
我又在世界模型里加了一些高低不同的障礙物,這下是不是有意思多了呢。
3.2 通過MAVProxy控制Erle-Rover
在MAV控制台中發送模擬遙控器指令:
# in the MAVProxy prompt:
mode MANUAL#設置地面站MAVLink系統 IDparam set SYSID_MYGCS 255#rc 3為油門通道,1500為中立位置,1500-1900為前進,1100-1500為後退rc 3 1900
再輸入後退指令
rc 3 1200
輸入轉向指令
#rc 1為方向通道,1500為中立位置,1500-1900為右轉,1100-1500為左轉
rc 1 1900
至此可以通過MAVROS控制gazebo小車運動了,下一步我們將在地面站中設置航線,並控制無人車自動駕駛了。
推薦閱讀:
※(ROS探索5)tf小試、ROS中msg的調用(python)、ROS四元數姿態角轉換、LaserScan Filter chian的使用
※ROS 1.0 和 ROS 2.0 的前世、今生、安裝使用說明與資料匯總
※小朋友學ROS機器人——使用Scratch2和ROS進行機器人圖形化編程學習
※【ROS教程 007】3D建模與模擬
※怎樣用ROS打造機器人建圖導航
TAG:机器人操作平台ROS | 无人车 |