学生休息室

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

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

本文是关于在Simscape中创建虚拟机器人环境的两篇文章中的第二篇。如果您还没有读过第1部分,我们鼓励您去看看在这里

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

实现物理

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

截图

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

添加物理-驾驶在地面

重力

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

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

截图

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

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

增加空间接触力

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

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

截图

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

转矩

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

截图

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

阻尼

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

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

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

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

所附模型中的阻尼值应该是类似重量和尺寸的机器人的一个很好的起点。要调优阻尼值,我建议使用金宝appSimulink求解分析器.解算分析器将把大大减慢模拟速度的事件记录为“解算器异常”。如果一个关节引起许多求解器异常,那么您所选择的阻尼值可能至少可以调整一个数量级。

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

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

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

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

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

机器人与物体之间的力

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

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

手臂控制

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

截图

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

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

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

我们用a速率限制器块

截图

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

爪的接触和控制

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

对于我们的机器人来说,用爪子捡起一个物体可以通过增加爪子和物体之间的力来帮助对抗重力。我们可以用“空间接触力”块完成所有这些。然而,就像添加一个与轮子重合的球体,我们必须弄清楚如何添加“几何连接”到爪。为此,我们在爪的每一侧添加了三个矩形作为我们的联系代理(共6个)。

爪

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

截图

这看起来可能很复杂,但它只是我们在本博客中迄今为止使用过的其他一些技术的汇编。让我们来分析一下:

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

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

截图

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

还有另外两个力块(见上面的箭头)连接到立方体。这些力块将立方体与地面和“DropOff”块连接起来,“DropOff”块是机器人试图将立方体运送到的圆柱体。这意味着立方体有与Simscape中8个不同对象相关联的接触力!在这种情况下,物体与地板、目标圆筒和夹钳中的6个接触点相互作用。但根据你想要构建的模拟,你当然可以拥有或多或少的这些接触块。

立方体连接到世界框架,地面和一个平面而且棱镜关节。最初我们使用的是6自由度的关节,就像Clawbot和Ground一样,但包括额外的自由度来考虑立方体的倾斜增加了复杂性,因此模拟运行更慢。平面和移动关节允许我们拿起和移动周围的块,这是伟大的;在我们的模拟中,该块不能向前或侧向倾斜,但根据模拟逼真度/真实感,您可以将这些更改为另一个6自由度的关节。

这样我们的模型就结束了!如果你一直这样做下去,你应该已经能够为你的机器人创建一个模拟,这样它就可以捡起一个立方体并将其传输到一个匹配的目标。在我们的例子中,我们做了一个模型,我们可以用一些控制来驱动机器人。

截图

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

增加自主权——设计控制算法

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

截图

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

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

爪子机器人的动图

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

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

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

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

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

感谢您在这段旅程中跟随我们,请与我们分享您的模特和任何问题!

|

评论

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