前言:大家好,我是今年24届的学长,现已拿到智驾感知算法工程师的offer,年薪大约40w,个人还是比较满意这份工作的。想和大家分享一些我在C++智驾学习过程中的资源和总结。,希望我的经验能够为大家提供一些实用的参考和启发,让正在学习智驾或者准备面试的同学少走弯路。
下面为大家推荐一些我在C++智驾学习中用过的非常好的学习入门资料,还有学长自己总结的一些学习路径和资料。
C++智能驾驶零基础到就业学习路径
C++基础——基本语法/数据结构/小项目
C++进阶学习——标准库/现代C++/算法规范/调试/编译
Linux操作系统、网络通信、数据库等学习
自动驾驶工具链Git/CMake/GDB/Python学习
自动驾驶技术栈ROS/Apollo/路径规划算法学习
智能驾驶进阶——深度学习/计算机视觉等学习
就业项目准备——7个项目推荐
➢实战项目-魔改ros-兼容 ProtoBuf和rosmsg(进阶简历项目)
➢自动驾驶模拟器
➢目标检测和跟踪
➢路径规划和控制
➢自动驾驶/机器人系统开发
学长一对一辅导,腾讯会议教学
C++基础——基本语法/数据结构/小项目
1、C++初上手入门:
非常不推荐大家一上来就开始读《C++ Primer》、《C++编程思想》等大部头著作,其包含的内容非常详细,上千页的长度很容易让新手产生畏惧感,容易让人想放弃
建议不是从这些出名的著作开始读起,反而是应该找入门级别的小册子、网站:
- https://www.runoob.com/cplusplus/cpp-tutorial.html
- https://github.com/changkun/modern-cpp-tutorial
- https://github.com/Light-City/CPlusPlusThings
- https://github.com/GrindGold/CppGuide/blob/main/file/%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E9%98%BF%E9%87%8C%E4%BA%91%E5%A4%A7%E5%AD%A6.md
- https://github.com/tomstillcoding/cs-roadmap/blob/main/c++/2022_%E6%9C%80%E6%96%B0C++%E5%BC%80%E5%8F%91%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF_%E7%A7%91%E7%8F%AD%E7%89%88.md
2、需要学习的基础内容
- C语言:指针等——参考学习网址:[C语言] 指针的详解与应用-理论结合实践,真正理解指针!_哔哩哔哩_bilibili
- C++基础——面向对象、类;运算符重载、继承、多态;C++小游戏开发:英雄怪兽、五子棋、贪吃蛇、王者荣耀管理器
参考学习网址: 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili
- C++新特性——新基础类型;内联/套嵌命名;auto 占位符;decltype 说明符;
函数返回类型后置;右值引用;C++成员指针;lamba 表达式;
非静态数据成员函数默认初始化;列表初始化;
参考学习网址:你应该立即掌握的10个现代C++新特性_哔哩哔哩_bilibili
- C++数据结构——线性表、动态数组、单项链表、企业链表、循环链表
栈的顺序存储、队列的顺序存储、树、二叉树
冒泡、选择、插入、希尔排序、快速排序、堆排序
参考学习网址:黑马程序员2017C++数据结构(C语言实现)(已完结)_哔哩哔哩_bilibili
- C++经典项目——俄罗斯方块 参考学习网址:【纯C++】项目实战:经典俄罗斯方块游戏_哔哩哔哩_bilibili
windows计算器开发 参考学习网址:【C/C++】用Qt开发一款自己的计算器!70分钟手把手教你搞定windows计算器,学会之后QT项目经验又长进了呢_哔哩哔哩_bilibili
3、手册
- http://www.cplusplus.com/排版更好,条理分明
- https://zh.cppreference.com/ 内容详细、更新及时
C++进阶学习——标准库/现代C++/算法规范/调试/编译
基础语言版本
- 经典C++——C++98推荐书籍:《C++ Primer 第四版》《Effective C++》
- 现代C++——C++11/17/14/20(主流是14左右的版本) 推荐书籍:《C++ Primer 第五版》《Effective Modern C++》
网站:https://en.cppreference.com/w/
基础库
- STL:是C++默认带的标准库,里面有很多使用的算法,如各种排序的算法,还有一些基本的数据结构,学习推荐书籍:《STL源码剖析》
- STL——参考学习网址:黑马程序员2017C++STL教程(已完结)_哔哩哔哩_bilibili
- Boost 网站:https://www.boost.org(内容很多,大家酌情去看)
开发环境
- 操作系统——Ubuntu/Mac,智能驾驶一般都用的是linux开发
- 编辑器——Vs Code(推荐) 网站:https://code,visualstudio.com
- 编译器——GCC 网站:http://gcc.gnu.org
clang 网站:https://clang.llvm.org
- Buid工具——MAKE 网站:GNU make
BAZEL 网站:https://bazel.build/
- 调试器 ——GDB Linux 网站:https://www.gnu.org/software/gdb/
- 性能分析——gperftools(可以提供基于CPU的性能分析)
网站:GitHub - gperftools/gperftools: Main gperftools repository
- 测试——CTEST 推荐书籍:《软件测试的艺术》
网站:GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework
- 其他——序列化 Protobuf 网站:GitHub - protocolbuffers/protobuf: Protocol Buffers - Google's data interchange format
命令行解析gnags 网站:http://ghags.github.io/gflags/
- 代码协作及托管——CITHUB 网站:https://github.com
CITEE 网站:https://gitee.com
编程规范
- Google C++ Style Guide网站:Google C++ Style Guide
- MISRAC++2008
网站:https://www,perforce.com/resources/qac/misra-c-cpp#cpp-rules
- AUTOSAR C++14 网站:AUTOSAR Enabling Continous Improvement
数据结构和基础算法
- 《Algorithm 算法 第四版》
- Leetcode: https://leetcode-cn,com(练题)
设计模式
《HeadFirst 设计模式》
建模语言
- UML——《大象--Thinking in UML》
- SysML(系统建模)——《SySML精粹》
Linux操作系统、网络通信、数据库等学习
- Linux基本知识——Linux 操作系统基础;Linux 应用开发基础知识;嵌入式 Linux 开发环境搭建
操作系统原理基础——参考学习网址:Linux操作系统原理与应用_哔哩哔哩_bilibili
计算机基础——参考学习网址:王道计算机考研 操作系统_哔哩哔哩_bilibili
推荐书籍:《鸟哥的Linux私房菜 基础学习篇 第四版》
- Linux应用开发
Linux 网络编程——TCP/IP 协议;Socket 的使用;tcp、udp;C/S 架构
推荐书籍:《TCP/IP网络编程》
参考学习网址:黑马程序员-Linux网络编程_哔哩哔哩_bilibili
Linux系统编程——进程与线程;常用函数等 api;进程创建、回收;常用进程相关命令;信 号量、消息队列、共享内存、管道、信号;守护进程;线程创建、同步互斥、互斥锁;动态库和静态库
推荐书籍:《Linux系统编程(第2版)(影印版)》
参考学习网址:黑马程序员-Linux系统编程_哔哩哔哩_bilibili
- C++高级应用开发基础——进程控制 fork、exec 函数族、进程回收;进程间通信 pipe、fifo、mmap;信号集操作函数、信号捕捉、守护进程;线程基本操作、线程回收、线程分离;线程同步,互斥量、读写锁、信号量;
- Web服务器项目——参考学习网址:web网络服务器开发案例 socket /tcp.ip 编程(完)_哔哩哔哩_bilibili
- 计算机网络相关项目-safe-udp 项目——参考学习网址:linux c++项目:安全可靠udp传输; c++,shell,滑动窗口,拥塞算法,TCP/UDP,cmake 项目演示_哔哩哔哩_bilibili
- 数据库学习:MySQL、ssh、Oracle数据库、
linux基础知识和数据库的搭建_哔哩哔哩_bilibili《linux基础知识和数据库的搭建》
《Linux下Mysql数据库入门及精通》Linux下Mysql数据库入门及精通_哔哩哔哩_bilibili
自动驾驶工具链Git/CMake/GDB/Python学习
- git基本使用,常用指令——参考学习网址:【狂神说Java】Git最新教程通俗易懂_哔哩哔哩_bilibili
- docker 基本原理,常用语句,如何构建环境——参考学习网址:【狂神说Java】Docker最新超详细版教程通俗易懂_哔哩哔哩_bilibili
- shell 基本使用——参考学习网址:黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等_哔哩哔哩_bilibili
- cmake基本使用——参考学习网址:开篇-课程简介_哔哩哔哩_bilibili
- 高阶阶段:如交叉编译、如何引入第三方库等(详情可+v “linglv06”)
- gdb使用——参考学习网址:【小神仙讲 GDB】 通俗易懂版教程 | 一小时入门GDB | Debug | c/c++程序员必备 | 佩雨小神仙_哔哩哔哩_bilibili
- vscode如何调试代码——参考学习网址:使用VSCode调试C代码_哔哩哔哩_bilibili
- python(不是重点,有时间可以学习下)——参考学习网址:黑马程序员python教程,8天python从入门到精通,学python看这套就够了_哔哩哔哩_bilibili
自动驾驶技术栈ROS/Apollo/路径规划算法学习
实际工作大多离不开ROS。古月居的ROS教程是最经典的,推荐。【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程_哔哩哔哩_bilibili
- ROS1基本知识学习——Nodes、Topics、Services、Parameter Server、Messages
- ROS1核心源码解析——发布订阅模型、数据化协议
- ROS1项目——ros--protobuf项目 参考网址:自动驾驶机器人C++软件开发项目:魔改ros-兼容protobuf和rosmsg ,docker,cmake,c++元模板,项目简历,项目演示_哔哩哔哩_bilibili ROS1添加共享内存通信
- ROS2(网站同ROS1) 和DDS
- ROS2基本架构
- ROS2 CMW 中间件源码流程梳理
- ROS1/RO2 网站:https://www.ros.org
- Apollo CyberRT 网站:apollo: Apollo (阿波罗)是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。 - Gitee.com
- RTIDDS 网站:Data Distribution Service for Complex Systems | DDS Standard | RTI
- dds基本原理学习——参考学习网址:【小梅哥FPGA】DDS原理详解与实现_哔哩哔哩_bilibili
- fastdds学习路线——参考学习网址:C++自动驾驶机器人中间件DDS:Fastdds cmake源码构建_哔哩哔哩_bilibili
- cyber RT中间件——Cyber RT 模块构架梳理,通讯模块学习:Intra、shm、fastdds,序列化协议:ProtoBuf
参考学习网址:01.001_CyberRT简介_哔哩哔哩_bilibili
- 路径规划/控制算法——常用路径规划算法:A*、D*、dijkstra、RRT、RRT*;EM planner
算法思想:多车道策略、路径快速迭代、EM 算法、决策与交通规则;
控制算法:增量式 PID、位置式 PID、LQR、MPC 等、轨迹预测等
规划决策控制面试知识点整理;规划控制决策算法原理、流程、应用场景;
参考学习网址:路径规划与轨迹跟踪系列算法学习_第1讲_Dijkstra算法_哔哩哔哩_bilibili
智能驾驶进阶——深度学习/计算机视觉等学习
数学运算库
Eigen 网站:https://eigen.tuxfamily.org
视觉库
OpenCv 网站:https://opencv.org
点云库
PCL 网站:https://pointclouds.org
开源库
- GITHUB: www.github.com
- ROS1/ROS2开源社区
- MOVEIT 网站:https://moveit.ros.org
- Apollo 网站:apollo: Apollo (阿波罗)是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。
- Autoware 网站:https://www.autoware.org
深度学习框架
- 深度学习入门——吴恩达教程,B站
- YOLO算法应用
- PyTorch——Udacity PyTorch课程
- KITTI——网站:The KITTI Vision Benchmark Suite
仿真环境
- CARLA——Unreal 网站:http://carla.org
- LGSVL——Unity3D 网站:https://www,svlsimulator.com
基础知识
- 概率论——《程序员的数学-概率统计》
- 线性代数——《程序员的数学-线性代数》
- 数值优化——《数值优化方法》
- AI原理——《人工智能数学基础》
- 空间几何——坐标转换等基础知识
芯片
- TI: TDA4 网站:TDA4VM data sheet, product information and support | TI.com
- Nvidia: Xavier 网站:https://www,nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-agx-xavier/
操作系统
QNX 网站:http://www.qnx.com
就业项目准备——7个项目推荐
准备智能驾驶C++方向工作前,如果想让自己的简历更加丰富一些,可以考虑做以下项目准备:
- 实战项目-魔改ros-兼容 ProtoBuf和rosmsg(进阶简历项目)
项目简介:ros-ProtoBuf-bridge 是一个基于 ROS 和 ProtoBuf 的桥接项目,旨在实现
ROS 消息和 ProtoBuf 消息之间的兼容和互操作性。
- 技术栈:C++模板、元编程技术、ProtoBuf、CMake,ROS、Docker\Linux、Shell
- 通过 ros-potobuf 项目,去自主的学习 ros 源码,不是无用的学习源码,把源码魔
改;
- 算法和车端,开发的同学都适用这个项目,该项目兼容 rosmsg 和 proto,即插即用,
可以结合大家自己的 ros 项目,并且可以混用 rosmsg 和 proto 这两种数据序列化协议
ProtoBuf,低时延,易于兼容,可扩展,并且百度 apollo 和目前主流的自动驾驶厂家
- 都是使用 proto,可见其序列化协议的优势
主要特点:
- 构建环境自动化: 使用 Docker 构建整个项目环境,通过 Dockerfile 安装 ROS-Noetic 组
件、ProtoBuf、CMake 等依赖项,同时使用 Shell 脚本编写第三方库源码安装和容器
操作脚本,以实现项目构建流程的自动化和部要的便利性。
- 兼容性和可扩展性:基于 C++模板编程中的 SFINAE 机制,修改了 ROS 的核心库
roscpp_serialization 和 roscpp_traits 的底层代码。这样,ros-ProtoBuf-bridge 可以同时
兼容 ROS 原生 msg 和 ProtoBuf 消息。
- 项目管理和构建:使用 CMake 作为项目的构建系统,编写 proto 测试文件生成相应
的静态库,供 ROS 自定义功能模块调用。简化了项目的管理和构建过程,并提供灵
活的扩展机制,便于后续添加复杂数据类型。
- 插件化设计 ROS-ProtoBuf-bridge 可以作为一个插件嵌入到各种复杂的 ROS 功能项目
中。通过将该项目中的 CMake 指令集成到目标项目中,可以轻松地实现基于 proto
数据的发布和订阅,
参考学习网站:自动驾驶机器人C++软件开发项目:魔改ros-兼容protobuf和rosmsg ,docker,cmake,c++元模板,项目简历,项目演示_哔哩哔哩_bilibili
- 自动驾驶模拟器
一个自动驾驶模拟器是开发人员用来模拟和测试自动驾驶算法和系统的重要工具。它可以模拟车辆的行驶和周围环境,以及处理来自各种传感器的数据。开发一个简单的自动驾驶模拟器,模拟车辆的运行、障碍物检测和避让等场景。这可以展示你对控制算法、传感器模拟和环境感知的理解。通过开发和使用自动驾驶模拟器,工程师可以在真实道路测试之前,有效地验证和优化自动驾驶系统的各个方面,从而提高其可靠性和安全性。
链接:以特斯拉为案例:自动驾驶仿真框架分析(上,数据搭建/场景建模)_哔哩哔哩_bilibili
链接:自动驾驶落地离不开的C++!快来实现第一个自动驾驶模块吧_哔哩哔哩_bilibili
链接:
介绍一款非常好用的自动驾驶模拟器--Carla_哔哩哔哩_bilibili
- 目标检测和跟踪
目标检测和跟踪在自动驾驶中至关重要,确保车辆能够识别和跟踪道路上的各种物体(如行人、车辆、障碍物等),从而做出安全的驾驶决策。通过配置,可以构建一个高效的目标检测和跟踪系统,为自动驾驶车辆提供可靠的环境感知能力。以下是一些项目的视频:
链接:
实时车辆行人多目标检测跟踪系统介绍与环境配置_哔哩哔哩_bilibili
链接:YOLO目标检测是怎么实现的?YOLO行人检测和车辆检测项目讲解,附课件源码!计算机视觉项目_哔哩哔哩_bilibili
链接:
深度学习7:自动驾驶 — 目标检测(yolo模型)_哔哩哔哩_bilibili
- 路径规划和控制
开发一个路径规划和控制系统,使车辆能够在规定的环境中导航,考虑到障碍物和动态环境的变化。路径规划和控制在智能驾驶系统中是确保车辆安全、高效地导航至目标的关键组成部分。路径规划和控制系统可以有效地支持自动驾驶车辆在复杂的交通和道路环境中安全、高效地行驶。
链接:
自动驾驶路径规划-控制决策入门学习_哔哩哔哩_bilibili
链接:规控学习小组分享:自动驾驶常见规控算法分享-路径规划_哔哩哔哩_bilibili
链接:路径规划与轨迹跟踪系列算法学习_第1讲_Dijkstra算法_哔哩哔哩_bilibili
通过以上这些项目准备,包括其他的一些项目,例如:传感器融合、仿真环境集成、代码优化和性能调优、实时系统开发经验等,你可以展示你在自动驾驶领域的技术能力和理解,以及你在C++开发和算法实现方面的实际经验。
- 自动驾驶/机器人系统开发
对开源项目和框架的二次开发是另外常见的开发工作内容。
自动驾驶机器人项目C++软件开发项目:魔改ros-兼容protobuf和rosmsg
Autoware:自动驾驶开源软件项目
Autoware 是一个用于自动驾驶车辆的开源软件栈,建立在机器人操作系统 (ROS) 之上。 它包括驾驶自动驾驶汽车的所有必要功能,从定位和物体检测到路线规划和控制,旨在让尽可能多的个人和组织为自动驾驶技术的开放式创新做出贡献。
Autoware——世界领先的自动驾驶开源软件项目
GitHub:https://github.com/autowarefoundation/autoware
Autoware官网:https://www.autoware.org/
学长一对一辅导,腾讯会议教学
领绿教育“录播课的价格,企业导师一对一辅导,腾讯会议教学”,想获取整份文档或者咨询课程欢迎添加微信:linglv06(添加微信即可领取学习大纲一份)
教学优势:
1、根据个人情况和目标制定专属学习计划
- 每周制定学习计划,老师监督学习
- 辅导后老师反馈学习效果,不断改进教学优势
- 辅导老师为大厂工程师,了解企业需求
- 学习内容更有简历优化、面试辅导等就业服务,为学员就业保驾护航
- 报名后可签合同,同时第三平台下单,可分次付款,保障学员权益