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

从火箭到机器人,Python 与它有什么关系。 GeekBrains 校友故事
今天,我们将发布 Andrey Vukolov 向 IT 转型的故事。 他童年时对太空的热情曾促使他在 MSTU 学习火箭科学。 残酷的现实让我忘记了梦想,但一切却变得更加有趣。 学习 C++ 和 Python 让我能够从事同样令人兴奋的工作:对机器人控制系统的逻辑进行编程。

开始

我很幸运,整个童年都对太空着迷。 因此,放学后,我没有一刻犹豫自己应该去哪里学习,于是我进入了MSTU。 鲍曼,到火箭推进工程系。 然而,课程本身的分支——太空火箭的粉末或液体发动机——根本不必选择:2001年,一个特别的教师委员会仍然分配了申请者的目标群体。 我被困在一桶火药里。

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

现在这个领域很受欢迎,但在我的学习过程中我已经意识到,在火箭科学中,任何自发的活动几乎是不可能的。 其实这就是服兵役。 例如,在火箭行业工作,我将完全被剥夺独立开发软件的机会,即使是我自己,因为这项活动受到严格监管。

所有软件产品均根据特殊订单专门开发,并获得保密委员会(现为 FSTEC 的一个部门)的批准。 那里的开发人员需要对每一行代码进行注册和许可。 所有软件最初在任务级别都是保密的。 这在一定程度上解释了为什么现在用于培训火箭科学专业学生的软件最晚是在 90 世纪 XNUMX 年代开发的。

当我从研究所毕业时,我成功地在机构理论系工作,并开始用C++开发一个教育过程模拟器,这样我就有了一个可以比较的例子,可以权衡利弊。 选择是显而易见的,我逐渐开始转向 IT 和机器人技术。 应用力学比火箭科学有趣得多:许多未解决的问题、开放的环境、缺乏开发行业、对仿真软件的迫切需求。 在机器人技术中,通用软件的架构不稳定,需要重复实现复杂的算法,包括模糊逻辑和人工智能的开端。 因此,在我的第一个处理实验数据的程序之后,我几乎再也没有回到火箭(除了我的毕业设计)。

结果,我有机会在我的专业领域工作了仅仅四个月,然后就在莫斯科附近的一家航空航天工业复合结构工厂毕业了。 完成学业后,我什至不用去找工作,就立即来到机器人系教应用力学。

从教学到编程

从火箭到机器人,Python 与它有什么关系。 GeekBrains 校友故事
在 IFTOMM 世界大会上与研究组的学生成员(我在右边)

我在 MSTU 采样部门工作了 10 年,教授机制理论课程。 他发表了科学著作(见文末),逐渐从力学转向CAD和机器人技术。 最终他决定离开教学岗位。 为了最清楚地说明这一决定的原因,我要说的是,十年来我所教授的课程没有改变小数点后一位。 尽管从出版物来看,应用力学向前发展得非常非常成功。

此外,这项工作越来越像官僚工作——报告、计划、标准和大量的纸张。 在这种情况下,教学的乐趣被报告获得这种乐趣所取代,这对于执业专家来说是非常不愉快的。

最后我就这样进入了机器人领域:2007-2009 年,我们与 A. Golovin 和 N. Umnov 教授一起开始准备第一个科学著作。 在那里,我必须使用算法来确定闪光灯摄影中物体的路径。 从这个话题开始,就到了机器视觉、OpenCV 和机器人操作系统(虽然当时我什至没有想到这样一个规模)。 之后我最终把研究重点放在了应用力学和机器人领域,开发成为了辅助活动。

然而,为了找到一份机器人方面的新工作,我有必要提高和补充我的编程知识。 毕竟我从来没有专门学过IT,除了一年的大学课程(ObjectPascal和C++中的Borland VCL),并且依靠数学进行理论方面的开发。

起初,我考虑了在我的母校学习全日制课程的选择。 确实,很快我们就发现,由于日程安排不规律,而且经常在自己的日程之外工作(替代等),因此几乎不可能将此类学习与部门工作结合起来。 于是我逐渐萌生了远程完成付费课程的想法。 在位于 Baumanka 的 Mail.ru Technopark 培训中心教授的推荐下,我来到了 GeekBrains,并报名参加了 Python 程序员课程。

这些课程并没有造成任何困难,唯一的问题是我必须不断地将它们与部门工作、科学工作和活动结合起来。 时间如此紧迫,以至于必须牺牲大多数家庭之外的社交联系(幸运的是,暂时的)。

我是这样应对工作量的:在路上解决问题。 这项通过多次出差培养出来的技能被证明非常有用,因为没有它我什至无法完成我所有的作业(而且它也取代了冥想......)。 我学会了使用笔记本电脑、智能手机和无线智能手机键盘随时随地进行编码。

我的笔记本电脑是 Dell Latitude 3470,任何对角线为 5.5 英寸或以上且配有 Logitech K 810 BT 键盘的智能手机都可以。 总的来说,我向大家推荐罗技的产品;它们非常可靠,可以承受非常恶劣的使用条件(这绝不是广告)。

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

Python 非常有利于这样的工作——如果你有一个好的编辑器的话。 另一种编程技巧:使用远程连接到桌面或运行时环境。 我使用在我的家用计算机上运行 Django 的安全 Web 服务器完成了几项任务。 我在火车上工作,使用 PyDroid、DroidEdit、Maxima 软件。

为什么选择Python?

不久之后,我尝试使用 PHP 作为系统脚本语言。 我最初是自己“为自己”一点点学习 Python。 当我了解到Python和C++之间在模块级别上存在有效的联系后,我决定认真研究——在同一种语言中共享优化的算法和数据准备过程似乎很有趣。

最简单的例子:有一个非标准强力驱动器的控制系统,在带有RISC处理器的嵌入式机器上用C++实现。 管理通过外部机器相关的 API 进行,该 API 支持子系统之间通过网络进行的通信等。 在较高层面上,驱动操作算法未经调试或不是恒定的(需要根据工作流程加载不同的算法)。

实现此类系统的最佳方法之一是使用特定于机器的 C++ 子系统 API 作为在跨平台解释器上运行的一组 Python 类的基础。 因此,顶级开发人员不必考虑嵌入式机器及其操作系统的功能;他只需使用充当低级 API“包装器”的 Python 类即可。

我几乎必须从头开始学习 C++ 和 Python 绑定。 很快人们就清楚了,高层的面向对象能力比低层的面向对象能力重要得多。 因此,我们必须彻底改变设计和实现 API 的方法,选择 Python 级别的类并在 C/C++ 中共享全局数据。 习惯代码生成:例如,ROS框架本身在Python中生成名称和对象,因此在设计界面时必须考虑语言差异,尤其是打字方面。

当下工作:Python 和机器人控制逻辑

现在,我在莫斯科国立技术大学机器人研究和教育中心担任 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克)

其他被科学引文数据库索引的作品可以在我的个人资料中看到 研究之门。 大多数文章都是关于机器运动的,也有关于工程教育学和教育软件的文章。

来源: habr.com

添加评论