学生休息室

分享学生如何在日常项目中使用MATLAB和Simulink的技术和现实例子#studentsuccess万博1manbetx

剑桥计算机科学学院的综合设计项目

作者:英国剑桥教育客户成功工程师Francesco Ciriello博士。

从一月到2021三月,我指导了剑桥大学的两个学生小组。第IB部分团体设计项目.每个团队都花了7周的时间在我最初概述的概要基础上开发一个项目。两个团队都展示了非凡的技能、创造力和职业道德。由于之前几乎没有使用MathWorks软件的经验,他们能够交付结合MATLAB、Simulink、Simscape Multibody、虚幻引擎4和一套其他工具箱的复杂集成项目。万博1manbetx康奈尔和我渴望让团队分享他们的经验。下面是他们必须告诉我们的故事。

项目1:寄售俄罗斯方块

Connor Redfern,Marcus Alexander Karmi,九月,Ana Radu,Viktor Mirjanic,Mohammed Imtiyaz Miah,乔奥康纳,剑桥大学计算机科学与技术系,剑桥,英国[“最令人印象深刻的技术成就”得主]

3D打印很酷,对吧?有了3D打印机和一些技术诀窍,你什么都可以做——人们制作了艺术品、微型城市、分子模型,甚至衣服!  然而,它也可能是昂贵的,因此有许多公司将为你做印刷,这些公司面临着一个问题:当他们生产的东西没有标准的形状或尺寸时,他们如何实现包装过程的自动化?这就是我们的项目,一个机器人,它决定了一种有效的方式将物品包装到一个盒子里进行运输。

构建MATLAB机器人

一个自治系统可以大致分为四个子系统,它们在一个循环中运行:感知(获取输入)、计划(决定做什么)、控制(确定如何做计划)和执行(制定计划)。我们的模拟机器人有类似的子系统:一个扫描环境并输出输送机上物体位置和大小的图像处理器,一个确定物体放置位置的过程优化程序,以及一个处理机器人运动的规划和控制模块。当然,我们还必须设置机器人工作的环境——输送机、装运箱、物品和机器人本身。

我们项目中数据流的图表表示

三角洲的机器人

delta robot是一种相对常见的机器人设计,用于“拾取和放置”操作:拾取某物并将其放置在其他位置。这一点,再加上其相对简单性,使其成为我们项目的理想选择。该设计本身由一个底座、三只手臂和一个头部组成:

该基地有三个电机,使手臂能够独立移动。该设计确保“头部”始终与底座平行,所以移动手臂只会在3D空间中移动头部;不发生旋转, 

我们的机器人头部装有一个小型真空装置,对附近的物体施加吸力——这就是用来拾取/放下物体的东西。在现实世界中,最好的喷头是由印刷品的材质和最大尺寸决定的,但真空可以作为一个很好的替代品。 

虽然没有直接连接到delta机器人,但我们的系统还包含两条传送带,它们由与机器人相同的系统控制。其中一个输送机是一个输入输送机,待包装的物品到达该输送机,另一个输送机容纳机器人随后包装的箱子。 

图像处理器

在真实环境中有各种各样的传感器,在Simulink中有各种各样的方法来模拟它们。万博1manbetx我们采用了一种相对简单的方法:利用Simscape多体变换传感器.变换传感器可用于测量参考系之间的三维位置和旋转组合。PS-万博1manbetxSimulink模块可以用来将传感器输出转换为信号。在下图中,你可以看到设置中重要对象的转换传感器——这些数据流在被输入到其他子系统(如控制模块和流程优化器)之前由MATLAB函数块进行编组。

过程优化器

process Optimizer子系统获取包装箱中当前所有对象的坐标及其长方体边界框的尺寸。然后,它需要输出一个项目可以放置的位置,同时还要考虑未来项目可能放置的位置。要做到这一点,我们必须解决两个问题:我们如何知道包装箱的哪些空间是空的?在这些空白区域中,哪一个是放置物品的最佳位置?

通过投影包装箱中物品的横截面,我们可以得到特定高度处占用空间的二维阴影。我们计算这个二维平面中的空空间,与三维变量相比,这是一个更易于管理的问题。通过对包装箱中几个不同高度处的横截面进行此操作,我们可以获得整个包装箱中空白空间的3D图像。

这会导致送货箱中出现一组空白,我们将物品放置在可能的最低高度。如果在同一高度有两个不同的候选位置,我们会尝试将项目放置在尽可能靠近角落的位置。研究人员发现这是一个很好的启发方法,因此我们希望这种方法能够将尽可能多的物品放入投递箱。

规划和控制

规划和控制模块是自治系统的核心。它从图像处理器获取感官输入,其中包含下一个待包装项目的信息,以及由过程优化程序发送的项目所需的结束位置。顾名思义,计划和控制模块有两个阶段:计划和控制。规划时,它需要生成一条路径——从当前位置到所需位置的一系列位置。一旦计算出一条路径,它就会进入控制阶段——计算电机需要施加的精确扭矩(力),以使臂沿路径平稳移动。

挑战

在整个项目中,我们面临的关键问题之一是模拟速度。罪魁祸首是物品与装运箱之间的接触力。这些力具有无阻尼的微振荡,这大大减慢了我们的模拟速度。有时我们运行速度比实时慢500倍。环境必须经过多次修改,直到速度变得可控。这个问题也影响了控制子系统。为了补偿缓慢的模拟,我们增加了解算器的步长限制。这确实加快了速度,但现在我们的delta机器人在数量上不稳定!看着它乱舞着实让人着迷,但我们不得不做点什么。最终,我们找到了机器人运动稳定的正确路径。但是,如果它再往上移动几厘米,一切都会破裂。

结论

没有必要浪费时间弄清楚如何包装14只新3D打印的恐龙。我们有一个系统可以解决这个问题,也可以使用机械臂为您解决这个问题!我们很喜欢开发这个系统,并且学到了很多关于自治系统的知识,以及帮助我们实现这样一个系统的工具,如MATLAB、Simulink和Simscape。我们的代码万博1manbetx可以在GitHub并且可以在您自己的计算机上运行。

项目的视频

GitHub存储库

项目2:西剑桥航空货运

作者:Naunidh Dua, Edward Weatherley, Tom Patterson, Tobi Adelena, Antonia Boca and Nikola Georgiev,剑桥大学计算机科学系,剑桥,英国(亚军最令人印象深刻的职业成就)

问题描述

我们的任务是开发一种自动无人机运送系统,用于西剑桥站点周围的轻型包裹运输。

实施

我们将该项目作为对现有MathWorks示例项目的改编,[无人机包裹递送]. 该项目最初支持无人机根据QGroundCont万博1manbetxrol中作为航路点给出的特定指令飞行,以及在两点之间的路径上避障。它是在一个从芝加哥拍摄的真实照片美国城市街区模型中设置的。

该系统包括几个组件:

  • 一个用户界面,允许指定接送地点
  • 这是西剑桥遗址的3D模型
  • 计算建筑物之间有效路径的路由算法
  • 一种确定交付任务发生顺序的调度算法
  • 一个MAVLink接口,地面控制模块可通过该接口与无人机通信

用户界面

我们使用MATLAB的应用程序设计器创建了新的地面控制UI,该UI是为无人机输入新任务所必需的。我们发现MATLAB的geoaxes非常适合绘制西剑桥地图、无人驾驶飞机及其所遵循的不同路线。我们的用户界面配备了一组指定的地点,可供选择取货和送货。它还允许用户在lat/long坐标中指定自己的位置,该坐标可以从轴上读取。 

作为主要的面向用户的层,UI必须正确地接收用户的输入并与其他组件进行通信。我们创建了回调函数,当无人机着陆以及更新无人机在UI中的位置,这是由Simulink中的StateFlow块中的逻辑触发的。万博1manbetxc++调度算法的包装器(编译为MEX)支持从UI和任务点和数据的缓存进行调度。随着收到的预定交付,中间任务被添加到无人机之间的交付,然后UI使用MAVLink接口发送一个坐标数组。

西方剑桥模型

西剑桥的模型在Blender中制作,使用GIS数据插件导入地面纹理、等高线和基本建筑模型。然后,我们添加了一些着色器,并将建筑纹理烘焙到单个uv贴图图像上,该图像可以导出为“不真实”。然后,可以将非真实项目打包并插入现有Simulink模型中的场景块中,以用于模拟。万博1manbetx

路由算法

我们选择使用RRT*算法来计算建筑物之间的路线。我们本可以指示无人驾驶飞机直飞建筑物,但是,我们可以通过这种方式指示无人驾驶飞机在建筑物周围飞行,这为无人驾驶飞机在更城市化的环境中航行提供了一个概念证明,那里有更高的建筑物。我们选择RRT*的理由是,A*算法计算配送路线的时间太长,因为它会产生绝对最优的路线。这使得无人机看起来反应迟钝,因为它在执行任务之前需要长时间的停顿。另一方面,RRT*提供了更快速的计算,并且不会显著增加无人机需要行驶的距离,从而损失从快速计算中获得的时间。 

我们还需要为路由算法提供一个占用地图,指示建筑物的位置。这是使用Blender中的Python API获得的,允许我们提取建筑物的顶点,并使用光线投射对每个点的地面高度进行采样。

调度算法

该项目的另一个重要部分是设计一个有效的算法来安排多个任务。需要考虑的事情有很多,比如无人机的电池寿命,或者我们是否可以为多架无人机设计算法。 

经过一些研究,我们发现存在一些有趣的库来解决车辆路径问题,允许开发人员添加个性化约束(例如Google的工具库)。然而,事实证明,在我们的MATLAB项目中集成这些是不可行的,因此我们专注于寻找一种算法,该算法将输出有效路径的良好近似值。 

调度算法的基本思想是使用上面提到的路由算法为用户界面中给定的每对可能的拾取点和交付点计算的距离。当然,在每次调用调度程序时都这样做是低效的,因此我们使用缓存将其中一些路由保存在cas中e它们被重复使用。 

接下来,该算法尝试任务列表的固定数量的随机排列,并选择最佳排列。我们将最佳排列定义为使根据路线计算的欧几里德距离最小的排列。试验次数是一个可以修改的常数——我们将常数设置为100(考虑到项目规模较小),但这当然可以为更大的任务量身打造。 

决定用c++编写项目的这部分代码,主要是为了方便,部分是为了速度。c++标准库向量之类的数据结构很容易用于调整任务的顺序。

MAVLink接口

无人机与地面控制站之间的通信使用MAVLink协议进行。在每次任务开始时,地面控制发送一系列指令,其中包含由路由算法生成并通过调度算法分配给无人机的无人机路线。当无人机接收到根据这些任务指令,它使用PID控制器调整其偏航、俯仰和横滚,以移动到所需的航路点。

当无人机在其目的地着陆时,一个着陆信号被发送回地面控制站,地面控制站触发调度算法以检索下一条路线并将其发送给无人机。

测试

与任何项目一样,有必要确保所有单元以及集成都能工作。我们使用MATLAB的单元测试功能来实现这一点。这让我们学习太慢,A *算法允许我们压力测试RRT *算法,这样我们可以调整参数,并获得路线的复杂性的增加可以找到,以及记忆常用的路线的速度增加。我们对项目的其他部分也进行了类似的测试和压力测试,比如调度算法和UI。 

为什么是万博1manbetxSimulink?

万博1manbetxSimulink是我们项目的重要工具。它使我们能够使用提供的工具箱块快速更改无人机的行为。此外,我们可以迭代设计过程,而不必担心驾驶真正的无人机会带来风险,例如在我们的路由算法测试期间。Simulink还包含我们用来调试设计的各种工具,如数据检查器。

我们使用数据检查器分析无人机内的有线信号,以确保无人机始终处于有效状态。

项目的视频

GitHub存储库

|
  • 打印
  • 发送电子邮件

评论

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