ROS URDF、rviz、gazebo(1)

文章目录

1.URDF优化_xacro:

1.1.xacro语法:

1.解析声明: xmlns

robot标签后添加一个属性xmlns:xacro=http://www.ros.rog/wiki/xacro
2.属性定义: <xacro:property name="xxx" value="yyy" />
3.属性调用: ${属性名称}
4.属性运算: ${数学表达式}
5.宏定义: xacro:macro name="宏名称" params="参数列表(多参数之间使用空格分隔)"

xml 复制代码
<xacro:macro name ="宏名称" params="参数列表(多参数之间使用空格分隔)">

	...调用参数格式:${参数名}
</xacro:macro >

6.宏调用: <xacro:宏名称 参数1=xxx 参数2=xxx/>
7.文件包含: <xacro:include filename="文件名.xacro"/>

1.2.xacro之launch集成:

在launch文件中添加:

xml 复制代码
<param name="robot_description" command="$(find xacro)/xacro $(find 功能包名)/urdf/xacro/文件名加后缀"/>

2.arbotix控制机器人运动:

2.1.编写arbotix配置文件:

yaml 复制代码
# 该文件是控制器配置,一个机器人模型可能有多个控制器,比如: 底盘、机械臂、夹持器(机械手)....
# 因此,根 name 是 controller
controllers: {
   # 单控制器设置
   base_controller: {
          #类型: 差速控制器
       type: diff_controller,
       #参考坐标
       base_frame_id: base_footprint, 
       #两个轮子之间的间距
       base_width: 0.2,
       #控制频率
       ticks_meter: 2000, 
       #PID控制参数,使机器人车轮快速达到预期速度
       Kp: 12, 
       Kd: 12, 
       Ki: 0, 
       Ko: 50, 
       #加速限制
       accel_limit: 1.0 
    }
}

文件配置错误可能会导致节点发布话题异常(无odom话题)的问题。

2.2.配置launch文件:

添加:

yaml 复制代码
<node pkg="arbotix_python" type="arbotix_driver" name="driver" output="screen">
        <rosparam file="$(find prac_urdf)/config/control.yaml" command="load"/>
        <param name="sim" value="true"/>
    </node>

2.3.向话题发布信息:

使用命令rostopic pub -r 10 /cmd_vel geometry_msgs/Twist ...(Tab)

3.URDF集成gazebo:

3.1.创建功能包并导入相关依赖:

urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins五个依赖。

3.2.编写URDF文件:

xml 复制代码
<robot name="mycar">
    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.5 0.3 0.1"/>
            </geometry>
            <material name="yellow">
                <color rgba="0.5 0.3 0.0 0.5"/>
            </material>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
        </visual>
        <collision>
            <geometry>
                <box size="0.5 0.3 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.0 0.0" rpy="0.0 0.0 0.0"/>
            <mass value="2"/>
            <inertia ixx="1" ixy="0" ixz="0" iyy="0" iyz="1" izz="1"/>
        </inertial>
        
    </link>
    <gazebo reference="base_link">
        <material>Gazebo/Red</material>
    </gazebo>
    
</robot>

这里要注意gazebo中颜色的设置需要使用gazebo标签,reference属性,前面的颜色设置在gazebo中不会生效。碰撞参数和惯性矩阵后续需要加深学习。

3.2.1.collision:

如果机器人link是标准的几何体形状,和link的 visual 属性设置一致即可。

3.2.2.inertial:

惯性矩阵的设置需要结合link的质量与外形参数动态生成,标准的球体、圆柱与立方体的惯性矩阵公式如下(已经封装为 xacro 实现):
球体惯性矩阵:

xml 复制代码
<!-- 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>

圆柱惯性矩阵:

xml 复制代码
<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>

立方体惯性矩阵:

xml 复制代码
 <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.2.3.颜色设置:

在 gazebo 中显示 link 的颜色,必须要使用指定的标签(在link外设置):

xml 复制代码
<gazebo reference="link节点名称">
     <material>Gazebo/Blue</material>
</gazebo>

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

3.3.集成到launch文件并打开gazebo:

需要在launch文件中添加:

xml 复制代码
<launch>
    <param name="robot_description" textfile="$(find urdf02_gazebo)/urdf/demo01_helloworld.urdf"/>
    <include file="$(find gazebo_ros)/launch/empty_world.launch"/>
    <node pkg="gazebo_ros" type="spawn_model" name="sp" args="-urdf -model car -param robot_description"/><!--显示机器人模型 -->
</launch>

分别在参数服务器中加载机器人模型、打开gazebo、将参数服务器中的模型载入gazebo。

未完待续...

相关推荐
资源开发与学习1 天前
机器人运动规划源码解析
机器人
hi0_63 天前
机器学习实战(一): 什么是机器学习
人工智能·机器学习·机器人·机器学习实战
大视码垛机3 天前
速度与安全双突破:大视码垛机重构工业自动化新范式
大数据·数据库·人工智能·机器人·自动化·制造
WWZZ20253 天前
视觉SLAM第10讲:后端2(滑动窗口与位子图优化)
c++·人工智能·后端·算法·ubuntu·机器人·自动驾驶
deephub3 天前
机器人逆运动学进阶:李代数、矩阵指数与旋转流形计算
人工智能·机器学习·矩阵·机器人·李群李代数
武子康3 天前
AI-调查研究-76-具身智能 当机器人走进生活:具身智能对就业与社会结构的深远影响
人工智能·程序人生·ai·职场和发展·机器人·生活·具身智能
小鹿清扫日记3 天前
从蛮力清扫到 “会看路”:室外清洁机器人的文明进阶
人工智能·ai·机器人·扫地机器人·具身智能·连合直租·有鹿巡扫机器人
shuidaoyuxing3 天前
机器人防爆的详细讲解
机器人
物联网软硬件开发-轨物科技3 天前
【轨物方案】赋能绿色能源新纪元:轨物科技发布光伏清洁机器人智能控制与运维解决方案
科技·机器人·能源
尤齐4 天前
《机器人抓取:从经典到现代的综述》内容的提取和凝练:
机器人