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

启动Gazebo,打开world模型以及向仿真环境中插入机器人模型的方法有很多.在这个教程中,我们将使用rosrun和roslaunch来实现.这里包括将URDF文件存储在ROS包中,并保留相对于ROS工作区的各种资源路径。(本文转载自https://www.jianshu.com/p/4d8b8327eb9b,转载目的便于自己学习)

一.使用roslaunch打开world模型

roslaunch是一个启动ROS节点并插入机器人模型的标准方法.要建立一个空的world模型,我们只需要运行

roslaunch gazebo_ros empty_world.launch

1.roslaunch参数

你可以更改launch文件中的参数来改变Gazebo的启动行为:

paused:在暂停状态下启动Gazebo(默认为false).

use_sim_time:告诉ROS节点要求获取ROS话题/clock发布的时间信息(默认为true).

gui:启动Gazebo中的用户界面窗口(默认为true).

headless recording:启动Gazebo状态日志记录(默认为false).

debug:使用gdb以调试模式启动gzserver(默认为false).

verbose:用–verbose运行gzserver和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已经包含在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文件中,我们继承了大多数empty_world.launch中的内容.只改变了world_name参数,用mud.world代替了empty.world.其他的参数使用默认的就好了.

4.world文件

继续查看mud_world.launch文件,我们现在看mud.world文件的内容.mud.world开头的一部分代码如下所示:

model://sun

model://ground_plane

model://double_pendulum_with_base

pendulum_thick_mud

-2.0 0 0 0 0 0

...

在这个world文件片段中我们可以看到三个模型.这三个模型都是从本地的Gazebo Model Database中搜寻的.如果没有找到,那么Gazebo会自动的从网上的数据库中搜索.

5.如何在你的计算机中找到world文件

world文件位于Gazebo资源路径的/worlds文件夹中.这个路径取决于你是如何安装Gazebo以及你的系统类型的.想要找到你的Gazebo资源路径,你可以运行如下命令:

env | grep GAZEBO_RESOURCE_PATH

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

二.创建你自己的Gazebo ROS包

在继续插入机器人之前,我们将首先讨论使在ROS下使用Gazebo的文件层次结构标准,以便我们可以做出以后的假设。

现在,我们假设你的工作空间为catkin_ws.它的路径可能是:

/home/user/catkin_ws/src

关于机器人模型和描述的一切都在/MYROBOT_description包中,Gazebo中用到的所有的world文件和launch文件都在/MYROBOT_gazebo中.实际情况下用你机器人的名字的小写字母来代替’MYROBOT’.你的文件夹目录应该如下所示:

…/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

·创建一个自定义的world文件

你可根据自己的机器人和功能包创建自己的.world文件.这里我们将创建一个拥有地面,太阳和加油站的世界.下面是我们推荐的步骤.记得用你自己的机器人的名字代替MYROBOT ,如果你没有机器人的话可以直接用'test'代替:

1.创建一个ROS功能包名为MYROBOT_gazebo

2.在个包中,创建一个launch文件夹.

3.在launch文件夹中创建一个YOUROBOT.launch文件,写入如下代码:

4.同样在这个功能包中,创建一个worlds文件夹,并创建一个MYROBOT.world 文件,写入如下代码:

model://ground_plane

model://sun

model://gas_station

gas_station

-2.0 7.0 0 0 0 0

5.通过如下命令你可以在Gazebo中启动你的自定义world文件

. ~/catkin_ws/devel/setup.bash

roslaunch MYROBOT_gazebo MYROBOT.launch

结果如下所示

·在Gazebo中编辑world文件

你可以插入额外的模型到你的世界中并通过File->Save保存.结果会返回到你的ROS功能包中.

三.使用roslaunch插入URDF机器人

有两种方法:

一个是:通过ROS服务

第一种方法可以让您的机器人的ROS包在计算机和存储库检查之间更加便携。它允许你保持机器人相对于ROS包路径的位置,但也要求你写一个ROS服务程序.

另一个是:通过模型库

这种方法允许你的.world文件中包含你的机器人,这样看起来更整洁方便但是需要设定环境变量来将你的机器人添加到Gazebo的模型库.

我们会使用两种方法.但总的来说我们更推荐第一种方法.

1."ROS服务"

这个方法使用了一个叫做spawn_model的python程序来要求gazebo_ros节点向Gazebo中添加URDF.spawn_model程序存储在gazebo_ros包中.你可以通过如下命令调用这个程序:

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

要看所有的spawn_model中的可变参数,运行: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

现在你应该有一个叫做baxter.urdf的URDF文件在路径baxter_description/urdf/下,运行

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

结果如下:

接下来将它继集成到ROS启动文件中,打开MYROBOT_gazebo/launch/YOUROBOT.launch并在前添加:

然后启动这个文件,你会得到一样的结果.

1.2使用PR2的XACRO示例

如果你的URDF不是XML形式而是XACRO形式.你可以对launch文件进行类似的修改.通过安装这个包你可以运行这个PR2示例.

对于ROS Jade版本:

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

然后添加如下内容到先前的launch文件中:

运行这个文件得到如下结果:

注意:由于Gazebo API的变化,这个方法仍会产生许多的错误和警告.

2."模型库"

这种方法允许你的.world文件中包含你的机器人,这样看起来更整洁方便但是需要设定环境变量来将你的机器人添加到Gazebo的模型库.因为ROS与Gazebo是相互分离的所以需要这个环境变量;URDF包不能直接在.world文件中使用,以为Gazebo不会搜索ROS包.

要想成功的使用这个方法,你必须要新建一个包含有你的机器人你的模型库.这不是将URDF加载到Gazebo中的最简洁方法,但是不必在计算机上保留两个机器人URDF副本.如果你对如下的说明感到困惑,那么你需要回头看看Gazebo Model Database.

我们假设你的ROS工作空间已经按照之前的说明建好了.那么唯一的区别就是在MYROBOT_description中添加了一个model.config文件,目录结构如下:

. …/catkin_ws/src

/MYROBOT_description

package.xml

CMakeLists.txt

model.config

/urdf

MYROBOT.urdf

/meshes

mesh1.dae

mesh2.dae

...

/materials

/plugins

/cad

这个目录结构很是个用来做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文件,它包含了这个模型的元信息.将如下代码复制到你的model.config文件中,用你自己的文件名代替MYROBOT.urdf

MYROBOT

1.0

urdf/MYROBOT.urdf

My name

name@email.address

A description of the model

不像SDF,当标签用于URDF时,标签不需要任何版本.

2.2环境变量

最后,你需要给你的 .bashrc 文件添加环境变量来告诉Gazebo上哪找模型库.使用你自己的编辑器编辑"/.bashrc".检查你是否已经定义了一个GAZEBO_MODEL_PATH.如果有,则用一个分号加上它,否则新添一个.假设你的工作空间在/catkin_ws/.那么你的路径应该是:

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

2.3在Gazebo中查看--手动

现在我们打开Gazebo查看是否已经成功配置.

gazebo

点击"Insert".你将会看到数个不同的模型库,包括线上数据库.找到你机器人相应的模型库,打开它的子菜单,选中你的机器人并放置.

2.4在Gazebo中查看--通过roslaunch

使用模型库的方法的优点是你能够在world中添加你的机器人,而不用使用ROS包的路径.我们将使用 "Creating a world file"中相同的设置,只修改其中的world文件:

·在MYROBOT_description/launch文件夹中,编辑MYROBOT.world,使用如下代码:

model://ground_plane

model://sun

model://gas_station

gas_station

-2.0 7.0 0 0 0 0

model://MYROBOT

·现在运行launch文件应该可以同时看到世界和机器人:

roslaunch MYROBOT_gazebo MYROBOT.launch

这个方法的缺点是MYROBOT_description和MYROBOT_gazebo之间并不能简单的交互.在任何新的系统上你都要先设置GAZEBO_MODEL_PATH.

四.通过package.xml输出模型的路径

gazebo_ros

gazebo设置_gazebo的学习与使用相关推荐

  1. 【QT 5 设置自定义标题栏+学习:《QT实现鼠标拖动调整窗口大小》+基础样例】

    [QT 5 设置自定义标题栏+学习:<QT实现鼠标拖动调整窗口大小>+基础样例] 1.说明 2.实验环境 3.实验目的 4.参考文章 5.实验步骤 (1)下载代码,运行没有错误. (2)加 ...

  2. bios设置练习器+CMOS设置模拟器+dos学习模拟器软件

    软件名称:bios设置练习器+CMOS设置模拟器+dos学习模拟器软件 软件大小:575 软件语言: 简体中文 软件类别: 模拟器 运行环境: WinXp, Win2003, Win2000, Win ...

  3. 设置 mock_【学习】接口测试-使用mock生产随机数据

    在做接口测试的时候,有的接口需要进行大量的数据进行测试,还不能是重复的数据,这个时候就需要随机生产数据进行测试了.这里教导大家使用mock.js生成各种随机数据. 一.什么是mock.js mock. ...

  4. 表格大小设置_系统地学习Excel第18课,设置单元格字体格式

    上一篇:系统地学习Excel第17课,设置单元格格式 本篇内容结构如下: 本篇在章节中的位置 单元格字体格式包括字体.字号.字形.颜色等.Excel中文版默认单元格: 字体为[宋体]或[等线]: 字号 ...

  5. linux7.2 静态IP设置,Centos 7 学习之静态IP设置

    本学习主要针对 Centos 7.0.1406 版本进行学习整理! 如果你使用 VirtualBox 配置 Centos 那么请参考我的这篇文章 Centos 7 学习之静态IP设置(续) 1.编辑 ...

  6. gazebo入门_Gazebo仿真控制中,有哪些你不知道的秘密?

    大家好,我是(月更侠)小明,很高兴我们又见面啦.相信大家从我之前的文章中能看出来,我所讲的内容基本都面向ROS新人,因为大家刚入门时,往往很难一窥程序的深层运行逻辑,使得许多问题迟迟无法解决,甚是耽误 ...

  7. jquery设置宽_JavaScript学习笔记(三十二) jQuery(中)

    jQuery 昨天讲了 jQuery 的基本选择器筛选器和属性操作 今天来说一些 jQuery 别的东西 元素操作 创建一个元素 var div = $(') 内部插入元素 // 向 div 元素中插 ...

  8. manjaro设置java_manjaro 深度学习编程环境搭建

    欢迎来到阿八个人博客网站.本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯. 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke ...

  9. mediarecorder路径设置为localsocket_PR学习之旅:pr怎么才能定位和修改视频保存路径,操作很简单...

    pr是常用的视频编辑处理软件,一定有不少的小伙伴都在用,但是很多初学者对怎样定位视频保存路径和如何修改视频保存路径都还不太清楚,本文介绍如何用pr这款软件进行定位保存路径和修改保存路径. 1.工具/原 ...

  10. anki怎么设置学习计划_anki如何设置选项(学习任务)?

    这个问题被浏览了那么多次,点赞就几个,难道大家都萌生发财? <<<>>> 问题可以定位为 anki如何设置选项(学习任务)? ankidroid的选项设置 打开一个 ...

最新文章

  1. 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码
  2. 1709: Fire or Retreat(zzuli)
  3. MAX9814高性能麦克风
  4. HTML头部元素标签
  5. 移动GPU三种主流架构优缺点浅析
  6. GitHub 10分钟教程
  7. AndroidStudio 集成海康威视 Android SDK,集成萤石Android SDK
  8. swf背景透明,并显示背景图片
  9. 实现用python刷王者荣耀金币
  10. 使用M25或M26进行FTP文件下载的程序设计与实现
  11. 第22章 声音与音乐
  12. zookeeper windows7下集群搭建
  13. android 音频播放时小喇叭动画
  14. 通信原理:信源编码(一)
  15. java 微秒 时间_Java中时间的计算 年月日小时分钟秒毫秒微秒
  16. 你的承诺我永远不懂?什么是js里的promise
  17. (五)arm裸机开发---主频和时钟配置
  18. 北大扫地僧冲上热搜!手提馒头矿泉水的他,竟是斩获2块IMO满分金牌的数学大神...
  19. 车载故障分析---DTC-PCBU
  20. 程序员硬核吸猫:自制猫抓板、猫脸识别、智能猫窝!

热门文章

  1. python 自动解4399数独游戏
  2. 技术美术知识学习_04:PBR的个人理解
  3. USYD悉尼大学DATA1002 详细作业解析Module7(全新讲解)
  4. Photoshop-为图像添加一个真实投影
  5. 一文详解空洞卷积(Atrous Convolution)
  6. 共享充电宝为啥能够盈利
  7. 碰撞触发器Trigger
  8. [Matlab] 删除三维/高维数组非零/零项
  9. 关于深度学习优化器 optimizer 的选择,你需要了解这些
  10. C++面向对象程序设计