Gazebo使用心得

Gazebo不好上手,费了一番功夫终于熟悉了,内容太多,只记录注意事项。

Gazebo里用的是 前x 左y 上z的右手坐标系 ,gazebo的栅格范围是20mX20m

启动simple_world.launch,然后在Gazebo里添加一个圆柱体,保存覆盖simple.world文件。再次启动时,报错 SpawnModel: Failure - model name sunny already exist. [Spawn service failed. Exiting. [spawn_urdf-6] process has died

网上说的方法没能解决,也不能重命名model,修改simple.world无效。 最后删除了<node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model sunny -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" /> 解决问题。

urdf 和 xacro

urdf.xacro文件里,<link name="base_link">代表机器人的主体。<geometry> <box size="0.4 0.39 0.5" />是尺寸。

gazebo插件,可以简单理解为就是连接gazebo和ros的一个桥梁,一边插件通过gazebo的api来控制仿真环境的机器人关节等数据,一边通过关节数据通过运动学模型生成里程计、雷达的scan、image等类似的信息

solidworks生成urdf

solidworks to urdf安装后,如果在solidworks里找不到,就安装最新版的,不用管版本是否对应。

solidworks只生成的URDF文件,没有xacro文件. URDF文件做一些简单修改可保存为xacro,注意:

  1. jointtype="fixed",应当为continuous
  2. joint的某些参数值错误,导致车加载差速模型后,运动错误

xacro

xacro里面的模型仍然是urdf模型,有如下变化:

  1. 创建宏定义
  2. 文件包含
  3. 提供可编程接口:常量, 变量, 数学计算, 条件语句

启动Gazebo时,机器人模型的tf关系不完整,即使xacro文件正确。还需要添加joint_state_publisherrobot_state_publisher

设置雷达时,看情况决定是否需要可视化

1
2
3
<sensor type="ray" name="lds_lfcd_sensor">
<pose>0 0 0 0 0 0</pose>
<visualize>false</visualize>

Gazebo默认的障碍物质量轻,车撞上之后会把障碍物推开。改变density选项为铁,则不会推动障碍物。


在Gazebo world中用以下方式加载模型时:

1
2
3
<include>
<uri>model://one_building</uri>
</include>

要让Gazebo能够找到uri中的自建model,需要将自己的model路径加入环境变量, export GAZEBO_MODEL_PATH=~/<path>/my_package/models:${GAZEBO_MODEL_PATH}