Skip to main content

常见 Q&A

😋我们为什么使用 C++ 而非 Python ?

C++ 是编译性语言,而 Python 是解释性语言,总体上执行效率、资源占用等要比编译性语言差很多。一些探索性或教育性的工作,侧重开发效率时,才会考虑使用 Python。而机器人的自动控制是个对实时性要求很高的落地工程问题,除了精度之外,运行时间效率是第一位的,其重要性远远超过开发效率。

以 SLAM(同步定位与建图)为例,几乎所有面向落地应用的开源 SLAM 工作,都是基于 C++ 的,Python 代码往往只服务一些外围工作,如测试数据的预处理、轨迹精度的评估等对运行时间不做要求的部分。


😎我们的工作对编程的要求有多高 ?

C++ 语言比较特殊,你可以说自己精通了 Java,但千万不要说自己精通了 C++。C++ 非常之博大精深,有数不清的特性,而且随着时间还会不断变化更新。不过,用不着学会所有的 C++ 特性,因为许多东西一辈子都用不到。

我们面对的主要是架构上的组合和维护,辅之以算法层面的开发,所以更关心如何有效地使用和实现各种相关的算法。而相对的,那些复杂的设计模式,我个人认为在我们的工作中是占次要地位的。你的主要精力可能会花在参数调试、矩阵运算、TF变换、点云处理、图像处理上面;你可能对并发、GPU 加速等感兴趣,也可以花点时间学习;你还可能想用模板来拓展你的算法,也不妨一试。相应的,很多功能性的东西,比如说 GUI、网络通信等等,当你用到的时候不妨接触一下。

我们所需的 C++ 水平,大抵要高于你在书本上看到的那些示例代码。因为那些代码是作者用来向初学者介绍语法的,所以会尽量简单。而实际见到的代码往往结合了各种奇特的技巧,乍看起来会显得高深莫测。

总而言之,对 C++ 的水平要求应该是在教科书之上的。而且这个水平的提高,多数时候建立在你不断地看别人代码、敲自己代码的过程之上。它是反复练习出来的,并不是仅仅通过看书就能领会的。

所以,请尽早开始学习 C++,尽早开始使用 C++,才是研究机器人的正确之道。不要长期彷徨在自己的舒适区里犹豫不决,这样是没有进步的。


😂我们的工作为什么在 Linux 中进行 ?

有人问 Windows 行不行?这么说吧,如果你是一位机器人领域的大牛,并且具有超强的解决 bug 能力,你可以用 Windows 来开发,否则,非常不建议在 Windows 下编译,因为你早晚会被各种依赖库,各种 bug 搞崩溃。而且大部分的优秀开源工作都在 Linux 环境下实现,很多第三方依赖库在 Linux 下可以非常方便的安装。

之前没有接触过 Ubuntu,也不用担心。刚开始用命令行可能不太习惯,慢慢习惯后就会发现 Linux 的内在美。

况且,你也不想你机器人 mini PC 的 Windows 在赛场上自动更新了吧 :D


😴我们的工作对数学要求有多高 ?

主要是大学里学的:线性代数、概率论和微积分。

矩阵的运算。比如矩阵乘法、求逆等。

李群李代数。应该很多人没接触过,很重要,不过高翔的slam十四讲里面讲的比较详细了。

非线性优化问题。比如梯度下降、牛顿法、高斯-牛顿法、bundle adjustment 等。

有些数学可能很难,但基本上不需要我们自己去写。


😘我们为什么使用 ROS 2 而非 ROS 1 ?

省流:ROS 1 的生命周期即将结束,ROS 2 近些年快速发展,比较成熟了,ROS 2 的一些新特性利于我们的开发和调试工作。

详见:我们为什么使用 ROS 2


🤔校内赛到底做什么 ?

仿真中的 Nav2 部署 + 亚博 ROS 小车上的 Nav2 部署。

仿真和小车由我们提供。