Gazebo教程(使用roslaunch啟動Gazebo,world文件和URDF模型)

啟動Gazebo庞瘸,打開world模型以及向仿真環(huán)境中插入機器人模型的方法有很多.在這個教程中,我們將使用rosrun和roslaunch來實現(xiàn).這里包括將URDF文件存儲在ROS包中港准,并保留相對于ROS工作區(qū)的各種資源路徑朽寞。

一.使用roslaunch打開world模型

roslaunch是一個啟動ROS節(jié)點并插入機器人模型的標準方法.要建立一個空的world模型眼五,我們只需要運行

roslaunch gazebo_ros empty_world.launch

1.roslaunch參數(shù)

你可以更改launch文件中的參數(shù)來改變Gazebo的啟動行為:

paused:在暫停狀態(tài)下啟動Gazebo(默認為false).

use_sim_time:告訴ROS節(jié)點要求獲取ROS話題/clock發(fā)布的時間信息(默認為true).

gui:啟動Gazebo中的用戶界面窗口(默認為true).

headless recording:啟動Gazebo狀態(tài)日志記錄(默認為false).

debug:使用gdb以調(diào)試模式啟動gzserver(默認為false).

verbose:用--verbose運行g(shù)zserver和gzclient,并將錯誤和警告打印到終端(默認為false).

2.roslaunch命令示例

通常情況下使用默認值就可以了,這里只是一個例子:

roslaunch gazebo_ros empty_world.launch paused:=true use_sim_time:=false gui:=true throttled:=false recording:=false debug:=true verbose:=true

3.運行其他demo worlds

其他的demo worlds已經(jīng)包含在gazebo_ros中了,它包括:

roslaunch gazebo_ros willowgarage_world.launch

roslaunch gazebo_ros mud_world.launch

roslaunch gazebo_ros shapes_world.launch

roslaunch gazebo_ros rubble_world.launch

mud_world.launch的代碼如下:

<launch>

? <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->

? <include file="$(find gazebo_ros)/launch/empty_world.launch">

? ? <arg name="world_name" value="worlds/mud.world"/> <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable -->

? ? <arg name="paused" value="false"/>

? ? <arg name="use_sim_time" value="true"/>

? ? <arg name="gui" value="true"/>

? ? <arg name="recording" value="false"/>

? ? <arg name="debug" value="false"/>

? </include>

</launch>

在這個launch文件中俱恶,我們繼承了大多數(shù)empty_world.launch中的內(nèi)容.只改變了world_name參數(shù),用mud.world代替了empty.world.其他的參數(shù)使用默認的就好了.

4.world文件

繼續(xù)查看mud_world.launch文件范舀,我們現(xiàn)在看mud.world文件的內(nèi)容.mud.world開頭的一部分代碼如下所示:

<sdf version="1.4">

? ? <world name="default">

? ? ? <include>

? ? ? ? <uri>model://sun</uri>

? ? ? </include>

? ? ? <include>

? ? ? ? <uri>model://ground_plane</uri>

? ? ? </include>

? ? ? <include>

? ? ? ? <uri>model://double_pendulum_with_base</uri>

? ? ? ? <name>pendulum_thick_mud</name>

? ? ? ? <pose>-2.0 0 0 0 0 0</pose>

? ? ? </include>

? ? ? ...

? ? </world>

? </sdf>

在這個world文件片段中我們可以看到三個模型.這三個模型都是從本地的Gazebo Model Database中搜尋的.如果沒有找到合是,那么Gazebo會自動的從網(wǎng)上的數(shù)據(jù)庫中搜索.

5.如何在你的計算機中找到world文件

world文件位于Gazebo資源路徑的/worlds文件夾中.這個路徑取決于你是如何安裝Gazebo以及你的系統(tǒng)類型的.想要找到你的Gazebo資源路徑,你可以運行如下命令:

env | grep GAZEBO_RESOURCE_PATH

一個典型的路徑是/usr/local/share/gazebo-1.9.在這個路徑后面加上/worlds就可以了.

二.創(chuàng)建你自己的Gazebo ROS包

在繼續(xù)插入機器人之前尿背,我們將首先討論使在ROS下使用Gazebo的文件層次結(jié)構(gòu)標準端仰,以便我們可以做出以后的假設(shè)。

現(xiàn)在田藐,我們假設(shè)你的工作空間為catkin_ws.它的路徑可能是:

/home/user/catkin_ws/src

關(guān)于機器人模型和描述的一切都在/MYROBOT_description包中,Gazebo中用到的所有的world文件和launch文件都在/MYROBOT_gazebo中.實際情況下用你機器人的名字的小寫字母來代替'MYROBOT'.你的文件夾目錄應(yīng)該如下所示:

../catkin_ws/src

? ? /MYROBOT_description

? ? ? ? package.xml

? ? ? ? CMakeLists.txt

? ? ? ? /urdf

? ? ? ? ? ? MYROBOT.urdf

? ? ? ? /meshes

? ? ? ? ? ? mesh1.dae

? ? ? ? ? ? mesh2.dae

? ? ? ? ? ? ...

? ? ? ? /materials

? ? ? ? /cad

? ? /MYROBOT_gazebo

? ? ? ? /launch

? ? ? ? ? ? MYROBOT.launch

? ? ? ? /worlds

? ? ? ? ? ? MYROBOT.world

? ? ? ? /models

? ? ? ? ? ? world_object1.dae

? ? ? ? ? ? world_object2.stl

? ? ? ? ? ? world_object3.urdf

? ? ? ? /materials

? ? ? ? /plugins

·創(chuàng)建一個自定義的world文件

你可根據(jù)自己的機器人和功能包創(chuàng)建自己的.world文件.這里我們將創(chuàng)建一個擁有地面吱七,太陽和加油站的世界.下面是我們推薦的步驟.記得用你自己的機器人的名字代替MYROBOT 汽久,如果你沒有機器人的話可以直接用'test'代替:

1.創(chuàng)建一個ROS功能包名為MYROBOT_gazebo

2.在個包中,創(chuàng)建一個launch文件夾.

3.在launch文件夾中創(chuàng)建一個YOUROBOT.launch文件踊餐,寫入如下代碼:

<launch>

? <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->

? <include file="$(find gazebo_ros)/launch/empty_world.launch">

? ? <arg name="world_name" value="$(find MYROBOT_gazebo)/worlds/MYROBOT.world"/>

? ? <!-- more default parameters can be changed here -->

? </include>

</launch>

4.同樣在這個功能包中景醇,創(chuàng)建一個worlds文件夾,并創(chuàng)建一個MYROBOT.world 文件吝岭,寫入如下代碼:

<?xml version="1.0" ?>

<sdf version="1.4">

? <world name="default">

? ? <include>

? ? ? <uri>model://ground_plane</uri>

? ? </include>

? ? <include>

? ? ? <uri>model://sun</uri>

? ? </include>

? ? <include>

? ? ? <uri>model://gas_station</uri>

? ? ? <name>gas_station</name>

? ? ? <pose>-2.0 7.0 0 0 0 0</pose>

? ? </include>

? </world>

</sdf>

5.通過如下命令你可以在Gazebo中啟動你的自定義world文件

. ~/catkin_ws/devel/setup.bash

roslaunch MYROBOT_gazebo MYROBOT.launch

結(jié)果如下所示


·在Gazebo中編輯world文件

你可以插入額外的模型到你的世界中并通過File->Save保存.結(jié)果會返回到你的ROS功能包中.

三.使用roslaunch插入URDF機器人

有兩種方法:

一個是:通過ROS服務(wù)

第一種方法可以讓您的機器人的ROS包在計算機和存儲庫檢查之間更加便攜三痰。它允許你保持機器人相對于ROS包路徑的位置,但也要求你寫一個ROS服務(wù)程序.

另一個是:通過模型庫

這種方法允許你的.world文件中包含你的機器人窜管,這樣看起來更整潔方便但是需要設(shè)定環(huán)境變量來將你的機器人添加到Gazebo的模型庫.

我們會使用兩種方法.但總的來說我們更推薦第一種方法.

1."ROS服務(wù)"

這個方法使用了一個叫做spawn_model的python程序來要求gazebo_ros節(jié)點向Gazebo中添加URDF.spawn_model程序存儲在gazebo_ros包中.你可以通過如下命令調(diào)用這個程序:

rosrun gazebo_ros spawn_model -file `rospack find MYROBOT_description`/urdf/MYROBOT.urdf -urdf -x 0 -y 0 -z 1 -model MYROBOT

要看所有的spawn_model中的可變參數(shù)散劫,運行:rosrun gazebo_ros spawn_model -h

1.1使用Baxter的URDF示例

如果你沒有URDF文件來測試,你可以從Rethink Robotics的baxter_common中下載baxter_description包.通過運行如下命令將這個包放在你的工作空間下:

git clone https://github.com/RethinkRobotics/baxter_common.git

現(xiàn)在你應(yīng)該有一個叫做baxter.urdf的URDF文件在路徑baxter_description/urdf/下幕帆,運行

rosrun gazebo_ros spawn_model -file `rospack find baxter_description`/urdf/baxter.urdf -urdf -z 1 -model baxter

結(jié)果如下:


接下來將它繼集成到ROS啟動文件中获搏,打開MYROBOT_gazebo/launch/YOUROBOT.launch并在</launch>前添加:

<!-- Spawn a robot into Gazebo -->

<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find baxter_description)/urdf/baxter.urdf -urdf -z 1 -model baxter" />

然后啟動這個文件,你會得到一樣的結(jié)果.

1.2使用PR2的XACRO示例

如果你的URDF不是XML形式而是XACRO形式.你可以對launch文件進行類似的修改.通過安裝這個包你可以運行這個PR2示例.

對于ROS Jade版本:

sudo apt-get install ros-jade-pr2-common

然后添加如下內(nèi)容到先前的launch文件中:

<!-- Convert an xacro and put on parameter server -->

<param name="robot_description" command="$(find xacro)/xacro.py $(find pr2_description)/robots/pr2.urdf.xacro" />

<!-- Spawn a robot into Gazebo -->

<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model pr2" />

運行這個文件得到如下結(jié)果:


注意:由于Gazebo API的變化失乾,這個方法仍會產(chǎn)生許多的錯誤和警告.

2."模型庫"

這種方法允許你的.world文件中包含你的機器人常熙,這樣看起來更整潔方便但是需要設(shè)定環(huán)境變量來將你的機器人添加到Gazebo的模型庫.因為ROS與Gazebo是相互分離的所以需要這個環(huán)境變量;URDF包不能直接在.world文件中使用碱茁,以為Gazebo不會搜索ROS包.

要想成功的使用這個方法裸卫,你必須要新建一個包含有你的機器人你的模型庫.這不是將URDF加載到Gazebo中的最簡潔方法,但是不必在計算機上保留兩個機器人URDF副本.如果你對如下的說明感到困惑纽竣,那么你需要回頭看看Gazebo Model Database

我們假設(shè)你的ROS工作空間已經(jīng)按照之前的說明建好了.那么唯一的區(qū)別就是在MYROBOT_description中添加了一個model.config文件墓贿,目錄結(jié)構(gòu)如下:

../catkin_ws/src

? ? /MYROBOT_description

? ? ? ? package.xml

? ? ? ? CMakeLists.txt

? ? ? ? model.config

? ? ? ? /urdf

? ? ? ? ? ? MYROBOT.urdf

? ? ? ? /meshes

? ? ? ? ? ? mesh1.dae

? ? ? ? ? ? mesh2.dae

? ? ? ? ? ? ...

? ? ? ? /materials

? ? ? ? /plugins

? ? ? ? /cad

這個目錄結(jié)構(gòu)很是個用來做Gazebo的模型庫,各個文件夾/文件的意義如下:

·/home/user/catkin_workspace/src:這是Gazebo模型庫的存儲位置.

·/MYROBOT_description:這個目錄存儲Gazebo模型

·model.config:Gazebo要在模型庫中找到模型所需的配置文件.

·MYROBOT.urdf:描述你的機器人的文件,也可以在Rviz募壕,MoveIt!等中使用.

·/meshes:將你的.stl或者.dae文件放在這里调炬,就像你普通的URDFs文件一樣.

2.1model.config

在每一個模型的源文件夾中都有一個model.config文件,它包含了這個模型的元信息.將如下代碼復(fù)制到你的model.config文件中舱馅,用你自己的文件名代替MYROBOT.urdf

<?xml version="1.0"?>

? <model>

? ? <name>MYROBOT</name>

? ? <version>1.0</version>

? ? <sdf>urdf/MYROBOT.urdf</sdf>

? ? <author>

? ? ? <name>My name</name>

? ? ? <email>name@email.address</email>

? ? </author>

? ? <description>

? ? ? A description of the model

? ? </description>

? </model>

不像SDF缰泡,當(dāng)標簽用于URDF時,標簽不需要任何版本.

2.2環(huán)境變量

最后代嗤,你需要給你的?.bashrc 文件添加環(huán)境變量來告訴Gazebo上哪找模型庫.使用你自己的編輯器編輯"~/.bashrc".檢查你是否已經(jīng)定義了一個GAZEBO_MODEL_PATH.如果有棘钞,則用一個分號加上它,否則新添一個.假設(shè)你的工作空間在~/catkin_ws/.那么你的路徑應(yīng)該是:

export GAZEBO_MODEL_PATH=/home/user/catkin_ws/src/

2.3在Gazebo中查看--手動

現(xiàn)在我們打開Gazebo查看是否已經(jīng)成功配置.

gazebo

點擊"Insert".你將會看到數(shù)個不同的模型庫干毅,包括線上數(shù)據(jù)庫.找到你機器人相應(yīng)的模型庫宜猜,打開它的子菜單,選中你的機器人并放置.

2.4在Gazebo中查看--通過roslaunch

使用模型庫的方法的優(yōu)點是你能夠在world中添加你的機器人硝逢,而不用使用ROS包的路徑.我們將使用?"Creating a world file"中相同的設(shè)置姨拥,只修改其中的world文件:

·在MYROBOT_description/launch文件夾中,編輯MYROBOT.world渠鸽,使用如下代碼:

<?xml version="1.0" ?>

<sdf version="1.4">

? <world name="default">

? ? <include>

? ? ? <uri>model://ground_plane</uri>

? ? </include>

? ? <include>

? ? ? <uri>model://sun</uri>

? ? </include>

? ? <include>

? ? ? <uri>model://gas_station</uri>

? ? ? <name>gas_station</name>

? ? ? <pose>-2.0 7.0 0 0 0 0</pose>

? ? </include>

? ? <include>

? ? ? <uri>model://MYROBOT</uri>

? ? </include>

? </world>

</sdf>

·現(xiàn)在運行l(wèi)aunch文件應(yīng)該可以同時看到世界和機器人:

roslaunch MYROBOT_gazebo MYROBOT.launch

這個方法的缺點是MYROBOT_description和MYROBOT_gazebo之間并不能簡單的交互.在任何新的系統(tǒng)上你都要先設(shè)置GAZEBO_MODEL_PATH.

四.通過package.xml輸出模型的路徑

<run_depend>gazebo_ros</run_depend>

<export>

? <gazebo_ros gazebo_model_path="${prefix}/models"/>

? <gazebo_ros gazebo_media_path="${prefix}/models"/>

</export>

其中'${prefix}`新用戶不能立即理解叫乌,但在這里是必要的.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市徽缚,隨后出現(xiàn)的幾起案子憨奸,更是在濱河造成了極大的恐慌,老刑警劉巖凿试,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異那婉,居然都是意外死亡板甘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門吧恃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虾啦,“玉大人,你說我怎么就攤上這事痕寓“磷恚” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵呻率,是天一觀的道長硬毕。 經(jīng)常有香客問我,道長礼仗,這世上最難降的妖魔是什么吐咳? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任逻悠,我火速辦了婚禮,結(jié)果婚禮上韭脊,老公的妹妹穿的比我還像新娘童谒。我一直安慰自己,他們只是感情好沪羔,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布饥伊。 她就那樣靜靜地躺著,像睡著了一般蔫饰。 火紅的嫁衣襯著肌膚如雪琅豆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天篓吁,我揣著相機與錄音茫因,去河邊找鬼。 笑死杖剪,一個胖子當(dāng)著我的面吹牛冻押,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盛嘿,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼翼雀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了孩擂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤箱熬,失蹤者是張志新(化名)和其女友劉穎类垦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體城须,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡蚤认,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了糕伐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砰琢。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖良瞧,靈堂內(nèi)的尸體忽然破棺而出陪汽,到底是詐尸還是另有隱情,我是刑警寧澤褥蚯,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布挚冤,位于F島的核電站,受9級特大地震影響赞庶,放射性物質(zhì)發(fā)生泄漏训挡。R本人自食惡果不足惜澳骤,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澜薄。 院中可真熱鬧为肮,春花似錦、人聲如沸肤京。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蟆沫。三九已至籽暇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饭庞,已是汗流浹背戒悠。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舟山,地道東北人绸狐。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像累盗,于是被迫代替她去往敵國和親寒矿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理若债,服務(wù)發(fā)現(xiàn)符相,斷路器,智...
    卡卡羅2017閱讀 134,701評論 18 139
  • ROS采用rosrun命令可以啟動一個節(jié)點蠢琳,如果需要同時啟動節(jié)點管理器(master)和多個節(jié)點啊终,就需要采用lau...
    marine0131閱讀 12,138評論 0 0
  • 1. 概述[#1-%E6%A6%82%E8%BF%B0]1.1 PIBOT介紹[#11-pibot%E4%BB%8...
    PIBOT導(dǎo)航機器人閱讀 31,114評論 4 19
  • 創(chuàng)建一個ROS Package 這個教程包括使用roscreate-pkg或者catkin去創(chuàng)建一個新的packa...
    鐵熊玩創(chuàng)客閱讀 4,951評論 0 7
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,988評論 3 119