UR5 机器人 URDF 代码阅读

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、UR5 URDF 代码
  • 二、base_link
  • 三、shoulder_pan_joint
  • 四、shoulder_pan_trans
  • 五、ROS base_link 坐标系到 UR 机器人 'Base' 坐标系的转换
  • 六、与全零TCP(工具坐标系)重合的工具链接


前言


一、UR5 URDF 代码

<?xml version="1.0" encoding="utf-8"?>
<!-- =================================================================================== -->
<!-- |    This document was autogenerated by xacro from ur5_robot.urdf.xacro           | -->
<!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->
<!-- =================================================================================== -->
<robot name="ur5" xmlns:xacro="http://wiki.ros.org/xacro"><gazebo><plugin filename="libgazebo_ros_control.so" name="ros_control"><!--robotNamespace>/</robotNamespace--><!--robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType--></plugin><!--<plugin name="gazebo_ros_power_monitor_controller" filename="libgazebo_ros_power_monitor.so"><alwaysOn>true</alwaysOn><updateRate>1.0</updateRate><timeout>5</timeout><powerStateTopic>power_state</powerStateTopic><powerStateRate>10.0</powerStateRate><fullChargeCapacity>87.78</fullChargeCapacity><dischargeRate>-474</dischargeRate><chargeRate>525</chargeRate><dischargeVoltage>15.52</dischargeVoltage><chargeVoltage>16.41</chargeVoltage></plugin>
--></gazebo><!-- measured from model --><!--property name="shoulder_height" value="0.089159" /--><!--property name="shoulder_offset" value="0.13585" /--><!-- shoulder_offset - elbow_offset + wrist_1_length = 0.10915 --><!--property name="upper_arm_length" value="0.42500" /--><!--property name="elbow_offset" value="0.1197" /--><!-- CAD measured --><!--property name="forearm_length" value="0.39225" /--><!--property name="wrist_1_length" value="0.093" /--><!-- CAD measured --><!--property name="wrist_2_length" value="0.09465" /--><!-- In CAD this distance is 0.930, but in the spec it is 0.09465 --><!--property name="wrist_3_length" value="0.0823" /--><!-- manually measured --><link name="base_link"><visual><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/visual/base.dae"/></geometry><material name="LightGrey"><color rgba="0.7 0.7 0.7 1.0"/></material></visual><collision><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/collision/base.stl"/></geometry></collision><inertial><mass value="4.0"/><origin rpy="0 0 0" xyz="0.0 0.0 0.0"/><inertia ixx="0.00443333156" ixy="0.0" ixz="0.0" iyy="0.00443333156" iyz="0.0" izz="0.0072"/></inertial></link><joint name="shoulder_pan_joint" type="revolute"><parent link="base_link"/><child link="shoulder_link"/><origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.089159"/><axis xyz="0 0 1"/><limit effort="150.0" lower="-6.28318530718" upper="6.28318530718" velocity="3.15"/><dynamics damping="0.0" friction="0.0"/></joint><link name="shoulder_link"><visual><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/visual/shoulder.dae"/></geometry><material name="LightGrey"><color rgba="0.7 0.7 0.7 1.0"/></material></visual><collision><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/collision/shoulder.stl"/></geometry></collision><inertial><mass value="3.7"/><origin rpy="0 0 0" xyz="0.0 0.0 0.0"/><inertia ixx="0.010267495893" ixy="0.0" ixz="0.0" iyy="0.010267495893" iyz="0.0" izz="0.00666"/></inertial></link><joint name="shoulder_lift_joint" type="revolute"><parent link="shoulder_link"/><child link="upper_arm_link"/><origin rpy="0.0 1.57079632679 0.0" xyz="0.0 0.13585 0.0"/><axis xyz="0 1 0"/><limit effort="150.0" lower="-6.28318530718" upper="6.28318530718" velocity="3.15"/><dynamics damping="0.0" friction="0.0"/></joint><link name="upper_arm_link"><visual><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/visual/upperarm.dae"/></geometry><material name="LightGrey"><color rgba="0.7 0.7 0.7 1.0"/></material></visual><collision><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/collision/upperarm.stl"/></geometry></collision><inertial><mass value="8.393"/><origin rpy="0 0 0" xyz="0.0 0.0 0.28"/><inertia ixx="0.22689067591" ixy="0.0" ixz="0.0" iyy="0.22689067591" iyz="0.0" izz="0.0151074"/></inertial></link><joint name="elbow_joint" type="revolute"><parent link="upper_arm_link"/><child link="forearm_link"/><origin rpy="0.0 0.0 0.0" xyz="0.0 -0.1197 0.425"/><axis xyz="0 1 0"/><limit effort="150.0" lower="-3.14159265359" upper="3.14159265359" velocity="3.15"/><dynamics damping="0.0" friction="0.0"/></joint><link name="forearm_link"><visual><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/visual/forearm.dae"/></geometry><material name="LightGrey"><color rgba="0.7 0.7 0.7 1.0"/></material></visual><collision><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/collision/forearm.stl"/></geometry></collision><inertial><mass value="2.275"/><origin rpy="0 0 0" xyz="0.0 0.0 0.25"/><inertia ixx="0.049443313556" ixy="0.0" ixz="0.0" iyy="0.049443313556" iyz="0.0" izz="0.004095"/></inertial></link><joint name="wrist_1_joint" type="revolute"><parent link="forearm_link"/><child link="wrist_1_link"/><origin rpy="0.0 1.57079632679 0.0" xyz="0.0 0.0 0.39225"/><axis xyz="0 1 0"/><limit effort="28.0" lower="-6.28318530718" upper="6.28318530718" velocity="3.2"/><dynamics damping="0.0" friction="0.0"/></joint><link name="wrist_1_link"><visual><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/visual/wrist1.dae"/></geometry><material name="LightGrey"><color rgba="0.7 0.7 0.7 1.0"/></material></visual><collision><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/collision/wrist1.stl"/></geometry></collision><inertial><mass value="1.219"/><origin rpy="0 0 0" xyz="0.0 0.0 0.0"/><inertia ixx="0.111172755531" ixy="0.0" ixz="0.0" iyy="0.111172755531" iyz="0.0" izz="0.21942"/></inertial></link><joint name="wrist_2_joint" type="revolute"><parent link="wrist_1_link"/><child link="wrist_2_link"/><origin rpy="0.0 0.0 0.0" xyz="0.0 0.093 0.0"/><axis xyz="0 0 1"/><limit effort="28.0" lower="-6.28318530718" upper="6.28318530718" velocity="3.2"/><dynamics damping="0.0" friction="0.0"/></joint><link name="wrist_2_link"><visual><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/visual/wrist2.dae"/></geometry><material name="LightGrey"><color rgba="0.7 0.7 0.7 1.0"/></material></visual><collision><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/collision/wrist2.stl"/></geometry></collision><inertial><mass value="1.219"/><origin rpy="0 0 0" xyz="0.0 0.0 0.0"/><inertia ixx="0.111172755531" ixy="0.0" ixz="0.0" iyy="0.111172755531" iyz="0.0" izz="0.21942"/></inertial></link><joint name="wrist_3_joint" type="revolute"><parent link="wrist_2_link"/><child link="wrist_3_link"/><origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.09465"/><axis xyz="0 1 0"/><limit effort="28.0" lower="-6.28318530718" upper="6.28318530718" velocity="3.2"/><dynamics damping="0.0" friction="0.0"/></joint><link name="wrist_3_link"><visual><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/visual/wrist3.dae"/></geometry><material name="LightGrey"><color rgba="0.7 0.7 0.7 1.0"/></material></visual><collision><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/collision/wrist3.stl"/></geometry></collision><inertial><mass value="0.1879"/><origin rpy="0 0 0" xyz="0.0 0.0 0.0"/><inertia ixx="0.0171364731454" ixy="0.0" ixz="0.0" iyy="0.0171364731454" iyz="0.0" izz="0.033822"/></inertial></link><joint name="ee_fixed_joint" type="fixed"><parent link="wrist_3_link"/><child link="ee_link"/><origin rpy="0.0 0.0 1.57079632679" xyz="0.0 0.0823 0.0"/></joint><link name="ee_link"><inertial><mass value="0"/><origin rpy="0 0 0" xyz="0 0 0"/><inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/></inertial><collision><geometry><box size="0.01 0.01 0.01"/></geometry><origin rpy="0 0 0" xyz="-0.01 0 0"/></collision></link><transmission name="shoulder_pan_trans"><type>transmission_interface/SimpleTransmission</type><joint name="shoulder_pan_joint"><hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface></joint><actuator name="shoulder_pan_motor"><mechanicalReduction>1</mechanicalReduction></actuator></transmission><transmission name="shoulder_lift_trans"><type>transmission_interface/SimpleTransmission</type><joint name="shoulder_lift_joint"><hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface></joint><actuator name="shoulder_lift_motor"><mechanicalReduction>1</mechanicalReduction></actuator></transmission><transmission name="elbow_trans"><type>transmission_interface/SimpleTransmission</type><joint name="elbow_joint"><hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface></joint><actuator name="elbow_motor"><mechanicalReduction>1</mechanicalReduction></actuator></transmission><transmission name="wrist_1_trans"><type>transmission_interface/SimpleTransmission</type><joint name="wrist_1_joint"><hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface></joint><actuator name="wrist_1_motor"><mechanicalReduction>1</mechanicalReduction></actuator></transmission><transmission name="wrist_2_trans"><type>transmission_interface/SimpleTransmission</type><joint name="wrist_2_joint"><hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface></joint><actuator name="wrist_2_motor"><mechanicalReduction>1</mechanicalReduction></actuator></transmission><transmission name="wrist_3_trans"><type>transmission_interface/SimpleTransmission</type><joint name="wrist_3_joint"><hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface></joint><actuator name="wrist_3_motor"><mechanicalReduction>1</mechanicalReduction></actuator></transmission><gazebo reference="shoulder_link"><selfCollide>true</selfCollide></gazebo><gazebo reference="upper_arm_link"><selfCollide>true</selfCollide></gazebo><gazebo reference="forearm_link"><selfCollide>true</selfCollide></gazebo><gazebo reference="wrist_1_link"><selfCollide>true</selfCollide></gazebo><gazebo reference="wrist_3_link"><selfCollide>true</selfCollide></gazebo><gazebo reference="wrist_2_link"><selfCollide>true</selfCollide></gazebo><gazebo reference="ee_link"><selfCollide>true</selfCollide></gazebo><!-- ROS base_link to UR 'Base' Coordinates transform --><link name="base"><inertial><mass value="0"/><origin rpy="0 0 0" xyz="0 0 0"/><inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/></inertial></link><joint name="base_link-base_fixed_joint" type="fixed"><!-- NOTE: this rotation is only needed as long as base_link itself isnot corrected wrt the real robot (ie: rotated over 180degrees)--><origin rpy="0 0 -3.14159265359" xyz="0 0 0"/><parent link="base_link"/><child link="base"/></joint><!-- Frame coincident with all-zeros TCP on UR controller --><link name="tool0"><inertial><mass value="0"/><origin rpy="0 0 0" xyz="0 0 0"/><inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/></inertial></link><joint name="wrist_3_link-tool0_fixed_joint" type="fixed"><origin rpy="-1.57079632679 0 0" xyz="0 0.0823 0"/><parent link="wrist_3_link"/><child link="tool0"/></joint><link name="world"/><joint name="world_joint" type="fixed"><parent link="world"/><child link="base_link"/><origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0"/></joint>
</robot>

二、base_link

<link name="base_link"><!-- 定义链接的可视化特性 --><visual><!-- 定义几何形状,使用dae文件作为可视化模型 --><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/visual/base.dae"/></geometry><!-- 定义材质及颜色 --><material name="LightGrey"><color rgba="0.7 0.7 0.7 1.0"/></material></visual><!-- 定义链接的碰撞特性 --><collision><!-- 定义几何形状,使用stl文件作为碰撞模型 --><geometry><mesh filename="package://example-robot-data/robots/ur_description/meshes/ur5/collision/base.stl"/></geometry></collision><!-- 定义链接的惯性特性 --><inertial><!-- 定义链接的质量 --><mass value="4.0"/><!-- 定义质心的位置和方向 --><origin rpy="0 0 0" xyz="0.0 0.0 0.0"/><!-- 定义链接的转动惯量 --><inertia ixx="0.00443333156" ixy="0.0" ixz="0.0" iyy="0.00443333156" iyz="0.0" izz="0.0072"/></inertial></link>

该段XML代码在机器人建模中定义了一个名为“base_link”的链接单元,这个链接具备视觉、碰撞和惯性属性,适用于UR5机器人模型或类似应用场景。以下是各个部分的具体说明:

  1. visual 标签:
    • 定义了链接的可视化表示,即渲染时显示的形状与外观。
    • <geometry>标签内嵌套的<mesh>元素指定了一个三维模型文件,文件路径为"package://example-robot-data/robots/ur_description/meshes/ur5/visual/base.dae",这是一个Collada (.dae)格式的文件,包含了链接的三维几何形状数据。
    • <material>标签定义了模型表面的材质信息,这里创建了一个名为"LightGrey"的材质,其颜色属性rgba值为(0.7, 0.7, 0.7, 1.0),表示一种浅灰色且完全不透明的颜色。
  2. collision 标签:
    • 定义了此链接在进行物理模拟或碰撞检测时所使用的几何形状。
    • 同样在<geometry>标签内嵌套的 <mesh> 元素指定了一个碰撞模型文件,文件路径为 “package://example-robot-data/robots/ur_description/meshes/ur5/collision/base.stl”,这是一个 STereoLithography (.stl) 格式的文件,常用于精确的碰撞检测计算。
  3. inertial 标签:
    • 描述了链接的惯性属性,这对于动态仿真非常重要,涉及到质量和转动惯量等物理参数。
    • <mass>标签定义了链接的质量,其值为4.0千克。
    • <origin>标签定义了链接质心的位置和方向,这里的 rpy 属性代表绕三个坐标轴的旋转角度(此处均为0),xyz 属性则是质心相对于父坐标系的偏移量(此处也是 0,意味着质心位于原点)。
    • <inertia>标签提供了链接的惯性张量,包含六个分量(ixx, ixy, ixz, iyy, iyz, izz),这些值反映了链接在不同方向上的转动惯量特性,对于准确模拟物体运动状态至关重要。

总之,这段XML代码在机器人模拟软件中为"base_link"链接创建了完整的视觉表现、碰撞检测模型以及必要的物理属性,使得软件能够真实地模拟该链接在各种场景下的行为和反应。

这段XML代码定义了一个名为"shoulder_pan_joint"的关节,类型为"revolute",表示旋转关节。它指定了关节的父链接和子链接,以及关节的原点位置和旋转轴向。同时,还设置了关节的运动范围、最大力矩、最大速度和动力学参数(阻尼和摩擦力)。

  • 定义了一个名为“shoulder_pan_joint”的关节,类型为“revolute”,这是一种绕固定轴旋转的关节。

  • 指定该关节的父级链接是“base_link”,即该关节从“base_link”链接处开始。

  • 指定该关节的子级链接是“shoulder_link”,即关节连接到“shoulder_link”这一部分,关节运动将影响到这个链接。

  • 描述了关节在父链接坐标系下的原点位置,其中rpy表示绕xyz轴的旋转角度(此处均为0,表示不旋转),xyz表示沿xyz轴的平移距离(此处z轴方向上有0.089159米的距离)。

  • 定义了关节的旋转轴,xyz值为(0, 0, 1),表示关节绕z轴正方向进行旋转。

  • 限制关节的运动范围和性能:
    • effort:指定关节的最大输出力矩,这里是150.0单位。
    • lowerupper:分别设定了关节允许的最小和最大旋转角度,这里都设置为-π到π弧度,意味着关节可以360度全范围旋转。
    • velocity:指定了关节的最大速度,这里为3.15弧度每秒。

  • 描述关节的动力学特性:
    • damping:表示关节阻尼系数,这里是0.0,意味着没有额外的阻尼效应。
    • friction:表示关节摩擦力,这里的值也为0.0,意味着没有考虑摩擦力的影响。

三、shoulder_pan_joint

<!-- 定义名为 "shoulder_pan_joint" 的关节 -->
<joint name="shoulder_pan_joint" type="revolute"><!-- 指定该关节连接于父级链接,此处为 "base_link" --><parent link="base_link"/><!-- 指定该关节连接于子级链接,此处为 "shoulder_link" --><child link="shoulder_link"/><!-- 定义关节相对于父级链接的原点坐标,以RPY(Roll-Pitch-Yaw)顺序指定旋转角度,xyz表示直角坐标偏移 --><origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.089159"/><!-- 定义关节轴的方向,xyz三元组表示关节旋转轴的方向向量 --><axis xyz="0 0 1"/><!-- 定义关节的运动限制参数 --><limit><!-- 最大允许力矩(effort limit) --><effort>150.0</effort><!-- 关节可旋转的最小和最大角度范围 --><lower>-6.28318530718</lower><upper>6.28318530718</upper><!-- 关节的最大允许速度(velocity limit) --><velocity>3.15</velocity></limit><!-- 定义关节动力学特性 --><dynamics><!-- 关节阻尼系数(damping coefficient) --><damping>0.0</damping><!-- 关节摩擦系数(friction coefficient) --><friction>0.0</friction></dynamics></joint>

这段XML代码定义了一个名为"shoulder_pan_trans"的传输装置(transmission),它使用了"transmission_interface/SimpleTransmission"类型。该传输装置连接了一个名为"shoulder_pan_joint"的关节,该关节使用了"hardware_interface/PositionJointInterface"硬件接口。此外,该传输装置还有一个名为"shoulder_pan_motor"的执行器,它具有一个机械传动比为1的设置。

  • <transmission name="shoulder_pan_trans">:此元素定义了一个名为“shoulder_pan_trans”的传输组件,它是机器人系统中关节和执行器之间的桥梁,用于实现力矩、速度或位置等物理量的转换。
  • <type>transmission_interface/SimpleTransmission</type>:这个属性指定了所使用的传输类型为“SimpleTransmission”,这是ROS控制框架中的一个标准传输类,它提供了一种简单的线性映射机制,即将执行器(如电机)的输出直接映射到关节的角度或转速。
  • <joint name="shoulder_pan_joint">:这一部分定义了与该传输关联的关节,名称为"shoulder_pan_joint"。这意味着该传输配置将影响该特定关节的行为。
  • <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>:这里指定了关节使用的硬件接口类型为“hardware_interface/PositionJointInterface”。这意味着该关节在硬件层面上支持位置控制,即可以通过发送目标位置值来控制其运动。
  • <actuator name="shoulder_pan_motor">:这部分定义了驱动关节运动的实际执行器设备,名称为"shoulder_pan_motor"。
  • <mechanicalReduction>1</mechanicalReduction>:这一属性表示执行器(电机)与关节之间的机械传动比为1,也就是说执行器的每单位输出直接对应关节的单位运动,没有额外的齿轮或其他机械结构导致的扭矩放大或缩小。在实际应用中,如果存在齿轮箱等传动装置,这个值通常会大于1,表示扭矩放大;若小于1,则表示扭矩减小或速度增大。

四、shoulder_pan_trans

<!-- 定义名为 "shoulder_pan_trans" 的传动装置 -->
<transmission name="shoulder_pan_trans"><!-- 指定传动装置的类型,这里是基于 "transmission_interface" 包中的 "SimpleTransmission" 类型 --><type>transmission_interface/SimpleTransmission</type><!-- 定义与传动装置关联的关节信息 --><joint name="shoulder_pan_joint"><!-- 指定关节使用的硬件接口,这里是 "hardware_interface" 包中的 "PositionJointInterface" --><!-- 这意味着该关节支持位置控制,即可以接收并执行位置指令 --><hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface></joint><!-- 定义传动装置对应的执行器(例如电机) --><actuator name="shoulder_pan_motor"><!-- 指定执行器到关节之间的机械传动比 --><!-- 值为1表示执行器的输出直接对应关节的运动,没有额外的减速或增速 --><mechanicalReduction>1</mechanicalReduction></actuator></transmission>

这段XML代码来自机器人建模领域,主要用来描述机器人模型中的一个链接(Link)及其与另一个链接之间的固定关节(Joint)。这里是在UR机器人系统中定义从ROS(Robot Operating System)框架下的“base_link”坐标系到实际UR机器人基座坐标系的转换关系。

  1. <link name="base">

    • 这个标签定义了一个名为“base”的链接,它代表了UR机器人系统的基座部分,在机器人模型中,每个链接通常包含形状、质量、惯性等物理特性。

    • <inertial>
      

      标签定义了该链接的惯性属性:

      • <mass value="0"/>:设置链接的质量为0,这可能是因为此处简化处理,不考虑基座的质量属性。
      • <origin rpy="0 0 0" xyz="0 0 0"/>:设置惯性参考坐标系(原点)的位置和方向,这里的rpy参数分别代表绕x、y、z轴的旋转角度,xyz参数则是原点在父坐标系下的位置坐标,这里都设为0,意味着惯性参考坐标系与父坐标系对齐且位于原点。
      • <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/>:定义了链接的惯性张量,其中各个参数代表不同维度的转动惯量,这里所有值均为0,同样可能是因为简化处理或默认假设基座的转动惯量在此场景下可以忽略。
  2. <joint name="base_link-base_fixed_joint" type="fixed">

    • 定义了一个名为“base_link-base_fixed_joint”的关节,其类型为“fixed”,这意味着这个关节连接的两个链接之间没有相对运动,即“base_link”和“base”是固定在一起的。
    • <origin rpy="0 0 -3.14159265359" xyz="0 0 0"/>:设置关节相对于父链接(这里是“base_link”)的位置和姿态,rpy参数表明需要进行一个沿z轴的180度旋转,可能是为了调整坐标系的方向以匹配真实机器人的方向。
    • <parent link="base_link"/>:声明此关节的父链接是“base_link”,也就是ROS框架下的基础坐标系。
    • <child link="base"/>:声明此关节的子链接是“base”,即UR机器人的基座坐标系。

通过这种方式,这段XML代码建立了ROS框架下的“base_link”与UR机器人实际基座坐标系之间的关联,并通过固定关节保证了两者间不存在相对运动。

五、ROS base_link 坐标系到 UR 机器人 ‘Base’ 坐标系的转换

<!-- ROS base_link 坐标系到 UR 机器人 'Base' 坐标系的转换
--><!-- 首先定义一个名为 "base" 的 Link,表示 UR 机器人的基座 -->
<link name="base"><!-- 定义 Link 的惯性属性 --><inertial><!-- 设置 Link 的质量为 0,此处可能是出于简化考虑或者基座质量较小可忽略 --><mass value="0"/><!-- 设置 Link 惯性参考坐标系的原点,rpy 表示绕 x、y、z 轴的旋转角度,xyz 表示在父坐标系下的位置坐标,这里都为 0,意味着惯性参考坐标系与父坐标系重合且位于原点 --><origin rpy="0 0 0" xyz="0 0 0"/><!-- 定义 Link 的惯性张量,ixx, ixy, ixz, iyy, iyz, izz 分别代表绕对应轴的转动惯量分量,此处所有值均为 0,同样可能是因为简化处理,认为基座的转动惯量在此场景下可以忽略 --><inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/></inertial>
</link><!-- 定义一个名为 "base_link-base_fixed_joint" 的 Joint,类型为 "fixed",表示这是一个固定关节 -->
<joint name="base_link-base_fixed_joint" type="fixed"><!-- 注意:这里的旋转参数 rpy="0 0 -3.14159265359" 是因为 base_link 相对于真实机器人本身的方向需要校正,即 base_link 相对于机器人基座需要旋转 180 度,仅当 base_link 未按照真实机器人实际方向修正时才需要此旋转--><origin rpy="0 0 -3.14159265359" xyz="0 0 0"/><!-- 定义 Joint 的父级 Link,此处为 ROS 中的 base_link 坐标系 --><parent link="base_link"/><!-- 定义 Joint 的子级 Link,此处为 UR 机器人的基座坐标系 --><child link="base"/></joint>

当然,以下是对该段XML代码中各部分的详细解释:

  1. <link name="tool0">:这部分定义了一个新的链接(link)元素,名称为 “tool0”,在机器人模型中通常表示机器人的末端执行器或工具。

    • <inertial>
      

      :这个标签定义了链接的惯性属性,包括质量、转动惯量以及质心的位置。

      • <mass value="0"/>:声明该链接的质量为0,意味着“tool0”是一个虚拟的、无质量的链接。
      • <origin rpy="0 0 0" xyz="0 0 0"/>:定义了链接质心的初始方向(roll-pitch-yaw角)和三维坐标,此处均为原点(0, 0, 0)。
      • <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/>:定义了链接的六维转动惯量矩阵,所有元素均为0,进一步表明此链接没有惯性效应。
  2. <joint name="wrist_3_link-tool0_fixed_joint" type="fixed">:定义了一个名为 “wrist_3_link-tool0_fixed_joint” 的关节,类型为 “fixed”,即固定关节,这意味着工具0和上一级链接(这里是"wrist_3_link")之间不存在相对运动。

    • <origin rpy="-1.57079632679 0 0" xyz="0 0.0823 0"/>:定义了该固定关节相对于父级链接(wrist_3_link)的位置,使用 roll-pitch-yaw 角度(rpy)和xyz坐标表示,这里表示工具相对于手腕有一个负的π/2(-90度)的绕Z轴旋转,并且沿Y轴有0.0823米的偏移。
    • <parent link="wrist_3_link"/>:声明此关节的父级链接为 “wrist_3_link”。
    • <child link="tool0"/>:声明此关节的子级链接为前面定义的 “tool0”。
  3. <link name="world"/>:定义了一个名为 “world” 的链接,通常表示机器人所在的全局参考系或环境。

  4. <joint name="world_joint" type="fixed">:定义了一个名为 “world_joint” 的固定关节,用于将 “world” 链接与 “base_link” 链接相连。

    • <parent link="world"/>:声明此关节的父级链接为 “world”。
    • <child link="base_link"/>:声明此关节的子级链接为 “base_link”,通常表示机器人的基座。
    • <origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0"/>:固定关节相对于父级链接(world)的原点位置,这里的值表示基座链接位于世界坐标系的原点,且方向与世界坐标系一致。

总结来说,这段XML代码定义了一个零质量的工具链接tool0,它通过一个固定关节与机器人手腕链接相接,并且整个机器人模型通过另一个固定关节与世界的坐标系关联起来。

六、与全零TCP(工具坐标系)重合的工具链接

<!-- 定义一个与全零TCP(工具坐标系)重合的工具链接 -->
<link name="tool0"><!-- 描述工具链接的惯性特性 --><inertial><!-- 设定工具的质量为0 --><mass value="0"/><!-- 设置工具质心的原始方向(欧拉角)和三维坐标,此处均为原点 --><origin rpy="0 0 0" xyz="0 0 0"/><!-- 设定工具的六自由度转动惯量矩阵,所有元素均为0,表示无惯性效应 --><inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/></inertial>
</link><!-- 定义一个名为"wrist_3_link-tool0_fixed_joint"的固定关节 -->
<joint name="wrist_3_link-tool0_fixed_joint" type="fixed"><!-- 设置该固定关节相对于其父级链接(wrist_3_link)的位置姿态 --><!-- 这里表示工具绕Z轴逆时针旋转90度(-π/2),并沿Y轴向上偏移0.0823米 --><origin rpy="-1.57079632679 0 0" xyz="0 0.0823 0"/><!-- 定义该关节的父级链接 --><parent link="wrist_3_link"/><!-- 定义该关节的子级链接 --><child link="tool0"/>
</joint><!-- 定义一个代表全局参考系或环境的链接,名为"world" -->
<link name="world"/><!-- 定义一个名为"world_joint"的固定关节 -->
<joint name="world_joint" type="fixed"><!-- 定义该关节的父级链接为"world" --><parent link="world"/><!-- 定义该关节的子级链接为"base_link",通常代表机器人的基座 --><child link="base_link"/><!-- 设置该固定关节的原点位置,此处表示基座链接与世界坐标系的原点重合 --><!-- 并且基座链接的方向与世界坐标系保持一致 --><origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0"/>
</joint>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/769722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法人生(8):从“注意力算法”看“战胜拖延”(被分心太多版)

现代人拖延产生的原因有很多&#xff0c;比如因为害怕失败而拖延&#xff0c;因为完美主义倾向而拖延&#xff0c;不想走出“舒适区”而拖延等等&#xff0c; 今天我们要针对一个常见的原因“被分心的事情太多”而产生的拖延来看&#xff0c;如何从“注意力算法”的思路中找到些…

类型双关联合体(C++基础)

类型双关 类型双关就是在同样的一个内存中&#xff0c;存储的数据可以用做不同类型的表述。用在底层性能优化的时候&#xff0c;一般使用的时候要非常小心&#xff0c;因为不当的使用可能导致程序的不稳定和不可预测的行为。 int a 5;//double value (double)a;double value…

软考信息系统项目管理师2024上半年报名流程及注意事项

2024年5月软考信息系统项目管理师报名入口&#xff1a; 中国计算机技术职业资格网&#xff08;http://www.ruankao.org.cn/&#xff09; 2024年软考报名时间暂未公布&#xff0c;考试时间上半年为5月25日到28日&#xff0c;下半年考试时间为11月9日到12日。不想错过考试最新消…

Qt Design Studio 软件怎么用(详细+通俗+有趣)

建议&#xff1a;本文长期更新&#xff0c;建议点赞/收藏&#xff01; 1. 啥是Qt Design Studio&#xff1f; Qt Design Studio 是一个用于设计和开发用户界面的工具&#xff0c;特别适合开发跨平台应用程序。它结合了UI设计和开发的工作流程&#xff0c;使得设计师和开发者可…

桌面显示器PD芯片:引领桌面显示技术的新篇章

随着科技的飞速发展&#xff0c;桌面显示器作为人们日常工作与生活中不可或缺的重要设备&#xff0c;其性能与品质也在不断提升。其中&#xff0c;PD芯片作为桌面显示器中的核心组件&#xff0c;发挥着至关重要的作用。本文将对桌面显示器PD芯片进行详细介绍&#xff0c;探讨其…

如何确定ISO体系认证的范围?越大越好是否合理?

什么叫认证范围 ISO认证范围是指企业在申请ISO体系认证时&#xff0c;确定管理体系所涉及的业务范围。这个范围通常包括产品、服务、活动等方面&#xff0c;是企业为了提升管理水平、增强竞争力而选择实施ISO体系认证时需要考虑的重要因素之一。 ISO体系认证的范围主要包括两…

【Leetcode】top 100 二叉树

基础知识补充 完全二叉树&#xff1a;顺序存储&#xff08;数组&#xff09; 非根节点的父节点序号floor((i-1)/2) 序号i的左孩子节点序号2*i1 右孩子节点序号2*i2 一般二叉树&#xff1a;链式存储 结构&#xff1a;left指针指向左子节点&#xff0c;right指针指向右子节点&am…

JAVA 100道题(17)

17.创建一个方法&#xff0c;接受一个整数作为参数&#xff0c;并检查它是否为正数。如果不是&#xff0c;则抛出自定义异常。 首先&#xff0c;你需要定义一个自定义的异常类。在Java中&#xff0c;你可以通过继承 Exception 类来创建自定义异常。然后&#xff0c;你可以创建一…

区区文件操作

一、概念 数据存到内存中&#xff0c;程序退出、掉电数据就丢失了 数据存到硬盘中&#xff0c;就是存储在文件中&#xff0c;数据就不会因为掉电、程序退出就丢失。想要数据持久化&#xff0c;就要使用文件。 二、分类 什么是文件&#xff1f; 硬盘&#xff08;磁盘&#…

springcloud 复习day2~[条件装配]

条件装配: 注解:Condition 定义一个注解 import org.springframework.context.annotation.Conditional;import java.lang.annotation.*;/*** author Gavin*/ Retention(RetentionPolicy.RUNTIME) Target({ElementType.TYPE, ElementType.METHOD}) Documented Conditional(Lo…

ffmpeg拉流并解码

流程 注意事项 版本不同导致的api差异资源安全释放

激光焊接机在不锈钢三角阀制造中的应用与发展

不锈钢三角阀激光焊接机是一种专门用于焊接不锈钢三角阀的高效、精准设备。这种设备在不锈钢三角阀的制造过程中起到了至关重要的作用&#xff0c;其应用主要体现在以下几个方面&#xff1a; ​ 一、激光焊接机在不锈钢三角阀制造中的应用 激光焊接机以其独特的优势&#xff…

力扣450 删除二叉搜索树中的节点 Java版本

文章目录 题目描述思路代码 题目描述 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除…

【CKA模拟题】如何发布一个SVC资源

题干 For this question, please set this context (In exam, diff cluster name) kubectl config use-context kubernetes-adminkubernetesYou have an existing Nginx pod named nginx-pod . Perform the following steps: Expose the nginx-pod internally within the cl…

Gorm连接Mysql数据库及其语法

Gorm连接Mysql数据库及其语法 文章目录 Gorm连接Mysql数据库及其语法前期工作找到Gorm的github项目简单了解相关MySQL语法 启动数据库定义数据库模型注意点Gorm Model定义结构体标签(tag)支持的结构体标记&#xff08;Struct tags&#xff09;关联相关标记&#xff08;tags&…

重庆交通大学2024年蓝桥杯测试赛3题解(AK Java版)

A. 拼成长方体 题目描述: 有n个边长为1的立方体积木(这种立方体称为单位立方体),问可以拼成几种长方体。一个长方体,竖起来、平着放、侧着放,视为同一个长方体。 输入描述: 输入数据占一行,为一个正整数n,n≤1000。 输出描述: 输出每个长方体的长、宽、高,格式…

openGauss学习笔记-251 openGauss性能调优-使用Plan Hint进行调优-行数的Hint

文章目录 openGauss学习笔记-251 openGauss性能调优-使用Plan Hint进行调优-行数的Hint251.1 功能描述251.2 语法格式251.3 参数说明251.4 建议251.5 示例 openGauss学习笔记-251 openGauss性能调优-使用Plan Hint进行调优-行数的Hint 251.1 功能描述 指明中间结果集的大小&a…

Redis持久化策略和优缺点

首先来谈谈什么是持久化&#xff1f; 持久化就是将数据从内存保存到磁盘的过程&#xff0c;其目的就是为了防止数据丢失。 为什么要这样做&#xff1f;因为内存中的数据在重启服务器后就会丢失&#xff0c;而磁盘上的数据则不会&#xff0c;因此为了系统稳定&#xff0c;我们…

蓝桥杯刷题记录之黄金树

思路 需要注意的就是它的节点编号是从1开始的&#xff0c;Node的l和r是int类型&#xff0c;而不是Node类型&#xff0c;因为题目在给定l和r的时候&#xff0c;给的是下标而不是一个node对象&#xff0c;其余的就没有了&#xff0c;树的遍历这个贼简单 代码 import java.util…