机械臂过程

rosdep install --from-paths src --ignore-src --rosdistro melodic

0、安装机械手臂

官方教程:
前人教程:UR5机械臂仿真实例

rosdep update 出错,使用小鱼的大佬的 一键配置
wget http://fishros.com/install -O fishros && . fishros
ROS的最简单安装——鱼香一键安装

1、安装中的错误

A、rosdep install --from-paths . --ignore-src --rosdistro kinetic -y

ERROR: the following packages/stacks could not have their rosdep keys resolved to system dependencies: cvg_sim_gazebo_plugins: Cannot locate rosdep definition for [gazebo_plugin]

说明是rosdep找不到文件,注意名称书写是否有问题,版本是否对应的上。
实施这个 rosdep install --from-paths . --ignore-src -r -y
20240426 问题找到:是roscore无法执行成功。因为每一个新的中断都需要执行问题C的方案。【目前此问题已经解决,roscore正常使用中】。

B、编译是的错误:

CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):Could not find a package configuration file provided by "move_base_msgs" with any of the following names:move_base_msgsConfig.cmakemove_base_msgs-config.cmake

网上有很多类似的错误,但是要注意看names后面是什么,有时候就算代码(83)一样,缺的包也是会不一样的。
————————————————
原文链接:https://blog.csdn.net/CHNNNNNNNN/article/details/136262803

解决方案:

安装却是的包即可:
sudo apt-get install ros-melodic-move-base-msgs

也可以github下载一个包

C、catkin_make not found

执行catkin_make 是报错
Command 'catkin_make' not found, 
but can be installed with:sudo apt install catkin

解决方案:[可能是某些操作删除了该工具]

source /opt/ros/melodic/setup.bash
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

D、报错:vmw_ioctl_command error 无效的参数

运行:roscore & rosrun gazebo_ros gazebo 或者 terminal 直接输入:gazebo即可;
解决方法:在~/.bashrc文件写入export SVGA_VGPU10=0,即:通过输入以下命令,关闭硬件加速功能

2、运行ur5机械手臂时候的报错。

运行 gazebo_ros_control.launch时,错误如下:

    [ERROR] [1571212497.739111392, 0.166000000]: No p gain specified for pid.  Namespace: /gazebo_ros_control/pid_gains/shoulder_pitch_joint[ERROR] [1571212497.744784033, 0.166000000]: No p gain specified for pid.  Namespace: /gazebo_ros_control/pid_gains/elbow_roll_joint[ERROR] [1571212497.747626326, 0.166000000]: No p gain specified for pid.  Namespace: /gazebo_ros_control/pid_gains/elbow_pitch_joint[ERROR] [1571212497.749455772, 0.166000000]: No p gain specified for pid.  Namespace: /gazebo_ros_control/pid_gains/wrist_roll_joint[ERROR] [1571212497.751916855, 0.166000000]: No p gain specified for pid.  Namespace: /gazebo_ros_control/pid_gains/wrist_pitch_joint[ERROR] [1571212497.757109573, 0.166000000]: No p gain specified for pid.  Namespace: /gazebo_ros_control/pid_gains/gripper_roll_joint

可忽略此错误,原因见参考文献。
————————————————

原文链接:https://blog.csdn.net/u011304078/article/details/102588040

解释见:No p gain specified for pid

https://roboticscasual.com/robotics-tutorials/

1、How to Start Learning Robotics

你对机器人感兴趣吗?你想制造会动、会感觉、会思考的机器人吗?太好了!你不确定从哪里开始吗?那这篇文章就送给你了!
机器人是一个包含多个学科的多样化领域,因此没有一个单一的起点。在文章的开始,我将概述机器人学中最重要的主题。之后,我们将讨论开始学习过程的最佳方法(通过做自己的项目),我将为您指出从哪里开始的具体资源。在做这些项目的时候,你会顺便学到一些理论。我们将讨论如何最有效地做到这一点,并向您展示一些最好的在线资源。最后,我们将讨论如何更专业地做机器人,并成为一名机器人开发者。让我们开始你的学习之旅吧!

The Different Disciplines in Robotics
一般来说,机器人技术的发展都与机械、电子和编程有关。它们中的每一个都涵盖了机器人开发中不同但同样重要的部分。力学是关于机器人的机械性能。它是移动的吗(例如,它有轮子吗)?是机器人手臂吗?它能举起多少重量?这一切都取决于机器人的机械设计。
电子学处理电动机的控制以使机器人移动。它还关注机器人的传感器,这些传感器用于测量物理世界中的事物,从而获得对环境的感知。
编程使机器人变得智能。它是以代码的形式告诉机器人如何移动以及如何使用传感器信息。它还旨在使机器人能够做出自己的决定。如果你想知道机器人领域最常用的编程语言是什么,请查看这篇文章。
为了从头开始建造一个真正的机器人,你需要处理每一个问题,但不要担心,你不需要一次学会所有东西。在下一段中,我们将讨论让学习机器人变得有趣和有动力的最佳方法。

The Best Learning Approach for Beginners is Learning by Doing
对初学者来说,最好的学习方法是边做边学
在开始的时候,不要打开一本理论教科书去学习算法。这种方法很快就会变得非常令人沮丧。相反,从项目开始。项目很有趣,最终你有东西可以展示!这样你就有了一个明确的目标,你的学习之路就会变成你实现目标所需要知道的一切。因此,在做酷项目时,你会获得知识作为副产品!
有各种各样的项目可以开始。你可以开始用Arduino微控制器板或Raspberry Pi单板计算机构建一个简单的机器人。当你从零开始用一个简单的底盘、一些电机和传感器以及一个简单的处理单元制造一个这样的机器人时,你可以同时学到机械、电子和编程知识。您可以购买完全组装的机器人或机器人套件来自己组装机器人。您还可以从头开始设计某些部件,比如自己的3D打印部件,或者创建自己的电路。这样你就可以调整难度水平,决定你想更详细地了解什么。
然而,如果你不想花钱或者你对机器人技术的机械/电子部分不太感兴趣,你就不需要一个物理机器人。事实上,你需要的只是一台电脑。今天,你可以在你的电脑上模拟机器人,这几乎和拥有一台实体电脑一样有趣。这不需要前期投资,而且有大量的在线资源可以指导您。现代机器人技术的一个幸运发展是机器人操作系统的发展。它是一个用于机器人的开源操作系统,在社区甚至专业机器人公司中广泛使用。在这个博客上,我们有一堆关于如何使用ROS进行机器人开发的教程,请在这里查看。
如果你想要一个更详尽的列表和对你可以开始的项目的详细描述,我有一篇关于开始学习机器人的最佳项目的文章,其中包括有硬件和没有硬件的项目。

But what about the theory?
但是你只有知道你正在做的事情背后的理论,你才能彻底理解这些事情,对吗?这是一项崇高的努力,但也可能非常令人畏惧和沮丧。如果你试图从一开始就理解一切,你会很快不知所措。当然,当你做这些项目时,问题就会出现。当这种情况发生时,对它们做一些研究。通常快速的网上搜索会在几分钟内给你一个答案。如果这些话题中有一些变得更加复杂,不要担心。对于项目来说,通常不需要理解每一个细节,所以如果你觉得没有把握住,你可以继续前进。
另一方面,如果某样东西激发了你的兴趣,那么你应该利用它,深入挖掘。有时,你会在基础的基础上结束,如运动学,动力学,控制或运动规划。
这些是通常在教科书中涉及的基础知识。如果你在寻找答案的过程中得到了这些基本原则,那么你不妨看看文献。然而,现在你会明白这个问题从何而来,以及它与一个真实的机器人项目有何关联。这将使学习理论更容易,更有动力。如果你不是一个爱读书的人,你就不需要拘泥于课本。有很多在线资源,从在线讲座、教程视频到博客文章,都非常擅长解释理论概念。要获得详尽的列表,请查看我关于学习机器人的最佳在线资源的文章。

The Path to become a professional robotics developer
现在让我们假设你已经处理过实际项目,甚至可能有一点理论。也许你已经找到了真正让你感兴趣甚至兴奋的话题。如果你已经在考虑从事机器人专业是否适合你,我想在这里给你一些指导。从事机器人专业工作很有趣,也是一份伟大的职业,成为机器人开发人员有很多途径。一般来说,拥有技术大学/学院学位会有所帮助。哪种学位在很大程度上取决于你想从事的机器人领域。我写了一篇关于从事机器人工作的最佳学位的文章,其中也涵盖了你将在这些学位中学到什么以及它们将教给你哪些有价值的机器人技能。
不过,要想在机器人领域找到工作,你不一定需要有一个完整的工程/计算机科学学位。例如,如果你知道如何编程,与ROS合作过,并对机器人基础知识略知一二,这已经是机器人职业生涯的良好基础。转行者总是有机会进入这个行业。

Conclusion
我希望这份指南对你开始机器人学习之旅有所帮助。按照我描述的学习过程是非常有益的,最终会给你最好的体验。即使你有时可能会遇到困难,你也总能在网上找到帮助,因为有一个很棒的机器人社区随时准备为你提供指导。机器人技术是非常有益的,它是为每个人服务的。你可以从最简单的项目开始学习,有一天你可能会在该领域获得博士学位。无论你正处于学习旅程的哪个阶段,本网站都会尽力为每个人提供有用的信息和指导。所以一定要看看我博客上的其他文章🙂

2、The Best Projects to learn Robotics

在之前的一篇文章中,我谈到了如何开始学习机器人技术。今天我们将探讨一些最有趣的项目创意。建造东西比阅读教科书有趣得多,你将在途中探索理论。从事机器人技术的门槛降低了很多,因为现在你只需要一台电脑,甚至不需要任何电子知识。有时,从哪里开始会令人困惑。在机器人领域,有成千上万个可能的项目和各种不同的主题可供您探索。在这篇文章中,我将概述你可以做的不同类别的项目,并介绍一些最有趣的项目。我们将介绍带有嵌入式主板的DIY机器人,如Raspberry Pi或Arduino,更先进的机器人以实验机器人操作系统(ROS)和您可以完全在模拟中完成的项目!

DIY Robot Projects with Rasperry Pi or Arduino书梅派/单片机
Arduino和Raspberry Pi是两种嵌入式计算机板, 非常适合构建机器人。它们体积小,易于编程,尽管占地面积小,但具有相当大的计算能力。您可以轻松地将它们安装在不同的机器人底盘上,并连接电机和各种传感器。你的想象力是你的极限。
阿尔杜伊诺
Arduino板没有Raspberry Pi强大,但可能更容易设置,也更便宜。以下在circuitdisgest上展示的Arduino项目展示了如何建造一个能够避开障碍物的自动驾驶机器人:
它使用超声波传感器来测量到下一个物体的距离。如果对象要关闭,它会自动更改目录。一个arduino板只需要6美元,一个简单的机器人底盘,包括在他们的设置中使用的电机,只需要15美元,而一个超声波传感器是2美元。所以总而言之,这是一个便宜,简单,有趣的起步项目。

Raspberry Pi更像是一台功能强大的迷你电脑,可以运行像Linux这样的操作系统。在这个线跟踪项目中,他们将一个红外传感器连接到RasPi,使机器人能够跟踪地板上的黑线。这是一个非常常见的用例,例如仓库机器人。他们使用Python为机器人编程,这是一种编程语言,易于开始,但在专业机器人应用中使用很多。
还有很多其他很酷的DIY机器人项目,比如手势控制的机器人手臂或可以通过智能手机甚至语音控制的机器人。你看,这些简单的嵌入式主板的机会是无限的。
这些DIY项目是学习电子、传感器、致动器以及接近硬件的编程的好方法。如果你不想自己组装和布线,也有很多商店提供廉价的机器人套件,例如机器人商店。

Robot platforms running on ROS
ROS(机器人操作系统)是一个用于机器人应用的开源软件框架,近年来广受欢迎。它被广泛用于大学机器人教学,甚至被专业机器人公司使用(点击此处了解更多信息)。围绕ROS有一个很棒的社区,提供教程、帮助和现成的实现。然而,为了在机器人上运行ROS,一些带有操作系统的计算能力是必要的。你可以在你的计算机上进行纯粹的ROS模拟实验,我们将在下一节中讨论这一点,但也有专门用于ROS的真实机器人。

TurtleBot
可能最受欢迎的是TurtleBot,它的最新版本3是由Robotis开发的。这是一个移动平台,主要用于导航,但也可以连接一个手爪来完成操作任务。最小版本的起价为549美元,这一价格并不算低,但当你看到这些功能时,它会变得更有吸引力。在其他组件中,它配备了强大的电机,相当多的计算能力,电池组和360度激光雷达,允许建立一个环境地图(使用SLAM算法)。更昂贵的版本甚至有一个摄像头来试验计算机视觉应用。所有这些使得TurtleBot在研究和教育领域非常受欢迎,所以如果你正在寻找一个在真实机器人上轻松进入ROS的方法,你可能会仔细看看。

Robot Arm
如果你正在寻找一个机器人手臂,看看特罗森机器人公司能提供什么。他们最小的版本PincherX 100起价549美元。它的有效载荷非常小,只有50克,并不是用来制造汽车的,但也许通过一点编程,它可以帮助你用回形针整理你的桌子。因为它是专门为与ROS框架一起使用而开发的,所以有很多资源可以帮助您入门。同样值得一试的是他们产品范围的其他部分,他们提供不同价格类别的不同种类的机器人套件。
你可以在下面的链接中找到一个详尽的机器人列表
最后,如果你想自己制作机器人,可以在Raspberry Pi上安装ROS!由于缺乏计算能力,存在一些限制,但对于各种项目来说仍然足够了。一个例子是在驾驶机器人平台上连接Raspberry Pi,安装ROS并连接XBOX控制器以控制它。Wil Salby在他的博客上描述了这个项目,他还在Raspberry Pi上安装了一个摄像头,用于视觉应用。

Projects with simulated Robots
让我告诉你一些真正令人惊讶的事情:市场上的许多机器人都有模拟模型可用于凉亭和其他模拟器。它们中的许多都可以免费下载,就像Gazebo一样,它允许我们免费玩机器人应用程序!该模拟打开了一个全新的机会世界,因为它允许在现实世界的物理影响下,在不同的环境中在我们的计算机上运行机器人。我们甚至可以模拟传感器数据输入,例如来自3D摄像机的数据。这使得模拟适用于各种项目,包括视觉、感知、运动规划、控制、机器学习等!
在这个博客上,我为Universal Robots的UR5机器人项目写了教程。如果你是凉亭或机器人模拟的新手,首先浏览这些或ROS wiki上的内容肯定是有意义的。在那里,您可以学习如何创建自己的机器人模型以及如何使用move it移动它!包裹。当你准备好接受更雄心勃勃的项目时,也有很多很好的资源可以帮助你。让我向您展示一些在模拟中完成的不同高级主题的有趣机器人项目示例:

–Kuka机器人的机器人运动学
Nick Hortovanyi在他的medium博客上写了关于Udacity的机器人纳米学位计划的项目。其中一门是关于机器人运动学的高级课程。他经历了推导DH参数和构建变换矩阵以计算正向运动学的过程。在此基础上,他编写了一个程序来计算反向运动学,以控制Kuka机器人的抓取位置并执行拾取和放置任务。

–使用TurtleBot进行机器学习3
早些时候,我们谈到了机器人3。他们在其网站上提供指导项目,也用于在模拟中使用机器人。一个有趣的项目是使用机器学习来教机器人避开障碍物。特别是,他们使用强化学习,这是机器学习的一种特殊形式。他们展示了如何安装Tensorflow和Keras以及必要的软件包,如何训练模型以及如何可视化结果。机器学习本身是一个全新的世界,目前很可能是机器人领域最热门的话题,因此值得探索!

–PR2机器人的3D感知
Udacity的机器人纳米学位项目的另一个项目是机器人感知。Nick Hortovanyi描述了识别桌子上物体的项目。使用的是模拟的PR2,这是在willow garage(ROS的创造者)开发的双臂机器人。PR2机器人有一个深度相机,可以提供点云来表示环境。然后处理该点云,并应用各种过滤器来提取所需的信息。最后,训练一个经典的机器学习模型来标记对象。
我刚刚描述的项目是高级的,面向更有经验的ROS用户。然而,目的是给你一些动力,并向你展示在模拟中工作的所有可能性。一旦你开始学习基本的ROS和Gazebo教程和小项目,你会自动获得知识并发现更多你感兴趣并想探索的主题。

在本文中,我试图向您概述最适合学习机器人技术的机器人项目。我试图涵盖具有不同先决条件和范围的不同项目类别。我希望它对你有所帮助,现在你有了一个可以开始搜索和选择最适合你的项目的起点。如果你知道其他值得一试的酷机器人项目,请把它们写在下面的评论中!

3、ROS Tutorial: Visualize the UR5 robot in Rviz – URDF explained

ROS教程:在Rviz中可视化UR5机器人——URDF解释道
好消息!你不需要一个真正的机器人来开始学习机器人技术。Rviz是一个ROS工具,用于在您的计算机上虚拟显示机器人。你所需要的只是你的机器人模型的虚拟描述,一个所谓的URDF。在本文中,我们将从Rviz的Universal Robots中看到UR5机器人,并看看它的URDF。我们还将讨论机器人运动学,这是一个基本概念,在学习机器人技术时理解起来很重要。听起来不错?开始吧!
注意:如果您只想在Rviz中启动并运行UR5,而没有关于URDFs和机器人运动学的内容,您可以直接跳到快速入门部分,在那里您可以找到立即开始的必要命令。否则,让我们马上开始吧!

3.1 Installing an launching Rviz with the UR5 robot 使用UR5机器人安装发射Rviz

我假设您已经在Linux操作系统上安装了您选择的ROS发行版。如果没有,请按照这里的描述进行操作。如果尚未安装Rviz(通常与ROS安装一起安装),只需运行:$ sudo apt-get install ros-$ROS_DISTRO-rviz sudo apt-get install ros-melodic-rviz

此外,安装以下发布机器人关节状态(例如角度)的软件包:
$ sudo apt-get install ros-$ROS_DISTRO-joint-state-publisher-gui
为了在我们的视觉中有一个好看的机器人,而不仅仅是一堆漂浮在太空中的坐标框架,我们必须告诉Rviz我们的机器人看起来像什么。因此,我们想安装ROS工业项目的通用机器人包。这个软件包提供了大量的文件和功能,以便与通用机器人不同的机器人一起工作。其中包含了我们在ur_description包中寻找的视觉信息。因此,首先将通用机器人存储库克隆到您的工作区的src目录中。 ~/catkin_ws/src$ git clone -b melodic-devel https://github.com/ros-industrial/universal_robot.git
如果您不使用git,您也可以下载存储库并将其提取到您的工作区中。接下来,我们必须确保安装了所有依赖项: ~/catkin_ws/src$ cd .. $ rosdep update $ rosdep install --rosdistro $ROS_DISTRO --ignore-src --from-paths src
然后构建您的工作区并激活工作区(如果默认情况下尚未完成此操作): ~/catkin_ws$ catkin_make $ source $HOME/catkin_ws/devel/setup.bash
现在最好的方法是从ROS安装urdf_tutorial包。$ sudo apt-get install urdf_tutorial
我们将在本教程中使用的URDF存储在此链接下。将URDF的内容复制到文本文档中,并在您选择的文件系统位置保存为“ur5_rviz.urdf”。然后,显示机器人刚刚运行:$ roslaunch urdf_tutorial display.launch model:='<path-to-the-urdf-file>/ur5_rviz.urdf'
或者您可以直接使用ur_description包提供的启动文件并运行以下两个命令: $ roslaunch ur_description ur5_upload.launch $ roslaunch ur_description view_ur5.launch
本教程将解释urdf_tutorial使用的自定义URDF和display.launch文件,因为ur5_description包在这些文件中提供了我们现在不需要的附加内容,但这两种方式在Rviz中的工作方式是相同的。
运行启动文件后,您将看到UR5机器人显示在Rviz中。很简单,对吧?除了Rviz之外,启动文件还会启动一个小GUI,让您单独移动机器人关节。这很有趣,但不幸的是,只是玩玩并不能教会我们很多东西,所以让我们看看幕后的URDF,了解它是如何工作的。

3.2 The URDF file

如果您之前没有将URDF复制到您的文件系统中,您可以在此处查看完整的文件,跟随我们浏览URDF的结构。它使用XML格式,由填充信息的不同标签组成。我们要描述的机器人由提供基本文件结构的链接和关节组成:

<robot name=”ur5”><link name =...></link><joint name =...></joint>...
</robot>

我们现在要告诉Rviz的是链接links的样子。可以通过直接在URDF中定义一些几何图形来创建您自己的自定义机器人(详细信息请参见本教程),但是由于我们的UR5机器人已经存在并有良好的文档记录,因此我们只需使用一个描述其外观的文件 .dea。该文件包含在ur_description包中,并直接从机器人的CAD模型中导出。请注意,这仅用于描述其视觉外观。
作为一个例子。肩关节的.dea文件包括如下:

<link name="shoulder_link"><visual><geometry><mesh filename="package://ur_description/meshes/ur5/visual/Shoulder.dae"/></geometry></visual></link>

关于关节joints,我们首先需要定义它们的类型。UR5的旋转接头有一定的限制,属于“revolute”类别。关节的目的是连接和移动链接,因此在< joint>标记中我们指定了一个父链接和一个子链接。< origin>和< axis>标签描述了机器人运动学。

<joint name="shoulder_lift_joint" type="revolute"><parent link="shoulder_link"/><child link="upper_arm_link"/><origin rpy="0.0 1.570796325 0.0" xyz="0.0 0.13585 0.0"/><axis xyz="0 1 0"/><limit effort="150.0" lower="-3.14159265" upper="3.14159265" velocity="3.15"/> 
</joint>

关节描述值得更详细地研究,因此让我们以Rviz为辅助来深入了解正在发生的事情。

3.3 Robot Kinematics 机器人运动学

为了可视化机器人运动学,我们在每个关节的中心想象一个坐标框架。为了描述运动链,我们简单地从基坐标系开始,看看它在到达最后一个关节之前是如何在机器人中传播的。从一个坐标框架到下一个坐标框架可能会发生两种变化。它可以围绕自己的一个轴旋转,如我们在左图中看到的用颜色编码的x轴、y轴和z轴。它的原点可以从一个关节移动到下一个关节,如右图中的箭头所示(在这种情况下,箭头指向相反的方向,但您可以获得概念)。
在这里插入图片描述>这种从一个关节到下一个关节的传播就是URDF中所描述的。作为示例,让我们再次查看肩部平移和肩部提升关节及其相应的父链接和子链接。
协调基础关节和肩关节中的帧Coordinate frames in the base and shoulder joints
我们从位于机器人基础链接底部的世界框架开始。这是机器人与世界连接的地方,也是我们运动链的起点。为了到达肩部关节中心的第二个坐标框架,我们必须沿着z轴移动该框架。这正是< origin >和< axis >标记中定义的内容。

<origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.089159"/>
<axis xyz="0 0 1"/>

xyz属性指的是关节之间坐标系的线性移动。URDF显示第一坐标系必须沿z轴移动0.089159(米)才能到达第二坐标系,而其他轴不变。轴标签定义关节在操作过程中围绕哪个轴旋转(在本例中为z轴)。请注意,这是在坐标系传播之后。
现在,为了进入第三坐标系,还有更多的事情要做。除了沿y轴移动,我们还必须旋转坐标坐标系。这包含在肩部提升关节的描述中:This is contained in the description for the shoulder lift joint:

<origin rpy="0.0 1.570796325 0.0" xyz="0.0 0.13585 0.0"/>
<axis xyz="0 1 0"/>

rpy属性代表滚动、俯仰和偏航。这些命名约定定义如下:
滚动:绕x轴旋转
俯仰:绕y轴旋转
偏航:绕z轴旋转
URDF告诉我们径向旋转角度,因此为了到达第三个坐标系,我们必须绕y轴旋转1.570796325弧度(90度)。这个方案一直持续到我们在最后一个机器人关节处的最后一坐标系结束。

我希望这有助于澄清机器人的结构——其运动学——在URDF中是如何描述的。对于UR5,这是通用机器人定义的零配置姿势。通过将所有关节角度设置为零位置,并像我们对肩关节所做的那样逐个检查关节,您可以理解完整机器人的这种方法。
现在我们知道如何在一个简单的文件中描述一个机器人,这样我们就可以看着它并虚拟地玩它。这种设置非常适合为我们的机器人开发运动规划器之类的东西。然而,除了可视化我们的机器人之外,我们还希望模拟它在物理定律发挥作用的真实世界中的行为。这就是为什么在下一个教程中,我们将看看如何扩展我们的URDF用于功能强大的模拟工具Gazebo!你也可以在这里找到所有教程的概述!

4、ROS Tutorial: Simulate the UR5 robot in Gazebo – URDF explained

今天的目标是在Gazebo安装我们的ur5机器人。Gazebo是一款流行的模拟工具,它不仅可以让你像在Rviz中一样可视化你的机器人,而且还内置了一个物理引擎。这样你就可以在更真实的环境中测试你的机器人应用程序。我们将看看我们需要添加到机器人描述中的属性-我们的order以便模拟它以及如何在Gazebo中生成我们的机器人。
注意:如果您只想让UR5机器人在Gazebo中运行,而不了解URDF中定义的属性以及如何将URDF描述连接到Gazebo环境,那么您可以跳到快速入门部分。在那里,您可以获得在Gazebo中快速生成UR5所需的所有命令。

Gazebo
如果您还没有安装ROS,请按照ROS wiki上的说明进行安装。如果您缺少Gazebo(如果您选择完全安装ROS,它应该已经安装),只需在Linux终端中运行以下命令:

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

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

$ roslaunch gazebo_ros empty_world.launch

当然,一个空旷的世界是很无聊的,所以让我们把机器人放进去吧。我们使用Rviz的前一个教程已经浏览了UR5机器人的描述文件以了解URDFs。如果您对学习URDFs的基础知识感兴趣,请查看之前的文章。
Gazebo可以使用URDF描述文件来模拟我们的机器人。在引擎盖下,它将URDF转换为另一种更适合模拟的格式SDF。然而,为了使凉亭能够与我们的URDF一起工作,我们需要添加一些线条。Gazebo需要一些额外的属性,这基本上是影响机器人移动方式的所有属性,以便正确进行模拟。你可以在这里找到与凉亭一起使用的改进型URDF。在那里,您可以跟随我们详细讨论添加的属性。

Adding intertia
添加中间体
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>

对于三维旋转的刚体,在《inertia》标签中定义的一般惯性矩阵如下所示:
⎛⎜⎝ixxixyixziyxiyyiyzizxizyizz⎞⎟⎠
矩阵元素定义了惯性力矩。Ixx
例如,定义绕x轴的惯性力矩,而Ixy定义惯性力矩的xy乘积。更详细的讨论超出了本文的范围,但是如果您感兴趣的话,可以在google上搜索更多相关信息。此外,我们必须知道的唯一事情是矩阵对角线上方的元素等于其下方的元素,这意味着Ixy=Iyx,Ixz=Izx和Iyz=Izy
。这就是为什么我们只需定义3×3旋转惯性矩阵的六个元素。
《origin》标签分别定义了我们链接的质心或重心。这是我们系统中所有部件的平均位置,这些部件根据它们的质量进行加权。在计算加速度时,这是一个有用的属性。

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

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

Limits and dynamics约束和动态
此外,我们将为接头特性定义一些限制。这必须添加到《joint》标记中。

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

这种努力决定了可以施加到机器人上的最大力(或扭矩),这主要取决于电机的功率有多大。通过下限和上限,我们定义了关节可以在径向移动的范围。通过限制最大速度,我们限制了单个关节的移动速度。在《dynamics》标签中,阻尼和摩擦力是进一步定义关节动力学的附加参数。我们现在将它们设置为零,因为我们没有它的准确数据,但是为了使您的模拟更加真实,您可能希望在您的URDF中使用它们。
请注意,限制和动态的定义是可选的,不是使用带Gazebo的URDF的先决条件。

Tying the robot to the ground (A fixed world joint)
将机器人绑在地面上(固定的世界关节)
最后一步,为了将机器人与我们的露台环境连接起来,我们在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包,请运行以下命令,并一如既往地将《distro/发行版》替换为您的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

我们将URDF文件的路径作为参数和机器人应该产生的坐标传递给它。我们为z轴定义了一个0.1的小偏移量,因为在我们的空白世界的正中心,有一个接地板,它也出现在模型的左侧。这块板是看不见的,但当我们试图将机器人精确地放置在同一位置时,它会引起碰撞。

在这里插入图片描述

在上图中,为了更好的可视性,阴影被禁用。您可以通过在“世界”选项卡中单击“场景”并从“阴影”选项中删除勾号来完成此操作。当你现在看着凉亭里的机器人时,它可能看起来有点可怜,只是无力地躺在地上。这是因为我们现在无法控制机器人上的任何东西,所以模拟中发生的所有事情都是机器人定义了一堆重量,关节中没有力或摩擦力,只是由于重力而落到地面。这就是为什么我们需要机器人控制器来移动机器人并做一些很酷的事情。在下一篇文章中,我们将添加ros_control包并设置一些不错的位置控制器来移动我们的关节。你可以在这里找到所有教程的概述。
然后运行以下两个命令在Gazebo中生成机器人:

教程:用KDL在C++中控制UR5机器人的TCP位置–反向运动学解释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/652386.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【链表】Leetcode 合并k个升序链表

题目讲解 23. 合并 K 个升序链表 算法讲解 首先将所有链表的当前首节点找出来&#xff0c;判断当前的结点哪一个最小&#xff0c;链接到结果链表的后面&#xff0c;但是怎么寻找当前的最小结点&#xff1a;就需要使用优先级队列&#xff0c;我们建立一个小堆&#xff0c;然后…

池化整合多元数据库,zData X 一体机助力证券公司IT基础架构革新

引言 近期&#xff0c;云和恩墨 zData X 多元数据库一体机&#xff08;以下简称 zData X&#xff09;在某证券公司的OA、短信和CRM业务系统中成功上线&#xff0c;标志着其IT基础架构完成从集中式存储向池化高性能分布式存储的转变。zData X 成功整合了该证券公司使用的达梦、O…

AcrelEMS-MH民航机场智慧能源管平台解决方案【可靠供电/降低能耗/高效运维】

民航机场行业背景 自2012年以来&#xff0c;我国民航运输规模出现了显著增长&#xff0c;旅客运输量&#xff1a;从2012年的3.19亿人次上升至2019年的6.6亿人次&#xff08;注&#xff1a;为剔除疫情影响&#xff0c;此处采取疫情前2019年的数据&#xff0c;下同&#xff09;&…

设计不外流,保护创意的同时锁住图纸安全!

在设计行业中&#xff0c;图纸和创意文稿的安全至关重要&#xff0c;因为它们体现了企业的创新能力和核心竞争力。华企盾DSC数据防泄密系统提供了一系列功能&#xff0c;可以有效地保护这些珍贵的设计和文档不被外泄。以下是如何利用华企盾DSC系统保障设计图纸安全的关键措施&a…

局部多项式近似与 AMPM 算法

kappa3; %已在您的代码中定义% 定义窗口大小 windowSize (2*kappa1);% 初始化梯度估计值 [rows, cols] size(wrappedPhase); phi_y zeros(rows, cols); phi_x zeros(rows, cols);% 遍历每个窗口 for m 1kappa:rows-kappafor n 1kappa:cols-kappa% 提取局部窗口Z_mn wrap…

51-46 MCDiff,可控视频合成的运动条件扩散模型

23年4月&#xff0c;加州大学、Nvidia、Meta和Google联合发布了MCDiff模型。这是继DragNUWA之后&#xff0c;咱们介绍的第二篇Motion-guiding类视频生成模型。 Abstract 扩散模型的最新进展极大地提高了合成内容的质量和多样性。为了利用扩散模型的表达能力&#xff0c;研究人…

边OTG边充电芯片LDR6500

随着科技的飞速发展&#xff0c;智能移动设备已成为我们生活中不可或缺的一部分。而在这些设备的连接与数据传输中&#xff0c;Type-C接口以其高效、便捷的特性逐渐占据了主导地位。OTG&#xff08;On-The-Go&#xff09;技术则进一步扩展了Type-C接口的功能&#xff0c;使得设…

LT9611UXC双端口 MIPI DSI/CSI 转 HDMI2.0,带音频

1. 说明 LT9611UXC 是一款高性能 MIPI DSI/CSI 至 HDMI2.0 转换器。MIPI DSI/CSI 输入具有可配置的单端口或双端口&#xff0c;具有 1 个高速时钟通道和 1~4 个高速数据通道&#xff0c;工作速率最高为 2Gbps/通道&#xff0c;可支持高达 16Gbps 的总带宽。 LT9611UXC 支持突发…

网络靶场实战-物联网安全Unicorn框架初探

背景 Unicorn 是一款基于 QEMU 的快速 CPU 模拟器框架&#xff0c;可以模拟多种体系结构的指令集&#xff0c;包括 ARM、MIPS、PowerPC、SPARC 和 x86 等。Unicorn使我们可以更好地关注 CPU 操作, 忽略机器设备的差异。它能够在虚拟内存中加载和运行二进制代码&#xff0c;并提…

JAVA:maven-->>检查 所有依赖 与 环境 兼容

内容 为了确保你项目中的所有依赖都彼此兼容&#xff0c;并与你的环境相适应&#xff0c;你可以利用 Maven 的依赖管理功能。Maven 有助于解决、升级&#xff0c;并对齐所有库的版本&#xff0c;以避免任何不一致或冲突。以下是检查兼容性的步骤&#xff1a; ### 检查兼容性的…

设计普遍逼近的深度神经网络:一阶优化方法

论文地址&#xff1a;https://ieeexplore.ieee.org/document/10477580 传统的基于优化的神经网络设计方法通常从一个具有显式表示的目标函数出发&#xff0c;采用特定的优化算法进行求解&#xff0c;再将优化迭代格式映射为神经网络架构&#xff0c;例如著名的 LISTA-NN 就是利…

SystemUI KeyButtonView setDarkIntensity 解析

继承自 ImageView KeyButtonDrawable intensity为0时按键颜色为白色。 intensity为1时黑色为的调用堆栈&#xff1a; java.lang.NullPointerException: Attempt to invoke virtual method int java.lang.String.length() on a null object referenceat com.android.systemui.…