• ROS中3D机器人建模(五)


    一.创建一个差速驱动移动机器人模型

    前面我们已经创建了一个7-DOF机械臂机器人模型,接下来我们将创建一个差速机器人模型,差速轮式机器人在机器人底盘的两端安装两个轮子,

    整个底盘由一个或两个脚轮支撑。轮子将通过调节速度来控制机器人的移动速度,如果两个马达以相同的速度运行,轮子会向前或者向后移动。

    如果一个轮子的速度比另一个轮子慢,机器人就会偏向低速的那一边。

    差速机器人由5个关节和5个连杆,两个主要的关节将轮子连接到机器人上。其余3个是固定关节,2个用于经支撑脚轮连接到机器人主体上,1个

    用于将底盘连接到机器人主体上。

    差速机器人的连杆与关节连接图如下:

    接下来我们来解析差速机器人的代码,文件为:diff_wheeled_robot.xacro

    机器人被命名为differential_wheeled_robot,还包含一个名为wheel.urdf.xacro的URDF文件。xacro文件包含轮子的定义及其传动方式。

    如果我们使用该xacro文件,就可以避免为两个轮子写两套定义,因为两个轮子在形状和大小上是相同的,我们采用xacro的定义:

      1 <?xml version="1.0"?>                                                     
      2 <robot name="differential_wheeled_robot" xmlns:xacro="http://ros.org/wiki/    xacro">
      3 
      4   <xacro:include filename="$(find mastering_ros_robot_description_pkg)/urd    f/wheel.urdf.xacro" /> 
    

     轮子的定义在wheel.urdf.xacro中给出。我们可以指定轮子是否必须放在左边、右边、前面或后面。使用这个宏,我们最多可以创建4个轮子,但目前我们只需要两个:

    19   <xacro:macro name="wheel" params="fb lr parent translateX translateY flipY"> <!--   fb : front, back ; lr: left, right -->
    20     <link name="${fb}_${lr}_wheel">
    

     我们还指定了仿真所需的Gazebo参数。这里提到的是与轮子相关的Gazebo参数。我们可以用gazeboreference标签说明摩擦系数和刚度系数:

    41     <gazebo reference="${fb}_${lr}_wheel">
    42       <mu1 value="1.0"/>
    43       <mu2 value="1.0"/>
    44       <kp  value="10000000.0" />
    45       <kd  value="1.0" />
    46       <fdir1 value="1 0 0"/>
    47       <material>Gazebo/Grey</material>
    48       <turnGravityOff>false</turnGravityOff>
    49     </gazebo>
    

     我们为轮子定义的关节是连续转动关节,因为在轮子关节中没有任何限值,这里的parent link是机器人底盘,child link是每个轮子:

    51     <joint name="${fb}_${lr}_wheel_joint" type="continuous">
    52       <parent link="${parent}"/>
    53       <child link="${fb}_${lr}_wheel"/>
    54       <origin xyz="${translateX * base_x_origin_to_wheel_origin} ${translateY * bas   e_y_origin_to_wheel_origin} ${base_z_origin_to_wheel_origin}" rpy="0 0 0" /> 
    

     我们还需要设定每个轮子的transmission标签。该轮子的宏定义如下:

    60     <!-- Transmission is important to link the joints and the controller -->
    61     <transmission name="${fb}_${lr}_wheel_joint_trans">
    62       <type>transmission_interface/SimpleTransmission</type>
    63       <joint name="${fb}_${lr}_wheel_joint" />
    64       <actuator name="${fb}_${lr}_wheel_joint_motor">
    65         <hardwareInterface>EffortJointInterface</hardwareInterface>
    66         <mechanicalReduction>1</mechanicalReduction>
    67       </actuator>
    68     </transmission>
    69    
    70   </xacro:macro>
    71 </robot>                   
    

     在diff_wheeled_robot.xacro中,我们可以用以下命令来使用wheel.urdf.xacro中定义的宏:

    241   <wheel fb="front" lr="right" parent="base_link" translateX="0" translateY="0.5"     flipY="1"/>
    242   <wheel fb="front" lr="left" parent="base_link" translateX="0" translateY="-0.5"     flipY="1"/>
    

     使用前面的几行代码,我们定义了机器人底盘的左侧和右侧的轮子。机器人底盘是圆柱形的。

    下面给出了惯性计算的宏定义,xacro代码段将使用圆柱的质量、半径和高度来计算惯性张量,代码如下:

    72   <!-- Macro for calculating inertia of cylinder -->
     73   <xacro:macro name="cylinder_inertia" params="m r h">
     74     <inertia  ixx="${m*(3*r*r+h*h)/12}" ixy = "0" ixz = "0"
     75               iyy="${m*(3*r*r+h*h)/12}" iyz = "0"
     76               izz="${m*r*r/2}" /> 
     77   </xacro:macro>
    

    下面给出了启动文件的定义,可用于在RViz中显示该机器人模型。启动文件命名为view_mobile_robot.launch:

     1 <launch>                                                                           
     2     <arg name="model" />
     3     <!-- Parsing xacro and setting robot_description parameter -->
     4     <param name="robot_description" command="$(find xacro)/xacro --inorder $(find m   astering_ros_robot_description_pkg)/urdf/diff_wheeled_robot.xacro" />
     5     <!-- Setting gui parameter to true for display joint slider -->
     6     <param name="use_gui" value="true"/>
     7     <!-- Starting Joint state publisher node which will publish the joint values --   >
     8     <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_stat   e_publisher" />
     9     <!-- Starting robot state publish which will publish tf -->
    10     <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publ   isher" />
    11     <!-- Launch visualization in rviz -->
    12     <node name="rviz" pkg="rviz" type="rviz" args="-d $(find mastering_ros_robot_de   scription_pkg)/urdf.rviz" required="true" />
    13 </launch>
    

     与机械臂URDF文件相比较,唯一区别是名称不同,其他部分都是一样的。

    我们用以下命令查看移动机器人:

    $roslaunch mastering_ros_robot_description_pkg view_mobile_robot.launch

    机器人如下:

  • 相关阅读:
    JavaScript基础知识-标识符
    free命令常用参数详解及常用内存工具介绍
    GO语言的进阶之路-初探GO语言
    HTML&CSS基础-字体的其它样式
    HTML&CSS基础-字体的分类
    HTML&CSS基础-字体的样式
    python运维常用相关模块
    HTML&CSS基础-颜色的单位表示方法
    HTML&CSS基础-长度单位
    HTML&CSS基础-定义列表
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/12290381.html
Copyright © 2020-2023  润新知