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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Universal Robot——在Gazebo中模拟UR5机器人相关的知识,希望对你有一定的参考价值。


今天的目标是在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


一个空的世界,当然,是一件无聊的事情,所以让我们把机器人放进去吧。我们使用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


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

碰撞属性

为了进行适当的模拟,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


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

快速开始

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

如果需要,安装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


-SIMULATED ROBOT SETUP .4

ROS2机器人编程简述新书推荐-A Concise Introduction to Robot Programming with ROS2

ROS2机器人编程简述humble-第二章-Executors .3.5

书中没有使用几乎所有教程都会采用的turtlesim。

美美的圣诞树画出来-CoCube

如何将数学曲线变为机器人轨迹-花式show爱心代码-turtlesim篇

直接Gazebo仿真案例走起了。

到目前为止,已经看到了基本包,展示了ROS2的基本元素,以及如何创建节点、发布和订阅。ROS2不是通信中间件,而是机器人编程中间件,试图为机器人创建行为。因此,需要一个机器人。机器人相对昂贵。有可能有一个真正的机器人,比如装有激光和RGBD相机的Kobuki,价格约为1000欧元。一个被认为是专业机器人的价格可以达到数万欧元。由于并非所有读者都计划购买机器人来运行ROS2,将在模拟器中使用Tiago机器人。Pal Robotics的Tiago机器人由带距离传感器的差动底座和带手臂的躯干组成,头部装有RGBD摄像头。在我们已经添加到worsespace的软件包中,已经有必要在Gazebo中模拟Tiago机器人(ROS2中的参考模拟器之一)。

仿真0成本!除此之外,算法也基本都可以验证,学习机器人学必备利器。

sim.launch

import os

from ament_index_python.packages import get_package_share_directory

from launch import LaunchDescription
from launch.actions import (DeclareLaunchArgument, GroupAction,
                            IncludeLaunchDescription, SetEnvironmentVariable)
from launch.conditions import IfCondition
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration, PythonExpression

def generate_launch_description():
    tiago_gazebo_dir = get_package_share_directory('tiago_gazebo')

    world = LaunchConfiguration('world', default='home')
    declare_world_cmd = DeclareLaunchArgument(
        'world',
        default_value='home',
        description='World name')

    tiago_sim_cmd = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(os.path.join(tiago_gazebo_dir, 'launch', 'tiago_gazebo.launch.py')),
        launch_arguments=
          'world_name': world,
          'arm': 'no-arm'
        .items())

    declare_use_sim_time_cmd = DeclareLaunchArgument(
        'use_sim_time',
        default_value='True',
        description='Use simulation (Gazebo) clock if true')

    ld = LaunchDescription()

    ld.add_action(tiago_sim_cmd)

    ld.add_action(declare_use_sim_time_cmd)
    ld.add_action(declare_world_cmd)

    return ld

运行仿真:

ros2 launch br2_tiago sim.launch.py

支持环境如下:

$ ros2 launch br2 tiago sim.launch.py world:=factory
$ ros2 launch br2 tiago sim.launch.py world:=featured
$ ros2 launch br2 tiago sim.launch.py world:=pal office
$ ros2 launch br2 tiago sim.launch.py world:=small factory
$ ros2 launch br2 tiago sim.launch.py world:=small office
$ ros2 launch br2 tiago sim.launch.py world:=willow garage

注意:world依据需要进行加载。

复习一下之前章节中学过的所有内容,可以更好的掌握ROS2和Gazebo。

比如:ros2 topic list

 ros2 topic list
/arm_controller/joint_trajectory
/arm_controller/state
/arm_controller/transition_event
/base_imu
/clock
/diagnostics
/distance/sonar_base
/dynamic_joint_states
/floating_base_pose_simulated
/gripper_controller/joint_trajectory
/gripper_controller/state
/gripper_controller/transition_event
/ground_truth_odom
/head_controller/joint_trajectory
/head_controller/state
/head_controller/transition_event
/head_front_camera/depth/image_raw/compressed
/head_front_camera/depth/image_raw/compressedDepth
/head_front_camera/depth/image_raw/theora
/head_front_camera/depth_registered/camera_info
/head_front_camera/depth_registered/image_raw
/head_front_camera/depth_registered/points
/head_front_camera/image_raw/compressed
/head_front_camera/image_raw/compressedDepth
/head_front_camera/image_raw/theora
/head_front_camera/rgb/camera_info
/head_front_camera/rgb/image_raw
/input_joy/cmd_vel
/joint_state_broadcaster/transition_event
/joint_states
/joy
/joy_priority
/joy_vel
/key_vel
/marker
/marker_vel
/mobile_base_controller/cmd_vel_unstamped
/mobile_base_controller/odom
/mobile_base_controller/transition_event
/nav_vel
/parameter_events
/pause_navigation
/performance_metrics
/phone_vel
/robot_description
/rosout
/rviz_joy_vel
/scan_raw
/servoing_cmd_vel
/stop_closing_loop
/tab_vel
/tf
/tf_static

一个机器人通常具备超过20个以上主题。

例如:节点负责传感器。通过机器人的摄像头、imu、激光和声纳发布信息。最复杂的节点是相机节点,即RGBD传感器,因为它分别发布深度和RGB图像。每个图像都关联了一个主题相机信息,其中包含机器人相机的固有值。对于每个传感器,标准消息类型用于提供的信息。

遥控机器人:

ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r cmd_vel:=key_vel

图形化工具:rqt和rviz2

ROS 2-带Rviz2的数据显示
RVIZ是一个ROS图形界面,它允许您可视化大量信息,并使用多种可用主题的插件。RVIZ2只是RVIZ进入ROS2的一个端口。
要创建自己的RVIZ2配置,可以组合以下插件。
全局选项
为了能够可视化ZED摄像机发布的信息,必须正确配置全局选项:
关键参数:
固定帧:指示用作所有其他帧参考的帧的名称。可以选择组合框中的每个可用帧。
帧速率:用于更新三维视图的最大频率。30或60 FPS是好值。可用的计算能力应指导决策。
网格
该插件允许可视化通常与地板平面关联的网格。
关键参数:
参考帧:用作栅格坐标参考的帧(通常:<fixed_frame>)
平面单元格计数:单元格中网格的大小
正常单元格计数:垂直于网格平面的方向上的单元格数(通常为0)
单元尺寸:每个网格单元的尺寸(单位:米)
平面:标识栅格平面的两个轴
机器人模型
该插件允许根据URDF模型的描述可视化机器人模型。
关键参数:
可视化启用:启用/禁用模型的三维可视化
描述来源:可以在文件和主题之间进行选择。在编写本指南时,“主题”选项未按预期工作,因此“文件”是正确的选项
描述文件:包含Robot Description.URDF。
通过展开“链接”,可以看到整个模型树,其中包含所有可用的关节和链接,以及空间中相对于固定框架的相对位置和方向。
时间间隔(TF)
该插件允许可视化组成TF层次结构的所有帧的位置和方向。
关键参数:
显示名称:启用/禁用链接名称的三维可视化
显示轴:启用/禁用框架轴的三维可视化
显示箭头:启用/禁用连接各个框架的箭头的三维可视化
标记比例:用于重新缩放所有TF对象,使其更清晰,更不混乱
更新间隔:以秒为单位的更新时间。在0离开以查看每个更新
使用此插件的关键是启用/禁用可视化单个帧的功能。允许只专注于对当前任务最重要的部分。
视频
通过遵循视频与RVIZ2教程,了解如何配置RVIZ以可视化视频信息。
深度传感
通过遵循RVIZ2深度教程,了解如何配置RVIZ以可视化深度信息。
位置跟踪
通过遵循RVIZ位置教程,了解如何配置RVIZ以可视化位置信息。
3D对象检测
通过遵循RVIZ对象检测教程,了解如何使用custon Stereolabs插件配置RVIZ以可视化对象检测信息。
平面检测
通过遵循RVIZ对象检测教程,了解如何配置RVIZ以可视化平面检测信息。

以上是关于Universal Robot——在Gazebo中模拟UR5机器人的主要内容,如果未能解决你的问题,请参考以下文章

Making my own Autonomous Robot in ROS / Gazebo

-SIMULATED ROBOT SETUP .4

-SIMULATED ROBOT SETUP .4

[ros robot] --- 机器人系统仿真

[ros robot] --- 机器人系统仿真

Robot Operating System (ROS)学习笔记2---使用smartcar进行仿真