Universal Robot——在Gazebo中模拟UR5机器人

时间:2022-03-21 01:02:42


今天的目标是在Gazebo安装我们的ur5机器人。Gazebo是一个流行的模拟工具,它不仅可以让你像在Rviz中一样可视化你的机器人,而且还内置了一个物理引擎。这样你就可以在更真实的环境中测试你的机器人应用程序。我们将查看我们需要的属性 添加对我们的机器人——我们的order的描述,以模拟它以及如何在Gazebo中生成我们的机器人。

文章目录

  • ​​Gazebo​​
  • ​​添加中间体​​
  • ​​碰撞属性​​
  • ​​极限和动态​​
  • ​​将机器人绑在地面上(一个固定的世界关节)​​
  • ​​快速开始​​

Gazebo

如果您缺少Gazebo(如果您选择完全安装ROS,它应该已经安装好了),只需在您的Linux终端中运行以下命令:

curl -sSL http://get.gazebosim.org | sh

这已经允许我们生成Gazebo环境,例如通过运行:

roslaunch gazebo_ros empty_world.launch

Universal Robot——在Gazebo中模拟UR5机器人


一个空的世界,当然,是一件无聊的事情,所以让我们把机器人放进去吧。我们使用Rviz的前一个教程已经浏览了UR5机器人的描述文件,以理解URDFs。

Gazebo可以使用URDF描述文件来模拟我们的机器人。在引擎盖下,它将URDF转换为另一种更适合模拟的格式SDF。然而,为了使Gazebo能够与我们的URDF一起工作,我们需要添加一些线条。Gazebo需要一些额外的属性,这基本上是影响机器人如何精确移动的所有属性,以获得正确的模拟。你可以找到修改后的URDF与Gazebo一起使用。

添加中间体

Gazebo必须知道机器人部件(即链接)的重量以及它们的惯性,惯性是衡量这些重量如何分布的标准。该信息应包含在URDF内在那之后和章节。这是基础接头的一个示例:

</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>

对于三维转动的刚体,一般的惯性矩阵定义在标签看起来像这样:

Universal Robot——在Gazebo中模拟UR5机器人


这标签分别定义了我们的链接的质量中心或重心。这是我们系统中所有部件的平均位置,这些部件根据它们的质量进行加权。在计算加速度时,这是一个有用的属性。

碰撞属性

为了进行适当的模拟,Gazebo必须知道机器人何时会撞到东西,尤其是它自己。因此,我们需要告诉它我们的链接的几何形状。为简单起见,我们使用。stl文件直接来自我们机器人的CAD模型,它只描述了链接的几何形状,没有任何颜色或材料的定义。通常,这些详细的几何模型通过定义近似几何或降低模型的分辨率来简化,以便更快地计算碰撞。

<collision>
<geometry>
<mesh filename="package://ur_description/meshes/ur5/collision/shoulder.stl"/>
</geometry>
</collision>

极限和动态

此外,我们将为接头特性定义一些限制。这必须添加到标签。

<limit effort="28.0" lower="-3.14159265" upper="3.14159265" velocity="3.2"/>
<dynamics damping="0.0" friction="0.0"/>

这effort决定可以施加到机器人上的最大力(或扭矩),这主要取决于电机的功率。与lower和upper极限我们定义关节可以在径向移动的范围。通过限制最大值velocity,我们限制单个关节可以移动的速度。在里面标签,damping和friction是进一步定义关节动力学的附加参数。我们现在将它们设置为零,因为我们没有它的准确数据,但是为了让你的模拟更加真实,你会希望在你的URDF中有这些。

请注意,限制和动态的定义是可选的,不是使用带Gazebo的URDF的先决条件。

将机器人绑在地面上(一个固定的世界关节)

最后一步,为了将机器人与我们的Gazebo环境连接起来,我们在URDF上增加了一个额外的关节。这个关节——我们称之为世界关节——是固定的,它的唯一目的是将我们的机器人固定在模拟世界中。这就是为什么我们定义world作为父链接,并且base_link作为子链接。

<link name="world"/>
<joint name="world_joint" type="fixed">
<parent link="world"/>
<child link="base_link"/>
<!-- TODO: check base_link name of robot -->
<origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0"/>
</joint>

由于我们现在添加了Gazebo要求的所有内容,我们可以生成机器人了。首先,将Gazebo的URDF文件的内容复制到一个文本文件中,并将其存储在文件系统中的任意位置ur5_gazebo.urdf。其次,如果您还没有安装上一教程中的ur_description包,请运行下面的命令并像往常一样替换 使用您的ROS版本:

~/catkin_ws/src$ git clone -b <distro>-devel https://github.com/ros-industrial/universal_robot.git $
$ rosdep update
$ rosdep install --rosdistro $ROS_DISTRO --ignore-src --from-paths src

然后构建您的工作空间:

~/catkin_ws/src$ cd ..
~/catkin_ws$ catkin_make
$ source $HOME/catkin_ws/devel/setup.bash

现在让我们像以前一样在Gazebo中开始一个空的世界:

$ roslaunch gazebo_ros empty_world.launch

在新的终端中,我们可以使用spawn_model命令生成机器人:

$ rosrun gazebo_ros spawn_model -file /<path-to-your-gazebo-urdf-file>/ur5_gazebo.urdf -urdf -x 0 -y 0 -z 0.1 -model ur5

Universal Robot——在Gazebo中模拟UR5机器人


在上图中,为了更好的可视性,阴影被禁用。你可以通过点击世界标签中的场景并取消阴影选项中的勾号来实现。当你现在看着凉亭里的机器人时,它可能看起来有点可怜,只是软绵绵地躺在地上。这是因为我们现在无法控制机器人上的任何东西,所以模拟中发生的一切都是一个机器人,定义了一堆重量,关节中没有力或摩擦力,只是由于重力而落到地面。这就是为什么我们需要机器人控制器来移动机器人和做一些很酷的事情。

快速开始

和往常一样,对于忙碌的人来说,这些是您需要的命令:

如果需要,安装Gazebo:

$ curl -sSL http://get.gazebosim.org | sh

如果之前的教程中没有安装,请安装universal_robot软件包:

~/catkin_ws/src$ git clone -b <distro>-devel https://github.com/ros-industrial/universal_robot.git $
$ rosdep update
$ rosdep install --rosdistro $ROS_DISTRO --ignore-src --from-paths src

然后构建您的工作空间:

~/catkin_ws/src$ cd ..
~/catkin_ws$ catkin_make
$ source $HOME/catkin_ws/devel/setup.bash

现在复制Gazebo的URDF到您的本地文件系统中的一个名为ur5_gazebo.urdf。然后运行以下两个命令在Gazebo中生成机器人:

$ roslaunch gazebo_ros empty_world.launch
$ rosrun gazebo_ros spawn_model -file <path-to-your-gazebo-urdf/ur5_.urdf -urdf -x 0 -y 0 -z 0.1 -model ur5

或者,您可以简单地从ur5_gazebo包中的一个启动文件开始模拟,它也启动一个控制器:

$ roslaunch ur_gazebo ur5.launch