urdf_Notes
<!---balabala-->是xml中的注释
<?xml version="1.0"?>
<robot name="origins">
<material name="white"> <!--事先定义好颜色,定义名字,后面直接写一句直接引用-->
<color rgba="1 1 1 1"/>
</material>
<link name="base_link">
<visual>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry> <!--此标签下同级别可以添加属性,比如物体的旋转,平移,颜色-->
</visual>
</link>
<link name="right_leg">
<visual>
<geometry>
<box size="0.6 0.1 0.2"/> <!-- 在三轴上居中延展 -->
</geometry>
<origin rpy="0 1.57075 0" xyz="0 0 -0.3"/> <!-- rpy表示顺时针绕3轴的角度, pi/2 = 1.57075 xyz表示物体沿着坐标轴的特定方向移动多少-->
</visual>
</link>
<joint name="base_to_right_leg" type="fixed">
<parent link="base_link"/> <!--依附于base_link?-->
<child link="right_leg"/> <!--被right_leg依附?-->
<origin xyz="0 -0.22 0.25"/>
</joint>
<link name="head">
<visual>
<geometry>
<sphere radius="0.2"/> <!--添加球体-->
</geometry>
<material name="white"/> <!--由于上文定义好了颜色参数,所以这里直接调用,注意后面的/不要丢-->
</visual>
</link>
<link name="left_gripper">
<visual>
<origin rpy="0.0 0 0" xyz="0 0 0"/>
<geometry> <!--引入网格,要写好文件位置-->
<mesh filename="package://urdf_tutorial/meshes/l_finger.dae"/>
</geometry>
</visual>
</link>
</robot>
joints: continuous, revolute and prismatic.
关节类型:连续关节,转动关节,移动关节
<joint name="head_swivel" type="continuous">
<parent link="base_link"/>
<child link="head"/>
<axis xyz="0 0 1"/>
<origin xyz="0 0 0.3"/>
</joint>
连续关节continuous,可以一直转,就像轮子一样。与固定关节不同的是,要添加旋转轴axis,例如001表示绕z轴旋转
<joint name="left_gripper_joint" type="revolute">
<axis xyz="0 0 1"/>
<limit effort="1000.0" lower="0.0" upper="0.548" velocity="0.5"/>
<origin rpy="0 0 0" xyz="0.2 0.01 0"/>
<parent link="gripper_pole"/>
<child link="left_gripper"/>
</joint>
转动关节revolute,类似连续关节,但是有限制,不能无限转。比如角度限制,lower->upper,也要指定力effort和速度velocity
<joint name="gripper_extension" type="prismatic">
<parent link="base_link"/>
<child link="gripper_pole"/>
<limit effort="1000.0" lower="-0.38" upper="0" velocity="0.5"/>
<origin rpy="0 0 0" xyz="0.19 0 0.2"/>
</joint>
移动关节prismatic,在父子link上伸缩,要制定力和速度,也有限制,与转动关节的角度限制不同,移动关节的限制体现在伸缩的距离上,单位是米
此外本教程还用了两个关节,平面关节planar joints,浮动关节floating joint
Notes: GUI与rviz的信息交互
当您在GUI中移动滑块时,模型在Rviz中也会移动。这是怎么做到的?首先,GUI解析URDF并找到所有的非固定连接及其限制。然后,它使用滑块的值发布sensor_msgs/JointState消息。然后,robot_state_publisher使用它们来计算不同部分之间的所有转换。然后使用生成的转换树来显示Rviz中的所有形状。
【应该是launch文件中生成的GUI界面吧】
<link name="base_link">
<visual>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
<material name="blue"/>
</visual>
<collision> <!--碰撞属性-->
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
</collision>
<inertial> <!--惯性-->
<mass value="10"/>
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial> <!--单位是kg-->
</link>
碰撞属性和惯性都与visual平级
关节如何运动是由关节的动力学标签定义的。这里有两个属性:
摩擦力friction-物理静摩擦。对于移动关节,单位是牛顿。对于旋转关节,单位是牛顿·米。
-物理阻尼值damping。对于移动关节,单位是牛顿秒每米。对于旋转关节,牛顿米秒每弧度。
如果没有指定,这些系数默认为零。
Xacro
使用xacro开头一定要引入第二行中的xmlns:xacro="xacro - ROS Wiki"
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="firefighter">
<xacro:property name="width" value="0.2" /><xacro:property name="bodylen" value="0.6" /><link name="base_link"> <visual> <geometry> <cylinder radius="${width}" length="${bodylen}"/> </geometry> <material name="blue"/> </visual> <collision> <geometry> <cylinder radius="${width}" length="${bodylen}"/> </geometry> </collision></link>
上面两行类似于变量定义,后面使用的时候类似shell的变量用法,用${变量名}的形式来表示变量
<xacro:property name=”robotname” value=”marvin” />
<link name=”${robotname}s_leg” />
<link name=”marvins_leg” />
也可以在${变量名}前后加字符串进行组合,上两行与下面一行作用一致
当然,${}内也可以放表达式,四则运算以及sin, cos都可以使用
<xacro:macro name="default_origin">
<origin xyz="0 0 0" rpy="0 0 0"/>
</xacro:macro>
<xacro:default_origin />
<origin rpy="0 0 0" xyz="0 0 0"/>
类似颜色的定义,第四行的使用,会被xacro标签中夹的内容替换,作用与最后一行一致
<xacro:macro name="default_inertial" params="mass">
<inertial>
<mass value="${mass}" />
<inertia ixx="1.0" ixy="0.0" ixz="0.0"
iyy="1.0" iyz="0.0"
izz="1.0" />
</inertial>
</xacro:macro>
可以添加参数,在第一行指定参数变量名,中间写参数具体使用的标签
使用的时候:
<xacro:default_inertial mass="10"/> <!--质量为10kg-->
代码块也可以作参数
<xacro:macro name="blue_shape" params="name *shape">
<link name="${name}">
<visual>
<geometry>
<xacro:insert_block name="shape" />
</geometry>
<material name="blue"/>
</visual>
<collision>
<geometry>
<xacro:insert_block name="shape" />
</geometry>
</collision>
</link>
</xacro:macro>
<xacro:blue_shape name="base_link">
<cylinder radius=".42" length=".01" />
</xacro:blue_shape>
gazebo
gezebo urdf的接触参数
mu:摩擦系数 mu1,mu2代表两个不同的摩擦力方向
kp:刚度系数
kd:阻尼系数