我一直在网站服务和移动应用开发领域工作,但这最终变得有些单调。回想起高中时代,我曾是焊接俱乐部的一员,那时起我就有种想挑战更高难度问题的渴望。两年前,我开始在阿姆斯特丹寻觅机遇,最终加入了Monumental。如今,我在这里致力于利用机器人技术自动化建筑施工,首先从砖石工作开始。当系统顺利运行,亲眼见证一堵墙慢慢建成时,那份成就感是难以言喻的。相比之下,看到别人忙于加密货币或金融科技的项目时,我总感觉如果我去做那些事情,肯定会感到极度无聊。
![如何作为软件工程师涉足机器人技术 [译]](http://paooo.com/wp-content/uploads/2024/10/robot-jpg.avif)
走出位与字节的世界,转向原子与电子的世界,你能带来更大的影响。软件应用无法为人们提供住所、食物或将他们送往火星。仅凭更智能的软件无法解决气候变化问题,我们还需大规模投入太阳能板和能源存储设备。随着人口老龄化,我们需要重新思考食物来源、住房供暖方式,以及如何为退休人口提供住房。
解决这些问题离不开软件技术。通过控制系统、数据分析和图像处理,我们能够让硬件设备“复活”。软件技术是整合各个系统的关键。
涉足硬件领域,意味着你将与来自其他专业领域的工程师合作,比如机械和电气工程师。这种跨学
科的合作不仅令人兴奋而且极具启发性,它能够拓宽你的视野,使你成为更出色的软件工程师。与机械工程师的合作让我意识到,他们对世界的看法与众不同——周遭的一切都比你想象的更加可塑。我在进行家居改善项目时有了这个体会——即便你不小心在墙上打了个洞,也总有办法修复它。
初次与其他领域的工程师合作时,你可能会感到不安:他们谈论的“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 月
软件工程师转机器人开发要学什么?
优先补齐嵌入式与硬件协作能力:C/C++ 是微控制器编程基础,Rust 适合提升安全性与工程体验;同时要了解控制系统、数据分析、图像处理,以及 CAD、3D 打印和焊接等原型制作技能。
为什么机器人项目需要 Nix?
因为机器人是有状态系统,不能像云服务那样随意替换容器。Nix 可以把整套系统配置放进 git 仓库统一管理,并让设备自动更新配置,帮助团队稳定维护多台机器人和操作员电脑。
软件工程师做机器人会遇到哪些新问题?
除了常规的软件调试,还要处理电缆接触不良、硬件联调、跨学科沟通等问题。你需要和机械、电气工程师协作,理解他们的术语与约束,才能让整套机器人系统真正协同工作。
转机器人最该先学哪些技能?
优先补 C/C++、Linux、传感器接口、控制基础和调试方法;如果做工程落地,再加 Rust、CAD、3D 打印与焊接。核心不是“会写代码”,而是能把软件、硬件和时序问题一起定位。
如何快速进入机器人团队实战?
从一个可闭环的小系统切入,比如机械臂末端、移动底盘或视觉定位模块;先把日志、标定、故障复现和版本管理做好,再逐步接触运动规划与系统集成,效率远高于泛学理论。
