学生休息室

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

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

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

在2021年1月至3月期间,我指导了来自剑桥大学的两个学生团队部分IB组设计项目.每个团队都花了七周的时间根据我概述的初步概要开发一个项目。两支队伍都展示了出色的技能、创造力和职业道德。虽然之前很少有使用MathWorks软件的经验,但他们能够交付结合了MATLAB、Simulink、Simscape Multibody、虚幻引擎4和一套其他工具箱的复杂集成项目。金宝app康奈尔和我很想让这些团队分享他们的经验。这是他们要告诉我们的故事。

项目1:托运俄罗斯方块

作者:Connor Redfern, Marcus Alexander Karmi September, Ana Radu, Viktor Mirjanic, Mohammed Imtiyaz Miah, Joe O 'Connor,英国剑桥大学计算机科学与技术系“最令人印象深刻的技术成就”奖得主

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

构建MATLAB机器人

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

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

三角洲的机器人

delta机器人是一种相对常见的机器人设计,用于“拾取和放置”操作:拿起东西并将其放置在其他地方。这一点,再加上它的相对简单性,使它成为我们项目的一个很好的候选者。设计本身包括一个底座,三个臂和一个头。

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

我们的机器人头部配备了一个小真空装置,可以对附近的物体施加吸力——这是用来拿起/放下物体的。在现实世界的场景中,最好的头是由打印的材料和最大尺寸决定的,但真空是一个很好的替代品。 

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

图像处理器

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

流程优化器

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

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

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

计划与控制

规划和控制模块是自治系统的核心。它接受来自图像处理器的感官输入,其中包含有关下一个要打包的物品的信息,以及该物品的期望结束位置,该信息由流程优化器发送。计划和控制模块,顾名思义,有两个阶段:计划和控制。在规划时,它需要生成一条路径——从当前位置到期望位置的一系列位置。一旦路径被计算出来,它就会进入控制阶段——计算马达需要施加的精确扭矩(力)来沿着路径平稳地移动手臂。

挑战

我们在整个项目中面临的一个关键问题是模拟速度。主要原因是物品和运输箱之间的接触力。这些力具有无阻尼的微振荡,这大大减慢了我们的模拟速度。有时我们的运行速度比实时速度慢500倍以上。环境必须经过多次修改,直到速度变得可控。这个问题也影响了控制子系统。为了弥补模拟缓慢的缺点,我们增加了求解器的步长限制。这确实加快了速度,但现在我们的delta机器人在数值上不稳定!看着它乱跳乱跳很迷人,但我们必须做点什么。最终,我们找到了机器人运动稳定的正确路径。 But, if it were to move just a few centimeters higher, everything would break.

结论

没有必要浪费时间弄清楚如何包装你的14个新3D打印恐龙。我们有一个系统可以解决这个问题,并使用机械臂为你做这件事!我们很喜欢开发这个系统,也学到了很多东西,包括自主系统和MATLAB、Simulink和Simscape等工具,这些工具帮助我们实现了这样一个系统。金宝app我们的代码可在GitHub并且可以在你自己的电脑上运行。

项目的视频

GitHub库

项目2:西剑桥航空货运

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

问题描述

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

实现

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

这个系统包括几个组成部分:

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

用户界面

我们使用MATLAB的应用程序设计器来创建新的地面控制UI,以输入无人机的新任务。我们发现MATLAB的地理轴非常适合绘制西剑桥的地图,无人机和它所遵循的不同路线。我们的用户界面配备了一组指定的地点来选择取货和送货。它还允许用户在纬度/长坐标中指定自己的位置,这可以从轴上读取。 

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

西剑桥模型

西剑桥的模型是在Blender中制作的,使用GIS数据插件导入地面纹理、轮廓和基本建筑模型。然后我们添加了一些着色器,并将建筑纹理烘焙到一个可以导出到虚幻引擎的uv映射图像上。然后可以将虚幻项目打包并插入到现有Simulink模型中的场景块中,以便在模拟中使用。金宝app

路由算法

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

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

调度算法

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

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

调度算法的基本思想是在用户界面给出的每一对可能的取货点和交货点,使用上述路由算法计算出的距离。当然,在每次调用调度器时都这样做是低效的,所以我们使用缓存来保存这些路由中的一些,以防它们被重用。 

接下来,算法尝试任务列表中固定数量的随机排列,并选择最佳排列。我们定义的最佳安排是最小的欧氏距离计算的路线。试验次数是一个可以修改的常数——我们将常数设置为100(考虑到项目的小规模),但当然这可以针对更大的任务集进行调整。 

决定用c++编写项目的这一部分主要是为了方便,部分是为了速度。像c++标准库vector这样的数据结构很容易用于打乱任务的顺序。

MAVLink接口

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

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

测试

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

为什么模金宝app型?

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

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

项目的视频

GitHub库

|
  • 打印
  • 发送电子邮件

コメント

コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。