在Simscape中创建虚拟机器人环境:添加物理、对象交互和自主

由阿列克莎·桑切斯, (2020年8月31日),转载博客地址:https://blogs.mathworks.com/racing-lounge/2020/08/31/creating-virtual-robot-environments-in-simscape-part-2/

这是一个关于在Simscape中创建虚拟机器人环境的两部分博客的第二个部分。如果你还没有读过第一部分,我们鼓励你去看看。这里.

在前半部分,我们讨论了将您的CAD导入Simscape Multibody,并将您的部件与关节连接在一起。在这篇文章中,我们将讨论加入物理,物体交互到你的机器人,最后如何利用SIMULINK编程你的机器人。好好享受吧!

实施物理

一旦您验证了您的主要机器人装配模拟正确,下一步是实现物理,这将导致机器人的行为会像它在现实生活中一样。这样做的第一步是为模拟创建其他对象。例如,使用轮对地面的摩擦力进行移动需要我们有一个地面或地面。我们这样做的简单创建一个非常大的矩形地板与‘砖实心’块。

请注意,“导出整几何学”选项被选中。一旦我们添加了不同环境组件之间的交互,我们将使用这个导出的几何图形。

增加物理-地面驾驶

重力

重力影响到所有的现实生活中的机器人,所以我们自然需要确保我们的模拟也解释了这一点。创建地块后,需要将该块直接附加到3个块:求解器配置, 世界框架,和机构配置。这三个块对于任何Simscape多体模型都是必不可少的,在机制配置块中,我们可以为仿真设置所需的重力。

地面直接连接到World框架,因为我们希望它始终是静态的,而机器人首先使用六自由度关节。六自由度关节允许机器人在相对于世界框架的任何方向上移动和旋转,这是我们想要的,因为我们想要在地板上进行驱动。

为了使机器人在地板上移动,我们需要模拟接触地板时车轮的法向力和摩擦力。幸运的是,这两种力量都可以用一个块来建模:空间接触力“封锁。

还记得我们指出用于导出地块几何形状的复选框吗?这就是它要发挥作用的地方。

增加空间接触力

为了模拟部队和运动,我们需要引入“几何连接“这些连接由虚线/虚线表示。一个“空间接触力”块将两个不同部分的几何连接起来,以模拟它们之间的接触。

Simscape使用所谓的“凸包表示“对我们进口的CAD的几何形状进行建模。这可能会导致奇怪的物理表现时,使用具有许多功能的部分。与其担心这个问题,我们决定使用球体来模拟车轮的几何形状。这种方法被称为“代理几何学”,在处理复杂的几何图形时非常有用。

球体的半径和密度与车轮相同。检查完“导出整体几何”框后,就会出现一个标记为“G”的端口。这连接到空间接触力块的一侧,另一边连接到地面块上的“G”端口,这是我们早些时候提供的。恭喜你!现在你增加了一个接触力!

扭矩

在对所有四个轮子这样做之后,是时候给车轮增加一个驱动力矩了。这实际上是在增加来自真正机器人中的马达的旋转力。我们正在建模的机器人是前轮驱动,所以我们要添加扭矩输入两个前轮:

打开旋转关节,展开“执行机构”设置,并将“扭矩”设置切换到“由输入提供”,并将“运动”设置切换到“自动计算”。这将创建另一个标记为“t”的输入端口。对于测试,可以从常量输入开始,并使用SIMULINK-PS变换器阻止把它变成物理信号。注意,您必须使用此块将信号单元设置为N*m或所需的单元。你可以看看此示例的文件看看我们是如何实现这些连接的

阻尼

设置扭矩输入后,需要设置阻尼值为了轮子。阻尼是抵抗速度变化的关节的内部能量耗散。一些阻尼涉及到每一个真实的接触碰撞和运动,没有它,你的机器人的运动将是不稳定和不稳定的。

调整模型中每个关节的阻尼值可能是这个过程中最困难的部分。如果您正在寻找一个高性能的仿真,就像我们在这个例子中一样,那么请考虑注释掉一些机器人的组件,并逐步增加模型的复杂性,以跟踪仿真何时开始显著放缓。总的来说,以下是我的两条主要外卖:

  1. 给几乎所有的关节增加一些阻尼。

  2. 增加明显更多的阻尼与输入扭矩的关节,或关节经历高负荷。

例如,前轮(有输入扭矩)的最佳阻尼值为20N*m/(deg/s),而对于后轮(无输入扭矩),最佳阻尼值为1N*m/(deg/s)。

对于重量和尺寸相似的机器人来说,附加模型中的阻尼值应该是一个很好的起点。要优化阻尼值,我建议使用SIMULINK求解器。求解器分析器将记录大量减慢模拟速度的事件。求解器异常“”如果一个关节导致了很多求解器的异常,那么你所选择的阻尼值可能至少可以调整一个数量级。

调整接触参数.摩擦和刚度

在调整阻尼值后,在Simscape多体系统中产生真实驾驶的最后一步是调整“空间接触力”块的摩擦力和刚度参数。

下面是我从摩擦/刚度调整中学到的主要方法:

  1. 如果摩擦系数太高,高的力会导致机器人从屏幕上“飞”出去。

  2. 如果摩擦系数太低,你可以看到车轮在行驶时滑动。

  3. 如果刚度太高,那么重力会导致机器人在地面上“弹跳”。

  4. 静摩擦系数应始终大于动摩擦系数。

  5. 如果你觉得冒险或者很难找到好的价值观,阅读这篇关于如何设置这些参数的文章一种更确定的方法。

如果您已经按照上面的步骤,您现在应该有一个机器人,可以驾驶在一个Simscape环境!你可以添加SIMULINK仪表板块控制恒定块的值驱动驱动关节,这将有助于您测试正确的机器人移动使用模拟遥控器。

机器人与物体之间的力

现在你有了一个可以驾驶的模型,最后一步就是给机器人一个任务。但在这种情况下,首先需要实现手臂和爪的运动,才能实现对物体的抓取。

VEX V5 Clawbot电机既能控制转矩,又能控制位置。我们认为力矩控制是车轮输入的最佳选择,但位置控制对爪和手臂的输入效果更好。这也给了我们一个机会,向你介绍一种不同的关节驱动方法。

ARM控制

我们将从如何控制手臂位置开始。在Clawbot模型中,我们看到马达连接在一组驱动下臂的齿轮上。与其担心模拟Simscape中的齿轮比,我们还将电机建模为直接连接到下臂:

由于我们使用位置控制,我们将把驱动设置更改为“运动”设置为“由输入提供”,而“扭矩”设置为“自动计算”。

Simscape关节的运动输入与扭矩输入略有不同,因为它需要一个物理信号中的位置、速度和加速度。您可以通过使用上面所示的选项,使用SIMULIN-PS转换器块来实现这一点.也要确保设置的单位‘弧度’或你的首选,并增加一些阻尼的手臂和爪子关节,以同样的方式,我们前面概述。

你在这里看到的‘扶手’内部块是连接到一个SIMULINK仪表板开关,该开关之间的手臂是水平的(在0度旋转),并向下(37度旋转)。然而,如果我们直接从0切换到37或者反之亦然,计算出的Simscape物理信号的速度将是无穷大的!这将导致模型中的一个错误。我们怎么解决这个问题?

我们使用限幅器块!

速率限制器块将信号的上升或下降速率限制为+/-25 deg/s,然后由增益块转换为弧度,最后连接到零阶保持块,它“保存”输入值的恒定值,直到下游的下一个块需要它为止。一般来说,这是两个有用的SIMULINK模块,请记住。

爪接触与控制

在增加位置输入到爪之前,我们首先需要准备爪子和它正在拾取的立方体之间的力。

对于我们的机器人来说,用爪子捡起一个块可以通过在爪和块之间增加力量来实现,这样可以帮助对抗地心引力。我们可以用…来完成所有这些你猜到了,…一个“空间接触力”块。然而,就像添加一个与车轮一致的球体一样,我们必须弄清楚如何在爪子上添加“几何连接”。我们这样做的方式是在爪子的每一侧添加三个矩形作为我们的联系人代理(总共6个)。

在Simscape环境中,爪的左半部分如下所示:

这看起来可能很复杂,但它只是我们在这个博客中使用过的其他几种技术的汇编。让我们把它分解:

L1、L2和L3是使用砖实“封锁。我用爪子的CAD来测量每一只爪子的厚度和长度。一旦你有足够的接触代理来说明你想要的接触点,你需要将它们附加到质点中心,并将它们放置在正确的位置。我是根据视觉效果来估计这些地点的。

由于每个接触点有一个单独的几何,他们需要自己的空间接触力块。对于爪的两侧,这意味着有6个总力块,它们都将连接到目标对象。对于您的机器人,您可以选择多少接触点是必要的,在这种情况下,我们想要的能力,以拾取周围的物体,为未来的模拟。

标记为“拾取”的块是Clawbot被告知在这个虚拟环境中拾取的立方体。拾取块连接到Claw2Block1信号,该信号来自爪中的6个空间接触力块。

还有另外两个力块(见上面的箭头)连接到立方体。这些力块将立方体连接到地面上,而“下垂”块是机器人试图将立方体传送到的圆柱体。这意味着立方体具有与Simscape中的8个不同对象相关联的接触力!在这种情况下,物体与地板,目标圆柱,和6个接触点在夹持器。但是,根据您正在尝试构建的模拟,您肯定可以或多或少地拥有这些接触块。

立方体连接到世界框架、地面和一个平面图和棱镜关节。最初,我们使用了一个6自由度的关节,就像Clawbot和地面一样,但是包括额外的自由度来解释立方体的倾斜增加了复杂性,因此模拟运行得更慢。平面和棱柱关节允许我们捡起并移动块,这是伟大的;块只是不能倾斜向前或侧面,我们的模拟,但取决于模拟保真度/现实主义,你可以改变为另一个6自由度的关节。

我们的模型就要结束了!如果你一直跟着,直到这一点,你应该能够为你的机器人创建一个模拟,这样它就可以捡起一个立方体,并把它传送到一个匹配的目标。在我们的例子中,我们做了一个模型,我们可以用一些控制器来驾驶机器人。

在下一节中,我们将讨论两种方法来帮助您使您的机器人自治!

添加自主设计控制算法

到目前为止,我们已经建立了一个用于在Simscape环境中手动控制机器人的模型。这里还有两个实现自主控制的模型。一个假设控制器只知道立方体和目标的初始位置,而另一个则通过主动跟踪多维数据集和目标的位置来实现感知。

在这两种情况下,我们都使用了斯塔夫洛为了处理机器人的位置和方向,将其与目标位置进行比较,并计算出所需的轨迹。

为了说明感知的价值,我添加了一些控件来移动目标的中间模拟:

您想了解更多关于为自主机器人设计控制算法的知识吗?看看我们的移动机器人训练视频系列。如果您想了解更多关于我们为Clawbot开发的Stateflow算法的信息,请查看在这里完成文件并在评论中贴出问题!

评估设计/控制算法的性能

该虚拟环境是在比赛前评估自主控制算法性能的一种很好的方法。改变你的代码并重新运行你的模型比使用真正的硬件要快得多,你可以评估不同机器人轨迹的效率,改变你的机械设计,甚至更多,而不把你的机器人拆开。

这个练习最大的不确定之处是,在现实世界中不可能精确地模拟机器人的物理模型。我们在这里做的阻尼、刚度和摩擦力调整主要是基于模拟速度,可能会有额外的扰动。因此,建模尽可能多,你认为必要,你可以随时调整你的模拟更多的信息,从现实世界的测试。

然而,即使没有最精确的模型,模拟也会为您的开发过程增加很大的价值。也许你的车轮在现实生活中有更高的牵引力,而机器人的移动速度是它的两倍?这很好,使用传感器设计闭环控制,所以你的算法不依赖于时间,只取决于位置!例如,我们使用模拟来确保我们的自主逻辑能够承受目标位置的快速变化。此外,如果您想要细化您的模型并继续使用模拟并行测试,您可以返回并调整您的仿真参数。

感谢您与我们同行,请与我们分享您的模型和您的任何问题!

https://blogs.mathworks.com/racing-lounge/2020/08/31/creating-virtual-robot-environments-in-simscape-part-2/

在Simscape中创建虚拟机器人环境(二):添加物理、对象交互和自主相关推荐

  1. 在Simscape中创建虚拟机器人环境(一):组装机器人并从CAD中导入

    在Simscape中创建虚拟机器人环境:组装机器人并从CAD中导入 在接下来的两个博客中,我们希望教授如何在机器人设计和编程中使用动态三维模拟,因此我们与马特·谢弗谁是应用程序支持工程师.他将教你如何 ...

  2. 如何在 DAX 中创建 “虚拟关系”

    各位小伙伴周三好,今天工坊为大家带来的是如何在DAX中创建"虚拟关系". 七夕很快就要到了,希望大家了解这三个创建"虚拟关系"的函数之后,马上可以和TA建立起关 ...

  3. 在Win32程序中创建OpenGL渲染环境

    在Win32程序中创建OpenGL渲染环境 创建opengl渲染环境步骤: 选定像素格式 //WinMain()HDC dc = GetDC(hwnd);PIXELFORMATDESCRIPTOR p ...

  4. VirtualBox问题——无法在父文件夹中创建虚拟文件夹

    创建新系统提示无法在父文件夹中创建虚拟文件夹 解决:以管理员的身份运行VirtualBox

  5. CAD2019中创建基于3D图当前视图所有对象的二维表示

    在CAD2019中打开现有3D图,或者绘制新3D图. 在CAD中输入现有3D图stp文件,如图所示: 选择stp文件后,等待转换完成. 将视角转到待投影面. CAD2019中创建基于3D图当前视图所有 ...

  6. VirtualBox中的虚拟网络环境设置

    网络连接其实是面向网卡的,当一台电脑拥有多块网卡,并且每块网卡连接了不同的网络就能理解了. 默认情况下,VirtualBox为虚拟网卡提供了四种网络环境:Network AddressTranslat ...

  7. 在unity中创建python机器学习环境

    # 创建一个新的学习环境 本教程将介绍创建unity环境的过程 unity环境是使用unity引擎来训练增强学习代理器的应用 设置unity项目 1. 打开一个项目导入unity机器学习包, 或者新建 ...

  8. 如何在QQ中创建一个机器人,并获得到它的Token

    要在 QQ 中创建机器人,你需要先在「腾讯云开发者平台」(https://cloud.tencent.com/developer )注册一个腾讯云账号,然后通过以下步骤操作: 登录腾讯云开发者平台,选 ...

  9. 如何在Windows 7中创建虚拟硬盘

    Have you ever wished you had an extra Hard Disk to store files, share, or set aside as an encrypted ...

最新文章

  1. zend studio报错
  2. SAP 固定资产减值准备配置及期初导入
  3. capitalism 2 3892303_2021年2月5日财神方位查询,今天哪个方位财运好
  4. NeurIPS 2021 | 图上不均衡表示学习新视野:基于拓扑结构的不均衡学习
  5. 【03】json使用
  6. C#的protected internal
  7. Linux系统下如何安装JDK?
  8. 老男孩的学生优秀博文及内部教学文章
  9. 第十四章_超参数调整
  10. endpt matlab,将SDPT3配置到matlab
  11. 基于Java+Springboot+Vue+elememt宠物用品商城系统设计实现
  12. emlog模板易玩稀有
  13. Django程序的发布
  14. Linux运维是什么?linux运维的基础知识
  15. webpack中的chunk
  16. Centos7超级无敌简单的PXE安装系统手动与自动化
  17. twitter 推出官方 Android 客户端
  18. 利用 Python 对某网上商城进行战略分析
  19. 关于如何求分数的最小公倍数和最大公约数
  20. Android 13 VTS HIDL interface 解析

热门文章

  1. 编译原理【词法分析】—LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系
  2. java实施工程师的求职信_软件工程师英文求职信样本 .doc
  3. 晨曦记账本添加记录后自动加载本月的账目
  4. 微星的测试软件显示教程,Dragon Center使用教程
  5. 什么是硬件以及什么是软件
  6. 腾云宾馆管理系统服务器名,腾云宾馆管理系统_行业软件_软件百科_360安全中心 - 360安全卫士官方网站...
  7. win10电脑设置鼠标文本选择时光标样式和颜色
  8. xenserver 安装新硬盘_xenserver挂载新硬盘
  9. 电商平台零售数据分析
  10. BWK210-180-05电压输出单轴倾角传感器的使用