学生休息室

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

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

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

从一月到2021三月,我指导了剑桥大学的两个学生小组。第IB部分团体设计项目. 每个团队都花了七周的时间根据我概述的最初概要开发一个项目。两支球队都表现出非凡的技能、创造力和职业道德。在使用MathWorks软件之前几乎没有经验的情况下,他们能够交付复杂的集成项目,这些项目结合了MATLAB、Simulink、Simscape Multibody、Unreal Engine 4和一套其他工具箱。金宝app康奈尔和我渴望让团队分享他们的经验。下面是他们必须告诉我们的故事。

项目1:寄售俄罗斯方块

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

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

构建MATLAB机器人

自主系统可以大致分为四个子系统,它在循环中运行:感应(取消输入),规划(决定该怎么办),控制(弄清楚如何进行计划)和执行(制定计划)。我们的模拟机器人具有类似的子系统:扫描环境的图像处理器并输出传送带上的对象的位置和大小,该过程优化器可以放置在应放置对象的位置,以及处理机器人运动的规划和控制模块。当然,我们也必须设立机器人将在输送机,运送箱,物品和机器人本身工作的环境。

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

三角洲机器人

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

底座有三个电机,可使臂独立移动。设计确保“头部”始终与底座平行,因此移动手臂只会在三维空间中移动头部;不发生旋转。 

我们的机器人配备了一个小型真空,对附近的物体施加吸力 - 这是用于拾取/放下物体的东西。在真实的情景中,最佳使用头部将由印刷品的材料和最大尺寸决定,但真空使得一个很好的待机。 

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

图像处理器

现实环境中有各种各样的传感器,在Simulink中模拟传感器的方法也多种多样。我们采用了一种相对简单的方法:利用金宝appSimscape多体变换传感器. 变换传感器可用于测量参考帧之间的三维位置和旋转组合。PS Simulink模块可用于将传感器输出转换为信号。在下图中,您可以看到设置中重要对象的变换传感器–这些数据流随后由MATLAB功能块进行编组,然后再馈送到其他子系统,金宝app如控制模块和过程优化程序。

流程优化器

流程优化器子系统接受当前包装盒中所有对象的坐标,以及它们的长方体包围盒的尺寸。然后,它需要输出一个项目可以放置的位置,同时还需要考虑未来项目可能放置的位置。要做到这一点,我们必须解决两个问题:如何知道包装盒的哪些空间是空的?在这些空白处放置物品最合适?

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

这导致交付框中的一组空隙,并将物品放置在最低的高度。如果在同一高度有两个不同的候选位置,我们会尽量将物品放置在靠近角落。研究人员发现这是一个很好的启发式,所以我们预计这种方法可以将尽可能多的物品适合交货箱。

规划和控制

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

挑战

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

结论

没有必要浪费时间弄清楚如何打包你的14个新的3D印刷的恐龙。我们有一个系统,数字化这一点,以及使用机器人手臂来为您做这件事!我们喜欢开发这个系统,并学到了很多关于自治系统和关于Matlab,Simulink和Simscape等工具,帮助我们实现了这样的系统。金宝app我们的代码可于github并且可以在您自己的计算机上运行。

项目视频

GitHub存储库

项目2:西剑桥航空货运

Tom Patterson,Edward Weatherley,Tom Patterson,Tobi Adelena,Antonia Boca和尼古拉格鲁吉耶夫,剑桥大学计算机系,英国剑桥亚军最令人印象深刻的职业成就

问题描述

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

实施

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

该系统包括几个组件:

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

用户界面

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

作为面向用户的主要层,UI必须正确地接受用户的输入并与其他组件进行通信。我们为无人机着陆以及更新无人机在UI中的位置创建了回调函数,该位置由Simulink中StateFlow块中的逻辑触发。用于C++调度算法(编译成MEX)的包装器能够从任务点和数据的UI和缓存中调度。根据收到的计划交付,添加中间任务以在交付之间驾驶无人机,然后UI使用MAVLink界面发送一组坐标。金宝app

西剑桥模式

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

路由算法

我们选择使用RRT *算法计算建筑物之间的路线。我们本可以指示无人机直接在建筑物上方,但表明我们可以以这种方式指导他们周围的无人机,为无人机导航更多的城市环境,提供了更高的建筑物的概念证明。我们在选择RRT *背后的推理是A *算法需要太长,以计算由于它产生绝对最佳的路线而计算的路线。这使得无人机似乎没有响应,因为在运行任务之前需要很长时间。另一方面,RRT *提供了更快的快速计算,并且不会增加无人机需求的距离,以减少快速计算中获得的时间。 

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

调度算法

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

在一些研究之后,我们发现存在一些有趣的库,解决了车辆路由问题,允许开发人员添加个性化约束(一个示例是谷歌或工具库)。但是,事实证明,在我们的MATLAB项目中集成了这些,因此我们专注于找到一种输出有效路由良好近似的算法。 

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

接下来,该算法尝试了任务列表的固定数量的随机置换,并选择最佳排列。我们定义了最佳安排,以最小化从路线计算的欧几里德距离。试验的数量是可以修改的常数 - 我们将我们的常数设置为100(鉴于项目的小规模),但当然这可以针对更大的特派团量身定制。 

在C++中对项目的这部分进行编码主要是为了方便,部分是为了速度。数据结构,如C++标准库向量,易于用于拖曳任务的顺序。

MAVLink接口

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

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

测试

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

为什么是金宝appSimulink?

金宝appSimulink是我们项目的重要工具。它使我们能够使用提供的工具箱块快速更改无人机的行为。此外,我们可以通过设计过程迭代,而不担心飞行真正的无人机的风险将引入,例如在我们的路由算法的测试期间。金宝appSimulink还包含各种工具,我们用于调试我们的设计,例如数据检查器。

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

项目视频

GitHub存储库

|
  • 打印
  • 发电子邮件

评论

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