问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

对于自动驾驶开发,『精通 C++』到底能带来怎么样的壁垒?

创作时间:
作者:
@小白创作中心

对于自动驾驶开发,『精通 C++』到底能带来怎么样的壁垒?

引用
CSDN
1.
https://blog.csdn.net/CV_Autobot/article/details/136493845

自动驾驶系统是一个复杂的集成系统,涵盖了多个关键组件和模块,涉及的开发语言也不近相同。一般来说,自动驾驶系统包含环境感知地图定位决策规划控制执行等多个算法模块的online(在线)系统,这些组件共同协作,使得自动驾驶系统能够感知周围环境、做出决策、规划路径并安全地控制车辆到达目的地。除了算法模块,online系统还包含人机交互通信连接状态监控数据采集等模块,以给安全员和乘客提供必要的信息显示,在必要时为乘客提供紧急安全接管服务,并记录数据来保障研发迭代。

但是,online系统其实只是自动驾驶的一部分。为了支持高效的数据闭环与算法迭代,自动驾驶系统还有offline(离线)系统,它包含一系列承担不同功能的子系统。在自动驾驶公司,这套离线系统也被成为data pipeline(数据管道)或infra(基础设施,即infrastructure的简写)。以下是一些常见的offline系统组件:

  • 地图与标注系统
  • 机器学习模型训练系统
  • 仿真测试系统
  • 数据存储与管理系统
  • 车队管理与远程系统

自动驾驶系统的online和offline系统会混合使用多种语言,以满足复杂多样的功能实现要求。具体的选择通常取决于性能要求、系统架构设计和开发团队偏好。

Online
车载计算平台的CPU、GPU和内存资源往往是有限的,所以在online系统中,出于性能和实时性的考虑,绝大多数模块都会用C++开发或部署。此外,Shell语言可能用于执行一些系统级别的任务和脚本。在涉及人机交互、数据传输的模块,也会使用Python。

Offline
在离线系统中,由于脱离了车载计算平台硬件资源的掣肘和安全性的约束,多种语言都会被使用:

  • C++: C++用于开发高性能的组件,例如地图与标注、仿真测试等各个系统的核心组件往往是用C++开发。
  • Python: Python在离线系统中广泛用于机器学习、深度学习和数据处理。Python也可以用于各个子系统的接口标准化,以提供全平台统一的服务。
  • Javascript: offline系统需要为开发、测试、标注人员提供快捷易用的网络工具和界面,所以需要使用Javascript进行Web开发。这包括仿真工具的可视化界面、数据可视化以及其他与用户交互的多个工具。
  • Java:Java在处理大规模数据和分布式计算方面具有良好的生态和应用。在自动驾驶系统的数据管理系统中,Java可能用于管理、调度离线数据等。

总体而言,不同语言具有不同的优势,但也可以明显看到,C++是自动驾驶中最广泛使用、重要性最高的语言,只靠python行走江湖的时代彻底结束了!C++是算法人员和开发人员必备的技能,也是量产的基石,永远绕不开的工具。

近40 年以来,C++以其高性能、灵活、稳定和强大的底层支持而闻名。运行速度快、对硬件高效访问、可以实现复杂的计算和控制算法,因此始终是信息行业的热门语言。

自动驾驶系统的第一要求是安全和稳定,这也是为什么在自动驾驶系统中,C++几乎是最重要的编程语言。自动驾驶公司都有大批C++算法工程师,他们开发关键的软件模块,比如感知、定位、预测、控制、运动规划等,从算法优化到部署上车、从数据回收到仿真模拟,整个过程都离不开C++,因此熟练掌握C++成为从事自动驾驶研发大多数岗位的必备技能。现在的算法人员也已经从纯python和torch开发,逐渐要求掌握C++语言,更深入参与各类感知等子模块的调试开发。

深入了解C++,将使学习者能够更好地应对自动驾驶项目中的挑战,为行业发展贡献自己的力量,自己的职业发展道路更宽广。主流自动驾驶公司和车企在招聘算法工程师时,JD里面都要强调熟练使用C/C++,这就是门槛。

尽管C++在自动驾驶行业中应用广泛,但许多学习者在学习C++时往往面临各种挑战。从语法规则到高级应用,如何快速掌握C++的关键知识点和思维方式,是每个C++初学者都会遇到的难题。如果还需要同时学习自动驾驶相关模块算法的知识,就更让初学者感到畏惧和艰难。

虽然很多人在学校里有机会学习C++,但学校的课程质量令人不敢恭维:

  1. 学校的C++编程课程过于注重语法知识的学习,而较少关注实际编码,导致学生对概念一知半解,一动手就迷糊;
  2. C++涉及面广,而学校的教学时间有限,所以学习往往碎片化,重要知识点无法系统地学习;
  3. 学校老师大多没有实际项目开发经验,很难将C++应用场景和实际工作需求结合,和自动驾驶结合就更加稀少;
  4. 许多学校还在使用着陈旧的教材与开发工具,往往落后实际应用一二十年,大量C++新特性没有涉及。

此外,网络上的C++课程汗牛充栋,良莠不齐。而且这些课程都更专注于C++本身的语法和特性,一般是面向通用领域,没有结合特定领域而展开,或者以互联网后端服务为主。相比之下,自动驾驶行业对C++有非常独特的需求,比如自动驾驶核心算法不需要考虑多机冗余和高并发, 而是涉及大量的数学运算、矩阵操作、图像处理等,需要利用C++进行高效的底层实现;自动驾驶还需要考虑系统架构、并发、硬件访问等问题,这需要工程化的C++编程思维。因此,虽然已经有大量C++课程,但依然缺乏面向自动驾驶领域、具备实战案例的C++课程。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号