gazebo创建机器人模型01
基本集成流程
跟着赵老师学习了一下gazebo中机器人仿真,在此做个记录。
1.创建功能包
创建新功能包,导入依赖包:urdf、xacro、gazebo_ros、gazebo_ros_control、gazebo_plugins
2.urdf文件编写
其层级关系为:
robot
link
visual -->可视化部分
geometry
origin
material
collision -->连杆的碰撞属性
geometry
origin
inertial -->连杆的惯性矩阵
origin
mass
inertia
gazebo
material
如果是标准几何体,直接复制 visual 的 geometry 和 origin 标签到 collision 下即可。
惯性矩阵 inertial 中的 origin为设置重心的偏移,如果连杆质量均匀,xyz=0 0 0 即可。其他参数有 质量 mass 和惯性不同维度惯性值 inertia 。
inertia为不同维度上的惯性值,此处随便给了几个值,实际机器人需要合理设置。
visual 中的颜色设置在gazebo中不能继续使用了,需要在 gazebo 自身的颜色设置标签中进行设置。
<!--
创建一个机器人模型(盒状即可),显示在 Gazebo 中
-->
<robot name="mycar">
<link name="base_link">
<visual>
<geometry>
<box size="0.5 0.2 0.1" />
</geometry>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<material name="yellow">
<color rgba="0.5 0.3 0.0 1" />
</material>
</visual>
<!--1.设置碰撞参数 -->
<collision>
<geometry>
<box size="0.5 0.2 0.1" />
</geometry>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
</collision>
<inertial>
<origin xyz="0 0 0" />
<mass value="6" />
<inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1" />
</inertial>
</link>
<gazebo reference="base_link">
<material>Gazebo/Black</material>
</gazebo>
</robot>
3.集成到gazebo
创建一个launch文件,填写如下内容
1.在参数服务器中载入 urdf ,这一步与 rviz 中是一致的
2.启动 gazebo 仿真环境,直接包含gazebo 中 empty world 环境
3.在 gazebo 中添加机器人模型
手动添加模型的方法如下:
rosrun gazebo_ros spawn_model -urdf -model car(加载模型的名字) -param robot_description(加载的机器人模型是从参数服务器中robot_description中获取的)
将上述手动添加的方法集成到launch文件中
<launch>
<!-- 1. 需要在参数服务器中载入 urdf -->
<param name="robot_description" textfile="$(find urdf02_gazebo)/urdf/demo01_helloworld.urdf" />
<!-- 2. 需要启动 gazebo 仿真环境 -->
<include file="$(find gazebo_ros)/launch/empty_world.launch" />
<!-- 3. 在gazebo 中添加机器人模型 -->
<node pkg="gazebo_ros" type="spawn_model" name="spawn_model" args="-urdf -model car -param robot_description" />
</launch>
总结:
1.必须使用 collision 标签,仿真环境必然涉及碰撞检测,collision提供碰撞检测的依据。
2.必须使用 inertial 标签,此标签标准了当前机器人某个刚体部分的惯性矩镇,用于一些力学仿真相关的计算。
3.颜色设置,也需要重新使用 gazebo 标签标注,因为之前的颜色设置为了方便调试包含透明度,仿真环境下没有此选项,在 visual 中可以不进行颜色设置。
4. inertial 惯性矩阵的计算后期对其进行封装,可输入参数调用。