STEM强化学习方法

工程教育界有许多优秀的课程,但是基于它们的课程通常有一个严重的缺点-不同主题之间缺乏良好的联系。 一个可以反对的人:怎么会这样?

在制定培训计划时,将为每门课程指明学习学科的前提条件和明确的顺序。 例如,为了组装和编程原始的移动机器人,您需要了解一些机制来创建其物理结构。 欧姆/基尔霍夫定律水平的电力基础知识,数字和模拟信号的表示形式; 向量和矩阵的操作,以描述机器人的坐标系和空间运动; 数据表示,简单算法和控制传递结构等方面的编程基础。 描述行为。

都是大学课程吗? 当然有 然而,根据欧姆/基尔霍夫定律,我们得到了热力学和场论。 除了使用矩阵和向量进行运算外,您还必须处理约旦形式; 学习编程中的多态性-解决简单的实际问题并不总是需要的主题。

大学教育是广泛的-学生处在广阔的领域,常常看不到所学知识的含义和实际意义。 我们决定逆转大学教育STEM的范式(从科学,技术,工程,数学一词),并创建一个依赖知识连贯性的计划,以在将来建立完整性,即涉及学科的密集发展。

新学科领域的研究可以与某个领域的研究进行比较。 这里有两种选择:要么我们有一张非常详细的地图,其中有大量细节需要研究(这需要很多时间),才能了解主要地标在哪里以及它们之间的相互关系; 或者您可以使用仅显示主要点及其相对位置的原始计划-这样的地图足以立即开始向正确的方向移动,从而阐明了沿途的细节。

我们在冬季学校测试了STEM强化学习方法,在JetBrains Research的支持下,我们与麻省理工学院的学生一起进行了这项学​​习

材料准备


该学校课程的第一部分是主要领域的一周课程,其中包括代数,电路,计算机体系结构,Python编程以及ROS(机器人操作系统)简介。

方向并不是偶然选择的:相辅相成,它们应该被用来帮助学生乍一看似乎不同的事物之间的联系-数学,电子学和编程。

当然,主要目标不是举办很多讲座,而是让学生有机会将自己刚刚学到的知识付诸实践。

在代数部分,可以对学生进行矩阵运算和方程组求解的培训,这对于研究电路非常有用。 学习晶体管设备及其基础上的逻辑元素后,学生可以在处理器设备中看到它们的应用程序,并在学习了Python语言的基础知识之后,为其上的真实机器人编写了程序。



达基敦


学校的任务之一是尽可能地减少使用模拟器的工作。 因此,准备了一大套电子电路,学生必须用真实的组件将其组装在面包板上,并在实践中进行测试,然后选择Duckietown作为项目的基础。

Duckietown是一个开源项目,其中包括称为Duckiebot的小型自主机器人以及行进中的道路网络。 Duckiebot是配备Raspberry Pi微型计算机和单个摄像头的轮式平台。

在此基础上,我们准备了一系列可能的任务,例如,构建路线图,查找对象并在其附近停靠,以及许多其他任务。 学生还可以提出自己的问题,不仅可以编写解决方案,还可以在真正的机器人上立即启动它。

教学教学


在授课期间,老师们使用预先准备的演示文稿来介绍材料。 一些课程通过视频录制,因此学生有机会在家中观看。 在讲座中,学生们在计算机上使用资料,提问,共同独立地解决问题,有时是在黑板上。 根据工作结果,分别计算出每个学生对不同学科的评分。



考虑更详细地进行每门课程的上课。 第一个主题是线性代数。 一天的学生学习了向量和矩阵,线性方程组等。 实用任务以交互方式构建:提议的任务是单独解决的,老师和其他学生给出了评论和提示。



第二个主题是电力和简单电路。 学生学习了电动力学的基础知识:电压,电流,电阻,欧姆定律和基尔霍夫定律。 实际任务部分在模拟器中完成或在板上执行,但更多的时间用于构建真实的电路,例如逻辑电路,振荡电路等。



下一个主题是计算机体系结构-从某种意义上说,是连接物理学和程序设计的桥梁。 学生们研究了基础知识,其意义比理论更为实际。 作为练习,学生们在模拟器中独立设计了算术逻辑电路,以获取分数。

第四天是编程的第一天。 选择Python 2作为编程语言,因为它在ROS下用于编程。 这一天的构成如下:教师讲课,讲解解决问题的例子,学生一边听着他们的话,坐在电脑前,一边重复老师在黑板上或幻灯片上写的内容。 然后,学生自己解决类似的问题,随后教师对解决方案进行评估。

第五天是献给ROS的:他们熟悉编程机器人。 在整个上学期间,学生们坐在计算机旁,运行老师讲的程序代码。 他们能够独立启动ROS的基本单元,并且熟悉Duckietown项目。 在这一天结束时,学生们已经准备好开始学校的设计部分-解决实际问题。



选定项目的描述


提供学生参加三个人的团队,并选择一个项目主题。 结果,通过了以下项目:

1.颜色校准。 Duckiebot在更改照明条件时需要校准摄像机,因此需要进行自动校准。 问题在于颜色范围对光非常敏感。 参与者实施了一个实用程序,该实用程序将在框架上突出显示所需的颜色(红色,白色和黄色),并以HSV格式为每种颜色建立范围。

2.鸭子出租车。 这个项目的想法是Duckiebot可以停在某个物体附近,捡起它并遵循一定的路线。 选择一只鲜黄色的鸭子作为对象。



3.建立道路图。 绘制道路和交叉路口的图形是一项任务。 该项目的目标是构建路线图,而无需完全依靠摄像机数据为Duckiebot提供先验环境数据。

4.巡逻车。 这个项目是学生自己发明的。 他们提议教一个Duckiebot,即“巡逻”,追赶另一个,即“入侵者”。 为此,使用了ArUco标记物的目标识别机制。 识别完成后,将完成信号发送到“入侵者”。



色彩校正


颜色校准项目的目的是根据新的照明条件调整可识别的标记颜色的范围。 没有这种调整,停车线,车道分隔线和道路边界的识别就变得不正确。 参与者提出了一种基于预处理版面颜色模板的解决方案:红色,黄色和白色。

这些颜色均具有HSV或RGB值的初始范围。 使用此范围,可以在框架上找到所有包含合适颜色的区域,并从中选择最大的区域。 该区域被视为要记住的颜色。 然后使用统计公式,例如计算平均值和标准偏差,以评估新的颜色范围。

此范围已写入Duckiebot摄像机配置文件,以后可以使用。 所描述的方法适用于所有三种颜色,最终形成了每种标记颜色的范围。

测试表明,几乎可以完全识别标记线,除非使用光亮的胶带作为标记材料,以至于强烈反射光源,以至于在相机的视角下,标记无论其原始颜色如何都显示为白色。



鸭式出租车


Duck Taxi项目涉及为城市中的一只鸭子鸭建立搜索算法,然后将其运输到所需地点。 参与者将该任务分为两部分:检测和沿图形移动。

学生进行了鸭子的检测,并假设鸭子被称为框架上任何可识别为黄色的区域,上面带有红色三角形(喙)。 在下一帧中检测到该区域后,机器人应接近该区域,然后停下来几秒钟,以模拟乘客的降落。

然后,参与者预先存储了整个小鸭子镇的路线图和机器人的位置,并接收了目的地作为输入,参与者使用Dijkstra的算法在出发点到到达点之间建立了一条路径,以在图中搜索路径。 输出显示为一组命令-在以下每个交叉点处转弯。



道路图


该项目的目标是建立一个图形-Duckietown中的道路网络。 结果图的节点是交叉点,弧线是道路。 为此,Duckiebot必须探索城市并分析其路线。

在项目工作期间,曾考虑过这个想法,但后来拒绝了创建加权图的想法,在该图中,边的成本由交叉点之间的距离(克服时间)决定。 事实证明,这种想法的实施非常费力,并且在学校框架内没有足够的时间。

当Duckiebot到达下一个交叉路口时,他选择离开尚未移动的交叉路口的道路。 覆盖所有路口的所有道路后,生成的路口邻接表将保留在机器人的内存中,然后使用Graphviz库将其转换为图像。

参与者提出的算法不适用于任意的Duckietown,但在由学校使用的四个路口组成的小城市中,效果很好。 想法是在每个路口处添加一个ArUco标记,其中包含路口标识符,以跟踪路口。
图中显示了参与者开发的算法的工作方案。



巡逻车


该项目的目标是在Duckietown搜索,起诉和拘留入侵机器人。 机器人巡逻队应沿着城市道路的外圈移动,以寻找一个著名的入侵者机器人。 在检测到入侵者之后,巡逻机器人必须跟随入侵者并使其停止。

该工作始于寻找在框架上检测到机器人并识别其中的入侵者的想法。 该团队建议在城市的每个机器人后面都配备一个独特的标记-就像真正的汽车都有州注册号一样。 为此,选择了ArUco标记。 由于它们易于使用,并且以前可以在Duckietown中使用,因此可以确定标记在空间中的方向以及与标记的距离。

接下来,有必要使巡逻机器人严格在外圈内移动而不在交叉路口停下来。 默认情况下,Duckiebot在车道中移动并在停止线处停止。 然后,使用道路标志确定交叉路口的配置并选择交叉路口的方向。 对于所描述的每个步骤,机器人状态机的状态之一是负责的。 为了摆脱交叉路口的停车,团队更改了状态机,以便在接近停车线时,机器人立即直接进入交叉路口的通过状态。

下一步是解决停止入侵机器人的问题。 该团队假设巡逻机器人可以通过SSH访问城市中的每个机器人,即具有一些有关每个机器人具有哪些授权数据和ID的信息。 因此,在检测到入侵者之后,巡逻机器人开始通过SSH连接到入侵机器人并关闭其系统。

确认关闭命令已完成后,巡逻机器人也停止了。
巡逻机器人的算法可以表示为以下方案:



项目工作


这项工作的组织方式类似于Scrum:每天早上,学生计划当天的任务,晚上则报告完成的工作。

在开学的第一天和最后几天,学生们准备了介绍该任务及其解决方法的演示文稿。 为了帮助学生遵循自己选择的计划,在正在进行项目的房间中,经常有来自俄罗斯和美国的老师回答问题。 交流主要以英语进行。

结果及其论证


项目工作持续了一周,之后学生展示了他们的结果。 每个人都准备了演讲,告诉他们在这所学校学到了什么,他们喜欢或不喜欢的最重要的课程是什么。 之后,每个团队介绍他们的项目。 所有团队都完成了任务。

实施颜色校准的团队比其他团队更快地完成了项目,因此他们设法为其程序准备了文档。 甚至在项目演示之前的最后一天,参与道路图的团队都试图最终确定并修复其算法。



结论


放学后,我们要求学生评估过去的活动,并回答有关学校如何满足他们的期望,他们获得了哪些技能等问题。 所有学生都指出,他们学会了在团队中工作,分配任务并计划时间。

还要求学生评价课程的有用性和复杂性。 在这里,形成了两组评估:对有些人来说,课程并不是很困难,而另一些人则将其评为最困难。

这意味着学校采取了正确的立场,在特定区域的初学者仍然可以使用,但也为经验丰富的学生提供了重复和巩固的材料。 应当指出,几乎每个人都认为编程课程(Python)并不复杂,但却很有用。 据学生们说,最困难的是“计算机体系结构”课程。

当询问学生有关学校的缺点和优势时,许多人回答说,他们喜欢选择的教学方式,在这种教学方式中,老师们迅速而独立地提供了帮助并回答了问题。

学生们还指出,他们喜欢在任务的每日计划模式下工作,并独立设置截止日期。 作为缺点,学生们注意到与机器人合作时缺乏必要的知识:在连接时,了解其工作的基本原理。

几乎所有学生都注意到学校超出了他们的期望,这表明了学校组织的正确方向。 因此,在组织下一所学校时,应保留一般规定,要考虑到并尽可能消除学生和教师指出的缺点,并可能改变课程清单或授课时间。

作者: JetBrains Research的 移动机器人算法实验室团队

PS我们的公司博客有一个新名称。 现在它将致力于JetBrains的教育项目。

Source: https://habr.com/ru/post/zh-CN467425/


All Articles