您现在的位置是:首页 >技术教程 >在moveit2中实现四连杆及曲柄滑块网站首页技术教程

在moveit2中实现四连杆及曲柄滑块

韭菜钟 2024-06-17 10:47:11
简介在moveit2中实现四连杆及曲柄滑块

对于一些特殊的(比如说机械构件闭环的、存在被动关节的)运动模型,该如何用urdf模型描述该模型,且在MoveIt2中进行仿真?下面提供一个思路,仅供参考。

四连杆机构

结构介绍

该机构的组成如下图所示。
粉红色、蓝色的底座为固定机构,黄色、灰色、青色的三根杠与彼此之间、与底座之间都是铰链连接,可以转动。其中黄色与灰色杆子连接部分的关节为主动轴,可以主动发起旋转(可以理解在此处装了马达)。
在这里插入图片描述

urdf文件

fourbar.urdf

<?xml version="1.0"?>
<robot name="fourbar">

  <!-- base link -->
  <link name="base_link">
    <visual>
      <origin xyz="0 0 -0.06" rpy="0 0 0"/>
      <geometry>
        <cylinder length="0.12" radius="0.20"/>
      </geometry>s
      <material name="wtf0">
        <color rgba="0.9 0.2 0.3 1.0" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 -0.06" rpy="0 0 0"/>
      <geometry>
        <cylinder length="0.12" radius="0.20"/>
      </geometry>
    </collision>
  </link>

  <link name="bar1">
    <visual>
      <origin xyz="0 0 0.75" rpy="0 0 0"/>
      <geometry>
        <box size="0.15 0.1 1.5"/>
      </geometry>
      <material name="wtf1">
        <color rgba="0.5 0.5 0.3 1.0" />
      </material>
    </visual>
    <collision>
      <origin xyz="0 0 0.75" rpy="0 0 0"/>
      <geometry>
        <box size="0.15 0.1 1.5"/>
      </geometry>
    </collision>
  </link>

  <joint name="joint1" type="continuous">
    <parent link="base_link" />
    <child link="bar1" />
    <origin xyz="0 0 0" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
  </joint>

  <link name="bar2">
    <visual>
      <origin xyz="0 0 0.5" rpy="0 0 0"/>
      <geometry>
        <box size="0.15 0.1 1.0"/>
      </geometry>
      <material name="wtf2">
        <color rgba="0.5 0.5 0.6 1.0" />
      </material>
    </visual>
    <collision>
      <geometry>
        <box size="0.15 0.1 1.0"/>
      </geometry>
      <origin xyz="0 0 0.5" rpy="0 0 0"/>
    </collision>
  </link>

  <joint name="joint2" type="continuous">
    <parent link="bar1" />
    <child link="bar2" />
    <origin xyz="0 -0.1 1.5" rpy="0 2.5 0" />
    <axis xyz="0 1 0"/>
  </joint>

  <link name="bar3">
    <visual>
      <origin xyz="0 0 0.75" rpy="0 0 0"/>
      <geometry>
        <box size="0.15 0.1 1.5"/>
      </geometry>
      <material name="wtf3">
        <color rgba="0.1 0.5 0.7 1.0" />
      </material>
    </visual>
    <collision>
      <geometry>
        <box size="0.15 0.1 1.5"/>
      </geometry>
      <origin xyz="0 0 0.75" rpy="0 0 0"/>
    </collision>
  </link>

  <joint name="joint3" type="continuous">
    <parent link="bar2" />
    <child link="bar3" />
    <origin xyz="0 -0.1 1.0" rpy="0 -0.45 0" />
    <axis xyz="0 1 0"/>
  </joint>

  <link name="base_link2">
    <visual>
      <origin xyz="0 0 -0.06" rpy="0 0 0"/>
      <geometry>
        <cylinder length="0.12" radius="0.20"/>
      </geometry>
      <material name="wtf4">
        <color rgba="0. 0.1 0.5 1.0" />
      </material>
    </visual>
    <collision>
      <geometry>
        <cylinder length="0.12" radius="0.20"/>
      </geometry>
      <origin xyz="0 0 -0.06" rpy="0 0 0"/>
    </collision>
  </link>

  <joint name="joint4" type="continuous">
    <parent link="bar3" />
    <child link="base_link2" />
    <origin xyz="0 0 1.5" rpy="0 -2.05 0" />
    <axis xyz="0 1 0"/>
  </joint>

</robot>

MoveIt设置

关于如何根据urdf文件搭建MoveIt2工程,可以看看我之前写的:【在ROS2中,通过MoveIt2控制Gazebo中的自定义机械手】
步骤和之前的类似,主要注意一下这几个问题。
起始link和终点link分别选base_link、base_link2:
在这里插入图片描述
设置好主动关节和从动关节
在这里插入图片描述可以看到,虽然像那么一回事了,虽然末端还是会抖动。

四连杆机构

主要的难点在于urdf无法描述闭环的结构树。理论上base_link2是要固定到base_link上的,但是不允许这样做。
因此只能在moveIt中控制好终端机构的位姿来见解实现了。

曲柄滑块机构

如何在moveit中实现下面这个曲柄滑块机构?【图像来源】
在这里插入图片描述思路和前面的四连杆机构类似,

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。