ROS机械臂三维仿真_ros 机械臂仿真-程序员宅基地

技术标签: 仿真  机械臂  

当我们设计一个新设备时,需要创建一个3D模型来判断其总体外观、尺寸、装配参数、可制造性、有限元分析等。但这些模型或多或少都是虚拟的,我们可以手动移动。 但是假设你正在设计一个机器人、一辆自动驾驶汽车、一架无人机。 在制造之前,最好先完成控制系统的准备工作,这样我们才能真正了解它是如何工作的。 这对于选择正确的零件也有很大帮助。 我们可以优化设计,而不是过度设计。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎

我们可以使用多种工具来实现此目的。 如果你确实要从理论上测试某些内容并且必须进行大量自定义数学建模,那么 MATLAB Simulink 将是你的最佳选择。 它更容易使控制系统可视化,并且具有众多功能。 MATLAB 涵盖的范围确实是无穷无尽的。 但它是一个昂贵的软件,而且是一个笨重的软件,有时还相当复杂。

还有另一种选择。 带有 Gazebo/Rviz 的机器人操作系统 (ROS)。 ROS是使用的框架,Gazebo/Rviz是模拟工具。 其有用的功能是,(除了模拟之外)你可以使用你制作的 ROS 工作区,并通过一些细微的更改将其直接集成到硬件中。 但你确实需要了解 ROS 环境并稍微习惯一下。

总结来说,这两个都不错。 但只有一种是开源且便宜的。

大多数开始使用 ROS 的人都使用可用的软件包,例如 Panda/UR/Kuka 机器人,其中已包含 3D 模型。 这些包主要用于模拟现有的机器人手臂。 但是,如果您想在那里获得自己的设计,并检查它如何与运动学算法配合使用并检查碰撞,则需要将您的设计转换为统一机器人描述格式(URDF)文件。 我们将了解如何使用 Solidworks 来做到这一点,以及如何通过 MoveIt 在 ROS 环境中使用该文件! 和瑞维兹。

你需要为 ROS 和 Rviz 部分安装 ubuntu,并为建模安装 Solidworks。 我正在使用 Solidworks 2018 和 Ubuntu 18.04 以及 ROS melodic。

让我们开始吧。

1、Solidworks

我假设正在阅读本文的任何人都已经拥有了在 Solidworks 中设计的机器人手臂。 MoveIt! 中提供的求解器主要由 6 自由度机械臂支撑。 因此,为了简单起见,我将模拟 6 自由度手臂。

首先,必须在 Solidworks 中安装 Solidworks URDF Exporter 插件。 在此处下载 urdf 导出器。 关闭所有打开的 SolidWorks 窗口并安装。 打开 SolidWorks 插件并激活 URDF 导出器:

对于某些版本,导出器将位于“文件”>“导出为 URDF”,而对于某些版本,导出器将位于“工具”>“导出为 URDF”。

我制作了一个简单的小型 3D 打印机器人模型。 末端执行器目前是开放端。

6 个关节如上图所示。 在此类设计中,为每个链接使用不同的子组件通常是良好的设计实践。 在这种情况下,必须为组件中的每个链接使用不同的子组件。 设计树应该看起来像这样。

正如你所看到的,每个链接都有自己的子组件。 如果你使用子装配体,请使子装配体成为刚性的。 但根据我的经验,最好将这些子装配体转换为零件文件。 URDF 转换器仍然不完美,它会给出一些不寻常的错误。 有一个不寻常的问题,即转换为 URDF 后,子装配体中的零件会浮动,如下图所示。 因此,最好将子装配体转换为零件文件。

接下来,就是配合。 由于所有接头都是旋转接头,在这种情况下,仅使用的配合是重合且同心的配合。 对于基础关节,你可以将其固定,也可以将其约束到具有重合配合的装配平面(利用基础链接中的主平面)。 请参见下图,设计树中的“配合”部分。

基础连杆平面与装配平面(黄色框)有 3 个重合配合,之后是 6 个同心关节,每个连杆的每个关节有 6 个重合关节。 你可以观察上图中每个关节之间的关系。 它是一个 6 DOF 机器人,因此有 6 个关节(但通常的命名约定为 0-5)。 将所有组件配对后,我们必须考虑颜色。 根据我的经验,如果它是装配中的零件,则 URDF 将采用零件级别中给定的外观。 因此,在将所有链接子装配体转换为零件文件并装配后,为装配体中的每个接头零件添加外观。 唯一的缺点是每个链接只有单一颜色。 但欢迎你通过在功能级别的装配体中添加颜色来尝试这一点。

现在开始实际生成 URDF 文件。 在我的 Solidworks 2018 SP 0.1 中,它位于“工具”>“导出为 URDF”中,对于某些版本,它位于“文件”>“导出为 URDF”中。 无论哪种方式,它都会为你提供一个属性管理器窗口,如下所示。

显然,底座之后的所有后续关节都依赖于底座运动,连杆 1 之后的所有连杆都依赖于底座和连杆 1 的运动,依此类推。 这是一个开放的运动链。 因此,我们需要在导出器中定义它。 不同的步骤看起来像这样。

我们在这里所做的是定义组件之间的关系。 因此,正如你在 1 中看到的,我为底座指定了名称 Link_0,并在装配中选择了底座的零件/子装配。 只需单击模型中的底座即可识别。 然后我们必须选择基础的子链接数量。 由于这是一个运动链,因此只有一个子链接,因此输入为 1。当你选择时,下面会出现 Link_0 的子实体。 如果选择 2(两轮汽车的情况),将会是这样的。

单击子链接后,你将看到属性管理器窗口变为上面的第二个窗口。 和之前一样,命名链接,选择型号,选择子链接。 唯一的新鲜事就是为联合命名。 所有链接的所有后续窗口看起来都相同,输入最后一个链接后的最终窗口看起来像图中的第三个窗口。 你可以在此窗口中查看运动链以及链接之间的一般关系。 完成后,单击预览和导出按钮。 这将生成所需的参考几何图形。 就像坐标系和旋转轴一样。 生成后,会生成一个这样的窗口“Solidworks Assembly to URDF Exporter”。

该窗口将生成 URDF。 但是,在此之前,我们需要检查一些事情。 所以,现在尽量减少这种情况。

使用 MoveIt! 和ROS时我们需要遵循一个约定。 请查看 ROS 官方指南的 1.1 节以了解更多有关约定的信息。 但基本上,它表示 Z 轴朝上,X 轴朝前(这将是在关节 0 角度为 0 的情况下连杆 0 所面向的方向)。 如果查看 URDF 导出器生成的坐标系和轴,将会是这样的。

原点全局定义了机器人手臂在 Rviz/Gazebo 的全局坐标系中的放置位置。 在 Solidworks 中,这会自动与装配体的主坐标系对齐。 一般来说,我更喜欢机器人位于模拟环境的中心。 为了实现这一点,组件的原点应位于机器人底座的中心。 但通常情况下,事实并非如此。 因此,我们需要将URDF模型的Origin_global移动到base的中心。 为此,我们需要使用投影点的“面中心”方法(或适合您的模型的方法)来投影点,如下所示

这就是我希望 Rviz/Gazebo 环境的起源所在。 创建该点,然后编辑 Origin_global 点的特征,并将我们创建的点指定为坐标系的原点。 在此之前,请记住将我们创建的点移至设计树中 Origin_global 上方。 坐标系的位置就完成了。 现在方向。 我们可以使用模型中的边来定义轴的方向。 但是,URDF 生成器会生成如下所示的草图,使用它作为坐标系参考会更容易并且不会出现错误。 现在只定义原点就可以了。 但我们可以使用坐标系并正确定义机器人手臂的初始位置

调整坐标系后,检查轴是否与旋转/棱柱关节正确对齐,然后关闭出现的对话框,它会要求保存更改的配置,这应该是响亮的“是”。

然后,重新开始 URDF 导出器,不要更改任何设置,与以前一样,单击“预览和导出”以获取“Solidworks Assembly 到 URDF 导出器”窗口。 由于这是初学者教程,因此我们目前不想更改任何内容。 单击下一步,你将看到这样的窗口。

这将显示链接的惯性数据、碰撞数据和纹理。 但我们现在不想讨论这个。 只需按“导出 URDF 和网格”即可。 并且它会给出一个保存对话框。 它将把程序集的名称命名为 xxxx.SLDASM。 删除这个。 并将其替换为名称中没有数字、点的内容。 您可以使用下划线。 例如:robot_arm_one 是一个不错的名字。 命名约定应遵循ROS中的命名约定,一般情况下,小写字母和下划线,不以数字开头或结尾是命名的最佳实践。

保存到文件夹后,该文件夹应如下所示,

您可以将整个文件夹保存到外部驱动器并在 ubuntu 中使用,或者如果您在双启动中使用同一台电脑,则只需导航到保存位置。 现在我们已经完成了 URDF 生成,让我们看看如何通过 MoveIt 在 ROS 中使用它!

2、在Ubuntu上

启动到 ubuntu 并安装 ROS(如果还没有的话),我建议使用 melodic morenia,因为kinetic kame 现在已经很旧了,而 melodic 支持几乎所有内容。 使用念力忍者也可以。 这是针对 moveit 1,它使用 ROS1,还有 moveit 2,它使用 ROS2 (Foxy Fitzroy),但我们不会在此介绍。

因此,安装 ROS,请按照此教程进行操作。 然后,使用这个指南安装 MoveIt! 运动规划框架。 安装过程非常简单,使用 Ctrl+Alt+T 打开终端并复制粘贴教程中的命令。 你应该拥有良好的互联网连接才能执行此操作。

安装 MoveIt 和 ROS 后,你的主目录应该有 ws_moveit (或你为工作空间指定的名称)文件夹。 复制我们从 Solidworks 生成的文件夹,并将其粘贴到 /src/ 中。 此时,打开终端并运行这些命令:

Cd ~/ws_moveit

Catkin build

这应该需要一点时间,并且应该给出类似这样的内容(包的数量取决于 src 文件夹内的文件夹,在我的例子中,我有 8 个其他模型)

之后,输入

source devel/setup.bash

这将获取你刚刚构建的文件夹。 现在,我们将使用 MoveIt 设置助手。 这使得制作配置文件(这将是一项复杂的任务)变得更加容易。 使用同一终端并键入以下命令:

roslaunch moveit_setup_assistant setup_assistant.launch

这将显示这个窗口,我们可以用它来配置我们刚刚用solidworks制作的URDF

要加载 URDF,请单击浏览按钮,导航到 ws_moveit/src/<urdf_folder_name>/urdf 。

里面应该有一个 .csv 文件和一个 urdf 文件。 选择urdf并打开

然后单击加载文件。

如果出现错误,可能是由于未构建和获取文件,以及命名约定错误。 检查加载时是否出现错误。

加载后,应该可以正确显示模型。 像这样的颜色(如果适用)。

然后我们要一步步配置所有的关节条件、末端执行器信息等。

移至自碰撞选项卡。 单击生成碰撞矩阵。 它应该显示这样的表格,

这会检查可能发生冲突的链接,并禁用不会冲突或冲突概率最小的链接对。 例如,基本链接和链接一的冲突概率非常低,因此,我们可以安全地禁用这两个链接之间的冲突。 一般来说,彼此相邻的连杆不会发生碰撞,但例如末端执行器和底座很可能发生碰撞。 因此,碰撞检测将对这些激活。 您可以切换到矩阵视图并获得更清晰的图像。

接下来,转到虚拟关节。 我需要固定机器人的底座; 因此,本节让我在底座和外部框架(无论是 Rviz 还是凉亭)之间创建一个虚拟关节,并将其固定到一个地方。

单击添加关节,给出虚拟关节名称和父框架名称,选择要修复的链接,然后设置关节类型(我会选择固定,因为我希望它是静止的,但假设你正在模拟汽车, 您可以使用平面(2 DOF)(假设您正在模拟无人机),也可以使用浮动(3 DOF))。 完成后应该是这样的

然后继续进行计划组。 这会将你拥有的链接分组在一起。 或者更确切地说,它将机器人中不同的运动链组合在一起。 在这个 6 DOF 手臂中,只有一个运动链,因此也只有一个运动组。 但是,例如,你有一个双手机器人,两只手将有两个组,因为它们是两个独立的运动链。 为此,给出运动学组的名称,并选择运动学解算器,你可以使用 kdl_kinematics_plugin/KDLKinematicsPlugin ,这在大多数情况下都非常好,但当然你也可以使用其他解算器。 单击添加关节,将显示这样的窗口

选择所有关节(或该特定组中所需的关节)并按 >,这将选择关节并将其移动到单个组中。 然后单击“保存”以保存该组

接下来进入机器人姿势。 我们可以用它来定义机器人的默认姿势(例如:默认 0 位置、修复位置、校准位置等)

设置所需的角度,然后单击“保存”。

接下来继续添加末端执行器。 选择末端执行器的父链接(为此,它将是链接 5),为末端执行器指定名称,然后设置保存。

接下来是被动关节,即非驱动关节,此处不适用。 ROS 主题不会发布这些特定关节的关节状态。 然后我们进入 ROS 控制部分。 这是我们指定手臂想要什么样的控制,位置控制,速度控制,扭矩控制等。这实际上取决于机器人的偏好和应用,但是对于像这样的普通机器人手来说,这是 通常用于拾取和放置操作,位置控制会更合适。 因此,在ROS控制部分中,添加一个控制器,为控制器命名(记住命名约定)并选择所需的控制器类型 position_controllers/JointPositionControllers,然后单击保存。

接下来,我们继续设置作者信息,设置维护此信息的人员/公司的名称以及电子邮件。

最后,保存配置文件,剩下的就是设置路径、配置文件夹的名称(记住命名约定)并保存。 将配置保存在catkin工作区(MoveIt!工作区)的src文件夹中。 并生成包。

关闭设置助手,然后检查所有文件夹是否都存在。 它应该具有这样的文件夹结构。

现在我们已经完成了配置文件的生成,剩下的就是在 Rviz 中模拟它。 生成过程会自动生成一个演示启动环境,其中除了您的模型之外什么都没有。 加载该文件后,我们可以在空旷的环境中测试机器人手臂。

我们必须在catkin工作区中打开一个终端,构建并获取配置文件。 在新终端中运行以下命令。

cd ~/ws_moveit

Catkin build

source devel/setup.bash

打开模拟,运行以下命令

roslaunch evo_arm_vtwo_config demo.launch

这将启动 Rviz 模拟环境。

使用箭头并拖动它们,可以重新调整机器人的方向。 如果你没有运动规划选项,请转到菜单栏中的面板菜单并勾选以下选项

要查看机器人如何移动,请使用末端执行器中显示的三重轴移动机器人。 您可以看到一些链接变成红色,表示发生冲突。 移动后,单击MotionPlanning面板的Context选项卡,并如下设置Planning库。

然后转到“计划”选项卡并运行计划和执行。 你将看到机器人手臂的轨迹和算法找到将机器人从初始位置移动到您设置的位置的路径。 也可以从面板菜单中打开轨迹滑块,以在其轨迹中的任何点暂停机器人手臂。

3、结束语

这基本上就是将你的 Solidworks 设计从 Solidworks 移植到 ROS 环境的方法。 你还可以使用 Gazebo 来模拟这一点,而不是 Rviz,或者同时使用两者(特别是如果您有点云设置等感知方法)。 这是一个非常基础的教程。 如果进一步探索它的功能,这可能是一个非常强大的工具。


原文链接:ROS机械臂仿真 - BimAnt

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shebao3333/article/details/135448720

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签