从火箭到机器人,Python与它有什么关系。 GeekBrains校友故事


今天,我们发布了安德烈·伏科洛夫(Andrei Vukolov)向IT过渡的故事。 小时候对太空的热情曾使他进入MSTU的火箭科学领域。 残酷的现实使我忘记了梦想,但事实证明一切都更加有趣。 学习C ++和Python可以使我们完成许多令人兴奋的工作:对机器人控制系统的逻辑进行编程。

开始


我整个童年都幸运地热衷于太空。 因此,放学后,我毫不犹豫地去了哪里学习,并进入了莫斯科国立技术大学。 鲍曼,去火箭推进系。 但是,课程本身的分支(太空火箭的粉末或液体发动机)完全没有选择:在2001年,一个特殊的教务委员会分配了目标人群。 我“一桶火药”。

当时,“火箭潮”仅存在于计划中,工程师获得的薪水微薄,并在专门的封闭设计局和研究机构工作,几乎没有职业和职业发展的前景。 不过,俄罗斯的火药火箭纯粹是军事产品。

现在需要这个方向,但是在我学习期间,我已经意识到,在火箭科学中,我自己主动进行任何活动几乎都是不可能的。 实际上,这是一项兵役。 例如,在火箭行业工作,我被完全剥夺了自己开发软件的机会,即使是为我自己,因为这项活动受到严格的管理。

所有软件产品都是通过特殊订单并获得隐私委员会(现在是FSTEC的一个部门)的批准专门开发的。 那里的开发人员实际上需要注册并许可每一行代码。 最初,所有软件在任务级别都是秘密的。 这部分地解释了为什么当前用于训练火箭学员的软件是在20世纪90年代的90年代开发的。

当我毕业时,我设法在力学理论系工作,并开始开发C ++技术过程的培训模拟器,因此我有一个比较的例子,我可以权衡所有利弊。 选择是显而易见的,我逐渐开始转向IT和机器人技术。 在应用力学中,它比在火箭科学中要有趣得多:许多未解决的问题,开放的环境,缺乏开发行业以及迫切需要仿真软件。 在机器人技术领域-通用软件的体系结构不稳定,需要重复执行复杂的算法,包括模糊逻辑和AI的起源。 因此,在我完成处理实验数据的第一个程序之后,我几乎没有回到火箭(毕业项目除外)。

结果,我有机会在该专业工作了仅四个月,然后才毕业于莫斯科附近航空业的复合结构工厂。 培训结束时,我什至无需找工作-我立即来到机器人学院教应用力学。

从教学到编程



在IFTOMM世界大会上,有学生-研究小组的成员(我在右边)

我在MSTU的Proprotechnical系工作了10年,讲授了有关机制理论的课程。 他发表了科学论文(请参见文章结尾),逐渐从力学转向CAD和机器人技术。 最后,他决定退出教学。 为了最生动地说明做出此决定的原因,我要说的是,在过去的十年中,我所读的学习过程并未因逗号而改变。 尽管根据出版物判断,应用力学非常非常成功。

此外,这项工作越来越类似于官僚主义者-报告,程序,标准和大量纸张。 在这种情况下,教学的乐趣被收到这种乐趣的报告所取代,这对于执业专家来说是非常不愉快的。

最后,我来到了这样的机器人技术领域:在2007-2009年,我们与A. Golovin和N. Umnov教授一起开始编写第一篇科学论文。 在那里,我不得不根据频闪摄影使用算法来确定物体的轨迹。 从这一主题开始,迈向机器视觉,OpenCV和机器人操作系统(尽管那时我甚至都没有考虑过这样的规模)迈出一步。 之后,我终于专注于应用力学和机器人技术的研究,并且开发成为辅助活动。

但是,要找到机器人技术的新工作,有必要改进和补充我的编程知识。 毕竟,特别是IT,除了一年制大学课程(ObjectPascal和C ++中的Borland VCL)外,我没有在任何地方学习,我在开发的理论方面依赖于数学。

一开始,我考虑了在我的本地学院选择全日制课程的选择。 没错,很快就很清楚了,由于日程安排太长,而且工作超出了自己的日程安排(更换等),将这些研究与部门的工作结合起来几乎是不可能的。 因此,逐渐想到了远程完成付费课程的想法。 在Baumanka的Technopark Mail.ru培训中心的教授推荐下,他加入了GeekBrains,并参加了Python程序员课程。

这些课程没有造成任何困难,一个问题-必须不断结合:与部门的工作,科学工作和活动相结合。 没有足够的时间,我不得不牺牲(幸运的是,暂时地)在家外的大多数社交关系。

应付这样的负担:解决道路上的问题。 这项技能是由无数次商务旅行开发的,非常有用,因为没有它,我什至无法完成我的所有作业(并且它也取代了冥想……)。 我习惯了使用便携式计算机,智能手机和智能手机的无线键盘随时随地进行编程。

我有一台Dell Latitude 3470笔记本电脑,并且任何对角线为5.5英寸或更大的智能手机以及Logitech K 810 BT键盘都可以。 总的来说,我向所有人推荐Logitech产品,它非常可靠并且可以承受非常苛刻的使用条件(这绝不是广告)。


键盘Logitech K810

Python非常适合进行此类工作-使用出色的编辑器。 另一个编程技巧:使用到桌面或运行时的远程连接。 我使用在家用计算机上运行Django的安全Web服务器完成了一些任务。 他从火车上同时工作,该软件使用了PyDroid,DroidEdit,Maxima。

为什么是Python?


简而言之,我尝试使用PHP作为系统脚本语言。 Python最初是独立的,并且一点一点地“自己”研究。 在得知模块级别的Python和C ++之间存在有效连接之后,我决定认真研究-分离优化的算法和过程以一种语言准备数据似乎很有趣。

最简单的示例:在具有RISC处理器的嵌入式计算机上,用C ++实现了一个非标准的功能强大的驱动器控制系统。 管理是通过外部机器相关的API进行的,该API支持例如网络上子系统之间的通信。 在较高级别上,驱动器运行算法未调试或不稳定(根据工作过程需要加载各种算法)。

获得这样一个系统的最好方法之一是使用特定于机器的API C ++子系统作为跨平台解释器上使用的Python类集的基础。 因此,顶级开发人员无需考虑嵌入式计算机及其操作系统的功能,他只需使用Python类即可,这些类充当低级API的“包装器”。

我必须从零开始学习C ++和Python的绑定。 很快就认识到,高层次的面向对象功能比低层次的重要得多。 因此,我必须彻底改变设计和实现API的方法,选择Python级别的类并在C / C ++中共享全局数据。 习惯于代码生成:例如,ROS框架本身在Python中生成名称和对象,因此您必须考虑语言的差异,尤其是在键入,设计接口时。

目前的工作:Python和机器人控制系统的逻辑


现在,我在MSTU的研究和培训中心“ Robotics”担任Python和C ++的程序员。 我们实施政府部门委托的研究项目和软件工具:我们开发具有集成视觉系统和独立于系统的高级自动控制算法的机械手。

现在,我正在使用Python编程机器人控制系统的高级逻辑,该语言连接了以C ++,汇编器和Go编写的高度优化的模块。

在对机器人控制算法进行编程时,使用了两组大型算法。 它们中的第一个直接在底层设备上直接实现-这是驱动器控制器,通信线路集中器以及与操作员交互的子系统的固件。

这里设计的算法具有受控的执行速度和可靠性,超过了整个机器人的性能。 后者是必需的,因为整个系统的安全性取决于底层控制软件。

第二组算法确定整个机器人的操作。 这些是高级程序,其开发重点在于算法的易理解性和执行速度,通常非常复杂。 此外,机器人上的高级软件经常会在调试和测试过程中发生变化。 可解释的通用语言对于这种发展是必不可少的。

这项工作需要什么知识


需要学习C ++模板语言,即Python的面向对象功能。 几乎不可缺少的技能是设计和记录API的能力。 学习专门的库(例如Boost :: Python)的功能并不是多余的。 那些使用低级软件的人肯定会处理多线程(此外,在内核级别),Linux / UNIX / QNX系统调用。 为了加深对构建机器人技术原理的理解,熟悉机器人操作系统框架非常有用。

我试图在资产,开发和需求中至少使用一种编译和一种解释性编程语言。 这是在工程领域工作的制胜法宝,您需要不断开发高度专业化(阅读:不寻常)的算法并以编译语言实现它们。 使用解释语言解决此类软件的数据准备工作要好得多。 最初,我的设置包括C ++,Pascal和BASIC,后来又添加了PHP和BASH。

开发工具如何在学生学习中派上用场


现在,专业发展的主要计划是尝试为教学法中使用专业软件开发工具提供科学基础,以开发和测试教学方法。

在2016年,我开始了一项大型实验,目的是将开发工具(编程语言,IDE,文档生成器,版本控制系统)引入高等教育的教学实践中。 现在我们已经设法获得了可以定性概括的结果。

例如,在教育过程中引入材料版本控制可以显着提高学生的工作质量,但是前提是学生必须共同参与共享项目。 我的研究小组正在积极地使用专业的软件开发工具来开发技术学科的教学方法,该研究小组由MSTU的学生,申请人和补充教育课程的学生组成。

顺便说一句,我没有离开教学实践,我为MSTU高级研究所开发了作者关于Linux设备和管理的深入的面对面课程,我自己教书。

科学作品


早期工作
以马步态为例的四足步行系统设计中的步态规划问题 (2010年)

关于在四脚推进工作周期中接近支撑的阶段,马的前腿的运动学和支撑元素的负载问题 (2012年)

从最后
用于模拟齿轮生产的3D应用程序,用于教授机械和机械原理 (2019)

结构障碍的识别及其在寻找救济物中的应用 (2018)

在我的ResearchGate个人资料中可以看到由科学引文数据库索引的其他著作。 大多数文章专门讨论机器的运动;还有有关工程学教学法和教育软件的著作。

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


All Articles