学生休息室

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

万博1manbetxSimulink模型组件化与阿拉巴马大学EcoCAR:第2部分

今天的嘉宾文章是第二部分布兰登·史蒂文斯.布兰登是一个欧洲经委会的研究生谁担任推进控制和建模领导阿拉巴马大学(UA) EcoCAR移动挑战赛团队.这竞争挑战11所北美大学,建立并开发节油混合动力原型车的代码SAE 2级无人驾驶汽车如果你错过了我们关于布兰登的第一篇文章,看看吧在这里.在那篇文章中,他介绍了他的团队是如何围绕MATLAB项目建立工作流程的:今天他将介绍他们与Git的集成是如何帮助他们分解开发任务的。

版本控制流程

我们的团队能够很好地分布在校园和全国各地的学校休息时间。Git和MathWorks图形比较工具的使用让我们可以简单地看到每次提交中发生了什么变化,并在展开时继续良好地工作。
这允许我们开始一个软件项目跟踪和模型评审的改进过程。我们的每个软件任务都能够在特定的模型文件上建立一个明确的目标。完成之后,领导团队成员可以使用MATLAB Projects版本控制GUI查看和批准更改。这帮助我们建立了对系统/模型的信心。这个版本控制GUI还使我们能够非常容易地恢复我们的更改,因此,如果开发人员想要快速轻松地重新启动,他们可以轻松地取消上次提交的更改。我们也能够将我们的改变隐藏起来,但不是永久地使探索和原型化变得容易。知道这是可能的,这让我们可以更容易地鼓励原型化和尝试新事物。
我们的团队有一个主要的开发分支、特性分支和发布分支。特性分支是添加到主分支的新代码,一个特性分支上的所有提交都被“压缩”成一个,然后合并以维护易于阅读的Git历史记录。
当我们转向测试并在真实车辆上使用新的控制器代码时,我们通过一个语义版本化的Git标记制作了一个发布候选分支。这个特殊的分支是一组代码,在集成到我们的原型车之前,可以通过我们的硬件在环车辆模拟器进行全面测试。任何关键的修复也可以只针对被认为是我们的最终产品的版本进行。因此,所有版本的代码和代码生成的工件都可以通过基于这些特殊分支的GitLab release永久保存,并且可以通过版本控制GUI轻松地在MATLAB中进行比较。这个过程使我们的代码更安全,并且更容易让开发人员参与编写他们自己的新功能或测试,并将其集成到我们的主要开发分支中。
我们在去年的比赛中使用了这个过程,现在在任何时候都对我们的代码有充分的信心。我们已经在我们的主要开发分支上创建了超过100个提交,其中大约有40个功能分支已经完成并使用这些工具进行了同行评审。

组件化

真正帮助实现这些生产力提升的是将模型重构为改进的模块化和组件化形式。我们现在有许多不同类型的模型,每个模型都是单独开发、模拟和测试的,而不是一个巨大的模型文件。每个文件由不同的功能代码段分开,类似于现代软件设计实践。我们必须考虑我们的系统将如何工作,并首先绘制出我们的数据流和控制逻辑将如何通过控制器的不同部分。使代码现代化不是一日之功,需要学习下面将要讨论的概念和不同的MathWorks工具,并将它们应用到我们现有的模型中。MathWorks基于组件的建模指南在我们做决定的时候帮了我们很大的忙。在项目开始时使用组件是一种很好的方式,可以帮助规划我们的系统,并与更大的团队一起开始工作。
模型引用是我们将控制代码分割成多个模型的最大方法。一个功能块存储为它自己的块和独立的模型引用文件,它提供了从顶层控制器到底层特性的层次结构形式。方法将现有子系统转换为模型引用模型引用转换顾问这帮助我们迅速与他们合作。我们已经很清楚什么样的信号会从模型流到模型,所以模型引用似乎是我们使控制器模型模块化的最佳想法。这样,每个系统都可以单独工作,而不会导致Git合并问题,而且这些模型之间的清晰接口使人们更容易理解新特性所需的输入和输出。我们的代码生成步骤也大大加快了,节省了大量等待编译或构建的时间。
除了拆分模型之外,我们还使用了子系统的引用贯穿我们的代码。我们有一些不同的功能,我们在整个模型中重复使用,例如电机产生的扭矩与车辆车轮传递的相同扭矩之间的转换。我们不是每次都复制和粘贴一个子系统,而是使用这个子系统参考模型作为它自己的Simulink文件进行版本控制。万博1manbetx此外,我们的子系统引用可能经常被编辑。如果我们改变这个系统的工作方式,就像改进我们的相关差异的效率模型一样,那么我们可以更改一个模型文件,而不是手动更改它所使用的每个子系统。
我们不经常使用的另一个选项是将我们的模型组件化链接子系统块.它们是链接到单独库文件的块,可以与子系统引用具有相同的重用和版本控制优势。然而,它们确实涉及到需要管理我们的团队库以及到它的块的链接,因此我们发现模型引用和子系统引用可以更好地为我们的团队工作。
最后我们还使用不同的子系统作为一种简单的方法,实验无损与新功能,使它很容易尝试不同的解决方案,而在模拟测试和我们的原型车。万博 尤文图斯例如,我们有三种不同的方法来实现再生制动策略,然后可以在不同的测试环境中进行简单的交换。所有存储在一个模型引用和每个包含子系统引用!
通过拥有25个不同的模型而不是1个,我们能够更好地作为一个团队工作,避免版本控制冲突,因为一次只有一个开发人员或对工作在一个文件上。开发每次解决或优化一个步骤的模型也更容易,比如一个模型确定驱动程序请求,然后输入另一个模型,开始优化如何满足该请求。通过拥有清晰的函数和更简单易懂的代码,更容易创建要分发的开发任务。

结论

学习和实施这些策略对我们的团队来说意义重大,并真正帮助我们构建更好的软件,不仅从长远来看更容易处理,而且由更多的成员构建得更好,软件错误更少。对于我们最初的成员来说,学习这些软件原理并将其应用于这些MathWorks工具确实需要时间,但这一成本已经显示出了巨大的收益回报。UA团队很高兴能够继续利用这些MathWorks工具,在比赛的最后一年继续前进。
|
  • 打印
  • 发送电子邮件

评论

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