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,注意:
joint
的type="fixed"
,应当为continuous
joint
的某些参数值错误,导致车加载差速模型后,运动错误
xacro
xacro里面的模型仍然是urdf模型,有如下变化:
- 创建宏定义
- 文件包含
- 提供可编程接口:常量, 变量, 数学计算, 条件语句
启动Gazebo时,机器人模型的tf关系不完整,即使xacro
文件正确。还需要添加joint_state_publisher
和robot_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}