一、机械臂仿真效果图

首先先展示一下完成后的机械臂模型效果图:
在这里插入图片描述

在这里插入图片描述

二、机器人组成结构图

在这里插入图片描述

执行机构:类比于人体的四肢,属于直接面向工作对象的机械装置;
驱动系统:类比于人体的肌肉和筋骨,负责驱动执行机构,将控制系统下达的命令转换为执行机构需要的信号;
传感系统:类比于人体的感官及神经系统,负责完成信号的输入和反馈,包括内部与外部传感系统;
控制系统:类比与人体的大脑,负责实现任务及信息的处理调度,输出控制命令信号。
四类系统的协同控制关系如下图所示:
在这里插入图片描述

三、URDF基本介绍

URDF(Unified Robot Description Format),全称为标准化机器人描述格式;
属于一类XML格式的模型文件,用于描述机器人关节组成、自由度集合、位姿变换以及工作空间等相关概念;
类似于D-H参数的表示方法来表示机器人各个Joint及Link之间的连接关系;
是对机器人仿真模型搭建的必经之路。

四、xacro在UDRF上的改进

精简模型代码;
创建宏定义概念;
增加文件include功能;
提供包括常量、变量、数学计算、条件语句等内容的编程接口。
五、机械臂xacro建模基本组成部分
robot定义
是一个完整机器人模型的最顶层标签;
< link >和< joint >标签必须包含在< robot >标签内;
一个完整的机器人仿真模型,由一系列的< link >和< joint >标签组成,数量取决于机器人模型的自由度数量。

<robot name="name of robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
	<link> ... </link>
	<link> ... </link>
	
	<joint> ... </joint>
	<joint> ... </joint>
</robot>

link定义

  • 描述机器人某个刚体部分的外观属性和物理属性;
  • 描述连杆模型的尺寸(size)、颜色(clor)、形状(shape)、惯性矩阵(inertial matrix)、碰撞检测(Collision)等内容;
  • 每个Link在机器人模型上会成为一个独立的坐标系。
  •  <link name="link0">
           <!-- visual:可视化部分 -->
           <visual>
               <origin xyz="0 0 0" rpy="0 0 0" />
               <geometry>
                   <cylinder radius="${link0_radius}" length="${link0_length}"/>
               </geometry>
               <material name="White" />
           </visual>
           <!-- collision:碰撞检测部分 -->
           <!-- collision的物理模型和坐标与visual部分保持一致 -->
           <collision>
               <origin xyz="0 0 0" rpy="0 0 0" />
               <geometry>
                   <cylinder radius="${link0_radius}" length="${link0_length}"/>
               </geometry>
           </collision>
           <!-- 通过函数名cylinder_inertial_matrix来调用之前定义的用来计算惯性矩阵的宏 -->
           <cylinder_inertial_matrix m="${link0_mass}" r="${link0_radius}" h="${link0_length}"/>
       </link>
    
  • joint定义描述两个Link之间的关系,分为以下6种类型(type):
  • 在这里插入图片描述
  • 包含了关节运动的位置和速度限制;

  • 描述了机器人关节的运行学和动力学的相关属性;

  • Joint和Link的关系如下:

在这里插入图片描述

  <!-- revolute:带上下限的旋转关节 -->
  <joint name="joint1" type="revolute">
        <parent link="link0"/>
        <child link="link1"/>
        <origin xyz="0 0 ${link0_length/2}" rpy="0 ${M_PI/2} 0" />
        <axis xyz="-1 0 0" />
        <!-- 关节限制 -->
        <!-- effort:关节受力极限 -->
        <!-- velocity:最大速度 -->
        <!-- lower/upper:最大旋转角度(弧度制) -->
        <limit effort="300" velocity="1" lower="${-M_PI}" upper="${M_PI}"/>
    </joint>

机械臂所需颜色定义

 	<material name="Black">
        <color rgba="0 0 0 1"/>
    </material>
    <material name="White">
        <color rgba="1 1 1 1"/>
    </material>
    <material name="Blue">
        <color rgba="0 0 1 1"/>
    </material>
    <material name="Red">
        <color rgba="1 0 0 1"/>
    </material>

基本参数定义

   <xacro:property name="M_PI" value="3.14159"/>
   <!-- link1 参数定义 -->
   <xacro:property name="link0_radius" value="0.05" />
   <xacro:property name="link0_length" value="0.04" />
   <xacro:property name="link0_mass" value="1" />
    <!-- gripper参数定义 -->
   <xacro:property name="gripper_length" value="0.03" />
   <xacro:property name="gripper_width" value="0.01" />
   <xacro:property name="gripper_height" value="0.06" />
   <xacro:property name="gripper_mass" value="0.5" />

六、机械臂xacro建模常用语法xacro常量定义及使用:

	<!-- 常量定义 -->
    <xacro:property name="M_PI" value="3.14159"/>
	<!-- 常量使用 -->
     <origin xyz="0 0 0" rpy="0 ${M_PI/2} 0" />

数学公式计算

	 <origin xyz="${(motor_length + wheel_length)/ 2} 0 0" rpy="0 0 0" />

宏定义及宏调用

	<!-- 定义宏macro,宏里定义的函数名为cylinder_inertial_matrix,参数为"m r h",关于惯性矩阵的宏-->
    <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>
	 <!-- 通过函数名cylinder_inertial_matrix来调用之前定义的用来计算惯性矩阵的宏 -->
     <cylinder_inertial_matrix m="${link0_mass}" r="${link0_radius}" h="${link0_length}"/>

文件包含

<xacro:include filename="$(find mbot_description)/urdf/xacro/mbot_base.xacro" />

其中find关键词后加的是功能包的名字(mbot_description)

七、更多示例

参考ROS关于URDF的官方文档,可全面查询URDF及xacro的相关语法及建模方法的详细介绍。