【易科無人車】2.搭建Gazebo模擬環境

APMRover+Gazebo+ROS+MAVproxy

無人車模擬環境搭建步驟

圖1 使用了Pixhawk2作為小腦運動控制器

圖2 硬體使用了巨匠無人車平台

1 前言

機器人學的本質就是與物理世界的互動。拋開物理硬體,在純軟體的環境里進行模擬,似乎與機器人學背道而馳。但是從節約成本,節約時間的角度出發,模擬也是必不可少的。

當我個人使用低速、廉價的模型車時,我也是不做模擬的,直接在車上測試程序!簡單粗暴,直觀有效!但隨著車越來越大,速度越來越高,成本越來越貴。我也不得不重新考慮通過模擬先驗證一些危險的程序了。

就像下面是一次撞到台階上,扯斷了線,不得不維修了一天的小車車。

當需要進行一些較為複雜、危險的功能時就必須要考慮先在模擬環境下進行測試了。

我們知道Gazebo有著強大的模擬功能,可以方便的進行ROS程序的模擬驗證。上層的高級導航程序想基於ROS和香蕉派進行開發。但我們底層又想使用成熟可靠的開源自動駕駛儀項目Ardurover,有什麼好的辦法嗎?

感謝Erler Robotics做了一些列ROS+Ardurover的教程,原文鏈接如下:

docs.erlerobotics.com/s

我們按照教程進行了嘗試,填了一些小坑,最後終於成功把模擬環境搭建起來了,總結如下:

系統介紹

開發環境: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 -y

sudo pip2 install pymavlink catkin_pkg --upgrade

sudo pip install MAVProxy==1.5.2

註:pip是一個python包管理工具,如果在先前機器上並未安裝,可按照以下步驟安裝。

首選使用軟體管理器安裝:在Linux系統中,可以在系統的軟體管理器中安裝最新版本的pip.

如Debian 和 Ubuntu:

$ sudo apt-get installpython-pip

或是使用腳本安裝和升級pip

要安裝或升級pip,首先需要下載 get-pip.py

下載鏈接:bootstrap.pypa.io/get-p

然後運行以下命令 (需要管理員許可權):

$ sudo pythonget-pip.py

2.3 ARUco

下載並安裝ArUco.

首先下載1.3.0版本 ArUco(aruco-1.3.0.tgz),注意不要用其他版本,可能會導致編譯不通過。

sourceforge.net/project

安裝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 github.com/erlerobot/ar -b gazebo

2.5無人機模擬界面JSBSim(可忽略)

cd ~/simulation

git clone git://github.com/tridge/jsbsi

# Additional dependencies required

sudo apt-get install libtool automake autoconf libexpat1-dev

cd jsbsim

./autogen.sh --enable-libraries

make -j2

sudo make install

2.6 ROS Indigo

設置你的電腦接受來自packages.ros.org的軟體,設置你的鑰匙並安裝(確保你的Debian軟體包索引是最新的):

sudo sh -c echo "debpackages.ros.org/ros/ub $(lsb_release -sc) main" >/etc/apt/sources.list.d/ros-latest.list

sudo apt-key adv --keyserverhkp://ha.pool.sks-keyservers.net --recv-key 0xB01FA116

sudo 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-msgs

ros-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_workspace

cd ~/simulation/ros_catkin_ws

catkin_make

source devel/setup.bash

2.7 git下載源碼

下載這些文件到src文件夾中:

cd ~/simulation/ros_catkin_ws/src

git clonegithub.com/erlerobot/ar

git clonegithub.com/tu-darmstadt

git clonegithub.com/erlerobot/ro -b sonar_plugin

git clonegithub.com/PX4/mav_comm

git clonegithub.com/ethz-asl/glo

git clonegithub.com/catkin/catki

git clonegithub.com/erlerobot/ma

git clone github.com/ros-simulati indigo-devel

#Add Python and C++ examples

git clonegithub.com/erlerobot/ga

git clonegithub.com/erlerobot/ga

2.8 安裝Gazebo

選項1:安裝Gazebo使用Ubuntu包

設置你的電腦從packages.osrfoundation.org接收軟體

sudo sh -c echo "debpackages.osrfoundation.org `lsb_release -cs`main" > /etc/apt/sources.list.d/gazebo-stable.list

設置秘鑰

wgetpackages.osrfoundation.org -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。

gazebosim.org/tutorials?

編譯Gazebo需要等很長時間喔!

2.9 集成編譯

cd ~/simulation/ros_catkin_ws

catkin_make --pkg mav_msgs mavros_msgsgazebo_msgs

source devel/setup.bash

catkin_make -j 4

最後下載模擬所需的Gazebo模型

mkdir -p~/.gazebo/models

git clone github.com/erlerobot/er

mverle_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系統 ID

param 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 | 无人车 |