学生休息室

分享技术和现实生活的例子,学生可以如何使用MATLAB和Simulink在他们的日常项目#学生成功万博1manbetx

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

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

在上半部分中,我们讨论了将CAD导入Simscape Multibody,并将零件与关节链接在一起。在这篇文章中,我们将讨论如何为机器人添加物理、对象交互,以及如何利用Simulink编程。享受吧!万博1manbetx

实施物理学

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

截图

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

添加物理-在地面驾驶

重力

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

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

截图

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

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

添加空间接触力

为了模拟力和运动,我们需要引入“几何关系”. 这些连接由虚线/点线表示。“空间接触力”块连接两个不同零件的几何体,以模拟它们之间的接触。

Simscape使用所谓的凸包表示'为我们导入的CAD的几何图形建模。当使用具有许多特征的零件时,这可能会导致奇怪的物理表示。我们没有担心这一点,而是决定使用来模拟车轮的几何形状。这种方法被称为使用“代理几何”,在处理复杂几何时非常有用。

截图

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

转矩

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

截图

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

阻尼

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

调整模型中每个关节的阻尼值可能是此过程中最困难的部分。如果你正在寻找一个高性能的模拟,就像我们在这个例子中一样,然后考虑注释一些机器人的子组件,并逐步增加模型的复杂性,以跟踪模拟开始减速的时候。总的来说,以下是我的两个主要收获:

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

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

附加模型中的阻尼值应该是类似重量和尺寸机器人的良好起点。要调整阻尼值,我建议使用万博1manbetx模型解算器分析器.解析器剖析器将记录事件,这将大大减慢模拟为“解算器异常’. 如果关节导致许多解算器异常,您选择的阻尼值可能至少可以调整一个数量级。

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

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

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

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

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

机器人和物体之间的力

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

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

手臂控制

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

截图

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

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

你在这里看到的“armPosition”输入模块连接到Simulink仪表盘开关,它在手臂水平(0度旋转)和向下到地面(3万博1manbetx7度旋转)之间切换。然而,如果我们直接从0切换到37,或者反之,Simscape物理信号的计算速度将是无限的!这将导致模型中出现错误。我们如何解决这个问题?

我们使用一个速度限制器块

截图

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

爪接触与控制

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

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

爪

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

截图

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

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

由于每个接触点都有单独的几何体,因此它们需要自己的空间接触力块。对于爪的两侧,这意味着总共有6个力块,它们都将连接到目标对象。对于您的机器人,您可以选择需要多少接触点,在这种情况下,我们希望能够拾取圆形对象,以便将来进行模拟。

截图

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

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

立方体与世界框架、地面和一个平面棱镜关节。最初,我们使用了一个6自由度的关节,就像爪子机器人和地面一样,但包括额外的自由度来解释立方体的倾斜增加了复杂性,因此模拟运行缓慢。平面关节和移动关节让我们能够拿起并移动物体这是非常棒的;在我们的模拟中,块不能向前或侧向倾斜,但取决于模拟的保真度/真实感,你可以将这些改变为另一个六自由度关节。

我们的模型到此结束!如果您一直跟踪到这一点,您应该已经能够为您的机器人创建一个模拟,以便它能够拾取一个立方体并将其传送到匹配的目标。在我们的例子中,我们做了一个模型,我们可以用一些控制来驱动机器人。

截图

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

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

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

截图

在这两个例子中,我们使用Stateflow对机器人的位置和姿态进行处理,与目标位置进行比较,并计算必要的轨迹。

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

爪形机器人

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

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

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

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

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

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

|

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。