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",应当为continuousjoint的某些参数值错误,导致车加载差速模型后,运动错误
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}
