urdf文件的编写

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

编写urdf的工作空间需要导入urdf xacro这两个依赖
如果使用gazebo还需要导入gazebo_ros gazebo_ros_control gazebo_plugins

一、一个简单的urdf展示

下面展示一个盒子的模型,直接运行可在rviz
新建文件 1.urdf

<robot name="box">
	<!--建立基础杆件-->
    <link name="base_link">
    <!--子级编寫-->
        <visual>
			<!--盒子的基础属性-->
            <geometry>
            	<!--盒子的大小-->
                <box size="0.5 0.2 0.1" />
             </geometry>
             <!--盒子的颜色-->
             <material name="white">
                	<!--前三个是 red green blue 最后后一个是透明度-->
                 <color rgba="1 1 1 1" />
             </material>
             <!--盒子的位置和偏转-->
             <origin xyz="0 0 0" rpy="0 0 0" />
        </visual>
    </link>
</robot>

新建文件 1.launch

<launch>
  <!--載入urdf文件-->
  <param name="robot_description" textfile="$(find urdf01)/urdf/urdf/w_1.urdf" />
  <!--起動rviz-->
  <node pkg="rviz" type="rviz" name="rviz"/>
</launch>

二、urdf文件基本结构的分析

robot

最大的父级标签

<robot name="box">
	~
</robot>

link

杆件
杆件的大部分属性都在这里编辑

<robot name="box">
	 <link name="base_link">
	 	~
	 </link>
</robot>
visual

杆件的大部分属性都在这里编辑

<robot name="box">
	 <link name="base_link">
	 	<visual>
	 		~
	 	</visual>
	 </link>
</robot>
geometry
<geometry>
	<!--盒子-->
	<!--box size="0.1 0.1 0.1"-->
	<!--球体-->
	<sphere radius="0.1">
	<!--圆柱-->
	<cylinder redius="0.1" length="0.1">
</geometry>
material
<material name="white">
	<color rgba="1 1 1 1">
</material >
origin
<origin xyz="0 0 0" rpy="0 0 0">

joint

这是例子中没有给出来的部分,意思是关节,需要有两个及以上的link才能添加

  <joint name="joint2" type="fixed">
        <parent link="base_site" />
        <child link="site"/>
        <origin xyz="0 0 0" rpy="0 0 0" />
        <axis xyz="0 1 0/>
    </joint>
joint–type
continuous 单轴无限旋转
revolute 有限制的旋转
prismatic 有限制的平移
planer 在正交面上旋转平移
floating 可以平移和旋转
fixed 固定关节
joint–parent
父关节
joint–child
子关节
joint–axis
旋转轴

三.编写进阶-gazebo

新建一个urdf文件2.urdf
还是刚才的盒子

<robot name="box">
	<!--建立基础杆件-->
    <link name="base_link">
    <!--子级编寫-->
        <visual>
			<!--盒子的基础属性-->
            <geometry>
            	<!--盒子的大小-->
                <box size="0.5 0.2 0.1" />
             </geometry>
             <!--盒子的颜色-->
             <material name="white">
                	<!--前三个是 red green blue 最后后一个是透明度-->
                 <color rgba="1 1 1 1" />
             </material>
             <!--盒子的位置和偏转-->
             <origin xyz="0 0 0" rpy="0 0 0" />
        </visual>
        <!--碰撞属性-->
      	<collision>
      		<geometry>
      			<box size="0.1 0.1 0.1">
      		</geometry>
       	</conision>
       	<inertial>
       		<origin rpy="0 0 0" xyz="0 0 0"/>
       		<!--质量-->
            <mass value="1"/>
            <inertia ixx=" " ixy=" " ixz=" " iyy=" " iyz=" " izz=" "/>
       	</intertial>
    </link>
</robot>

现在我们给这个盒子添加了新的属性

        <!--碰撞属性-->
      	<collision>
      		<geometry>
      			<box size="0.1 0.1 0.1">
      		</geometry>
       	</conision>
       	<inertial>
       		<origin rpy="0 0 0" xyz="0 0 0"/>
       		<!--质量-->
            <mass value="1"/>
            <inertia ixx=" " ixy=" " ixz=" " iyy=" " iyz=" " izz=" "/>
       	</intertial>

这里我们重点关注inertial>inertia中的6个参数
这是这个盒子的惯性矩阵,需要我们进行计算
假定质量为m
为写出的即为0

圆柱
ixx: 1 / 12 m ( 3 r 2 + h 2 ) 1/12m(3r^2+h^2) 1/12m(3r2+h2)
iyy: 1 / 12 m ( 3 r 2 + h 2 ) 1/12m(3r^2+h^2) 1/12m(3r2+h2)
izz: 1 / 2 m 3 1/2m^3 1/2m3
r为半径
h为高
长方体
ixx: 1 / 12 m ( d 2 + h 2 ) 1/12m(d^2+h^2) 1/12m(d2+h2)
iyy: 1 / 12 m ( w 2 + d 2 ) 1/12m(w^2+d^2) 1/12m(w2+d2)
izz: 1 / 12 m ( w 2 + h 2 ) 1/12m(w^2+h^2) 1/12m(w2+h2)
w 宽度
h 高度
d 深度
球体
ixx: 2 / 5 m r 2 2/5mr^2 2/5mr2
iyy: 2 / 5 m r 2 2/5mr^2 2/5mr2
izz: 2 / 5 m r 2 2/5mr^2 2/5mr2
r 半径

完结撒花!

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值