如何作为软件工程师涉足机器人技术 [译]
我一直在网站服务和移动应用开发领域工作,但这最终变得有些单调。回想起高中时代,我曾是焊接俱乐部的一员,那时起我就有种想挑战更高难度问题的渴望。两年前,我开始在阿姆斯特丹寻觅机遇,最终加入了Monumental。如今,我在这里致力于利用机器人技术自动化建筑施工,首先从砖石工作开始。当系统顺利运行,亲眼见证一堵墙慢慢建成时,那份成就感是难以言喻的。相比之下,看到别人忙于加密货币或金融科技的项目时,我总感觉如果我去做那些事情,肯定会感到极度无聊。
走出位与字节的世界,转向原子与电子的世界,你能带来更大的影响。软件应用无法为人们提供住所、食物或将他们送往火星。仅凭更智能的软件无法解决气候变化问题,我们还需大规模投入太阳能板和能源存储设备。随着人口老龄化,我们需要重新思考食物来源、住房供暖方式,以及如何为退休人口提供住房。
解决这些问题离不开软件技术。通过控制系统、数据分析和图像处理,我们能够让硬件设备“复活”。软件技术是整合各个系统的关键。
涉足硬件领域,意味着你将与来自其他专业领域的工程师合作,比如机械和电气工程师。这种跨学
科的合作不仅令人兴奋而且极具启发性,它能够拓宽你的视野,使你成为更出色的软件工程师。与机械工程师的合作让我意识到,他们对世界的看法与众不同——周遭的一切都比你想象的更加可塑。我在进行家居改善项目时有了这个体会——即便你不小心在墙上打了个洞,也总有办法修复它。
初次与其他领域的工程师合作时,你可能会感到不安:他们谈论的“2020 视力”、“冲击维护”和“电磁干扰”等概念可能让你摸不着头脑。但随着时间的推进,你将足够了解他们的工作方式,能够跨学科交流并贡献自己的见解。你所从事的编程工作将与众不同,更类似于涉及 3D 几何学和场景图的游戏编程。
但最终,机器人软件还是软件。你需要处理数据清洗、备份等常规任务。然而,在硬件领域,你会遇到全新类型的问题,比如之前我从未需要考虑过电缆是否接触不良的问题,但现在这成了调试系统时的一个常见问题。能够跨领域工作的人才是关键,必须有人确保各个部分能够协同工作。
处理物理对象意味着更多挑战。在 DevOps/GitOps 时代,我们已经解决了如何管理云服务版本的问题:你总是部署最新版本,并进行逐步部署。你不需要担心运行系统上的状态残留,因为每次部署都会替换掉你的容器/虚拟机。这就是所谓的“牲畜而非宠物”的软件开发方法。
想象一下,如果你的办公室里有三台机器人,每台机器人都运行着不同的服务,并且有不同的同事同时在这些服务上工作。还有运行在操作员电脑上的软件需要保持最新。同时,你希望现场工作的机器人既稳定又保持最新,这一切变化如何管理?你不能每次更新软件就抛弃你的机器人!
这些问题完全可以通过工程手段解决。我的工具箱中有一个必不可少的工具是Nix,它允许我在 git 仓库中管理整个系统配置,并让系统自动更新配置。这就像在有状态系统上实现了虚拟机的一次性使用的好处。然而,面对这类问题时,你可能会怀念那些简单的 CRUD 应用开发。
你需要学习 C 或 C++,因为微控制器编程就是使用它们。实际上,现代 C++ 并不像你想象的那么糟糕,但确实需要一定的自律。你得做好准备,面对那些充斥着宏的嵌入式 C 代码。采用一些简单的面向对象编程技巧,如类和关注点分离,很快就能让你在嵌入式软件工程领域脱颖而出。试试手头的树莓派 Pico、面包板、伺服电机和 LED 灯,开始你的实践之旅吧。
此外,不妨尝试一下 Rust 编程。它的强类型系统和安全性特性非常引人注目,而且构建工具和生态系统远胜于 C++。尽管Rust for embedded还在不断完善,但其前景令人期待。
当你开始探索新领域时,CAD 和3D 打印技术值得一学。不仅因为制造实物和学习新技能本身就很酷,而且这能让你更好地理解同事在 Fusion 360 崩溃时的挫败感。学习焊接也是一个好主意,它不仅能帮助你进行简单的修理,还能让你深入了解电子产品的开发过程。如今,硬件原型制作比以往任何时候都要容易,CAD 工具易于上手,网络上有大量的教学视频。消费级 3D 打印机也在变得越来越易用和不断进步。
行动起来,开始构建你的机器人吧!发送你制造的机器人照片给我!生活太短暂,不应浪费在开发另一个《糖果粉碎传奇》的克隆游戏上!
如果你对参与建筑机器人的开发感到兴奋,来加入我们吧!
_感谢[Xavier](
https://xav.io/)和Phatho审阅本文草稿_。
2024 年 2 月