stage_ros的world文件配置方法
官方文档参阅:http://rtv.github.io/Stage/modules.html
stage_ros是一个基于stage的2D模拟器,用于ROS的仿真测试。虽然现在越来越多的人在使用gazebo,但是在很多轻量测试领域,stage_ros仍然有一席之地。
最常用的基于stage_ros的package是navigation_stage。它集成了对stage_ros的一些调用。但它只使用了dwa和trajactory planner,并且只有有限的几张地图,对我们的测试并不是很方便。所以我们需要制定自己的“my navigation_stage”。
这里简单介绍一下stage_ros需要使用的world文件的配置方法。
define block model
(
size [0.500 0.500 0.750]
gui_nose 0
) define topurg ranger
(
sensor(
range_max 30.0
fov 270.25
samples 1081
)
# generic model properties
color "black"
size [ 0.050 0.050 0.100 ]
) define pr2 position
(
size [0.650 0.650 0.250]
origin [-0.050 0 0 0]
gui_nose 1
drive "omni"
topurg(pose [ 0.275 0 0 0 ])
) define floorplan model
(
# sombre, sensible, artistic
color "gray30" # most maps will need a bounding box
boundary 1 gui_nose 0
gui_grid 0 gui_outline 0
gripper_return 0
fiducial_return 0
ranger_return 1
) # set the resolution of the underlying raytrace model in meters
resolution 0.01 interval_sim 100 # simulation timestep in milliseconds window
(
size [ 745.000 448.000 ] rotate [ 0 -1.560 ]
scale 30.287
) # load an environment bitmap
floorplan
(
name "willow"
bitmap "../maps/willow-full-0.025.pgm"
size [58.300 45.625 1.000]
pose [ -22.812 29.150 0 90.000 ]
) # throw in a robot
pr2( pose [ -26.068 12.140 0 87.363 ] name "pr2" color "blue")
block( pose [ -25.251 10.586 0 180.000 ] color "red")
上面是navigation_stage里的一个示例。具体每个元素的语法请之后参阅官方文档。这里只针对文件的结构和自定义元素关系简单说明下:
1)define block model:
define block model
(
size [0.500 0.500 0.750]
gui_nose 0
)
这是在定义一个块的模型,具体是做什么用的呢?现在还不知道,要读到下面才知道。这就像是定义了一个类,设置了成员变量的默认值,但还没有生成实例。
2)define topurg ranger:
define topurg ranger
(
sensor(
range_max 30.0
fov 270.25
samples 1081
)
# generic model properties
color "black"
size [ 0.050 0.050 0.100 ]
)
这是在定义一个模拟的声纳或雷达的模型,指定了雷达的最大范围等一些参数。同样,这只是“类”的定义,还没有实例。
3) define pr2 position:
define pr2 position
(
size [0.650 0.650 0.250]
origin [-0.050 0 0 0]
gui_nose 1
drive "omni"
topurg(pose [ 0.275 0 0 0 ])
)
这是在定义机器人底盘,也可以说算是在定义一个机器人。我们可以在里面看到,它把2)中的topurg当作一个属性包含在了里面。就类似一个类中包含了类另一个类作为成员变量。从结构上我们能看出来,它是想定义一个带ranger的机器人抽象模型。
4)define floorplan model:
define floorplan model
(
# sombre, sensible, artistic
color "gray30" # most maps will need a bounding box
boundary 1 gui_nose 0
gui_grid 0 gui_outline 0
gripper_return 0
fiducial_return 0
ranger_return 1
)
这是在为地图环境定义一个容器模型。map的地图数据是抽象的,stage_ros是不能直接使用的。所以要有一个容器把这些数据装起来,构造和模拟成一个“真实世界”,变成具体数据,然后才方便去和stage中定义的如前面的block,pr2去计算是否碰撞等。
。如果你启动了move_base_amcl_2.5cm.launch文件的话,可以在stage的窗口中看到它,是一个红色的块
5)world:
# set the resolution of the underlying raytrace model in meters
resolution 0.01 interval_sim 100 # simulation timestep in milliseconds
这是world本身属性的定义控制分辨率,模拟频率等。这里要注意一点,这个分辨率是stage本身使用的,不是map的分辨率。这个尤其重要,它主要是影响一些类似碰撞检测等stage本身的机制的。这是个坑,至于为什么,下面说到具体的模拟实例时会解释。
6)window:
window
(
size [ 745.000 448.000 ] rotate [ 0 -1.560 ]
scale 30.287
)
这是对显示出来的stage_ros的窗口的定义。属性基本都是在调大小,角度之类的,问题不大。唯一需要注意的是,这个size是包含了窗口状态栏的总大小,不只是地图有效区域,这个特别逗。
7)floorplan:
floorplan
(
name "willow"
bitmap "../maps/willow-full-0.025.pgm"
size [58.300 45.625 1.000]
pose [ -22.812 29.150 0 90.000 ]
)
从这里开始往下就是开始生成我们自己定义的模型的实例的部分了。从这个生成定义我们可以看到,它加载了"../maps/willow-full-0.025.pgm"作为地图数据,也就是静态地图。size是怎么算的呢?用你的图片分辨率乘resolution即可。但要注意,这个resolution可不是5)中定义的那个,而是map server里定义的!这就是前面说到的坑了。整个配置文件里所有的size,pose等实际用的resolution,都是map server里的,不是这个文件本身定义的这个。包含下面的8)中也是这样。
8)pr2 and block:
pr2( pose [ -26.068 12.140 0 87.363 ] name "pr2" color "blue")
block( pose [ -25.251 10.586 0 180.000 ] color "red")
这两个就是定义我们的机器人和无用的块实例的地方了。机器人的名字被赋成了“pr2”,所以如果你在stage的窗口中用鼠标去选中它,就会显示出来这个名字了。颜色数据也在这里被赋值了,用于区分哪个是机器人,哪个是无用的块。
PS:特别需要注意一点,地图的格式最好用jpeg。似乎是stage的代码有bug,用gif可能会完全无法正常显示,用png和pgm可能会出现地图缺失导致剩余部分被拉伸。目前测试只有jpeg是正常的。
以上就是一个world文件的基本结构了。想要更多的配置和定义信息,可以参阅官方文件的解释。
stage_ros的world文件配置方法的更多相关文章
- NHibernate各种数据库连接参数文件配置方法说明
//NHibernate各种数据库连接参数文件配置方法说明 //配置文件Config/Hibernate.cfg.xml内容如下所示: <?xml version="1.0" ...
- iis中限制访问某个文件或某个类型的文件配置方法
Note:此处不是权限设置问题,此处不是权限设置问题,此处不是权限设置问题!只是出于数据或者网络安全,禁止扫描工具直接扫描到某些包含敏感信息的文件,尤其比如日志.配置等 默认ASP.NET已经考虑到了 ...
- Spring property文件配置方法以及如何与工程分离
1,Spring使用property文件作为配置源 工程中难免出现一些需要每次部署都需要配置的参数,如数据源连接参数等,测试环境跟实际运行环境是不一样的. 使用spring框架的话,这些参 ...
- Linux操作系统下/etc/hosts文件配置方法
1.关于/etc/host,主机名和IP配置文件 Hosts - The static table lookup for host name(主机名查询静态表) hosts文件是Linux系统中一个负 ...
- Spring中注入List,Set,Map,Properties的xml文件配置方法
下面的例子展示了如何注入 List – <list/> Set – <set/> Map – <map/> Properties – <props/> ...
- Apache日志不记录图片文件设置方法和来源日志的配置
Apache日志不记录图片文件设置方法 <FilesMatch "\.(ico|gif|jpg|swf)">SetEnv IMAG 1</FilesMatch&g ...
- robots.txt文件配置和使用方法详解
robots.txt文件,提起这个概念,可能不少站长还很陌生:什么是robots.txt文件?robots.txt文件有什么作用?如何配置robots.txt文件?如何正确使用robots.txt文件 ...
- 使用外部属性文件配置Bean以及Bean的生命周期方法
1.使用外部属性文件配置Bean 在配置文件里配置 Bean 时, 有时需要在 Bean 的配置里混入系统部署的细节信息(例如: 文件路径, 数据源配置信息等). 而这些部署细节实际上需要和 Bean ...
- [转]IIS6 伪静态 IIS文件类型映射配置方法 【图解】
1.右键点击 要设置网站的网站 2.属性 -->主目录 -->配置--> 3.如右侧窗口,找到 .aspx 扩展名-->编辑-->复制 可执行文件的路径-->关闭 ...
随机推荐
- 详解iframe与frame的区别
iframe与frame的区别 一.使用iframe的优缺点 优点: 1.程序调入静态页面比较方便; 2.页面和程序分离; 缺点: 1.iframe有不好之处:样式/脚本需要额外链入,会增加请求.另外 ...
- Android Studio 制作简单的App欢迎页面——基于Android 6.0
在许多的Android App中,我们点击进入时,都可以看到一个欢迎页面,大概持续了几秒,然后跳转至主页面.以下是我开发过程中总结出的一些方法和例子. 一.创建一个新的Activity 首先,新建了一 ...
- MOCTF-MISC-writeup
小菜鸡终于想要开通博客,要开始写东西了.第一次,献给了MOCTF MISC writeup,各种借鉴大哥们的writeup,写的不好的话,算了,后果自负(嘤嘤嘤). MOCTF平台地址:www.moc ...
- 2019上半年总结——Github上那些Java面试、学习相关仓库
分享一下最近逛Github看到了一些对于Java面试以及学习有帮助的仓库,这些仓库涉及Java核心知识点整理.Java常见面试题.算法.基础知识点比如网络和操作系统等等. 知识点相关 1.JavaGu ...
- HackBar收费版绕过
一段时间没用HackBar,近期做渗透,打开火狐浏览器,按F12键调出HackBar,发现居然需要收费买license才能使用. 经过研究,整理了以下两个绕过HackBar收费版的方法. 第一种:用其 ...
- kylin Retrieving hive dependency...
由于公司环境配置hive默认连接hiveserver2 ,不管hive cli 还是beeline cli都默认使用beeline cli,连接hive需要输入账号密码; 启动kylin 时会Retr ...
- 把Jar包加入windows系统服务
之前在服务器上不一个Java服务时候,总是开着一堆黑框框,非常不雅,重点是极其容易误关,所以把可执行Jar文件加入Windows系统服务,看起来是个非常不错的选择!(实际上也确实是非常不错的选择) ! ...
- 使用ADO.NET操作SqlServer,开启一个事务
1.创建SqlConnection对象(connStr是链接字符串) SqlConnection conn = new SqlConnection(connStr); 2.创建SqlTransacti ...
- 一文读懂JS中的原型和原型链(图解)
讲原型的时候,我们应该先要记住以下几个要点,这几个要点是理解原型的关键: 1.所有的引用类型(数组.函数.对象)可以自由扩展属性(除null以外). 2.所有的引用类型都有一个’_ _ proto_ ...
- java面向对象中的集合
1.学习集合的原因? A.数组是面向过程的,集合是面向对象的. B.集合是类,具备类的封装,继承,多态...超强功能. C.数组是固定长度,集合是可变长度 D.数组没办法获得真实的元素个数:集合可以. ...