ROS入门(七)——仿真机器人三(Gazebo+Xacro)

本文介绍了如何在ROS中编写xacro文件,为机器人模型添加惯性矩阵标签,调整gazebo与rviz的区别,包括设置碰撞检测、惯性数据、颜色和launch文件配置。详细步骤包括创建功能包、编写xacro文件(如底盘、摄像头、雷达组合)以及在gazebo中正确展示和启动模型。

所用的学习链接:

【奥特学园】ROS机器人入门课程《ROS理论与实践》零基础教程P271-277

【以上视频笔记见http://www.autolabor.com.cn/book/ROSTutorials/

前文参考

ROS入门(五)——仿真机器人一(URDF+Rviz)

ROS入门(六)——仿真机器人二(Xacro+Rviz+Arbotix小车运动)

一、介绍

1.目标

1.编写封装了惯性矩阵算法的 xacro 文件
2.为机器人模型中的每一个 link 添加 collision 和 inertial 标签,并且重置颜色属性
3.在 launch 文件中启动 gazebo 并添加机器人模型

2.Gazebo与rviz的配置区别

这些区别在后面的实操里会在代码中添加相应注释

(1)urdf 中必须使用 collision 标签

因为既然是仿真环境,那么必然涉及到碰撞检测,collision 提供碰撞检测的依据。如果机器人link是标准的几何体形状,和link原本的 visual 属性设置一致即可。

(2)urdf 中必须使用 inertial 标签

此标签标注了当前机器人某个刚体部分的惯性矩阵,用于一些力学相关的仿真计算。惯性矩阵的设置需要结合link的质量与外形参数动态生成,标准的球体、圆柱与立方体的惯性矩阵公式如下(已经封装为 xacro 实现)

  • 球体惯性矩阵
<!-- Macro for inertia matrix -->
<xacro:macro name="sphere_inertial_matrix" params="m r">
    <inertial>
        <mass value="${m}" />
        <inertia ixx="${2*m*r*r/5}" ixy="0" ixz="0" iyy="${2*m*r*r/5}" iyz="0" izz="${2*m*r*r/5}" />
    </inertial>
</xacro:macro>
  • 圆柱惯性矩阵
<xacro:macro name="cylinder_inertial_matrix" params="m r h">
    <inertial>
        <mass value="${m}" />
        <inertia ixx="${m*(3*r*r+h*h)/12}" ixy="0" ixz="0" iyy="${m*(3*r*r+h*h)/12}" iyz="0" izz="${m*r*r/2}" />
    </inertial>
</xacro:macro>
  • 立方体惯性矩阵
<xacro:macro name="Box_inertial_matrix" params="m l w h">
    <inertial>
        <mass value="${m}" />
        <inertia ixx="${m*(h*h + l*l)/12}" ixy="0" ixz="0" iyy="${m*(w*w + l*l)/12}" iyz="0" izz="${m*(w*w + h*h)/12}" />
    </inertial>
</xacro:macro>

原则上,除了 base_footprint 外,机器人的每个刚体部分都需要设置惯性矩阵,且惯性矩阵必须经计算得出,如果随意定义刚体部分的惯性矩阵,那么可能会导致机器人在 Gazebo 中出现抖动,移动等现象。 

(3)urdf 中的颜色设置

颜色也需要重新使用 gazebo 标签标注,因为之前的颜色设置为了方便调试包含透明度,仿真环境下没有此选项。在 gazebo 中显示 link 的颜色,必须要使用指定的标签

<gazebo reference="link节点名称">
    <material>Gazebo/Blue</material>
</gazebo>

material 标签中,设置的值区分大小写,颜色可以设置为 Red Blue Green Black ... 

(4)launch文件区别

原本的 pkg = " rviz " ,现在的 pkg = " gazebo_ros " ,并调整一些相关参数

二、实操流程

1.创建功能包,导入依赖和配置

(1)创建功能包

在原本 工作空间(7.19_demo01) / src 目录 → 右键src → 新建一个 catkin package→ 自定义命名【urdf_gazebo】,导入dependences  :

urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins

(2)创建文件夹

在urdf_gazebo目录下创建三个文件夹: urdf (存放urdf或xacro文件)、worlds(存放gazebo仿真环境)、launch

2.xacro文件编写

xacro文件包含五个:

  • 封装惯性矩阵算法的 t1_head.xacro
  • 底盘+轮子 t2_car.xacro
  • 摄像头 t3_camera.xacro
  • 雷达 t4_laser.xacro
  • 组合t123和head的 t5_1234combine.xacro

(1)封装惯性矩阵算法的 t1_head.xacro 文件

在urdf 目录下新建一个xacro文件用于封装惯性矩阵算法,分别包含了球体、圆柱、立方体三种形状的惯性矩阵公式

<robot name="base" xmlns:xacro="http://wiki.ros.org/xacro">
    <!-- Macro for inertia matrix -->
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值