学生休息室

分享学生如何在日常项目中使用MATLAB和Simulink的技术和现实例子#studentsuccess金宝app

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

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

在前半部分,我们讨论了将您的CAD导入Simscape Multibody,并使用关节将部件连接在一起。在这篇文章中,我们将讨论添加物理,对象交互到你的机器人,最后如何利用Simulink程序你的机器人。金宝app享受吧!

实现物理

一旦你验证了你的主要机器人装配正确模拟,下一步是实现物理,使机器人的行为像它在现实生活中一样。第一步是为模拟创建其他对象。例如,使用车轮与地面的摩擦来移动的能力需要我们有一个地面或地板。我们通过简单地用“砖固体”块创建一个非常大的矩形地板来做到这一点。

截图

请注意,“导出整个几何体”选项已选中。添加不同环境组件之间的交互后,我们将使用此导出的几何体。

添加物理-在地面上驾驶

重力

重力影响所有现实生活中的机器人,因此我们自然需要确保我们的模拟也能解释重力。创建地面后,需要将此块直接附着到3个块:解算器配置世界坐标系机构配置.这三个模块对于任何Simscape多体模型都是必不可少的,在机制配置模块中,我们可以为模拟设置所需的重力。

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

截图

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

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

添加空间接触力

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

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

截图

球体的半径和密度与车轮相同。选中“导出整个几何体”框后,一个标记为“G”的端口出现在球体上。它连接到空间接触力块的一侧,另一侧连接到地面块的“G”端口,这是我们之前提供的。恭喜!现在你已经添加了接触力!

转矩

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

截图

打开旋转接头,展开“驱动”设置,并将“扭矩”设置切换为“由输入提供”,将“运动”设置切换为“自动计算”。这将创建另一个标记为“t”的输入端口。对于测试,您可以从常量输入开始,并使用金宝appSimulink PS转换器阻止它变成一个物理信号。注意,您将不得不使用这个块来设置信号单位为N*m或您想要的单位。你可以看看本示例的文件看看我们是如何实现这些连接的

阻尼

设置扭矩输入后,需要设置阻尼值的轮子。阻尼是关节抵抗速度变化的内部能量耗散。在现实生活中,每一次接触、碰撞和运动都涉及到阻尼,没有阻尼,机器人的运动就会不稳定。

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

  1. 给几乎所有的关节加一些阻尼。
  2. 为具有输入扭矩的关节或承受高负载的关节增加更多阻尼。

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

所附模型中的阻尼值对于类似重量和尺寸的机器人应该是一个很好的起点。为了调整阻尼值,我建议运行模型与金宝app模型解算器分析器.解析器剖析器将记录事件,这将大大减慢模拟为“解算器异常”。如果一个关节引起了许多求解器异常,那么您所选择的阻尼值可能至少可以通过一个数量级进行调整。

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

在调整阻尼值后,在《Simscape Multibody》中制作真实驾驶的最后一步是调整“空间接触力”块的摩擦和刚度参数。

以下是我从摩擦/刚度调整中获得的主要收获:

  1. 如果摩擦系数太高,高力会导致机器人“飞”出屏幕。
  2. 如果摩擦系数太低,您可以看到车轮在行驶时打滑
  3. 如果刚度太高,那么重力会导致机器人在地面上“反弹”。
  4. 静摩擦系数应始终大于动摩擦系数。
  5. 如果你喜欢冒险,或者很难找到好的价值观,阅读这篇关于如何设置这些参数的文章对于更确定的方法。

如果您遵循了上面的步骤,那么现在您应该拥有了一个可以在Simscape环境中驾驶的机器人!您可以添加金宝app仿真软件仪表板块来控制驱动驱动关节的常量块的值,这将帮助您使用模拟远程控制来测试机器人的正确运动。

机器人与物体之间的力

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

VEX V5爪机电机既能控制扭矩,又能控制位置。我们决定扭矩控制将是车轮输入的最佳选择,但位置控制工作更好的爪和手臂输入。这也让我们有机会向你们介绍一种不同的关节驱动方法。

手臂控制

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

截图

由于我们使用的是位置控制,我们将把动作设置改为‘Motion’设置为‘Provided by Input’,‘Torque’设置为‘Automatically Computed’。

Simscape关节的运动输入与扭矩输入略有不同,因为它需要在一个物理信号中同时包含位置、速度和加速度。通过使用上面所示的选项,您可以使用Simulink-PS金宝app转换器模块实现这一点。同时确保设置单位为“弧度”或您的首选,并添加一些阻尼臂和爪关节,就像我们之前概述的方式。

您在此处看到的“手臂位置”输入块连接到Simulink仪表板开关,该开关在手臂水平(旋转0度)和向下至地面(旋转37度)之金宝app间切换。但是,如果我们直接从0切换到37,或者反之亦然,Simscape物理信号的计算速度将为无穷大!这将导致模型中出现错误。我们如何解决此问题?

我们使用速度限制器块

截图

速率限制器块将信号的上升或下降速率限制为+/-25 deg/s。然后通过增益块将其转换为弧度,最后连接到零级持有”块,它将输入值“保存”为一个常量,直到下游的下一个块需要它。一般来说,这是需要记住的两个有用的Simulink模块。金宝app

爪接触与控制

在添加位置输入到爪,我们首先需要准备的力量之间的爪和立方体它是捡起来的。

对于我们的机器人来说,用爪抓取物体可以通过在爪和物体之间增加力来帮助对抗重力来实现。你猜对了,我们可以用一个“空间接触力”块来做到这一切。然而,就像添加一个与轮子重合的球体一样,我们必须弄清楚如何添加“几何连接”到爪。我们通过在爪的每一边添加三个矩形来作为我们的接触代理(总共6个)来做到这一点。

爪

在Simscape环境中,爪子的左半部分看起来是这样的:

截图

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

L1, L2和L3是3个不同大小的矩形,使用砖固体的块。我使用CAD的爪测量厚度和长度的每一个。一旦有足够的接触代理来计算所需的接触点,就需要将它们附加到钳夹的质心,并将它们放置在正确的位置。我根据图像估计了这些地点。

由于每个接触点都有一个独立的几何形状,它们需要自己的空间接触力块。对于爪的两边,这意味着总共有6个力块,它们都连接到目标物体上。对于你的机器人,你可以选择需要多少接触点,在这种情况下,我们希望能够拾取圆形物体,以供未来的模拟。

截图

标记为“拾取”的方块是爪子机器人被告知在虚拟环境中拾取的立方体。拾起块连接到爪2block1信号,该信号来自爪中的6个空间接触力块。

还有另外两个力块(参见上面的箭头)连接到立方体。这些力块将立方体连接到地面和“下降”块,这是机器人试图将立方体传送到的圆柱体。这意味着立方体具有与Simscape中8个不同对象相关联的接触力!在这种情况下,对象与地板、目标圆柱体和场景中的6个接触点交互但是,根据你试图建立的模拟,你肯定会有更多或更少的接触块。

立方体与世界框架、地面和一个平面的棱柱的共同的最初,我们使用了一个6自由度的关节,就像Clawbot和Ground一样,但包括额外的自由度来解释立方体的倾斜增加了复杂性,因此模拟运行较慢。平面和棱柱状关节使我们能够拾取和移动块体,这是伟大的;对于我们的模拟,该块不能向前或侧向倾斜,但根据您所看到的模拟逼真度/真实感,您可以将其更改为另一个6自由度关节。

这就到了我们模型的结尾!如果你一直这么做,你应该能够为你的机器人创建一个模拟,这样它就可以拾取一个立方体并将其传送到一个匹配的目标。在我们的例子中,我们制作了一个模型,我们可以通过一些控制来驱动机器人。

截图

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

增加自主性-设计控制算法

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

截图

在这两种情况下,我们都使用了Stateflow要处理机器人的位置和方向,请将其与目标位置进行比较,并计算必要的轨迹。

为了说明感知的价值,我添加了一些在模拟过程中移动目标的控制:

gif的clawbot

你想了解更多关于自主机器人控制算法的设计吗?看看我们移动机器人技术培训视频系列。如果你想了解更多关于我们为Clawbot开发的statflow算法,请查看完整的文件在这里并在评论中提出问题!

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

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

在这个练习中最大的不确定性是不可能在现实世界中精确模拟机器人的物理特性。我们在这里所做的阻尼,刚度和摩擦调整主要是基于模拟速度,可能会有额外的干扰。所以,尽可能多地建立你认为必要的模型,你总是可以根据真实世界测试的信息进一步调整你的模拟。

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

感谢您跟随我们的旅程,并请与我们分享您的模型和您有任何问题!

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。