├── .gitignore ├── LICENSE ├── README.md ├── ch01_基础 ├── 1.1 坐标系 │ ├── 1.1.1 坐标系.md │ └── imgs │ │ ├── 1.1.1.1.jpg │ │ ├── 1.1.1.2.jpg │ │ ├── ecef1.jpg │ │ ├── enu1.jpg │ │ ├── lla1.jpg │ │ ├── utm1.jpg │ │ ├── utm2.jpg │ │ └── utm3.jpg ├── 1.10 强化学习 │ ├── imgs │ │ ├── 1.4.0.jpg │ │ ├── 1.4.1.jpg │ │ ├── 1.4.2.jpg │ │ ├── 1.4.3.jpg │ │ ├── 1.4.4.jpg │ │ ├── 1.4.5.jpg │ │ └── 1.4.6.jpg │ ├── modify_log.txt │ └── readme.md ├── 1.2 参数 │ ├── 1.2.1 相机模型—内参、外参.md │ └── imgs │ │ ├── 1.1.5.1.jpg │ │ ├── 1.1.5.2.jpg │ │ ├── 1.1.5.3.jpg │ │ ├── 1.1.5.4.jpg │ │ └── 1.1.5.5.jpg ├── 1.3 滤波 │ ├── 1.3.1 卡尔曼滤波-KalmanFilter.md │ └── imgs │ │ ├── 1.1.2.1.jpg │ │ ├── 1.1.2.10.jpg │ │ ├── 1.1.2.11.jpg │ │ ├── 1.1.2.12.jpg │ │ ├── 1.1.2.13.jpg │ │ ├── 1.1.2.14.jpg │ │ ├── 1.1.2.15.jpg │ │ ├── 1.1.2.16.jpg │ │ ├── 1.1.2.17.jpg │ │ ├── 1.1.2.18.jpg │ │ ├── 1.1.2.19.jpg │ │ ├── 1.1.2.2.jpg │ │ ├── 1.1.2.3.jpg │ │ ├── 1.1.2.4.jpg │ │ ├── 1.1.2.5.jpg │ │ ├── 1.1.2.6.jpg │ │ ├── 1.1.2.7.jpg │ │ ├── 1.1.2.8.jpg │ │ └── 1.1.2.9.jpg ├── 1.4 图像变换 │ ├── 1.4.1 图像变换介绍.md │ ├── 1.4.2 逆透视变换IPM.md │ └── imgs │ │ ├── 1.1.6.1.0.jpg │ │ ├── 1.1.6.1.5.jpg │ │ ├── 1.1.6.1.6.jpg │ │ ├── 1.1.6.2.1.jpg │ │ ├── 1.1.6.2.10.jpg │ │ ├── 1.1.6.2.2.jpg │ │ ├── 1.1.6.2.3.jpg │ │ ├── 1.1.6.2.4.jpg │ │ ├── 1.1.6.2.5.jpg │ │ ├── 1.1.6.2.6.jpg │ │ ├── 1.1.6.2.7.jpg │ │ ├── 1.1.6.2.8.jpg │ │ └── 1.1.6.2.9.jpg ├── 1.5 三维重建 │ ├── 1.5.1 NeRF │ │ ├── imgs │ │ │ ├── 1.1.1.0_.jpg │ │ │ ├── 1.1.1.10_.jpg │ │ │ ├── 1.1.1.11_.jpg │ │ │ ├── 1.1.1.12_.jpg │ │ │ ├── 1.1.1.13_.jpg │ │ │ ├── 1.1.1.14_.jpg │ │ │ ├── 1.1.1.15_.jpg │ │ │ ├── 1.1.1.16_.jpg │ │ │ ├── 1.1.1.17_.jpg │ │ │ ├── 1.1.1.18_.jpg │ │ │ ├── 1.1.1.19_.jpg │ │ │ ├── 1.1.1.1_.jpg │ │ │ ├── 1.1.1.20_.jpg │ │ │ ├── 1.1.1.21_.jpg │ │ │ ├── 1.1.1.2_.jpg │ │ │ ├── 1.1.1.3_.jpg │ │ │ ├── 1.1.1.4_.jpg │ │ │ ├── 1.1.1.5_.jpg │ │ │ ├── 1.1.1.6_.jpg │ │ │ ├── 1.1.1.7_.jpg │ │ │ ├── 1.1.1.8_.jpg │ │ │ └── 1.1.1.9_.jpg │ │ └── readme.md │ ├── imgs │ │ └── 1.gif │ └── readme.md ├── 1.6 数据集 │ ├── 1.6.1 Argoverse.md │ ├── 1.6.2 nuScenes.md │ ├── imgs │ │ ├── 1.2.2.1.jpg │ │ ├── 1.2.2.2.jpg │ │ ├── 1.2.2.3.jpg │ │ ├── 1.2.2.4.jpg │ │ ├── 1.2.2.5.jpg │ │ ├── 1.2.2.6.jpg │ │ ├── 1.2.2.7.jpg │ │ ├── 1.2.2.8.jpg │ │ └── 1.6.1.1.jpg │ └── modify_log.txt ├── 1.7 Transformer │ ├── imgs │ │ ├── 1.1.4.1.jpg │ │ ├── 1.1.4.10.jpg │ │ ├── 1.1.4.11.jpg │ │ ├── 1.1.4.2.jpg │ │ ├── 1.1.4.3.jpg │ │ ├── 1.1.4.4.jpg │ │ ├── 1.1.4.5.jpg │ │ ├── 1.1.4.6.jpg │ │ ├── 1.1.4.7.jpg │ │ ├── 1.1.4.8.jpg │ │ └── 1.1.4.9.jpg │ └── readme.md ├── 1.8 NLP自然语言处理 │ ├── imgs │ │ ├── 1.3.1.gif │ │ ├── 1.3.2.gif │ │ ├── 1.3.3.jpg │ │ ├── 1.3.4.jpg │ │ ├── 1.3.5.jpg │ │ ├── 1.3.6.jpg │ │ ├── 1.3.7.jpg │ │ └── 1.3.8.jpg │ ├── modify_log.txt │ └── readme.md ├── 1.9 神经网络结构搜索(NAS) │ ├── imgs │ │ └── 1.9.1.jpg │ └── readme.md └── modify_log.txt ├── ch02_硬件 ├── 2.1 传感器 │ ├── 2.1.1 摄像头.md │ ├── 2.1.2 激光雷达.md │ ├── 2.1.3 毫米波雷达.md │ ├── 2.1.4 超声波雷达.md │ ├── 2.1.5 GPS定位导航.md │ ├── 2.1.6 IMU惯性传感器.md │ ├── README.md │ ├── imgs │ │ ├── 2.1.1.1.jpg │ │ ├── 2.1.1.2.jpg │ │ ├── 2.1.1.3.jpg │ │ ├── 2.1.1.4.jpg │ │ ├── 2.1.1.5.jpg │ │ ├── 2.1.1.6.jpg │ │ ├── 2.1.1.jpg │ │ ├── 2.1.2.1.jpg │ │ ├── 2.1.2.10.jpg │ │ ├── 2.1.2.11.jpg │ │ ├── 2.1.2.2.jpg │ │ ├── 2.1.2.3.jpg │ │ ├── 2.1.2.4.jpg │ │ ├── 2.1.2.5.jpg │ │ ├── 2.1.2.6.jpg │ │ ├── 2.1.2.7.jpg │ │ ├── 2.1.2.8.jpg │ │ ├── 2.1.2.9.jpg │ │ ├── 2.1.3.1.jpg │ │ ├── 2.1.3.2.jpg │ │ ├── 2.1.3.3.jpg │ │ ├── 2.1.4.1.jpg │ │ ├── 2.1.4.2.jpg │ │ ├── 2.1.4.3.jpg │ │ ├── 2.1.4.4.jpg │ │ ├── 2.1.4.5.jpg │ │ ├── 2.1.4.6.jpg │ │ ├── 2.1.4.7.jpg │ │ ├── 2.1.4.8.jpg │ │ ├── 2.1.4.9.jpg │ │ ├── 2.1.5.1.jpg │ │ ├── 2.1.5.2.jpg │ │ ├── 2.1.5.3.jpg │ │ ├── 2.1.5.4.jpg │ │ ├── 2.1.6.1.jpg │ │ ├── 2.1.6.2.jpg │ │ ├── 2.1.6.3.jpg │ │ ├── 2.1.6.4.jpg │ │ └── 2.1.6.5.jpg │ └── modify_log.txt ├── 2.2 计算单元 │ ├── README.md │ ├── imgs │ │ ├── 2.2.1.jpg │ │ ├── 2.2.2.jpg │ │ └── 2.2.3.jpg │ └── modify_log.txt ├── 2.3 辅助单元 │ ├── 2.3.1 V2X.md │ ├── 2.3.2 黑匣子.md │ ├── imgs │ │ └── 2.3.1.1.jpg │ └── modify_log.txt ├── 2.4 传感器标定 │ ├── 2.4.1 内参标定 │ │ ├── 2.4.1.1 相机内参标定.md │ │ ├── 2.4.1.2 张正友相机标定法.md │ │ └── imgs │ │ │ └── 2.4.1.1.1.jpg │ ├── 2.4.2 外参标定 │ │ ├── 2.4.2.1 离线标定.md │ │ ├── 2.4.2.2 在线标定.md │ │ ├── imgs │ │ │ ├── 2.4.2.1.jpg │ │ │ ├── 2.4.2.2.jpg │ │ │ ├── 2.4.2.3.jpg │ │ │ ├── 2.4.2.4.jpg │ │ │ ├── 2.4.2.5.jpg │ │ │ ├── 2.4.2.6.jpg │ │ │ └── 2.4.2.7.jpg │ │ ├── modify_log.txt │ │ └── readme.md │ ├── imgs │ │ ├── 2.4.1.1.jpg │ │ ├── 2.4.1.2.jpg │ │ ├── 2.4.1.3.jpg │ │ ├── 2.4.1.4.jpg │ │ ├── 2.4.1.5.jpg │ │ └── 2.4.1.6.jpg │ ├── modify_log.txt │ └── readme.md ├── README.md ├── imgs │ └── 2.1.jpg └── modify_log.txt ├── ch03_感知 ├── 3.1 2D目标检测 │ ├── 3.1.1 车道线检测.md │ ├── 3.1.2 2D目标检测.md │ ├── imgs │ │ ├── 3.1.1.1.jpg │ │ ├── 3.1.1.10.jpg │ │ ├── 3.1.1.2.jpg │ │ ├── 3.1.1.3.jpg │ │ ├── 3.1.1.4.jpg │ │ ├── 3.1.1.5.jpg │ │ ├── 3.1.1.6.jpg │ │ ├── 3.1.1.7.jpg │ │ ├── 3.1.1.8.jpg │ │ ├── 3.1.1.9.jpg │ │ ├── 3.1.2.1.jpg │ │ ├── 3.1.2.2.jpg │ │ ├── 3.1.2.3.jpg │ │ ├── 3.1.2.4.jpg │ │ ├── 3.1.2.5.jpg │ │ └── 3.1.2.6.jpg │ └── modify_log.txt ├── 3.2 3D目标检测 │ ├── 3.2.1 基于LiDAR的3D目标检测 │ │ ├── imgs │ │ │ ├── 3.2.1.1.jpg │ │ │ ├── 3.2.1.10.jpg │ │ │ ├── 3.2.1.12.jpg │ │ │ ├── 3.2.1.13.jpg │ │ │ ├── 3.2.1.2.jpg │ │ │ ├── 3.2.1.3.jpg │ │ │ ├── 3.2.1.4.jpg │ │ │ ├── 3.2.1.5.jpg │ │ │ ├── 3.2.1.6.jpg │ │ │ ├── 3.2.1.7.jpg │ │ │ ├── 3.2.1.8.jpg │ │ │ └── 3.2.1.9.jpg │ │ ├── modify_log.txt │ │ └── readme.md │ ├── 3.2.2 基于摄像头的3D目标检测 │ │ ├── imgs │ │ │ ├── 3.2.2.1.jpg │ │ │ ├── 3.2.2.10.jpg │ │ │ ├── 3.2.2.11.jpg │ │ │ ├── 3.2.2.12.jpg │ │ │ ├── 3.2.2.13.jpg │ │ │ ├── 3.2.2.14.jpg │ │ │ ├── 3.2.2.15.jpg │ │ │ ├── 3.2.2.16.jpg │ │ │ ├── 3.2.2.17.jpg │ │ │ ├── 3.2.2.2.jpg │ │ │ ├── 3.2.2.3.jpg │ │ │ ├── 3.2.2.4.jpg │ │ │ ├── 3.2.2.5.jpg │ │ │ ├── 3.2.2.6.jpg │ │ │ ├── 3.2.2.7.jpg │ │ │ ├── 3.2.2.8.jpg │ │ │ └── 3.2.2.9.jpg │ │ ├── modify_log.txt │ │ └── readme.md │ ├── imgs │ │ ├── 3.2.1.jpg │ │ └── 3.2.2.jpg │ ├── modify_log.txt │ └── readme.md ├── 3.3 BEV │ ├── 3.3.1 LSS.md │ ├── README.md │ ├── imgs │ │ ├── 3.3.1.jpg │ │ ├── 3.3.2.jpg │ │ ├── 3.3.3.jpg │ │ ├── 3.3.4.jpg │ │ ├── 3.3.5.jpg │ │ ├── 3.3.6.jpg │ │ ├── 3.3.7.jpg │ │ └── 3.3.8.jpg │ └── modify_log.txt ├── 3.4 Occupany Network │ ├── 3.4.1 SurroundOcc.md │ ├── imgs │ │ ├── 3.4.2.0.jpg │ │ ├── 3.4.2.1.jpg │ │ ├── 3.4.2.2.jpg │ │ ├── 3.4.2.3.jpg │ │ ├── 3.4.2.4.jpg │ │ ├── 3.4.2.5.jpg │ │ ├── 3.4.2.6.jpg │ │ ├── 3.4.2.7.jpg │ │ ├── 3.4.2.8.jpg │ │ └── 3.4.2.9.jpg │ ├── modify_log.txt │ └── readme.md └── modify_log.txt ├── ch04_定位 ├── modify_log.txt └── readme.md ├── ch05_策略规划 ├── 5.1 预测 │ ├── 5.1.1 基于车道序列的预测.md │ ├── imgs │ │ ├── 4.1.1.1.jpg │ │ ├── 4.1.1.2.jpg │ │ ├── 4.1.1.3.jpg │ │ ├── 4.1.1.4.jpg │ │ ├── 4.1.1.5.jpg │ │ ├── 4.1.1.6.jpg │ │ ├── 4.1.1.7.jpg │ │ ├── 4.1.1.jpg │ │ └── 4.1.2.jpg │ ├── modify_log.txt │ └── readme.md ├── 5.2 路线规划 │ ├── README.md │ ├── imgs │ │ ├── 4.2.1.jpg │ │ ├── 4.2.2.jpg │ │ ├── 4.2.3.jpg │ │ ├── 4.2.4.jpg │ │ ├── 4.2.5.jpg │ │ ├── 4.2.6.jpg │ │ ├── 4.2.7.jpg │ │ └── 4.2.8.jpg │ └── modify_log.txt ├── 5.3 轨迹规划 │ ├── 5.3.1 笛卡尔坐标下的规划.md │ ├── 5.3.2 Lattice规划.md │ ├── imgs │ │ ├── 4.3.1.1.jpg │ │ ├── 4.3.1.2.jpg │ │ ├── 4.3.1.3.jpg │ │ ├── 4.3.1.4.jpg │ │ ├── 4.3.1.5.jpg │ │ ├── 4.3.2.1.jpg │ │ ├── 4.3.2.2.jpg │ │ ├── 4.3.2.3.jpg │ │ ├── 4.3.2.4.jpg │ │ ├── 4.3.2.5.jpg │ │ ├── 4.3.2.6.jpg │ │ └── 4.3.2.7.jpg │ ├── modify_log.txt │ └── readme.md ├── README.md └── modify_log.txt ├── ch06_控制 ├── 6.1 PID控制.md ├── 6.2 线性二次调节器(LQR).md ├── 6.3 模型控制预测(MPC).md ├── imgs │ ├── 5.1.1.jpg │ ├── 5.1.2.jpg │ ├── 5.1.3.jpg │ ├── 5.1.jpg │ ├── 5.2.1.jpg │ ├── 5.2.2.jpg │ ├── 5.2.3.jpg │ ├── 5.2.4.jpg │ ├── 5.2.5.jpg │ ├── 5.3.1.jpg │ └── 5.3.2.jpg ├── modify_log.txt └── readme.md ├── ch07_产品 ├── 7.1 ADAS │ ├── README.md │ ├── imgs │ │ ├── 6.1.1.jpg │ │ └── 6.1.2.jpg │ └── modify_log.txt └── 7.2 DMS │ ├── README.md │ ├── imgs │ ├── 6.2.1.jpg │ └── 6.2.2.jpg │ └── modify_log.txt ├── ch08_工具 ├── 8.1 可视化 │ └── 8.1.1 AVS(Autonomous Visualization System) │ │ ├── modify_log.txt │ │ └── readme.md ├── 8.2 仿真 │ └── 8.2.1 Carla仿真 │ │ ├── modify_log.txt │ │ └── readme.md ├── 8.3 TensorRT加速 │ ├── 8.3.1 TensorRT安装配置.md │ ├── 8.3.2 TensorRT加速原理.md │ ├── 8.3.3 TensorRT源码分析.md │ ├── imgs │ │ ├── 7.3.1.1.jpg │ │ ├── 7.3.2.1.jpg │ │ ├── 7.3.2.10.jpg │ │ ├── 7.3.2.11.jpg │ │ ├── 7.3.2.12.jpg │ │ ├── 7.3.2.2.jpg │ │ ├── 7.3.2.3.jpg │ │ ├── 7.3.2.4.jpg │ │ ├── 7.3.2.5.jpg │ │ ├── 7.3.2.6.jpg │ │ ├── 7.3.2.7.jpg │ │ ├── 7.3.2.8.jpg │ │ ├── 7.3.2.9.jpg │ │ ├── 7.3.3.1.jpg │ │ ├── 7.3.3.2.jpg │ │ ├── 7.3.3.3.jpg │ │ ├── 7.3.3.4.jpg │ │ └── 7.3.3.5.jpg │ └── readme.md ├── 8.4 SNPE │ ├── 8.4.1 Snapdragon NPE Runtime.md │ ├── 8.4.2 AIP Runtime.md │ ├── imgs │ │ └── 7.4.1.jpg │ └── readme.md └── modify_log.txt ├── ch09_厂商方案 ├── 9.1 特斯拉 AI Day2022 │ ├── 9.1.1 路径以及运动规划算法.md │ ├── 9.1.2 环境感知算法.md │ ├── 9.1.3 训练算法、设施、软件.md │ ├── 9.1.4 数据标注、采集、虚拟化.md │ ├── README.md │ ├── imgs │ │ ├── 8.1.1.1.gif │ │ ├── 8.1.1.2.jpg │ │ ├── 8.1.1.3.jpg │ │ ├── 8.1.1.jpg │ │ ├── 8.1.2.1.gif │ │ ├── 8.1.2.2.jpg │ │ ├── 8.1.2.3.gif │ │ ├── 8.1.2.4.jpg │ │ ├── 8.1.2.5.jpg │ │ ├── 8.1.2.6.jpg │ │ ├── 8.1.2.jpg │ │ ├── 8.1.3.1.jpg │ │ ├── 8.1.3.2.jpg │ │ ├── 8.1.3.3.jpg │ │ ├── 8.1.3.4.jpg │ │ ├── 8.1.3.5.jpg │ │ ├── 8.1.3.6.jpg │ │ ├── 8.1.3.jpg │ │ ├── 8.1.4.1.jpg │ │ ├── 8.1.4.2.gif │ │ ├── 8.1.4.3.jpg │ │ ├── 8.1.4.4.jpg │ │ ├── 8.1.4.5.jpg │ │ ├── 8.1.4.6.gif │ │ └── 8.1.4.7.jpg │ └── modify_log.txt └── 9.2 百度阿波罗apollo │ ├── 9.2.1 Apollo 8.0 技术新特性解读.md │ └── imgs │ ├── 8.2.1.jpg │ ├── 8.2.10.jpg │ ├── 8.2.11.jpg │ ├── 8.2.12.jpg │ ├── 8.2.2.jpg │ ├── 8.2.3.jpg │ ├── 8.2.4.jpg │ ├── 8.2.5.jpg │ ├── 8.2.6.jpg │ ├── 8.2.7.jpg │ ├── 8.2.8.jpg │ └── 8.2.9.jpg ├── imgs ├── 1.jpg ├── 2.jpg └── 3.jpg └── 文章撰写规范.md /.gitignore: -------------------------------------------------------------------------------- 1 | images*/ 2 | .DS_Store 3 | **/.DS_Store 4 | *.py 5 | *.mp4 6 | *.DS_Store 7 | *.ttf -------------------------------------------------------------------------------- /ch01_基础/1.1 坐标系/imgs/1.1.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.1 坐标系/imgs/1.1.1.1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.1 坐标系/imgs/1.1.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.1 坐标系/imgs/1.1.1.2.jpg -------------------------------------------------------------------------------- /ch01_基础/1.1 坐标系/imgs/ecef1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.1 坐标系/imgs/ecef1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.1 坐标系/imgs/enu1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.1 坐标系/imgs/enu1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.1 坐标系/imgs/lla1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.1 坐标系/imgs/lla1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.1 坐标系/imgs/utm1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.1 坐标系/imgs/utm1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.1 坐标系/imgs/utm2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.1 坐标系/imgs/utm2.jpg -------------------------------------------------------------------------------- /ch01_基础/1.1 坐标系/imgs/utm3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.1 坐标系/imgs/utm3.jpg -------------------------------------------------------------------------------- /ch01_基础/1.10 强化学习/imgs/1.4.0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.10 强化学习/imgs/1.4.0.jpg -------------------------------------------------------------------------------- /ch01_基础/1.10 强化学习/imgs/1.4.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.10 强化学习/imgs/1.4.1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.10 强化学习/imgs/1.4.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.10 强化学习/imgs/1.4.2.jpg -------------------------------------------------------------------------------- /ch01_基础/1.10 强化学习/imgs/1.4.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.10 强化学习/imgs/1.4.3.jpg -------------------------------------------------------------------------------- /ch01_基础/1.10 强化学习/imgs/1.4.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.10 强化学习/imgs/1.4.4.jpg -------------------------------------------------------------------------------- /ch01_基础/1.10 强化学习/imgs/1.4.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.10 强化学习/imgs/1.4.5.jpg -------------------------------------------------------------------------------- /ch01_基础/1.10 强化学习/imgs/1.4.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.10 强化学习/imgs/1.4.6.jpg -------------------------------------------------------------------------------- /ch01_基础/1.10 强化学习/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.10 强化学习/modify_log.txt -------------------------------------------------------------------------------- /ch01_基础/1.2 参数/imgs/1.1.5.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.2 参数/imgs/1.1.5.1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.2 参数/imgs/1.1.5.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.2 参数/imgs/1.1.5.2.jpg -------------------------------------------------------------------------------- /ch01_基础/1.2 参数/imgs/1.1.5.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.2 参数/imgs/1.1.5.3.jpg -------------------------------------------------------------------------------- /ch01_基础/1.2 参数/imgs/1.1.5.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.2 参数/imgs/1.1.5.4.jpg -------------------------------------------------------------------------------- /ch01_基础/1.2 参数/imgs/1.1.5.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.2 参数/imgs/1.1.5.5.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.10.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.11.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.12.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.13.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.14.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.15.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.16.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.17.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.18.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.19.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.2.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.3.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.4.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.5.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.6.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.7.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.8.jpg -------------------------------------------------------------------------------- /ch01_基础/1.3 滤波/imgs/1.1.2.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.3 滤波/imgs/1.1.2.9.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/1.4.1 图像变换介绍.md: -------------------------------------------------------------------------------- 1 | # 图像变换介绍 2 | 3 |
4 | 5 |
6 | 7 | 常规图像变换如:刚体变换、欧式变换、相似变换、仿射变换、透视变换等,但他们之间的关系和区别经常混淆。因此本文简单的介绍和辨析一下这几种变换的区别与联系: 8 | 9 | | 变换 | 矩阵 | 自由度 | 保持性质 | 10 | | ---- | ---- | ---- | ---- | 11 | | 平移 | [I, t](2×3) | 2 | 方向/长度/夹角/平行性/直线性 | 12 | | 刚体 | [R, t](2×3) | 3 | 长度/夹角/平行性/直线性 | 13 | | 相似 | [sR, t](2×3) | 4 | 夹角/平行性/直线性 | 14 | | 仿射 | [T](2×3)| 6 | 平行性/直线性 | 15 | | 透视 | [T](3×3)| 8 | 直线性 | 16 | 17 | ## 一、 刚体变换(Rigid Transformation) 18 | 19 | $$ 20 | \begin{bmatrix} 21 | x′ \\ 22 | y′ \\ 23 | 1 \\ 24 | \end{bmatrix} = 25 | \begin{bmatrix} 26 | R &t \\ 27 | 0 &1 \\ 28 | \end{bmatrix} 29 | \begin{bmatrix} 30 | x \\ 31 | y \\ 32 | 1 \\ 33 | \end{bmatrix} = 34 | \begin{bmatrix} 35 | cosθ &−sinθ &tx \\ 36 | sinθ &cosθ &ty \\ 37 | 0 &0 &1 \\ 38 | \end{bmatrix} 39 | \begin{bmatrix} 40 | x \\ 41 | y \\ 42 | 1 \\ 43 | \end{bmatrix} 44 | $$ 45 | 46 | 刚体变换也叫刚性变换、欧式变换,是最基础的变换形式。其中 $R$ 表示旋转矩阵,是一个正交阵 $RR^T=I$ , $t$ 表示平移向量。 47 | 48 | * 变换形式:旋转和平移 49 | * 自由度:三个自由度(一个旋转角 $\theta$ ,两个平移向量 $t_x,t_y$ ​) 50 | * 求解方式:需要两组点,四个方程求解 51 | * 不变量:长度、角度、面积 52 | 53 | ## 二、等距变换(Isometric Transformation) 54 | 55 | $$ 56 | \begin{bmatrix} 57 | x′ \\ 58 | y′ \\ 59 | 1 \\ 60 | \end{bmatrix} = 61 | \begin{bmatrix} 62 | ϵcosθ &−sinθ &tx \\ 63 | ϵsinθ &θcosθ &ty \\ 64 | 0 &0 &1 \\ 65 | \end{bmatrix} 66 | \begin{bmatrix} 67 | x \\ 68 | y \\ 69 | 1 \\ 70 | \end{bmatrix} 71 | , ϵ = ± 1 72 | $$ 73 | 74 | 等距变换前后两点之间的距离不变。ϵ = 1 时,等距变换就等价于刚性变换、欧式变换,是保向的;ϵ = −1 时,是逆向的,表示关于 Y 轴对称的反射变换。 75 | 76 | * 变换形式: ϵ = 1 时,旋转和平移; ϵ = − 1 时,旋转、平移和反射(对称) 77 | * 自由度:三个自由度(一个旋转角 θ ,两个平移向量 $t_x,t_y$ ​) 78 | * 求解方式:需要两组点,四个方程求解 79 | * 不变量:长度、角度、面积 80 | 81 | ## 三、相似变换(Similar Transformation) 82 | 83 | $$ 84 | \begin{bmatrix} 85 | x′ \\ 86 | y′ \\ 87 | 1 \\ 88 | \end{bmatrix} = 89 | \begin{bmatrix} 90 | sR &t \\ 91 | 0 &1 \\ 92 | \end{bmatrix} 93 | \begin{bmatrix} 94 | x \\ 95 | y \\ 96 | 1 \\ 97 | \end{bmatrix} = 98 | \begin{bmatrix} 99 | s \cosθ &−s \sinθ &tx \\ 100 | s \sinθ &s \cosθ &ty \\ 101 | 0 &0 &1 \\ 102 | \end{bmatrix} 103 | \begin{bmatrix} 104 | x \\ 105 | y \\ 106 | 1 \\ 107 | \end{bmatrix} 108 | $$ 109 | 110 | 相似变换是在刚性变换的基础上增加一个均匀放缩系数 $s$ 。 111 | 112 | * 变换形式:旋转、平移、放缩 113 | * 自由度:四个自由度(一个旋转角 θ,两个平移向量 $t_x,t_y$ ​,一个放缩系数 $s$ ) 114 | * 求解方式:需要两组点,四个方程求解 115 | * 不变量:角度、长度的比例和面积比例 116 | 117 | ## 四、线性变换(Linear Transformation) 118 | 119 | $$ 120 | \begin{bmatrix} 121 | x′ \\ 122 | y′ \\ 123 | 1 \\ 124 | \end{bmatrix} = 125 | \begin{bmatrix} 126 | A &0 \\ 127 | 0 &1 \\ 128 | \end{bmatrix} 129 | \begin{bmatrix} 130 | x \\ 131 | y \\ 132 | 1 \\ 133 | \end{bmatrix} = 134 | \begin{bmatrix} 135 | a_{11} & a_{12} & 0 \\ 136 | a_{21} & a_{22} & 0 \\ 137 | 0 &0 &1 \\ 138 | \end{bmatrix} 139 | \begin{bmatrix} 140 | x \\ 141 | y \\ 142 | 1 \\ 143 | \end{bmatrix} 144 | $$ 145 | 146 | 线性变换要求变换前后的直线仍是直线,且直线之间的比例保持不变。 147 | 148 | * 变换形式:旋转、放缩、反射(对称)、倾斜(错切) 149 | * 自由度:四个自由度(四个线性变换元素 $a_{11}, a_{12},a_{21}, a_{22}$ ​) 150 | * 求解方式:需要两组点,四个方程求解 151 | * 不变量:长度的比例和面积比例 152 | 153 | ## 五、仿射变换(Affine Transformation) 154 | 155 |
156 | 157 |
158 |
图5. 仿射变换
159 | 160 | $$ 161 | \begin{bmatrix} 162 | x′ \\ 163 | y′ \\ 164 | 1 \\ 165 | \end{bmatrix} = 166 | \begin{bmatrix} 167 | A &t \\ 168 | 0 &1 \\ 169 | \end{bmatrix} 170 | \begin{bmatrix} 171 | x \\ 172 | y \\ 173 | 1 \\ 174 | \end{bmatrix} = 175 | \begin{bmatrix} 176 | a_{11} & a_{12} & t_x \\ 177 | a_{21} & a_{22} & t_y \\ 178 | 0 &0 &1 \\ 179 | \end{bmatrix} 180 | \begin{bmatrix} 181 | x \\ 182 | y \\ 183 | 1 \\ 184 | \end{bmatrix} 185 | $$ 186 | 187 | 仿射变换是线性变换和平移变换的组合,能够保持二维图形的 “平直性” 和“平行性”,但是角度会改变。 $A$ 表示仿射矩阵。 188 | 189 | > “平直性”:变换后直线还是直线、圆弧还是圆弧 190 | > “平行性”:平行线还是平行线,直线上点的位置顺序不变 191 | 192 | * 变换形式:旋转、平移、放缩、反射(对称)、倾斜(错切) 193 | * 自由度:六个自由度(四个仿射矩阵元素 $a_{11}, a_{12}, a_{21}, a_{22}$ ​,两个平移向量 $t_x,t_y$ ​) 194 | * 求解方式:需要三组点,六个方程求解 195 | * 不变量:平行线,平行线所分割线段长度的比例和面积的比例 196 | 197 | ## 六、透视变换(Perspective Transformation) 198 | 199 |
200 | 201 |
202 |
图6. 透视变换
203 | 204 | $$ 205 | \begin{bmatrix} 206 | x′ \\ 207 | y′ \\ 208 | 1 \\ 209 | \end{bmatrix} = 210 | \begin{bmatrix} 211 | A &t \\ 212 | v &1 \\ 213 | \end{bmatrix} 214 | \begin{bmatrix} 215 | x \\ 216 | y \\ 217 | z \\ 218 | \end{bmatrix} = 219 | \begin{bmatrix} 220 | a_{11} & a_{12} & t_x \\ 221 | a_{21} & a_{22} & t_y \\ 222 | v_{1} &v_{2} &1 \\ 223 | \end{bmatrix} 224 | \begin{bmatrix} 225 | x \\ 226 | y \\ 227 | z \\ 228 | \end{bmatrix} 229 | $$ 230 | 231 | 透视变换也叫做射影变换(Projection Transformation),是将图像投影到一个新的视平面。其中 $v$ 用于产生图像透视变换。 232 | 233 | * 变换形式:旋转、平移、放缩、反射(对称)、倾斜(错切)、透视 234 | * 自由度:八个自由度(四个仿射矩阵元素 $a_{11},a_{12},a_{21},a_{22}$ ​,两个平移向量 $t_x,t_y$ ​、两个透视变换元素 $v_1,v_2$ ​) 235 | * 求解方式:需要四组点,八个方程求解 236 | * 不变量:长度的交比 -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.1.0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.1.0.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.1.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.1.5.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.1.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.1.6.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.2.1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.2.10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.2.10.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.2.2.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.2.3.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.2.4.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.2.5.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.2.6.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.2.7.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.2.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.2.8.jpg -------------------------------------------------------------------------------- /ch01_基础/1.4 图像变换/imgs/1.1.6.2.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.4 图像变换/imgs/1.1.6.2.9.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.0_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.0_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.10_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.10_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.11_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.11_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.12_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.12_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.13_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.13_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.14_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.14_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.15_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.15_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.16_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.16_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.17_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.17_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.18_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.18_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.19_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.19_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.1_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.1_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.20_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.20_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.21_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.21_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.2_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.2_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.3_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.3_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.4_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.4_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.5_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.5_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.6_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.6_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.7_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.7_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.8_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.8_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.9_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/1.5.1 NeRF/imgs/1.1.1.9_.jpg -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/imgs/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.5 三维重建/imgs/1.gif -------------------------------------------------------------------------------- /ch01_基础/1.5 三维重建/readme.md: -------------------------------------------------------------------------------- 1 | # 三维重建 2 | 3 |
4 | 5 |
6 |
7 | 8 | 随着元宇宙以及3D应用的发展,3D相关技术得到越来越多的重视。传统的3D技术链路长、成本高、迭代慢,3D资产创作主要依赖于人工,严重制约了3D应用的发展。 9 | 10 | ## 一、3D的价值 11 | 12 | 3D的核心价值有2个,一是编辑自由,二是虚拟空间。 13 | 14 | * 编辑自由指的是3D内容后期制作非常自由,可以单独调整物体、动作、布景、光照、相机,制作理想内容。3D的编辑自由,目前主要体现在在工业设计、视频创作等领域。工业设计中,3D模型编辑,所见即所得,直接拟合最终成品效果,降低了设计和生产的关联成本。视频创作中,先制作3D模型,然后再渲染得到2D视频,3D模型可以支持创作过程的迭代,大大降低创作成本。 15 | 16 | * 虚拟空间,指的是我们可以用已有的3D元素,构建虚拟空间,带给人真实世界的相似体验。3D的虚拟空间,主要体现在游戏领域、数字孪生等领域。游戏领域构建虚拟场景,支持自由变换视角,体验空间中自由移动的快感。数字孪生,构建虚拟空间,体验整体空间感觉,辅助决策。 17 | 18 | ## 二、新视角合成和神经隐式表示 19 | 20 | 视角合成方法通常使用一个中间3D场景表征作为中介来生成高质量的虚拟视角。根据表示形式,3D场景表征可以分为“显式”和“隐式”表示。 21 | 22 | 显式表示包括Mesh,Point Cloud,Voxel,Volume等。显式表示的优点是能够对场景进行显式建模,从而合成照片级的虚拟视角。缺点是这种离散表示因为不够精细化会造成重叠等伪影,而且最重要的,它们对内存的消耗限制了高分辨率场景的应用。 23 | 24 | 隐式表示通常用一个函数来描述场景几何。隐式表示使用一个MLP模拟该函数,输入3D空间坐标,输出对应的几何信息。隐式表示的好处是它一种连续的表示,能够适用于大分辨率场景,而且通常不需要3D信号进行监督。在NeRF之前,它的缺点在于无法生成照片级的虚拟视角,如occupancy field、signed distance function(SDF)。 25 | 26 | 神经隐式表示(neural implicit representation)从2019年开始兴起。以图像为例,其最常见的表示方式为二维空间上的离散像素点。但是,在真实世界中,我们看到的世界可以认为是连续的。于是,可以考虑使用一个连续函数来表示图像的真实状态,然而我们无从得知这个连续函数的准确形式,因此有人提出用神经网络来逼近这个连续函数,这种表示方法被称为“神经隐式表示”,是一种对各种信号进行参数化的方法。 27 | 28 | 无论是显式表示还是隐式表示,都是对3D场景进行表征。这种表征并不是凭空臆测或者天马行空的,而是根据现实中数据格式进行发展。例如现实中的3D数据主要有面数据、点数据、体数据,所以对应催生了一些Mesh、Point Cloud、Volume等中间表示。隐式表示则是借鉴了图形学中的一些表示形式,例如signed distance function。 29 | -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/1.6.1 Argoverse.md: -------------------------------------------------------------------------------- 1 | # Argoverse 2 | 3 |
4 | 5 |
6 |
7 | 8 | ## 一、Argoverse数据集简介 9 | [官网](https://www.argoverse.org/) 10 | 11 | Argoverse是一个大规模的自动驾驶数据集,由Argo AI公司发布。它包含了多个城市和天气条件下的驾驶数据,包括激光雷达、相机、GPS、IMU等多种传感器数据。 12 | 13 | Argoverse数据集提供了丰富的数据,涵盖了多种场景和目标类别。以下是关于Argoverse数据集中的类别和数据量的一些详细信息: 14 | 15 | ### (一)类别: 16 | 17 | Argoverse数据集包含了以下类别的目标: 18 | 19 | * 汽车(Car) 20 | * 卡车(Truck) 21 | * 摩托车(Motorcycle) 22 | * 行人(Pedestrian) 23 | * 自行车(Bicycle) 24 | * 交通标志(Traffic Sign) 25 | * 交通信号灯(Traffic Light) 26 | * 障碍物(Obstacle) 27 | * 建筑物(Building) 28 | * 道路(Road) 29 | * 车道线(Lane Marking) 30 | 31 | ### (二)数据量: 32 | 33 | Argoverse数据集包含了超过1000小时的驾驶数据,涵盖了多个城市和天气条件。数据集中的每个类别的数据量可能会有所不同,具体数据量可以在数据集的官方文档和GitHub仓库中找到。 34 | 35 | Argoverse数据集覆盖了多种场景,包括: 36 | 37 | * 城市道路:包括主干道、次干道、支路等。 38 | 39 | * 高速公路:包括城市高速公路、乡村高速公路等。 40 | 41 | * 天气条件:包括晴天、阴天、雨天、雪天等。 42 | 43 | * 时间段:包括白天、黄昏、夜晚等。 44 | 45 | 46 | ## 二、Argoverse数据集特点 47 | 48 | 1. 大规模:Argoverse数据集包含超过1000小时的驾驶数据,覆盖多个城市和天气条件。 49 | 50 | 2. 多模态:数据集包含激光雷达、相机、GPS、IMU等多种传感器数据,为自动驾驶算法提供了丰富的输入信息。 51 | 52 | 3. 高质量:数据集经过严格的数据清洗和标注流程,确保数据的准确性和可靠性。 53 | 54 | 4. 开源:Argoverse数据集是一个开源项目,研究人员可以免费下载和使用数据集。 55 | 56 | ## 三、Argoverse数据集下载和使用 57 | 58 | Argoverse数据集可以从GitHub仓库下载:https://github.com/ArgoVerse/Argoverse 59 | 60 | Argoverse数据集提供了详细的文档和工具链,以帮助研究人员使用和处理数据。以下是关于Argoverse数据集的一些具体细节和工具链介绍: 61 | 62 | ### (一)数据集结构: 63 | 64 | Argoverse数据集包含以下文件和目录: 65 | 66 | * data:包含原始数据,如激光雷达、相机、GPS、IMU等。 67 | 68 | * labels:包含数据集的标注信息,如目标检测、语义分割等。 69 | 70 | * maps:包含数据集的地图信息,如车道线、交通标志等。 71 | 72 | * README.md:包含数据集的概述和使用说明。 73 | 74 | * tools:包含处理和分析数据集的工具和脚本。 75 | 76 | ### (二)工具链: 77 | 78 | Argoverse数据集提供了一套工具链,用于处理和分析数据。以下是一些主要工具和脚本: 79 | 80 | * convert_data.py:用于将原始数据转换为适用于自动驾驶算法的格式。 81 | 82 | * visualize_data.py:用于可视化数据集,如激光雷达点云、相机图像等。 83 | 84 | * evaluate.py:用于评估自动驾驶算法在数据集上的性能。 85 | 86 | * preprocess.py:用于预处理数据集,如数据清洗、标注等。 87 | 88 | 89 | **使用示例:** 90 | 91 | 以下是一个使用Argoverse数据集工具链的简单示例: 92 | 93 | 1. 使用convert_data.py脚本将原始数据转换为适用于自动驾驶算法的格式。 94 | 95 | ```python 96 | python convert_data.py --input_dir path/to/input --output_dir path/to/output 97 | ``` 98 | 99 | 2. 接下来,使用visualize_data.py脚本可视化数据集。 100 | 101 | ```python 102 | python visualize_data.py --input_dir path/to/input --output_dir path/to/output 103 | ``` 104 | 105 | 3. 最后,使用evaluate.py脚本评估自动驾驶算法在数据集上的性能。 106 | 107 | ```python 108 | python evaluate.py --model_path path/to/model --data_dir path/to/data 109 | ``` 110 | 111 | ## 四、Argoverse数据集应用 112 | 113 | Argoverse数据集可以用于自动驾驶领域的各种研究任务,如目标检测、语义分割、轨迹预测、定位和地图构建等。数据集的多样性和丰富性使得研究人员可以在不同场景和条件下评估和优化自动驾驶算法。以下是一些Argoverse数据集的应用示例: 114 | 115 | ### (一)目标检测 116 | 117 | 目标检测是自动驾驶中的关键任务之一,用于识别和定位图像或点云中的目标物体。Argoverse数据集提供了丰富的目标检测标注,包括汽车、行人、自行车等。研究人员可以使用这些标注来训练和评估目标检测算法。 118 | 119 | ### (二)语义分割 120 | 121 | 语义分割是自动驾驶中的另一个关键任务,用于将图像中的每个像素分配给相应的类别。Argoverse数据集提供了丰富的语义分割标注,包括道路、建筑物、交通标志等。研究人员可以使用这些标注来训练和评估语义分割算法。 122 | 123 | ### (三)轨迹预测 124 | 125 | 轨迹预测是自动驾驶中的重要任务,用于预测其他交通参与者的未来位置和速度。Argoverse数据集提供了丰富的轨迹预测标注,包括汽车、行人、自行车等。研究人员可以使用这些标注来训练和评估轨迹预测算法。 126 | 127 | ### (四)定位和地图构建 128 | 129 | 定位和地图构建是自动驾驶中的基础设施任务,用于确定车辆在地图中的位置和构建环境地图。Argoverse数据集提供了丰富的GPS、IMU和激光雷达数据,可以用于训练和评估定位和地图构建算法。 130 | -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/imgs/1.2.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.6 数据集/imgs/1.2.2.1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/imgs/1.2.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.6 数据集/imgs/1.2.2.2.jpg -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/imgs/1.2.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.6 数据集/imgs/1.2.2.3.jpg -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/imgs/1.2.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.6 数据集/imgs/1.2.2.4.jpg -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/imgs/1.2.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.6 数据集/imgs/1.2.2.5.jpg -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/imgs/1.2.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.6 数据集/imgs/1.2.2.6.jpg -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/imgs/1.2.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.6 数据集/imgs/1.2.2.7.jpg -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/imgs/1.2.2.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.6 数据集/imgs/1.2.2.8.jpg -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/imgs/1.6.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.6 数据集/imgs/1.6.1.1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.6 数据集/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.6 数据集/modify_log.txt -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.10.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.11.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.2.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.3.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.4.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.5.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.6.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.7.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.8.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/imgs/1.1.4.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.7 Transformer/imgs/1.1.4.9.jpg -------------------------------------------------------------------------------- /ch01_基础/1.7 Transformer/readme.md: -------------------------------------------------------------------------------- 1 | # Transformer 2 | 3 | 注意力机制在深度学习模型中无处不在,它有助于提高机器翻译的准确性。在这篇文章中,我们将学习Transformer方法,一个利用注意力来提升模型训练速度的机制。Transformer在特定任务中优于谷歌机器翻译模型。然而,最大的好处得益于Transformer的并行能力。事实上,谷歌云建议使用Cloud TPU提供的Transformer作为参考模型。因此,接下来我们对模型以及其相应模块进行分析。 4 | 5 | Transformer是在论文《 Attention is All You Need》中提出的。TensorFlow对应的实现可以使用Tensor2Tensor库提供的接口。在这篇文章中,我们将尝试简化理解,并逐一介绍概念,希望使没有相应基础的同学更容易理解。 6 | 7 | ## 一、 基本流程 8 | 9 | 首先将模型视为单个黑盒。如下图1所示,在机器翻译应用程序中,输入一种语言的句子,然后输出另一种语言的翻译。 10 | 11 |
12 | 13 |
14 |
图1. 翻译视作盲盒
15 | 16 | 一个典型的Transformer模型如下图2所示,作为seq2seq模型,它也分为编码和译码两个阶段,两个阶段都由一系列Transformer模块堆叠而成,注意这些模块是不共享权重的,以原论文为例则分别为编码和译码各堆叠了6个Transformer模块。 17 | 18 |
19 | 20 |
21 |
图2. 典型的Transformer模型
22 | 23 | Transformer的编码器和解码器结构如下图3所示,编码器由自注意模块(Self-Attention)和前馈网络(Feed Forward Neural Network, FFNN)组成;解码器则与编码器类似,但在自注意模块和前馈网络中间由插入了一层编解码器注意力模块(也叫Cross-Attention,该模块与前述RNN中的上下文注意力类似)。 24 | 25 |
26 | 27 |
28 |
图3. Transformer的编码器和解码器结构
29 | 30 | 具体执行过程: 31 | 32 | (1)首先将输入文本转换为词向量,并且融合位置编码,输入给第一个编码器; 33 | 34 | (2)第一个编码器,结合上下文,对每个词向量进行编码,分别得到相同数量的向量作为下一个编码器的输入(输出向量的长度是一个可设定的超参);编码器依次连接,对编码阶段最终输出的向量按照注意力机制,分别转换成K向量和V向量,K和V分别表示每个每个单词编码后的键(Key)和值(Value),这两套向量将用于解码阶段的编解码注意力模块; 35 | 36 | (3)解码器的工作与编码器类似,首先输入一个代表“起始”的token(记为<s>),然后经过层层解码最后转换为一个分类问题用全连接和softmax输出单词的概率分布; 37 | 38 | (4)然后将<s>和第一个单词拼接,作为解码阶段的新输入(与编码阶段的输入类似,需要经过词向量的转换和位置编码的融合),进而输出第二个单词的概率分布……以此类推,直到最终输出代表“结束”的token(记为<eos>)。 39 | 40 | ## 二、 自注意模块 41 | 42 | 首先,对每个词向量(或经过若干次编/解码后得到的特征向量)进行处理,分别产生查询向量(Query)、键向量(Key)和值向量(Value),这三个向量的长度是相同的,并且该长度是可设置的超参。为了产生这三个向量,我们需要模块提供三个可训练的权重,通过权重矩阵与词向量(或特征向量)的乘法得到。 43 | 44 | 不妨用Python的“字典(Dict)”来类比这三个向量的作用(一种模糊映射关系) 45 | 46 | ``` 47 | Dict[Key] = Value # Key-Value是实际映射关系中的键值对, 48 | Value_ = Dict[Query] # 用Query去匹配Key以查询Value, 49 | # 在Python的Dict中Query和Key是精确配对的; 50 | # 但在自注意模块中,是用Query去模糊匹配Key并提取出模糊的Value_ 51 | ``` 52 | 53 |
54 | 55 |
56 |
图4. QKV计算过程
57 | 58 | 当每个词向量(或特征向量)都有了对应的查询向量、键向量和值向量之后,就可以进行如下的自注意力机 59 | 制。比如计算第一个词向量(对应单词Thinking)的特征向量: 60 | 61 | 1. 用该单词的查询向量 $q_1$ 与所有单词对应的键向量 $q_1,q_2,q_3,...q_n$ 做点乘,分别得到每个单词的查询得分 $s_1,s_2,s_3,...s_n$ ; 62 | 2. 用 $\sqrt{d_k}$ 规范化得分( $d_k$ 代表查询向量的长度),并将规范化后的得分作为一个向量执行 $softmax$ 作为权重; 63 | 3. 利用得到的权重加权求和,即为该词向量对应的输出向量。 64 | 65 | 对应示例如下图5所示: 66 | 67 |
68 | 69 |
70 |
图5. 自注意力机制过程
71 | 72 | 将所有输入的词向量堆叠成矩阵,则可以简写成如下的矩阵形式: 73 | 74 |
75 | 76 |
77 |
图6. 自注意力机制矩阵表示
78 | 79 | ## 三、 多头设计(Multi-heads) 80 | 81 | 前述自注意模块中,对于每个输入向量,只产生一个对应的特征向量,而多头设计即是希望对每个输入向量能产生多个不同的特征向量(与CNN中特征图的“通道”类似)。实现上也不麻烦,只需要设置多套不共享的权重矩阵 $W^q, W^k, W^v$ 即可。这样做有两点好处: 82 | 83 | (1) 使模型能更好的将注意力放在多个不同的位置上; 84 | 85 | (2) 使注意力模块能拥有更复杂的表示子空间(representation subspaces); 86 | 87 |
88 | 89 |
90 |
图7. 多头注意力
91 | 92 | 为了融合多头提取的特征向量,FFNN也要做出相应的调整,将这些特征向量进行拼接,同时扩大$W^O$权重矩阵的规模。 93 | 94 |
95 | 96 |
97 |
图8. 特征拼接
98 | 99 | 完整的多头设计的Transformer编码器如下图9所示, 100 | 101 |
102 | 103 |
104 |
图9. Transformer编码器
105 | 106 | ## 四、 位置编码 107 | 108 | Transformer抛弃了天然具有位置信息的RNN,便丢失了序列本身的位置信息(比如一个单词在句子中的位置),因此需要借助其他手段来加强输入的数据,以引入位置信息。这里Transformer采用的是一种位置编码(Positional Encoding)的技术。用一个与词向量长度相等的向量表示其所在的位置(或次序),并与词向量逐元素相加,从而将位置信息编码到词向量。 109 | 110 |
111 | 112 |
113 |
图10. 位置编码
114 | 115 | 论文采用如下的位置编码方案: 116 | 117 | $$ 118 | PE_t^{(i)}= 119 | \begin{cases} 120 | sin(w_k\cdot{t}), i = 2k \\ 121 | cos(w_k\cdot{t}), i = 2k+1 122 | \end{cases} 123 | $$ 124 | 125 | 126 | $$ 127 | w_k = \frac{1}{10000^{2i/d}} 128 | $$ 129 | 130 | 其中, $PE_t^{(i)}$ 表示第 $t$ 个时间步的位置编码向量的第 $i$ 个元素; $d$ 是位置编码向量的长度,也即词向量的长度。 131 | 132 | 定义中,三角函数的频率沿着维度逐渐减小,波长形成了 $2\pi$ 到 $10000\cdot{2\pi}$ 的几何级数。 133 | 134 | 该编码方案的优点如下: 135 | 136 | 1. 对于每个时间步,其位置编码向量都是独一无二的; 137 | 138 | 2. 编码向量只取决于时间步的序号,与序列长度无关,能够适用于任意长度的序列; 139 | 140 | 3. 编码的数值是有界的; 141 | 142 | 4. 编码方式是确定的; 143 | 144 | 5. 模型更容易关注到相对位置信息, 因为对于任意偏移量 $k$, $PE_{t+k}$ 和 $PE_t$ 都满足一定的线性关系,也即存在某个矩阵 $T^{(k)}$ 可以使 $PE_{t+k}$ = $T^{(k)}\cdot{PE_t}$ 145 | 146 | ## 五、 残差设计 147 | 148 | 与ResNet类似,Transformer也为编码器和解码器引入了残差结构。 149 | 150 |
151 | 152 |
153 |
图11. 残差设计
154 | 155 | 无论是自注意模块,还是前馈神经网络、编解码注意力模块,均加入了短连接设计和Normalize,但注意在序列任务中通常是不使用BN的,像论文中就使用了LN来进行规范化。 156 | 157 | ## 六、 贪心解码&束搜索 158 | 159 | 与CNN等不同,RNN和Transformer在产生一个新的输出时都与先前的输出的有关,因此在产生完整的输出时会有不同的方案。 160 | 161 | 最简单的方案是贪心解码(Greedy Decoding),也即每次选取概率最高的一项作为新的输出; 162 | 163 | 复杂点的方案则是束搜索(Beam Search),每次选取概率较高的$k$个候选项,分别假设本次输出是某一候选项来预测下一输出(共 $k*k$ 个),然后从中选取概率较高的 $k$ 个作为新的候选项,以此类推,预测的代价将是贪心解码的 $k$ 倍,但也更为合理和准确。 164 | -------------------------------------------------------------------------------- /ch01_基础/1.8 NLP自然语言处理/imgs/1.3.1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.8 NLP自然语言处理/imgs/1.3.1.gif -------------------------------------------------------------------------------- /ch01_基础/1.8 NLP自然语言处理/imgs/1.3.2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.8 NLP自然语言处理/imgs/1.3.2.gif -------------------------------------------------------------------------------- /ch01_基础/1.8 NLP自然语言处理/imgs/1.3.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.8 NLP自然语言处理/imgs/1.3.3.jpg -------------------------------------------------------------------------------- /ch01_基础/1.8 NLP自然语言处理/imgs/1.3.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.8 NLP自然语言处理/imgs/1.3.4.jpg -------------------------------------------------------------------------------- /ch01_基础/1.8 NLP自然语言处理/imgs/1.3.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.8 NLP自然语言处理/imgs/1.3.5.jpg -------------------------------------------------------------------------------- /ch01_基础/1.8 NLP自然语言处理/imgs/1.3.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.8 NLP自然语言处理/imgs/1.3.6.jpg -------------------------------------------------------------------------------- /ch01_基础/1.8 NLP自然语言处理/imgs/1.3.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.8 NLP自然语言处理/imgs/1.3.7.jpg -------------------------------------------------------------------------------- /ch01_基础/1.8 NLP自然语言处理/imgs/1.3.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.8 NLP自然语言处理/imgs/1.3.8.jpg -------------------------------------------------------------------------------- /ch01_基础/1.8 NLP自然语言处理/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.8 NLP自然语言处理/modify_log.txt -------------------------------------------------------------------------------- /ch01_基础/1.8 NLP自然语言处理/readme.md: -------------------------------------------------------------------------------- 1 | # NLP自然语言处理 2 | 3 | ## 一、简介 4 | 5 | seq2seq(Sequence to Sequence)是一种输入不定长序列,产生不定长序列的模型,典型的处理任务是机器翻译,输入一段不定长的源语言文字(如中文),而产生一段不定长的目标语言文字(如英文)。 6 | 7 |
8 | 9 | ![](./imgs/1.3.1.gif) 10 | 11 |
12 | 13 | seq2seq模型通常会选用编码器解码器(Encoder-Decoder)架构,编码器接受不定长输入并产生一定大小的上下文(Context),再将上下文投喂给解码器,产生不定长的输出。 14 | 15 |
16 | 17 | ![](./imgs/1.3.2.gif) 18 | 19 |
20 | 21 | 在机器翻译的情况下,上下文是一个向量(通常是一个数字数组)。编码器和解码器往往都是递归神经网络RNN。如下图,上下文是浮点数的向量,将具有较高值的单元格分配更亮的颜色来可视化颜色的矢量。可以在设置模型时设置上下文向量的大小。通常为编码器RNN中隐藏单元的数量,此处可视化显示大小为 4 的向量,但在实际应用中,上下文向量的大小可能为 256、512 或 1024。 22 | 23 |
24 | 25 |
26 | 27 | 根据设计,RNN 在每个时间步长接受两个输入:一个输入(在编码器的情况下,输入句子中的一个单词)和一个隐藏状态。词向量通常是在一个大型语料库上学习得到的,这样的技术称为词嵌入(Word Embedding)。这些将单词转换为向量空间,以捕获单词的许多含义/语义信息(例如 国王 - 男人 + 女人 = 女王)。 28 | 29 |
30 | 31 |
32 | 33 | 我们需要在处理输入词之前将其转换为向量。该转换是使用词嵌入算法完成的。我们可以使用预先训练的嵌入,也可以在数据集上训练我们自己的嵌入。嵌入大小为 200 或 300 的向量是典型的,为了简单起见,我们展示了大小为 4 的向量。 34 | 35 | ## 二、BERT 36 | 37 | BERT是Bidirectional Encoder Representations from Transformers的简称,该模型用Transformer模块堆叠而成,提出一种用大量未标注数据对模型进行预训练(词预测任务MLM和连续语句判断任务NSP),然后用预训练模型在目标训练集上进行微调。 38 | 39 | ### (一)输入/输出表示形式 40 | 41 | BERT采用WordPiece[1]的表示形式 42 | 43 |
44 | 45 |
46 |
图5. WordPiece
47 | 48 | WP = TE + SE + PE 49 | 50 | - 两个特殊标记 51 | - [CLS]:起始标记,同时对应的输出向量表示分类结果(Classification) 52 | - [SEP]:分隔标记(Separate),分隔两个不同的句子 53 | 54 | - TE:词编码(词嵌入) 55 | - SE:段编码,指示该单词从属与那个分段(句子) 56 | - PE:位置编码 57 | 58 | ### (二)预训练任务 59 | 60 | 用大量未标注的数据集(如维基百科等语料)来构造一系列简单的预训练任务。 61 | 62 | ### (三)词预测MLM 63 | 64 | Masked Language Model(LML),训练模型token-level的能力,使其能够关注token之间的联系。随机在语料 65 | 中挑选15%的单词进行处理, 66 | - 以80%的概率将这些单词替换为[MASK]特殊标记 67 | - 以10%的概率用词表中的随机单词替换这些单词 68 | - 以10%的概率保持不变 69 | 70 |
71 | 72 |
73 |
图6. 词预测MLM
74 | 75 | ### (四)连续语句判断NSP 76 | 77 | Next Sentence Prediction(NSP),训练模型sentence-level的能力,使其能够关注两个语句之间的联系。随机在语料中抽选连续的两个语句,并以50%的概率用随机语句来替代第二个语句,让模型学习判断两个语句是不是 78 | 连续的(通常在该任务中能达到97%-98%的准确率)。 79 | 80 |
81 | 82 |
83 |
图7. 连续语句判断NSP
84 | 85 | ### (五)迁移学习 86 | 87 | BERT复用预训练模型权重之后,在目标数据集和任务上对所有权重进行微调。常见NLP任务的输入输出形式如 88 | 下图所示: 89 | 90 |
91 | 92 |
93 |
图8. 迁移学习
94 | 95 | 96 | **参考文献** 97 | 98 | [1] Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation 99 | 100 | 101 | -------------------------------------------------------------------------------- /ch01_基础/1.9 神经网络结构搜索(NAS)/imgs/1.9.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/1.9 神经网络结构搜索(NAS)/imgs/1.9.1.jpg -------------------------------------------------------------------------------- /ch01_基础/1.9 神经网络结构搜索(NAS)/readme.md: -------------------------------------------------------------------------------- 1 | # 神经网络结构搜索(NAS) 2 | 3 | 4 |
5 | 6 |
7 |
图1. 翻译视作盲盒
8 | 9 | ## 一、引言 10 | 11 | 神经网络架构搜索(NAS)是一种自动搜索最优神经网络架构的方法。通过使用NAS,研究人员可以避免手动设计网络架构的繁琐过程,从而节省时间和精力。本教程将介绍NAS的基本概念、方法和实现步骤。 12 | 13 | ## 二、基本概念 14 | 15 | * 网络架构:神经网络的结构,包括层数、每层的神经元数量、激活函数等。 16 | 17 | * 搜索空间:所有可能的网络架构组成的集合。 18 | 19 | * 搜索算法:用于在搜索空间中寻找最优网络架构的算法。 20 | 21 | ## 三、NAS方法 22 | 23 | * 基于梯度的方法:使用梯度信息搜索最优网络架构。例如,遗传算法、进化策略等。 24 | 25 | * 基于强化学习的方法:使用强化学习算法搜索最优网络架构。例如,Proximal Policy Optimization (PPO)、Soft Actor-Critic (SAC)等。 26 | 27 | * 基于元学习方法:使用元学习算法学习如何搜索最优网络架构。例如,MAML (Model-Agnostic Meta-Learning)、FOMAML (First-Order MAML)等。 28 | 29 | ## 四、NAS实现步骤 30 | 31 | 1. 定义搜索空间:确定网络架构的组成部分,例如层数、每层的神经元数量、激活函数等。 32 | 33 | 2. 设计搜索算法:选择一种NAS方法,并实现相应的搜索算法。 34 | 35 | 3. 训练搜索算法:使用训练数据集训练搜索算法,使其能够搜索最优网络架构。 36 | 37 | 4. 搜索最优网络架构:使用搜索算法在搜索空间中搜索最优网络架构。 38 | 39 | 5. 评估最优网络架构:使用验证数据集评估搜索到的最优网络架构的性能。 40 | 41 | 6. 应用最优网络架构:将最优网络架构应用到实际任务中。 -------------------------------------------------------------------------------- /ch01_基础/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch01_基础/modify_log.txt -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/2.1.1 摄像头.md: -------------------------------------------------------------------------------- 1 | # 摄像头 2 | 3 | 摄像头是目前自动驾驶车中应用和研究最广泛的传感器,其采集图像的过程最接近人类视觉系统。基于图像的物体检测和识别技术已经相当成熟,随着近几年深度学习的发展,基于深度学习的视觉感知算法已大量应用于实际生活和生产中,在某些任务上甚至已经超越人类水平。在自动驾驶车上,一般会安装多个摄像头,兼顾不同的视角和任务。 4 | 5 | ## 一、原理 6 | 7 |
8 | 9 |
10 |
图1. 摄像头
11 | 12 | 摄像头模组利用透镜成像的原理,光线透过相机镜头后,被感光元器件捕获,通过感光芯片及相关电路来记录和传输图像信号的,如图1所示。 13 | 14 | ## 二、分类 15 | 16 | ### (一)按摄像头的个数,分为单目摄像头、双目摄像头和多目摄像头。 17 | 18 | **1.单目摄像头** 19 | 20 | 由单个相机组成,结构简单,成本低、便于标定和识别,但无法测量准确的距离。 21 | 22 | **2.双目摄像头** 23 | 24 | 双目摄像头由两个摄像头组成,由于两个摄像头之间的基线距离已知,可以估算出空间距离,但配置与标定复杂,计算量相对单目相机大,通常需要GPU/FPGA加速。 25 | 26 | **3.多目摄像头** 27 | 28 | 三个或以上摄像头,不同焦距摄像头的集合(解决频繁变焦,不同距离识别清晰度)。 29 | 30 | ### (二) 按照摄像头的焦距,分为长焦摄像头和短焦摄像头。 31 | 32 | **1. 长焦摄像头** 33 | 34 | 长焦摄像头看的距离远,在拍摄远处的景象的时候更加清晰。在自动驾驶车中,长焦摄像头用于感知远处的交通状况、红绿灯等。 35 | 36 | **2.短焦摄像头** 37 | 38 | 短焦摄像头主要用于感知近处的物体,视野范围比长焦宽。障碍物识别、车道线检测和场景分割等多个任务都需要用到短焦摄像头,往往车上会集成多个短焦摄像头,覆盖整个车的视野范围。 39 | 40 | ### (三)按照类型划分,除了最常见的摄像头之外,还有事件摄像头、全景摄像头、深度摄像头和红外摄像头等新型相机。 41 | 42 | **1. 事件摄像头(Event Camera)** 43 | 44 |
45 | 46 |
47 |
图2. 事件摄像头
48 | 49 | 事件摄像头中的每个像素独立响应亮度的变化,通过捕捉亮度变化成像,因此对运动物体捕捉效果非常好,并且不受曝光时间限制,成像速度非常快。普通摄像头在高速运动状态下会出现运动模糊,而事件相机则很好的解决了这个问题。目前事件摄像头的主要限制是像素大小和图像分辨率,例如DAVIS240型号的事件摄像头像素大小只有18.5x18.5µm,分辨率为240x180。如图2所示,分别是普通摄像头和事件摄像头拍摄到晚上有行人在汽车前奔跑的画面,可以看到普通摄像头出现了明显的曝光不足和运动模糊,而事件摄像头则很清晰。 50 | 51 | **2.全景摄像头(Omnidirectional Camera)** 52 | 53 |
54 | 55 |
56 |
图3. 全景摄像头
57 | 58 | 全景相机有360°的采集视野,解决了单个相机视野范围不足的问题。全景相机通过2枚或者4枚鱼眼镜头进行拍摄,然后把拍摄好的照片拼接起来,组成全景照片。全景照片技术已经非常成熟,已经应用在VR看房等场景,对导航,定位和地图制图都很有帮助。如图3所示全景照片的边缘畸变非常严重,需要算法处理之后才能正常显示。 59 | 60 | **3.深度摄像头(Range Camera)** 61 | 62 |
63 | 64 |
65 |
图4. 深度摄像头
66 | 67 | 深度摄像头能够获取环境的深度和颜色信息,目前有3种深度测距方法:结构光测距、飞行时间法和双目视觉测距。深度相机能够探测的距离非常有限,因此主要还是应用在室内场景的三维重建,如图4所示。 68 | 69 | **4.红外摄像头(Infrared Camera)** 70 | 71 |
72 | 73 |
74 |
图5. 红外摄像头
75 | 如图5所示,红外摄像头通过热成像原理对行人进行检测,目前在自动驾驶中还没有大规模应用。 76 | 77 | ### (三) 参数指标 78 | 79 | 摄像头主要有以下5个参数指标。 80 | 81 | **1.像素:** 82 | 83 | 摄像头像素越高,分辨率也越高,图像也就越清晰。 84 | 85 | **2.焦距:** 86 | 87 | 焦距足够大,在拍摄比较远的物体时才足够清晰。 88 | 89 | **3.视场角:** 90 | 91 | 视场角决定了摄像头能够看到的视野范围,广角的镜头所拍摄的视野范围更大。 92 | 93 | **4.帧率:** 94 | 95 | 帧率越高,表示单位时间内拍摄的照片越多,拍摄速度越快。 96 | 97 | **5.信噪比:** 98 | 99 | 信噪比越高表明产生的杂波信号越少,图像信号质量越好,单位为DB。 100 | 101 | ### (四)应用 102 |
103 | 104 |
105 |
图6. 特斯拉自动驾驶方案
106 | 107 | 摄像头的成本低、成像像素高、刷新频率快,因此被大量应用于智能车。摄像头可以获取颜色信息,可以用于红绿灯检测、交通标志识别、场景分割等。相比于激光雷达或毫米波雷达,摄像头可以获取更远距离的信息,更早的感知环境状况,因此摄像头常应用于智能驾驶的环境感知任务中。为了获取足够的视野自动驾驶车一般会配备多个摄像头,为保证多个摄像头的拍摄时间一致,摄像头有一个触发器(Trigger),用于控制信号同时触发多个摄像头,如图7为特斯拉自动驾驶方案。 108 | 109 | 摄像头作为被动型感光设备,对光照的变化十分敏感。在强光、黑夜、雨雪、大雾等能见度低或在快速移动的情况下,获取的画质质量大幅降低。 110 | 111 | 112 | -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/2.1.2 激光雷达.md: -------------------------------------------------------------------------------- 1 | # 激光雷达 2 | 3 |
4 | 5 |
6 |
图1. 激光雷达
7 | 8 | 激光雷达是自动驾驶领域非常依赖的传感器,越来越多的自动驾驶公司看好激光雷达的应用前景。激光雷达是实现更高级别自动驾驶(L3级别以上),以及更高安全性的良好途径,相比于毫米波雷达,激光雷达的分辨率更高、稳定性更好、三维数据也更可靠。 9 | 10 | ## 一、原理 11 | 12 | 激光雷达( Light Detection and Ranging,LIDAR)是激光检测和测距系统的简称,通过对外发射激光脉冲来进行物体检测和测距。激光雷达采用飞行时间(Time of Flight,TOF)测距,发射器先发送一束激光,遇到障碍物后反射回来,由接收器接收,然后通过计算激光发送和接收的时间差,得到目标和自己的相对距离。如果采用多束激光并且360度旋转扫描,就可以得到整个环境的三维信息。激光雷达扫描出来的是一系列的点,因此激光雷达扫描出来的结果也叫“激光点云”,如图1所示。 13 | 14 | 根据发生器的不同可以产生紫外线(10-400nm)到可见光(390-780nm)到红外线(760-1000000nm)波段内的不同激光,相应的用途也各不相同。激光是一种单一颜色、单一波长的光,激光雷达选用的激光波长一般不低于850nm,以避免可见光对人眼的伤害,而目前主流的激光雷达主要有905nm和1550nm两种波长。905nm探测距离受限,采用硅材质,成本较低;1550nm探测距离更远,采用昂贵的铟镓砷(InGaAs)材质,激光可被人眼吸收,故可做更远的探测光束。 15 | 16 | 激光雷达(Lidar)光束范围很窄,所以需要更多的纵向光束,以覆盖大的面积,所以线束决定着画面大小,扫描再通过返回的时间测量距离,并精准、快速构建模型,相比目前的其他雷达强太多,所以更适合自动驾驶系统,但也同样易受天气影像,成本较高。 17 | 18 | ## 二、分类 19 | 20 |
21 | 22 |
23 |
图2. 激光雷达分类
24 | 激光雷达按结构不同大致可以分为:机械旋转激光雷达、混合半固态激光雷达和全固态激光雷达(Flash快闪和OPA相控阵,统称为非扫描式)。 25 | 26 | ### (一)机械旋转激光雷达 27 | 28 |
29 | 30 |
31 |
图3. 机械旋转激光雷达
32 | 33 | 机械式激光雷达体积大、成本较高、装配难。它通过旋转实现横向360度的覆盖面,通过内部镜片实现垂直角度的覆盖面,同比有着更耐用稳定的特点,所以我们看到的自动驾驶路试车大多采用这种类型,雷达在车顶不停的在旋转完成横向扫描,靠增加激光束,实现纵向宽泛的扫描,如图3所示。 34 | 35 | ### (二)混合半固态激光雷达。按照扫描方式分为:转镜、硅基MEMS、振镜+转镜、旋转透射棱镜。 36 | 37 | **1. 转镜:** 38 | 39 |
40 | 41 |
42 |
图4. 转镜激光雷达
43 | 44 | 转镜分为一维转镜和二维转镜。一维转镜通过旋转的多面体反射镜,将激光反射到不同的方向;二维转镜顾名思义内部集成了两个转镜,一个多边棱镜负责横向旋转,一个负责纵向翻转,实现一束激光包揽横纵双向扫描。转镜激光雷达体积小、成本低,与机械式激光雷达效果一致,但机械频率也很高,在寿命上不够理想,如图4所示。 45 | 46 | **2.MEMS:** 47 | 48 |
49 | 50 |
51 |
图5. MEMS激光雷达
52 | 53 | MEMS激光雷达通过“振动”调整激光反射角度,实现扫描,激光发射器固定不动,但很考验接收器的能力,而且寿命同样是行业内的重大挑战。支撑振镜的悬臂梁角度有限,覆盖面很小,所以需要多个雷达进行共同拼接才能实现大视角覆盖,这就会在每个激光雷达扫描的边缘出现不均匀的畸变与重叠,不利于算法处理。另外,悬臂梁很细,机械寿命也有待进一步提升。 54 | 55 | **3.振镜+转镜:** 56 | 57 | 在转镜的基础上加入振镜,转镜负责横向,振镜负责纵向,满足更宽泛的扫射角度,频率更高价格相比前两者更贵,但同样面临寿命问题。 58 | 59 | **4.旋转透射棱镜:** 60 | 61 |
62 | 63 |
64 |
图6. 旋转透射棱镜激光雷达
65 | 66 | 棱镜激光雷达也称为双楔形棱镜激光雷达,内部包括两个楔形棱镜,激光在通过第一个楔形棱镜后发生一次偏转,通过第二个楔形棱镜后再一次发生偏转。控制两面棱镜的相对转速便可以控制激光束的扫描形态。
67 | 棱镜激光雷达累积的扫描图案形状像花瓣,中心点扫描次数密集,圆的边缘则相对稀疏,扫描时间持久才能丰富图像,所以需要加入多个激光雷达共工作,以便达到更高的效果。棱镜可以通过增加激光线束和功率实现高精与长距离探测,但结构复杂、体积更难控制,轴承与衬套磨损风险较大。 68 | 69 | ### (三)全固态激光雷达。 70 | 71 | 顾名思义此激光雷达没有任何机械摆动结构,自然也没有旋转。将机械化的激光雷达芯片化,体型更小、性能更好、寿命更可靠,但逃脱不了摩尔定律的轨道,目前有两种方式。 72 | 73 | **1. 光学相控阵式(OPA)固态激光雷达** 74 | 75 |
76 | 77 |
78 |
图7. OPA固态激光雷达
79 | 80 | OPA固态激光雷达完全没有摆动固件,利用多个光源组成阵列,合成特定方向的光束,实现对不同方向的扫描。具有扫描速度快、精度高、可控性好、体积小(Quanergy激光雷达只有90x60x60mm)等优点,缺点是易形成旁瓣,影响光束作用距离和角分辨率,同时生产难度高。 81 | 82 | **2.Flash固态激光雷达** 83 | 84 |
85 | 86 |
87 |
图8. Flash固态激光雷达
88 | 89 | Flash固态激光雷达,也可以说是非扫描式,它可以在短时间直接发射出一大片覆盖探测区域的激光,利用光阵构建图像,就像是照相机,快速记录整个场景,减少了没有了转动与镜片磨损,相对更为稳定,不过缺陷也很明显,比如探测距离较近,对处理器要求较高,相对应成本也高。 90 | 91 | **激光雷达对比, 下图9所示:** 92 |
93 | 94 |
95 |
图9. 激光雷达对比
96 | 97 | ## 三、参数指标 98 | 99 | ### (一)视场角 100 | 101 | 视场角决定了激光雷达能够看到的视野范围,分为水平视场角和垂直视场角,视场角越大,代表视野范围越大,反之则代表视野范围越小。以图3中的激光雷达为例,旋转式激光雷达的水平视场角为360°,垂直视场角为26.9°,固态激光雷达的水平视场角为60°,垂直视场角为20°。 102 | 103 | ### (二)线数 104 | 105 | 线数越高,代表单位时间内采样的点就越多,分辨率也就越高,目前无人驾驶车一般采用32线或64线的激光雷达。 106 | 107 | ### (三)分辨率 108 | 109 | 分辨率和激光光束之间的夹角有关,夹角越小,分辨率越高。固态激光雷达的垂直分辨率和水平分辨率大概相当,约为0.1°,旋转式激光雷达的水平角分辨率为0.08°,垂直角分辨率约为0.4°。 110 | 111 | ### (四)探测距离 112 | 113 | 激光雷达标称的最远探测距离一般为150-200m,实际上距离过远的时候,采样的点数会显著变少,测量距离和激光雷达的分辨率有着很大的关系。以激光雷达的垂直分辨率为0.4°最远探测距离为200m举例,在经过200m后激光光束2个点之间的距离为,也就是说只能检测到高于1.4m的障碍物。如下图10所示。 114 | 115 |
116 | 117 |
118 |
图10. 激光雷达探测距离
119 | 120 | 如果要分辨具体的障碍物类型,那么需要采样点的数量更多,因此激光雷达有效的探测距离可能只有60-70m。增加激光雷达的探测距离有2种方法,一是增加物体的反射率,二是增加激光的功率。物体的反射率是固定的,无法改变,那么就只能增加激光的功率了。但是增加激光的功率会损伤人眼,只能想办法增加激光的波长,以避开人眼可见光的范围,这样可以适当增大激光的功率。探测距离是制约激光雷达的另一个障碍,汽车在高速行驶的过程中越早发现障碍物,就越能预留越多的反应时间,从而避免交通事故。 121 | 122 | ### (五)反射率 123 | 124 | 反射率是指物体反射的辐射能量占总辐射能量的百分比,比如说某物体的反射率是20%,表示物体接收的激光辐射中有20%被反射出去了。不同物体的反射率不同,这主要取决于物体本身的性质(表面状况),如果反射率太低,那么激光雷达收不到反射回来的激光,导致检测不到障碍物。激光雷达一般要求物体表面的反射率在10%以上,用激光雷达采集高精度地图的时候,如果车道线的反射率太低,生成的高精度地图的车道线会不太清晰。 125 | 126 | ## 四、应用 127 | 128 | 激光雷达能够准确输出障碍物的大小和距离,通过算法对点云数据的处理可以输出障碍物的3D框,如:3D行人检测、3D车辆检测等;亦可进行车道线检测、场景分割等任务。 129 | 130 |
131 | 132 |
133 |
图11. 激光雷达应用
134 | 135 | 除了障碍物感知,激光雷达还可以用来制作高精度地图。地图采集过程中,激光雷达每隔一小段时间输出一帧点云数据,这些点云数据包含环境的准确三维信息,通过把这些点云数据做拼接,就可以得到该区域的高精度地图。 136 | 137 | 在定位方面,智能车在行驶过程中利用当前激光雷达采集的点云数据帧和高精度地图做匹配,可以获取智能车的位置。 138 | 139 | 激光雷达具有较高的分辨率,可以记录周围环境的三维信息,激光雷达是主动发射型设备,对光照的变化不敏感,在有光照变化和夜晚等场景基本不会受到影响。此外激光雷达能够提供水平360度的视野范围,保证整个自动驾驶车基本上没有视野盲区。 140 | 141 | 但是激光雷达惧怕雾霾天气,因为雾霾颗粒的大小非常接近激光的波长,激光照射到雾霾颗粒上会产生干扰,导致效果下降。随着技术的进步,以及成本的下降,激光雷达会普及到更多领域。 -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/2.1.3 毫米波雷达.md: -------------------------------------------------------------------------------- 1 | # 毫米波雷达 2 | 3 |
4 | 5 |
6 |
图1. 毫米波雷达
7 | 8 | 毫米波雷达(RADAR),和激光雷达的原理类似,是工作在毫米波波段(millimeter wave )探测的雷达。通常毫米波是指30~300GHz频域(波长为1~10mm)的。毫米波的波长介于微波和厘米波之间,因此毫米波雷达兼有微波雷达和光电雷达的一些优点。 9 | 10 | 同厘米波导引头相比,毫米波导引头具有体积小、质量轻和空间分辨率高的特点。与红外、激光、电视等光学导引头相比,毫米波导引头穿透雾、烟、灰尘的能力强,具有全天候(大雨天除外)全天时的特点。另外,毫米波导引头的抗干扰、反隐身能力也优于其他微波导引头 。毫米波雷达能分辨识别很小的目标,而且能同时识别多个目标;具有成像能力,体积小、机动性和隐蔽性好。目前已经上市的高级驾驶辅助系统(Advanced Driver Assistance Systems,ADAS)大部分都带有毫米波雷达。 11 | 12 | ## 一、原理 13 | 14 | 毫米波雷达的原理是通过发射电磁波,然后接收反射回来的信号,通过电磁波返回的时间差计算目标的相对距离,通过多普勒效应产生的频率偏移来计算目标的相对速度。 15 | 16 | ## 二、分类 17 | 18 |
19 | 20 |
21 |
图2. 毫米波雷达分类
22 | 23 | 雷达按照测量的距离划分为短距离雷达和长距离雷达。 24 | 25 | ### (一)短距离雷达:探测的范围比较大,但是探测的距离比较短 26 | 27 | **1. 24GHz频段** 28 | 29 | 如上图所示被标注了橙色框的Corner radar和Rear radar,就是频段在24GHz左右的雷达。
30 | 处在该频段上的雷达的检测距离有限,因此常用于检测近处的障碍物(车辆)。图中的这4个角雷达,能够实现的ADAS功能有盲点检测、变道辅助等;在自动驾驶系统中常用于感知车辆近处的障碍物,为换道决策提供感知信息。 31 | 32 | ### (二)长距离雷达:探测的范围比较窄,但是探测的距离比较长 33 | 34 |
35 | 36 |
37 |
图3. 特斯拉长距离雷达
38 | 39 | **1. 77GHz频段** 40 | 41 | 如上图所示,被标注为绿色框的Long-range radar,即为频段在77GHz左右的雷达。性能良好的77GHz雷达的最大检测距离可以达到160米以上,因此常被安装在前保险杠上,正对汽车的行驶方向。如下图右下角的棕色区域,为特斯拉AutoPilot2.0中所配备的长距离毫米波雷达,及其感知范围。 42 | 43 | 长距离雷达能够用于实现紧急制动、高速公路跟车等ADAS功能;同时也能满足自动驾驶领域,对障碍物距离、速度和角度的测量需求。 44 | 45 | **2. 79GHz频段** 46 | 47 | 该频段的传感器能够实现的功能和77GHz一样,也是用于长距离的测量。 48 | 49 | ## 三、参数指标 50 | 51 | 毫米波雷达主要有以下4个参数指标。 52 | 53 | ### (一)最大探测距离: 54 | 55 | 能够探测到障碍物的最大相对距离,一般为250m。 56 | 57 | ### (二)最大探测速度: 58 | 59 | 能够探测到障碍物的最大相对速度,一般为240km/h。 60 | 61 | ### (三)探测角度: 62 | 63 | 能够探测到的视野范围,水平范围一般为±60°,垂直视角一般为±5°。 64 | 65 | ### (四)最大探测目标数: 66 | 67 | 最大能够探测的目标数量,一般为24-32个。 68 | 69 | ## 四、应用 70 | 71 | 由公式,光速 = 波长 * 频率,可知频率更高的毫米波雷达,其波长越短。波长越短,意味着分辨率越高;而分辨率越高,意味着在距离、速度、角度上的测量精度更高。 72 | 73 | 毫米波雷达的体积小,相比于激光有更强的穿透性,能够轻松地穿透保险杠上的塑料,因此常被安装在汽车的保险杠内,安装之后对汽车外观的影响不大;毫米波雷达能够同时检测多个物体的距离、角度和相对速度,特别是高速移动的物体;毫米波雷达测量距离也比较大,最大探测距离可达250m,并且能够穿透雾和粉尘,还能够适应各种不同的天气。 74 | 75 | 毫米波雷达也有局限性,雨、雾和湿雪等高潮湿环境的衰减,以及大功率器件和插损的影响降低了毫米波雷达的探测距离,特别是垂直角度;树丛穿透能力差,相比微波,对密树丛穿透力低;采样的点比较稀疏,分辨率比较低,很难识别体积比较小的物体;元器件成本高,加工精度相对要求高,单片收发集成电路的开发相对迟缓。 -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/2.1.4 超声波雷达.md: -------------------------------------------------------------------------------- 1 | # 超声波雷达 2 | 3 |
4 | 5 |
6 |
图1. 超声波雷达
7 | 8 | 超声波雷达,是一种利用超声波测算距离的雷达传感器装置。在车载传感器中,超声波雷达是目前最常见的品种之一,短距离测量中,超声波测距传感器具有非常大的优势,多用在倒车雷达上。在倒车入库,慢慢挪动车子的过程中,在驾驶室内能听到“滴滴滴”的声音,这些声音就是根据超声波雷达的检测距离给司机的反馈信息。 9 | 10 | ## 一、原理 11 | 12 | 超声波雷达的工作原理是通过超声波发射装置向外发出超声波,到通过接收器接收到发送过来超声波时的时间差来测算距离。常用探头的工作频率有 40kHz, 48kHz和58kHz三种。一般来说,频率越高,灵敏度越高,但水平与垂直方向的探测角度就越小,故一般采用40kHz的探头。超声波雷达防水、防尘,即使有少量的泥沙遮挡也不影响。探测范围在0.1-3米之间,而且精度较高,因此非常适合应用于泊车。 13 | 14 | ## 二、分类 15 | 16 |
17 | 18 |
19 |
图2. 超声波雷达分类
20 | 21 | 常见的超声波雷达有两种。第一种是安装在汽车前后保险杠上的,也就是用于测量汽车前后障碍物的倒车雷达,这种雷达业内称为UPA;第二种是安装在汽车侧面的,用于测量侧方障碍物距离的超声波雷达,业内称为APA。 22 | 23 | ### (一)UPA超声波雷达 24 | 25 |
26 | 27 |
28 |
图3. UPA超声波雷达
29 | UPA超声波雷达的探测距离一般在15~250cm之间,主要用于测量汽车前后方的障碍物。 30 | 31 | ### (二)APA超声波雷达 32 | 33 |
34 | 35 |
36 |
图4. APA超声波雷达
37 | 38 | APA超声波雷达的探测距离一般在30~500cm之间。APA的探测范围更远,因此相比于UPA成本更高,功率也更大。APA的探测距离优势让它不仅能够检测左右侧的障碍物,而且还能根据超声波雷达返回的数据判断停车库位是否存在。 39 | 40 | ## 三、 参数指标 41 | 42 | ### (一)距离精度: 43 | 44 | 用于描述雷达对单个目标距离参数估计的准确度,它是由回波信号的信噪比 SNR 决定的。FMCW 雷达的有效噪声带宽与其调频时间成反比,调频时间越长,有效噪声带宽越低,分辨率越高。 45 | 46 | ### (二)最大探测距离: 47 | 48 | 能够探测到障碍物的最大相对距离,一般为250m。最大可测速度与相邻 chirp 信号之间的空间间隔成反比。 49 | 50 | ### (三)距离分辨率: 51 | 52 | 即多个目标被雷达区分出来的最小距离,主要由信号的带宽决定的,chirp 信号带宽的增加,距离分辨率随之提高。 53 | 54 | ### (四)最大探测速度: 55 | 56 | 能够探测到障碍物的最大相对速度,一般为 240km/h。 57 | 58 | ### (五)速度分辨率: 59 | 60 | 速度分辨率随着帧持续时间的增加而提高。 61 | 62 | ### (六)探测视角: 63 | 64 | 能够探测到的视野范围,水平范围一般为±60°,垂直视角一般为±15°。 65 | 66 | ### (七)角精度: 67 | 68 | 用于描述雷达对单个目标方位角估计的准确度。 69 | 70 | ### (八)最大探测目标数: 71 | 72 | 最大能够探测的目标数量,一般为 24-32 个。 73 | 74 | ### (九)角分辨率: 75 | 76 | 取决于雷达的工作波长和天线口径尺寸和 TX/RX 天线的数量。 77 | 78 | ## 四、应用 79 | 80 | ### (一)自动泊车辅助系统 81 | 82 |
83 | 84 |
85 |
图5. 自动泊车辅助系统
86 | 87 | 为了更好地达成辅助停车的功能,部分车型的自动泊车辅助系统甚至包含了8个PDC雷达(用于探测周围障碍物)和4个PLA雷达(用于测量停车位的长度)。这些超声波雷达系统可以实时监测车辆与障碍物之间的距离,并把信息反馈给车辆,以帮助车辆及时调整车身姿态和速度,顺利完成自动泊车。 88 | 89 | ### (二)自动紧急制动系统 90 | 91 |
92 | 93 |
94 |
图6. 自动紧急制动系统
95 | 96 | 配备了自动紧急制动系统的车辆,会周期性地获取车辆当前的行驶速度,并根据当前速度、系统中预设的速度阈值以及超声波雷达的信息反馈,来判断车辆与障碍物之间的距离。一旦发现车辆距离前方行人或障碍物距离较近的时候,系统会主动提醒驾驶者,如果驾驶者还会做出反应,系统则会主动启动制动系统,确保安全距离。 97 | 98 | ### (三)前方防碰撞预警系统 99 | 100 |
101 | 102 |
103 |
图7. 前方防碰撞预警系统
104 | 105 | 前方防碰撞预警系统的工作原理与自动紧急制动功能比较相似,通常会采用超声波雷达来实现车距的实时监测和识别,通过不断获取目标障碍物的距离信息,进行分析处理,传输给执行机构。一旦发现存在潜在碰撞危险,便会对驾驶者进行警告,但需要注意的是,预警系统本身不会采取任何制动措施去避免碰撞或控制车辆。 106 | 107 | ### (四)变道辅助系统 108 | 109 |
110 | 111 |
112 |
图8. 变道辅助系统
113 | 114 | 变道辅助系统可以依靠布置在车身两侧的超声波雷达组件,探测障碍物或是运动车辆,再结合驾驶者的变道动作,来判断是否存在碰撞风险;再结合车辆本身的辅助驾驶功能,来完成车辆的变动操作。 115 | 116 | ### (五)全速自适应续航系统 117 | 118 |
119 | 120 |
121 |
图9. 全速自适应续航系统
122 | 全速自适应续航系统一般集成了车辆摄像头、超声波雷达系统,通过ACC控制单元与ABS系统、发动机控制系统协调动作,适当加速或制动,使得车辆与前方车辆始终保持安全距离。 123 | 124 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/2.1.5 GPS定位导航.md: -------------------------------------------------------------------------------- 1 | # GPS定位导航 2 | 3 |
4 | 5 |
6 |
图1. 全球导航定位
7 | 8 | GPS是Global Positioning System(全球定位系统)的简称,一般指美国GPS系统。国际上投入运行且具备全球定位能力的系统还有俄罗斯的格罗纳斯(GLONASS)和中国的北斗卫星导航定位系统,正在建设中的有欧盟伽利略(GALILEO)定位系统,这些全球卫星定位系统在系统组成和定位原理方面基本一致,可以统称为卫星导航系统(Global Navigation Satellite System,GNSS)。 9 | 10 | GPS导航系统具备全天候服务能力,不受天气影响,全球覆盖,定位速度快,精度高,应用广泛,已形成了庞大的空间导航定位产业链。 11 | 12 | ## 一、发展历史 13 | 14 | 20世纪60年代末,美国开始着手研制卫星导航系统,主要目的是为陆海空三大领域提供实时、全天候和全球性的导航服务,美国海军提出了Timation计划。该计划采用12-18颗卫星组成全球定位网,经过20余年的研究实验,到1994年,建成了全球覆盖率高达98%的24颗GPS卫星定位网络,这就是导航卫星授时与测距全球定位系统(Navigation Satellite Timing and Ranging Global Position System, NAVSTART GPS),简称全球定位系统(GPS)。 15 | 16 | 该工程是阿波罗登月工程和航天飞机计划之后的第三大空间计划,从最初的军事目的,到现代人类生活的方方面面,人类都已离不开基于GPS系统的定位与导航服务。俄罗斯、欧盟、中国、日本及印度也先后着手建立了自主的全球或区域型卫星导航系统。 17 | 18 | ## 二、定位原理与系统构成 19 | 20 |
21 | 22 |
23 |
图2. 定位原理
24 | 25 | ### (一)定位原理 26 | 27 | 如上图2,从三个已知点对同一目标进行观察并测量距离,分别以已知点为圆心,以所测距离为半径做三个圆,可得三个圆在平面上的唯一交点,这种定位方法称为三角测量法。GPS就是在已知卫星某一时刻的位置和速度的基础上,以卫星为空间基准点,通过接收设备,测定所测点至卫星的距离来确定所测点某一时刻的空间位置的定位技术。 28 | 29 | ### (二)系统构成 30 | 31 | 以GPS系统为例,一个典型的卫星定位系统分为空间部分、地面监控部分、用户接受部分。 32 | 33 | **1.空间部分** 34 | 35 | 由24颗GPS工作卫星组成,其中3颗为备用卫星,分布在6个倾角为55°,约为20200公里高的轨道上绕地球运行,每颗卫星都会发射用于导航定位的信号。这种布局的目的是保证在全球任何地点、任何时刻至少可以观测到4颗卫星。 36 | 37 | **2.地面监控部分** 38 | 39 | 分为主控站、监控站和注入站,主要功能是计算卫星星历和卫星钟的改正参数,监控卫星状态,进行卫星调度与参数注入工作等。 40 | 41 | **3.用户接受部分** 42 | 43 | 指一切具备GPS信号接收能力的终端机,可以依据所观测信号计算得到自己某时刻所处的空间三维位置,且无须经过授意也无须就接受GPS信号付费。 44 | 45 | ### (三) 定位精度以及频率 46 | 47 | **1. 卫星导航系统的定位精度主要由两方面因素决定:** 48 | 49 | *(1)位置精度衰减因子(PDOP)* 50 | 51 | 主要取决于星座的覆盖特性,一般来说,用户可观测到的卫星数越多,与用户的几何构型越好,PDOP值就更优。目前,世界四大全球卫星导航系统,PDOP全球均值一般为2左右。 52 | 53 | *(2)用户等效测距误差(UERE)* 54 | 55 | 该误差是由空间段卫星轨道钟差、传输环境段的电离层和对流层误差、用户段接收机噪声和多径误差等三部分误差项共同组成。目前,四大系统UERE一般为2.0米(95%)左右,PDOP与UERE两者的乘积即为系统定位精度。 56 | 57 | **2.实时动态载波相位差分技术。 *RTK*(Real - time kinematic,实时动态)** 58 | 59 |
60 | 61 |
62 |
图3. 基站
63 | 64 | 如上图3,在地面上建基站(Base Station),基站可以得到精确位置信息(经纬度),并且具有接收卫星信号的功能。当基站的GPS接收机与车载GPS接收机相距较近时(<30km),可以认为两者的GPS信号通过的是同一片大气区域,即两者的信号误差基本一致。根据基站的精确位置和信号传播的时间,反推此时天气原因导致的信号传播误差,之后利用该误差修正车载的GPS信号,即可降低云层、天气等对信号传输的影响。使用差分GPS技术,可以使无人车的定位精度从10米级别提升至米级。 65 | 66 | **3. 遮挡、反射等问题依然难以解决** 67 | 68 |
69 | 70 |
71 |
图4. 遮挡
72 | 73 | *(1)信号丢失* 74 | 75 | GPS接收机在高楼周围,很容易失去某一方向、所有的卫星信号,仅依靠另外三面的卫星信号求得的定位结果,在精度上很难满足无人驾驶的需求。 76 | 77 | *(2)多路径问题* 78 | 79 | 在高楼周围也可能导致原本收不到的卫星信号,经过大楼楼体的镜面反射被接收到,这种信号被称为多路径信号(Multi-Path Signal)。从图中可以看出,根据多路径信号计算得到的距离会明显大于实际距离。而无人车是很难判断,当前接收到的信号是单路径还是多路径的。 80 | 81 | **4. GPS定位频率不高** 82 | 83 | GPS定位的频率只有10Hz,以速度为72km/h(20m/s)为例,GPS定位的周期为100ms,则一个周期后,汽车相对于前一次定位的结果移动了20m/s \* 0.1s = 2m,即两次的定位结果相距2米。为了解决GPS频率太低所带来的问题,工程师引入了其他传感器信号(IMU、激光、视觉)用以提高无人车的定位频率。 84 | 85 | ## 三、应用 86 | 87 | 全球定位系统由于其使用方便,定位效率高,应用广泛,从功能类别角度来看,导航应用的典型应用如,军事、物流、交通、户外探险;测量定位的典型应用如,基础设施建设、防灾减灾、地球科学研究;授时服务的典型应用如,为电信基站、电视发射站、工业设备等提供精确同步时钟源等。 88 | 89 | 全球定位系统体现了近十年跨领域关键技术的发展趋势,已成为当代重大跨领域技术发展的基本要素。作为一个具有成本效益和全球可用的位置和时间信息源,全球定位系统对于技术和应用多元化的快速发展起了很大作用,这反过来又产生了大量的应用实例,值得关注的跨领域技术包括物联网、大数据、移动医疗、增强现实、智慧城市、多式联运物流。 90 | -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/2.1.6 IMU惯性传感器.md: -------------------------------------------------------------------------------- 1 | # IMU惯性传感器 2 | 3 |
4 | 5 |
6 |
图1. 惯性传感器
7 | 8 | ## 一、原理 9 | 10 | 惯性测量单元IMU(Inertial Measurement Unit)。是一种用来测量物体三轴姿态角(或角速率)以及加速度的装置。一般IMU包括三轴陀螺仪及三轴加速度计,某些9轴IMU还包括三轴磁力计。 11 | 12 | 其中加速度计检测物体在载体坐标系统独立三轴的加速度信号,而陀螺仪检测载体相对于导航坐标系的角速度信号,测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态。IMU在导航中的核心价值无可替代,为了提高其可靠性,还可以为每个单轴配备更多种类的传感器。为保证测量准确性,一般IMU要安装在被测物体的重心上。 13 | 14 | 在自动驾驶使用中,GPS得到的经纬度信息作为输入信号传入IMU,IMU再通过串口线与控制器相连接,以此获取更高频率的定位结果。 15 | 16 |
17 | 18 |
19 |
图2. IMU原理
20 | 21 | ## 二、特性 22 | 23 | IMU使用的场景很多。手机、智能手表、VR等普通的消费级电子产品,其所使用到的IMU一般精度较低且价格便宜;自动驾驶所使用到的IMU,价格从几百块到几万块不等,取决于自动驾驶汽车对定位精度的要求;像导弹、航空领域使用的IMU,通常精度要求更高,宇航级的IMU可以达到极高精度的推算,误差甚至可以小于一米。根据不同的使用场景,对IMU的精度有不同的要求。精度高,也意味着成本高。 24 | 25 | IMU的精度、价格和使用场景,如下图3所示。 26 | 27 |
28 | 29 |
30 |
图3. IMU的精度&&价格
31 | 32 | ## 三、GPS + IMU 融合 33 | 34 | 除了精度和成本的特性外,IMU还有两个十分关键的特性。其一是更新频率高,工作频率可以达到100Hz以上; 其二是短时间内的推算精度高,不会有太大的误差。 35 | 36 | GPS的定位频率只有10Hz,而IMU的两个特性刚好可以弥补GPS的劣势,和GPS组成定位的黄金搭档。 37 | 38 | 两个传感器共同工作时,可以给出频率100Hz的定位输出。下图是两传感器数据融合的原理图。 39 | 40 |
41 | 42 |
43 |
图4. GPS+IMU融合原理图
44 | 45 | 运行在控制器上的软件对信息的处理流程在时间维度上类似下图。在0\~100ms的周期中,使用IMU进行9次位置的估计,待新的GPS定位数据进来时,则进行修正,以此实现高频率的定位结果输出。 46 | 47 |
48 | 49 |
50 |
图5. GPS+IMU信号处理时序图
51 | 52 | 就这样,GPS与IMU便相辅相成地实现了无人车的稳定定位。 53 | -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/README.md: -------------------------------------------------------------------------------- 1 | ## 2.1 传感器 2 |
3 | 4 |
5 |
图1. 传感器
6 | 7 | 自动驾驶借助各种传感器来感知周围环境,传感器从功能上主要划分为环境感知、状态感知。环境感知:获取车当前所处的环境信息,包括:周围的车辆、行人、交通标志、红绿灯、所处的场景(路口交汇处、停车场、高速公路)等。状态感知:获取车自身的状态,包括当前车辆的位置、航向角、速度、俯仰角等信息。 8 | 9 | 自动驾驶车所用到的传感器如图1所示,包括激光雷达、毫米波雷达、超声波雷达、相机、GPS、IMU等。 -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.1.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.1.2.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.1.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.1.3.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.1.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.1.4.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.1.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.1.5.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.1.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.1.6.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.10.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.11.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.2.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.3.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.4.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.5.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.6.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.7.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.8.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.2.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.2.9.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.3.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.3.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.3.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.3.2.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.3.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.3.3.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.4.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.4.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.4.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.4.2.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.4.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.4.3.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.4.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.4.4.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.4.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.4.5.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.4.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.4.6.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.4.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.4.7.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.4.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.4.8.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.4.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.4.9.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.5.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.5.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.5.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.5.2.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.5.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.5.3.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.5.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.5.4.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.6.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.6.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.6.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.6.2.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.6.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.6.3.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.6.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.6.4.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/imgs/2.1.6.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/imgs/2.1.6.5.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.1 传感器/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.1 传感器/modify_log.txt -------------------------------------------------------------------------------- /ch02_硬件/2.2 计算单元/README.md: -------------------------------------------------------------------------------- 1 | # 计算单元 2 | 3 | 如果说传感器是无人驾驶车的眼睛,那么计算单元则是无人驾驶车的大脑,传感器采集到的数据经过计算单元的运算,最后才能转化为控制信号,控制汽车的行驶。因此一个性能强劲的大脑显得尤为关键。 4 | 5 | ## 一、简介 6 | 7 | 无人驾驶车运行过程中需要处理各种不同类型的任务,所以目前大部分的无人驾驶计算平台都采用了异构平台的设计。无人驾驶车在CPU上运行操作系统和处理通用计算任务,在GPU上运行深度模型感知任务。 8 | 9 | 无人驾驶操作系统运行在CPU上,实现系统调度、进程管理、网络通信等基本功能。还有一部分通用任务也跑在CPU上,例如定位的NDT算法、卡尔曼滤波和控制相关的算法等。无人驾驶的环境感知算法运行在GPU上,目前主流的深度学习框架都支持通过GPU来加速运算,特别是一些图像算法。GPU的性能和无人驾驶车感知周围环境的能力息息相关,目前也有采用专门用于深度学习的芯片来处理此类任务,例如google的TPU等。 10 | 11 | ## 二、参考指标 12 | 13 | ### (一)性能 14 | 15 | 性能包括4个方面:CPU、GPU、内存和总线。 16 | 17 | **1. CPU** 18 | 19 | CPU主要运行自动驾驶操作系统和进行通用计算,目前主流的通用CPU是Intel公司X86架构和ARM公司的ARM架构。Intel公司的志强系列处理器已经广泛应用于数据中心服务器和工控机上,ARM公司则是设计芯片然后把方案卖给各家公司让他们自己生产。目前各大公司发布的无人驾驶计算平台大部分都采用了ARM架构的处理器,主要原因是在汽车行业,芯片需要满足车规要求,而ARM处理器更方便集成。可以预见未来发布的无人驾驶计算平台会大量采用ARM架构的处理器做通用计算。 20 | 21 | **2. GPU** 22 | 23 | 目前主流的深度学习框架都是通过GPU进行训练和计算,因此无人驾驶计算平台大部分都采用GPU来进行深度学习计算。也有专门针对深度学习计算的芯片如TPU等,但目前这类芯片应用的生态和成熟度还不是很高。此外还有计算平台通过FPGA来做深度学习加速,成本会比GPU高。未来在无人驾驶大规模商业之后可能会出现专门针对深度学习计算的芯片。 24 | 25 | **3. 内存** 26 | 27 | 内存包括CPU内存和显存,内存容量太小和刷新频率太低都会影响到系统性能。同时应当尽量避免内存条的设计,采用贴片内存,防止内存震动失效。 28 | 29 | **4. 总线** 30 | 31 | 无人驾驶车的传感器和GPU等硬件设备都需要总线和计算平台相连接,总线带宽是系统性能的保障。同时计算平台的CPU需要采用冗余设计,2颗CPU之间通过总线连接,保证一颗CPU失效后,另一颗也能够继续工作。 32 | 33 | ### (二) 功耗 34 | 35 | 一般系统的性能越强,则功耗越大。这时候需要考虑以下2个方面:电源和散热。 36 | 37 | **1. 电源** 38 | 39 | 计算平台采用的是车载电源,考虑到人的安全,车载电源的电压限制在36v以下。一般车载电源能够提供的功率不超过1KW,也就是说在不进行任何改造的情况下,计算平台的功率限制在1KW以下。如果需要增加功率,要么采用多个电源,要么增大电源的电流。而1KW的电源电流约为42A,功率如果要增大到2KW,那么电流要增大到84A,我们知道电流越大,系统的发热会越大,所以也不是可以无限增加电源功率。 40 | 41 | **2. 散热** 42 | 43 | 在功率非常大的时候,计算平台甚至需要水冷散热,采用风扇散热在汽车密闭的后备箱中没有排风口,无法有效的把热量排放出去。水冷散热的效果好,而且不需要排风口的设计,在功耗比较大的时候采用水冷散热是很好的选择。 44 | 45 | ### (三)存储 46 | 47 | 无人驾驶车需要存储高精度地图、日志、传感器数据等多种数据。这些信息的数据量很大,特别是传感器数据,在录制数据的时候,为了让数据能够及时保存,一般会选择固态硬盘。固态硬盘的写入速度快,并且相对机械硬盘也不容易失效,因此无人驾驶中都建议采用固态硬盘。 48 | 49 | ### (四) 接口 50 | 51 | 计算平台除了需要注意性能、功耗和存储,还需要注意各种总线接口是否完备。目前传感器的接口丰富多样,摄像头采用的是USB接口,激光雷达采用的是以太网,毫米波雷达采用的是CAN总线,同时还需要预留足够的接口给其它外设,例如GPU、FPGA加速卡、V2X设备等。计算平台只有具备丰富的接口类型才能满足无人驾驶的要求。 52 | 53 | ## 三、计算平台 54 | 55 | 目前无人驾驶计算平台有3种选择。 56 | 57 | ### (一)工控机 58 | 59 |
60 | 61 |
62 |
图1. 工控机
63 | 64 | 工控机采用CPU和GPU的组合,非常通用,同时又能够满足恶劣坏境的要求。但工控机的性能不太强劲,接口也不太丰富,适合初期的无人驾驶验证。 65 | 66 | 67 | ### (二)芯片厂家计算平台 68 | 69 |
70 | 71 |
72 |
图2. NVIDIA DRIVE Orin
73 | 74 | 此类平台都是采用开发板设计,不太适合直接应用在无人驾驶中,好处是厂家提供了SDK,可以做到开箱即用。比如英伟达的DRIVE、德州仪器基于DSP的TDA2X Soc、恩智浦的BlueBox。 75 | 76 | ### (三)车企自研计算平台 77 | 78 |
79 | 80 |
81 |
图3. 特斯拉FSD芯片
82 | 83 | 特斯拉的FSD就是自研的计算平台,集成度非常高,采用冗余设计,集成有专门的安全模块,性能和接口也能够满足特定场景的要求。自研芯片的解决方案非常适合无人驾驶,但是研发成本太高。 84 | 85 | ## 四、边缘计算 86 | 87 | 边缘计算是无人驾驶未来的发展趋势之一,传感器中会逐步集成融合和滤波算法,而不需要把所有的计算全都放在计算平台中完成。典型的应用场景是为了处理摄像头拍摄的大量图像,可以先用FPGA处理,然后输出处理好的结果给计算平台使用,这样不仅可以减轻系统带宽压力,同时还可以加快图片处理速度。 88 | 89 | 90 | -------------------------------------------------------------------------------- /ch02_硬件/2.2 计算单元/imgs/2.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.2 计算单元/imgs/2.2.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.2 计算单元/imgs/2.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.2 计算单元/imgs/2.2.2.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.2 计算单元/imgs/2.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.2 计算单元/imgs/2.2.3.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.2 计算单元/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.2 计算单元/modify_log.txt -------------------------------------------------------------------------------- /ch02_硬件/2.3 辅助单元/2.3.1 V2X.md: -------------------------------------------------------------------------------- 1 | # V2X 2 | 3 | ## 一、简介 4 | 5 | V2X(Vehicle-to-Everything),是车和外界进行通信互联的技术。V2X是车联网的重要组成部分,主要目的是为了保障道路安全、提高交通效率和节省汽车能源。美国国家公路交通安全管理局(NHTSA)估计,如果实施V2V系统,至少可以减少13%的交通事故,从而每年减少43.9万次车祸。 6 | 7 | ## 二、分类 8 | 9 | ### (一)V2X按技术分为基于局域网的技术(DSRC)、基于蜂窝网的技术(C-V2X)两类 10 | 11 | **1.基于局域网的技术(DSRC)** 12 | 13 | 2012年,IEEE首先通过了基于局域网的V2X技术规范,它支持车和车以及车和基础设施之间的直接通信,这项技术称为专用短距离通信(DSRC)。DSRC使用802.11p提供的基础无线电通信。 14 | 15 | **2.基于蜂窝网的技术(C-V2X)** 16 | 17 | 2016年,3GPP发布了基于LTE的V2X标准。它也称为C-V2X技术用以区别基于局域网的V2X技术。在直接通信的基础上,C-V2X还支持通过蜂窝网络(V2N)进行广域通信。 18 | 19 | 尽快存在一些争议,但是在2017-2018年由5G汽车协会(5GAA)进行的一些研究和分析表明基于蜂窝的C-V2X技术在性能、通信规范和可靠性等多个方面均优于DSRC。 20 | 21 | 22 | ### (二)V2X按应用场景道路安全、交通管理两类 23 | 24 | 1. V2X可以有效避免交通事故,这类事故往往是刹车不及时,或者没有足够的视野范围导致的。V2X能够在靠近车辆之前提供预警,在一些十字路口没有视野范围的时候,能够提示乘客有车辆汇入。 25 | 26 | 2. V2X可用于交通管理,监控当前的交通状况,动态的控制交通,减少交通拥堵。 27 | 28 | ## 三、展望 29 | 30 | V2X不仅仅证明能够减少交通事故,还能改善现有的交通状况,最后V2X还能够解决目前无人驾驶面临的一些难题。 31 | 32 | 红绿灯和交通标志识别一直是无人驾驶中很重要的一个问题。在一些城市主干道路口,交通标志非常密集,逻辑也十分复杂,以目前的人工智能水平还不足以理解分析交通标志的逻辑。同时目前都是采用摄像头做红绿灯识别,而摄像头在光照变化和夜晚的时候,识别效果会大打折扣,但采用V2X技术可以轻松的解决上述问题。 33 | 34 | 除此之外,视野范围一直是自动驾驶保持安全的重要指标。单独依靠无人驾驶车自身的传感器来获取远处的视野有着诸多限制,而依托V2X技术,能够让无人驾驶车看的更远,还能够获取十字路口等一些传感器视野看不到的地方。 35 | 36 | 最后,无人车往往无法有效预测紧急刹车的汽车和突然从路边出现的行人。而装备有V2X设备的汽车在做出紧急刹车时,能够立刻通知后车减速,避免追尾。同时无人车能够及时发现佩戴有V2X电子设备的行人,而不需要进行大量的感知运算。 37 | 38 | 可以预见未来V2X对自动驾驶会是一个非常好的补充。 -------------------------------------------------------------------------------- /ch02_硬件/2.3 辅助单元/2.3.2 黑匣子.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.3 辅助单元/2.3.2 黑匣子.md -------------------------------------------------------------------------------- /ch02_硬件/2.3 辅助单元/imgs/2.3.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.3 辅助单元/imgs/2.3.1.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.3 辅助单元/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.3 辅助单元/modify_log.txt -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.1 内参标定/2.4.1.1 相机内参标定.md: -------------------------------------------------------------------------------- 1 | # 相机内参标定 2 | 3 |
4 | 5 |
6 | 7 | 相机内参标定主要是为了获取相机本身的性质参数,包括相机的焦距,光心以及畸变参数等。 8 | 9 | 内参的物理意义与相机模型强相关,常用的相机成像模型为小孔模型,等效焦距与光心用数学可表示为一个矩阵 10 | 11 | $$ 12 | \left[ 13 | \begin{matrix} 14 | f_x & 0 & c_x \\ 15 | 0 & f_y & c_y \\ 16 | 0 & 0 & 1 \\ 17 | \end{matrix} 18 | \right] 19 | $$ 20 | 21 | 其中 $f_x$、 $f_y$ 是等效焦距, ${c_x}$、 ${c_y}$ 是光心。 22 | 23 | 畸变的产生,是由于相机本身不能精确地按照理想的成像模型进行透视投影,即物点在实际的相机成像平面上生成的像与理想成像之间存在一定偏差,这个偏差就是相机畸变造成的。以常见的小孔成像模型为例,畸变误差主要是径向畸变误差(k1、k2、k3)和切向畸变误差(p1、p2)。 24 | 25 | 目前业界常用的相机标定方法是[张正友方法](2.4.1.2%20张正友相机标定法.md)。张正友方法[1] 通过多种位姿摆放的标定板,提取棋盘格角点,计算出相机的内参。 26 | 27 | ### 参考文献 28 | 29 | [1] Z. Zhang, “A Flexible New Technique for Camera Calibration” -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.1 内参标定/imgs/2.4.1.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/2.4.1 内参标定/imgs/2.4.1.1.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/2.4.2.1 离线标定.md: -------------------------------------------------------------------------------- 1 | # 离线标定 2 | 3 | ## 一、传感器与车身的外参标定 4 | 5 | ### (一) 相机与车身的标定 6 | 7 | 在以相机为主的自动驾驶传感器配置方案中,车上一般会安装多个相机。相机与车身的外参标定可以通过引入房间坐标系实现:标定间墙面上贴若干标记物,我们称之为靶标。如下图所示: 8 | 9 |
10 | 11 |
12 |
图1. 房间坐标系
13 | 14 | 相机通过检测靶标建立与房间坐标系的关系,即可求解相机与房间的外参。在标定阶段保证车身停在房间的固定位置,即得到车身与房间的外参。通过坐标转换即可完成相机与车身的外参标定。这种方法依赖于靶标的角点精度,因此对环境有一定要求,且靶标数量越多,精度越高。 15 | 16 | 在产线上,方案设计既要考虑传感器标定精度,又要兼顾车辆标定效率和产线环境,考虑到产线环境中,车辆传感器工装位置与车辆停靠位置可以较大程度保证精度。因此,可以减少靶标数量,运用同样的标定原理,实现相机与车身的标定。 17 | 18 | ### (二) 激光雷达与车身的标定 19 | 20 | 在以激光雷达为主的自动驾驶传感器配置方案中,需要标定激光雷达与车身的外参,类似于相机与车身的标定原理,激光雷达与车身的标定也可借助标定板进行。标定过程中,将多个标定板置于激光雷达可扫描到的区域,通过已知的车身位姿、标定板位姿和激光雷达工装等先验信息,可解算出激光雷达与车身的外参。 21 | 22 | ## 二、多传感器联合标定 23 | 24 | 多传感器联合标定是多传感器融合的必要前提。单一传感器往往会存在覆盖范围不足和观测信息受限等局限与挑战,多传感器融合方案可以做到不同传感器间的取长补短。根据传感器特性与算法原理的不同,多传感器标定可分为基于共视特征信息的标定和基于运动轨迹的标定。 25 | 26 | ### (一)基于共视特征信息的标定 27 | 28 | #### 1、多激光雷达之间的标定 29 | 30 | 激光雷达可以直接测量周围环境的距离信息,因此多激光雷达间的标定方案较为成熟。对于有共视区域的激光雷达,可以通过场景的特征信息,运用 NDT 或 ICP 等配准方法实现点云特征匹配,从而完成多个激光雷达之间的外参标定。 31 | 32 |
33 | 34 |
35 |
图2. 多个激光雷达外参标定
36 | 37 | #### 2、相机与激光雷达的外参标定 38 | 39 | 相机与激光雷达的观测信息表达方式是不一致的,那么如何进行二者之间的标定呢?目前业界比较成熟的方案是通过引入统一观测源建立约束。对于有共视区域的相机与激光雷达,可在共视区域内布置靶标作为统一观测源, 分别获取靶标在相机坐标系下和激光雷达坐标系下的特征。通过两种特征匹配,完成相机与激光雷达之间的外参标定。下图便是通过棋盘格靶标作为统一观测源的相机与激光雷达标定流程图。 40 | 41 |
42 | 43 |
44 |
图3. 相机与激光雷达外参标定
45 | 46 | ### (二)基于运动轨迹的标定 47 | 48 | 对于 IMU 这种直接估计位姿变化的传感器,常见的方案是基于车辆运动轨迹的标定。以激光雷达与 IMU、相机与 IMU 之间的标定为例,可采用最经典的手眼标定方式,基于给定的 IMU 与激光雷达/相机之间的外参初值,通过激光雷达/相机的轨迹与 IMU 的轨迹进行外参优化,从而完成最终的激光雷达/相机和 IMU 的外参标定。下图是激光雷达与 IMU 外参标定的示意图。 49 | 50 |
51 | 52 |
53 |
图4. 激光雷达与IMU外参标定
-------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/2.4.2.2 在线标定.md: -------------------------------------------------------------------------------- 1 | # 在线标定 2 | 3 | 区别于外参离线标定方法(需要固定的场地、固定的靶标、以及精确的车辆定位、固定的运动轨迹等信息)。在线标定可在自然场景中, 根据离线标定的结果、工装、车辆运动等先验信息,实现对离线标定结果的全部参数或部分参数的修正。由于方案的灵活性,传感器外参的在线标定是近年业内的研究重点。下面我们分别介绍一下传感器与车身、多传感器之间的在线标定。 4 | 5 | ## 一、传感器与车身的在线标定 6 | 7 | ### (一)相机与车身的在线标定 8 | 9 | 车辆行驶过程中,相机可根据行驶道路信息获取场景中的一些平行或者正交的信息(如车道线、灯杆等)。空间平行线在相机图像平面上的交点被称为消失点。通过这些空间平行线得到的消失点,我们可以实时估计相机与车体的外参。该方案灵活性强,但鲁棒性会有所下降,因此如何兼顾算法的鲁棒性与灵活性是该类方案研究的重点。外参标定前后的效果如下图的(b 纠正前,俯视图内八)和(c 纠正后,俯视图平行)所示,感兴趣的同学可以参考[1]。 10 | 11 |
12 | 13 |
14 |
图1. 相机外参标定
15 | 16 | ### (二)激光雷达与车身的在线标定 17 | 18 | 与相机不同,激光雷达可以直接测量观测点的 3D 距离。因此,激光雷达与车身的在线标定也相对成熟。基于车辆的运动先验与场景先验,在车辆行驶过程中,激光雷达可根据车辆的行驶方向、地平面点云等信息,实时纠正自身与车体的外参。 19 | 20 | ## 二、多传感器的在线标定 21 | 22 | 多传感器在线标定,尤其是激光雷达与相机的在线标定,是业界公认的难点,在近年已有广泛研究。目前业内主要方法是通过最大化点云与图像的配准信息来估计标定参数。根据信息提取方式的不同,多传感器在线标定的研究方向可分为边缘配准[2]、互信息[3]、分割[4][5]三种方法。 23 | 24 | ### (一)边缘配准 25 | 26 | 边缘配准方法首先提取图像和激光雷达的边缘信息,然后将激光雷达边缘信息通过初值投影到图像上,并采用优化算法,最大化两种边缘信息乘积的值,以此完成激光雷达和相机的外参标定。 27 | 28 | 此方法原理简单,可操作性强,但由于只能获取激光雷达的垂直边缘信息,对于偏航角的估计效果要明显优于横滚角与俯仰角。 29 | 30 | ### (二)互信息 31 | 32 | 互信息方法对激光雷达的强度信息与图像的灰度信息进行互信息操作,使得互信息结果最大,从而完成标定。如下图所示,正确的激光雷达外参角度值(89degree)对应的互相关系数最大。 33 | 34 |
35 | 36 |
37 |
图2. 基于互信息的外参标定
38 | 39 | 此类方法对于激光雷达的强度值有较强依赖,若激光雷达线束较少,点云稀疏,匹配效果可能无法达到需求。 40 | 41 | ### (三)分割 42 | 43 | 分割方法需要对图像/点云进行分割操作,分割后的信息会用于特征匹配。如下图所示,此类方法可以只对图像进行分割(图3上),也可以对图像和点云都进行分割(图4下)。 44 | 45 |
46 | 47 |
48 |
图3. 基于分割的外参标定
49 | 50 | 51 | 此类方法将激光雷达原始点云或分割后的点云通过初值回投到分割后的图像上,采用局部优化的方式,使得点云与图像作用关系最大化,完成激光雷达与相机的外参标定。 52 | 53 | 相较于提取边缘的方法,此类方法可获得图像和点云的更多有效信息,且图像分割相较于图像边缘提取,抗干扰能力强。 54 | 55 | 综上所述,在线标定优势在于可利用自然场景,完成传感器矫正,缺点是需要在满足条件的自然场景下进行,且若场景特性无法达到预期,会导致在线标定结果偏差较大或标定失败。 56 | 57 | 传感器标定是自动驾驶系统的基础环节,也是自动驾驶系统运行的关键条件。传感器标定结果的准确性与精确性,直接影响自动驾驶各功能模块的运行效果。因此,一个准确的、高精度的标定结果,是传感器标定的目标,也是整个自动驾驶系统的需求与期望。目前传感器标定仍存在诸多挑战,如何实现高精度的标定、如何利用有限的环境完成标定、如何完成不同类型传感器之间的标定,如何感知车辆运动过程中传感器位置的偏差,如何对传感器位置偏差实时纠正等,这些都是我们会不断优化和探索的方向。 58 | 59 | 60 | 61 | 62 | ### 参考文献 63 | 64 | [1] J. Lee, Y. Baik, H. Cho, and S. Yoo,“Online Extrinsic Camera Calibration for Temporally Consistent IPM Using Lane Boundary Observations with a Lane Width Prior” 65 | 66 | [2] J. Levinson and S. Thrun, “Automatic Online Calibration of Cameras and Lasers” 67 | 68 | [3] G. Pandey and J. R. McBride and S. Savarese and R. M. Eustice, ”Automatic Targetless Extrinsic Calibration of a 3D Lidar and Camera by Maximizing Mutual Information” 69 | 70 | [4] Y. Zhu, C. Li, Y. Zhang, “Online Camera-LiDAR Calibration with Sensor Semantic Information” 71 | 72 | [5] T. Ma , Z. Liu , G. Yan, and Y. Li,”CRLF: Automatic Calibration and Refinement based on Line Feature for LiDAR and Camera in Road Scenes” -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.2.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.3.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.4.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.5.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.6.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/2.4.2 外参标定/imgs/2.4.2.7.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/2.4.2 外参标定/modify_log.txt -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/2.4.2 外参标定/readme.md: -------------------------------------------------------------------------------- 1 | # 外参标定 2 | 3 | 外参标定的问题核心是求解传感器在车辆坐标系下的位姿。由于涉及到车辆坐标系的确定,传感器外参标定主要分为两部分: 4 | 5 | - 传感器与车身的外参标定,车身的特点在于没有直接测量值,所以需要借助先验信息,如工装信息、环境信息等达到求解自车位姿变换关系的目的,进而完成传感器和车身的标定。 6 | 7 | - 传统意义上的多传感器标定,需要通过传感器的测量信息来求解不同传感器之间的位姿变换。 -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/imgs/2.4.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/imgs/2.4.1.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/imgs/2.4.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/imgs/2.4.1.2.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/imgs/2.4.1.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/imgs/2.4.1.3.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/imgs/2.4.1.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/imgs/2.4.1.4.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/imgs/2.4.1.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/imgs/2.4.1.5.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/imgs/2.4.1.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/imgs/2.4.1.6.jpg -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/2.4 传感器标定/modify_log.txt -------------------------------------------------------------------------------- /ch02_硬件/2.4 传感器标定/readme.md: -------------------------------------------------------------------------------- 1 | # 传感器标定 2 | 3 | 在自动驾驶系统中,传感器是系统能感知周围环境的决定性因素。在传感器装车后,需要通过传感器标定消除安装误差,让自动驾驶系统准确定位各个传感器被安装在什么位置。传感器标定为后续建图、定位、感知和控制打下坚实基础,是自动驾驶系统稳定运行的核心部分与前置条件。标定的精度会影响传感器的使用上限精度,最终影响车辆的行驶状态。 4 | 5 | 从性质上说,传感器标定可以分为内参标定与外参标定。 6 | 7 | 内参标定主要与传感器有关,它可以通过建立传感器误差模型,获得传感器特性参数、消除传感器本身测量误差。 8 | 9 | 外参标定与安装位置有关,通过各种先验信息获取传感器在车身坐标系下的位姿。外参标定求解的主要问题取决于车辆坐标系的定义。 10 | 11 | - 如果车辆坐标系为车辆上的某一点,将车辆看作刚体,传感器标定解决的问题,即为固定车辆坐标系下传感器的位置确定。进一步,如果车辆坐标系即为车辆上的某个传感器坐标系。传感器外参标定问题即简化为多传感器外参标定问题。 12 | 13 | - 如果车辆坐标系为车辆自车地面上某一点。除了装车后的传感器位姿标定,还包含自车状态、以及环境变化影响下的传感器坐标系与车身坐标系间的外参变化问题。 -------------------------------------------------------------------------------- /ch02_硬件/README.md: -------------------------------------------------------------------------------- 1 |
2 | 2.1 硬件 3 |
4 | 5 | 自动驾驶硬件配置主要包含车、线控系统、传感器、计算单元等主要部分。车作为自动驾驶的载体,是自动驾驶车最基础的组成部分;而线控系统的性能好坏直接影响整车的可靠性、安全性、舒适性等,有别于传统汽车通过机械传动的方式控制汽车,线控系统通过电信号来控制汽车,这种方式显然更适合电脑控制。 6 | 7 | 要实现自动驾驶,还需要众多的传感器的加持,常见传感器包括激光雷达、摄像机、毫米波雷达、超声波雷达、GPS、IMU等。传感器是自动驾驶车的眼睛,负责感知外部环境。计算单元则是自动驾驶车的大脑,传感器获取的信息经过计算单元的计算之后,输出一条可以供汽车安全行驶的轨迹,控制汽车行驶。 8 | 9 | 硬件配置大致决定了一辆车的性能和品质,而自动驾驶车辆优先考虑的就是安全,由于各种传感器的加持,自然提高了整车制造成本,如何平衡成本和自动驾驶安全问题,是各大厂商需要面对的问题,这也是阻碍自动驾驶普及的重要原因之一。 10 | 11 | 本章我们将对常见的硬件逐个讲解,并分析其所使用场景,让大家对整车硬件有所了解。 -------------------------------------------------------------------------------- /ch02_硬件/imgs/2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/imgs/2.1.jpg -------------------------------------------------------------------------------- /ch02_硬件/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch02_硬件/modify_log.txt -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.1.1.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.1.10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.1.10.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.1.2.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.1.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.1.3.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.1.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.1.4.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.1.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.1.5.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.1.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.1.6.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.1.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.1.7.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.1.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.1.8.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.1.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.1.9.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.2.1.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.2.2.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.2.3.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.2.4.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.2.5.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/imgs/3.1.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/imgs/3.1.2.6.jpg -------------------------------------------------------------------------------- /ch03_感知/3.1 2D目标检测/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.1 2D目标检测/modify_log.txt -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.1.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.10.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.12.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.13.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.2.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.3.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.4.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.5.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.6.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.7.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.8.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/imgs/3.2.1.9.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.1 基于LiDAR的3D目标检测/modify_log.txt -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.1.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.10.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.11.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.12.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.13.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.14.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.15.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.16.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.17.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.2.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.3.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.4.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.5.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.6.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.7.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.8.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/imgs/3.2.2.9.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/3.2.2 基于摄像头的3D目标检测/modify_log.txt -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/imgs/3.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/imgs/3.2.1.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/imgs/3.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/imgs/3.2.2.jpg -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.2 3D目标检测/modify_log.txt -------------------------------------------------------------------------------- /ch03_感知/3.2 3D目标检测/readme.md: -------------------------------------------------------------------------------- 1 | # 3.2 3D目标检测 2 | 3 | ## 一、定义 4 | 5 | 3D目标检测是通过输入传感器数据,预测3D目标的属性信息的任务。如何表示3D目标的属性信息是关键,因为后续的预测和规划需要这些信息。大部分情况下,3D目标被定义为一个立方体,(x,y,z)是立方体的中心坐标,l,w,h是长宽高,delta是航向角,比如立方体在地平面的偏航角,class是3D目标的类别。vx、vy描述3D目标在地面上沿x轴和y轴方向的速度。在工业应用中,一个3D目标的参数可以进一步简化为鸟瞰图上一个长方体的4个角位置。 6 | 7 | 在感知任务中,3D目标检测是车辆感知系统中最不可或缺的任务之一。3D目标检测旨在预测3D空间中关键目标的位置、大小和类别,例如机动车、行人、骑自行车的人等。与仅在图像上生成2D边界框并忽略目标与本车的实际距离信息的2D目标检测相比,3D目标检测侧重于对真实世界3D坐标系中目标的定位和识别。3D目标检测在现实世界坐标中预测的几何信息可以直接用于测量本车与关键目标之间的距离,并进一步帮助规划行驶路线和避免碰撞。 8 | 9 | ## 二、传感器输入 10 | 11 | 许多类型的传感器都可以为3D目标检测提供原始数据,相机和激光雷达(LiDAR)是两种最常采用的传感器类型。相机价格便宜且易于使用,并且可以从某个角度捕捉场景信息。相机产生图像$I_{cam}\in{R^{W×H×3}}$用于3D目标检测,其中W和H是一幅图像的宽高,每个像素有3个RGB通道。尽管价格便宜,但相机在用于3D目标检测方面存在内在限制。首先,相机只捕捉外观信息,不能直接获取场景的3D结构信息。另一方面,3D目标检测通常需要在3D空间中进行准确定位,而从图像估计的3D信息(如深度信息)通常具有较大的误差。此外,基于图像的检测很容易受到极端天气和时间条件的影响。在夜间或雾天目标检测相比于晴天检测要困难得多,这样的自动驾驶系统无法保证鲁棒性。 12 | 13 | 作为替代解决方案,LiDAR可以通过发射一束激光束,然后测量其反射信息来获得场景的细粒度3D结构信息。一个LiDAR传感器在一个扫描周期内发射光束并进行多次测量可以产生一个深度图像,每个深度图的像素有3个通道,分别为球坐标系中的深度$\gamma$、方位角$\alpha$和倾角$\phi$。深度图像是激光雷达传感器获取的原始数据格式,可以通过将球坐标转换为笛卡尔坐标进一步转换为点云。一个点云可以表示为N×3,其中N表示一个场景中的点数,每个点有3个xyz坐标通道。附加功能,例如反射强度,可以附加到每个点或深度图像素。深度图像和点云都包含由LiDAR传感器直接获取的准确3D信息。因此,与相机相比,LiDAR传感器更适合检测3D空间中的目标,并且LiDAR传感器也更不易受时间和天气变化的影响。然而,LiDAR传感器比摄像头贵得多,这限制了在驾驶场景中的大规模应用。3D目标检测图解,见下图: 14 | 15 |
16 | 17 |
18 |
图1. 3D目标检测范例
19 | 20 | ## 三、与2D目标检测的比较 21 | 22 | 2D目标检测是计算机视觉中的一个基本问题,而3D目标检测方法借鉴了2D目标检测方法的许多设计范式,如 RPN、Anchors、NMS等。然而,从多方面来看,3D目标检测方法并不是2D目标检测方法对3D空间的简单适配。 23 | 24 | ### (1)3D目标检测方法必须处理多样化的数据 25 | 26 | 点云检测需要新的算子和网络来处理不规则的点数据,而点云和图像的检测需要特殊的融合机制。 27 | 28 | ### (2)3D目标检测方法通常利用不同的投影视图来生成目标预测结果 29 | 30 | 与从透视图检测目标的2D目标检测方法相反,3D方法必须考虑不同的视图来检测3D目标,例如鸟瞰图、点视图、柱面视图等。 31 | 32 | ### (3)3D目标检测对目标在3D空间的准确定位有很高的要求 33 | 34 | 分米级的定位误差可能导致对行人和骑自行车的人等小目标的检测失败,而在2D目标检测中,几个像素的定位误差可能仍然保持较高的IoU指标(预测值和真值的IoU)。因此,不论是利用点云还是图像进行3D目标检测,准确的3D几何信息都是必不可少的。 35 | 36 | ## 四、与室内3D目标检测对比 37 | 38 | 室内3D目标检测也是3D目标检测的一个分支,室内数据集比如SUN RGB-D,利用RGB-D和3D标注信息重建房间结构,包括门、窗、床、椅子等。室内场景中的3D目标检测也是基于点云或图像。然而,与室内3D目标检测相比,驾驶场景中存在独特的挑战。 39 | 40 | ### (1)自动驾驶场景的检测范围远大于室内场景 41 | 42 | 驾驶场景中的3D目标检测通常需要预测很大范围内的3D目标,如 Waymo中为150m×150m×6m,而室内3D目标检测通常以房间为单位,而其中大多数单人房间小于10m×10m×3m。那些在室内场景中工作的时间复杂度高的方法在驾驶场景中可能无法表现出好的适应能力。 43 | 44 | ### (2)LiDAR和RGB-D传感器的点云分布不同 45 | 46 | 在室内场景中,点在扫描表面上分布相对均匀,大多数3D目标在其表面上可以接收到足够数量的点。而在驾驶场景中,大多数点落在LiDAR传感器附近,而那些远离传感器的3D目标仅接收到少量点。因此,驾驶场景中的方法特别需要处理3D目标的各种点云密度,并准确检测那些遥远和稀疏的目标。 47 | 48 | ### (3)驾驶场景中的检测对推理延迟有特殊要求 49 | 50 | 驾驶场景中的感知必须是实时的,以避免事故。因此,这些方法需要及时高效,否则它们将无法落地。 51 | 52 | ## 五、数据集 53 | 54 | 自动驾驶3D目标检测相关数据集较多,具体见下表。主要的数据集建立需要继续干以下四件事: 55 | 56 | ### (1)增大数据规模 57 | 58 | ### (2)增加数据多样性,不只有白天夜晚,还要包括阴天、雨天、雪天、雾天等 59 | 60 | ### (3)增加标注类别,除了常用的机动车、行人、非机动车等,还应包括动物,路上的障碍物等 61 | 62 | ### (4)增加多模态数据,不只有点云和图像数据,还有高精地图、雷达数据、远程激光雷达、热成像数据等 63 | 64 | 未来的数据集应该包括感知、预测、规划、建图等一整套数据,这样可以为端到端的自动驾驶系统服务,而不仅仅是考虑一个3D目标检测任务。 65 | 66 |
67 | 68 |
69 |
图2. 3D目标检测范例
70 | 71 | ## 六、评价标准 72 | 73 | 针对3D目标检测的评价,一种是将2D任务的AP指标扩展到3D,比如KITTI就包括 $AP_{3D}$、$AP_{BEV}$指标,分别用到预测值与真值的3D-IoU、BEV-IoU来衡量。还有基于中心距离的匹配,或者匈牙利匹配等评测指标。另一种则通过下游任务来衡量,只有对下游任务(运动规划)有帮助的检测方法,才能在实际应用中确保驾驶安全。包括基于预测未来状态和真值KL散度的$PKL^{[1]}$以及物体边界与本车的最小距离误差的$SDE^{[2]}$等工作。 74 | 75 | 不同评价指标的利弊。基于AP的评价指标自然继承了2D检测的优势。然而,这些指标忽略了检测对驾驶安全的影响,而这在现实应用中至关重要。例如,在AP计算中,本车附近的目标漏检和本车远一点的目标漏检可能都只是一个漏检,但在实际应用中,近处的目标漏检实质上比远处的目标漏检更危险。 76 | 77 | 因此,从安全驾驶的角度来看,基于AP的指标可能不是最优选择。PKL和SDE通过考虑下游任务中检测的影响,部分解决了这个问题,但在对这些影响建模时将引入额外的挑战。PKL需要一个预先训练的运动规划器来评估检测性能,但预先训练的规划器也有固有误差,可能会使评估过程不准确。SDE需要重构目标边界,这通常是复杂和具有挑战性的。 78 | 79 | 80 | **参考文献** 81 | 82 | [1] Philion J., Kar A., Fidler S. (2020) Learning to evaluate perception models using 83 | planner-centric metrics. In: CVPR \ 84 | [2] Deng B., Qi C. R., Najibi M., Funkhouser T., Zhou Y., Anguelov D. (2021) Revisiting 85 | 3d object detection from an egocentric perspective. NeurIPS \ 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /ch03_感知/3.3 BEV/README.md: -------------------------------------------------------------------------------- 1 | # BEV 鸟瞰图 2 | 3 | BEV是鸟瞰图(Bird's Eye View)的简称,也被称为上帝视角,是一种用于描述感知世界的视角或坐标系(3D),BEV也用于代指在计算机视觉领域内的一种端到端的、由神经网络将视觉信息,从图像空间转换到BEV空间的技术。 4 | 5 | ## 一、基于传统方法的 BEV 空间转换 6 | 7 | 传统方法的BEV空间转换方法,一般是先在图像空间对图像进行特征提取,生成分割结果,然后通过IPM(Inverse Perspective Mapping,逆透视变换)函数转换到BEV空间。 8 | 9 | 在前视摄像头拍摄的图像中,由于透视效应现象(想象从一个点去看世界,透视效应会呈现出近大远小的观察结果)的存在,本来平行的事物(比如车道线),在图像中却不平行。IPM就是利用相机成像过程中的坐标系转化关系,对其原理进行抽象和简化,得到真实世界坐标系和图像坐标系之间坐标的对应关系,并进行公式化描述,从而消除这种透视效应,所以叫做逆透视变换。 10 | 11 |
12 | 13 |
14 |
图1. 车道线的逆透视变换(IPM)
15 | 16 | IPM是一种连接图像空间和BEV空间的简单直接的方法,只需要知道相机内外参数就可以。相机内参数,指的是与相机自身特性相关的参数,比如焦距、像素大小等,而相机外参数则是相机在真实世界坐标系中的参数,比如相机的安装位置、旋转方向等。 17 | 18 | 需要注意的是,IPM依赖一些预先的假设,比如地面平直性假设(地面要是平的),且相机和地面之间没有相对运动(车辆的俯仰角不变)。 19 | 20 | 很多时候这个假设太严苛了,很难满足,比如在颠簸道路上,或者在车辆加速或减速产生俯仰时,系统对目标物的感知结果波动非常大,会产生“忽近忽远”的跳变,平行的车道线,这时也会变成“内八”或者“外八”。 21 | 22 | 于是就有了改进方案,那就是将相机的实时位姿考虑进来,加上俯仰角的修正补偿后,再进行空间转换。改进后虽然效果有所改善,但是实时位姿也很难准确得到,所以效果并不理想。 23 | 24 | ## 二、基于深度学习的 BEV 空间转换 25 | 26 | 这两年,深度学习也开始被应用于BEV空间转换,且逐渐成为主流方案。 27 | 28 | 相比于依赖人为规则,使用神经网络从2D空间进行BEV空间转换,能够取得更好的感知效果。 29 | 30 | 具体的流程是,先通过一个共享的主干网络(Backbone)来提取每个相机的特征(feature),然后再通过Transformer等将多摄像头数据,完成从图像空间到BEV空间的转换。在BEV空间内,由于坐标系相同,可以很方便地将图像数据和其他传感器数据(如Lidar、Radar等)进行融合,还可以进行时序融合形成4D空间,这也是当下BEV技术的大趋势。 31 | 32 |
33 | 34 |
35 |
图2. 基于BEV时空融合的3D目标检测
36 | -------------------------------------------------------------------------------- /ch03_感知/3.3 BEV/imgs/3.3.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.3 BEV/imgs/3.3.1.jpg -------------------------------------------------------------------------------- /ch03_感知/3.3 BEV/imgs/3.3.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.3 BEV/imgs/3.3.2.jpg -------------------------------------------------------------------------------- /ch03_感知/3.3 BEV/imgs/3.3.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.3 BEV/imgs/3.3.3.jpg -------------------------------------------------------------------------------- /ch03_感知/3.3 BEV/imgs/3.3.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.3 BEV/imgs/3.3.4.jpg -------------------------------------------------------------------------------- /ch03_感知/3.3 BEV/imgs/3.3.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.3 BEV/imgs/3.3.5.jpg -------------------------------------------------------------------------------- /ch03_感知/3.3 BEV/imgs/3.3.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.3 BEV/imgs/3.3.6.jpg -------------------------------------------------------------------------------- /ch03_感知/3.3 BEV/imgs/3.3.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.3 BEV/imgs/3.3.7.jpg -------------------------------------------------------------------------------- /ch03_感知/3.3 BEV/imgs/3.3.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.3 BEV/imgs/3.3.8.jpg -------------------------------------------------------------------------------- /ch03_感知/3.3 BEV/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.3 BEV/modify_log.txt -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/imgs/3.4.2.0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/imgs/3.4.2.0.jpg -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/imgs/3.4.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/imgs/3.4.2.1.jpg -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/imgs/3.4.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/imgs/3.4.2.2.jpg -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/imgs/3.4.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/imgs/3.4.2.3.jpg -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/imgs/3.4.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/imgs/3.4.2.4.jpg -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/imgs/3.4.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/imgs/3.4.2.5.jpg -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/imgs/3.4.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/imgs/3.4.2.6.jpg -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/imgs/3.4.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/imgs/3.4.2.7.jpg -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/imgs/3.4.2.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/imgs/3.4.2.8.jpg -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/imgs/3.4.2.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/imgs/3.4.2.9.jpg -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/3.4 Occupany Network/modify_log.txt -------------------------------------------------------------------------------- /ch03_感知/3.4 Occupany Network/readme.md: -------------------------------------------------------------------------------- 1 | # Occupany Network 2 | 3 | ## 一、简介 4 | 5 | 网格中心感知是移动机器人感知和导航的关键领域。尽管如此,在自动驾驶中,网格中心感知不如目标中心感知更为普遍,因为自动驾驶车辆需要准确地感知高度动态、大规模的室外交通场景,并且以网格为中心的感知的复杂性和计算成本很高。深度学习技术和硬件的快速发展为Grid-Centric 感知的发展提供了新的见解,并使许多实时算法得以部署。当前的工业和学术研究证明了网格中心感知的巨大优势,如全面的细粒度环境表示、对遮挡的更强鲁棒性、更高效的传感器融合和更安全的规划策略。鉴于目前缺乏对这一快速扩展领域的调查,本文对自动驾驶汽车的网格中心感知进行了分层结构审查。组织了occupancy grid 技术的先前和当前work,并从三个方面对算法进行了系统深入分析:特征表示、数据实用性和自动驾驶系统中的应用。最后总结了当前的研究趋势,并提出了一些可能的未来展望。 6 | 7 | 自动驾驶汽车的安全运行要求准确、全面地反映周围环境,由3D目标检测、多目标跟踪和轨迹预测组成的以目标为中心的pipeline是主要的3D汽车感知模块。然而,以object为中心的技术在目标的形状或外观不明确的开放世界交通场景中可能会失败。这些障碍物也称为长尾障碍物,包括可变形的障碍物,如两节拖车;异形障碍物,如翻车的车辆;未知类别的障碍物,如道路上的碎石、垃圾;部分遮蔽的物体等。因此,迫切需要对这些长尾问题进行更稳健的表示,网格中心感知被认为是一个很有前途的解决方案,因为它能够在不知道物体的情况下提供3D周围空间中任何位置的占用和运动。这一领域受到了很多关注,最近的进展表明,它仍然是自动驾驶汽车中最有前途和最具挑战性的研究课题之一,为此,我们打算对网格中心感知技术进行全面的回顾。 8 | 9 | 网格地图已被广泛认为是移动机器人和自动驾驶车辆安全导航的必要先决条件,从完善的占用网格图(OGM)开始,将周围区域划分为统一的网格单元。每个单元格的值代表占用率的conf,这对于避免碰撞至关重要且有效。随着深度神经网络的发展,以网格为中心的方法正在快速发展,现在比传统的OGM更全面地理解语义和运动。总之,现代以网格为中心的方法能够预测每个网格单元的占用率、语义类别、未来运动位移和实例信息。以网格为中心的方法的输出是真实世界规模的,固定在自我姿态坐标上。通过这种方式,以网格为中心的感知成为支持下游驾驶任务(如风险评估和车辆轨迹规划)的重要前提! 10 | 11 | 与基于目标的表示相比,基于网格的表示的显著优势如下:对障碍物的几何形状或语义类别不敏感,对遮挡的抵抗力更强;理想的多模态传感器融合,作为不同传感器对齐的统一空间坐标;鲁棒不确定性估计,因为每个单元存储不同障碍物存在的联合概率。然而,以网格为中心的感知的主要缺点是高复杂性和计算负担。 12 | 13 | -------------------------------------------------------------------------------- /ch03_感知/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch03_感知/modify_log.txt -------------------------------------------------------------------------------- /ch04_定位/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch04_定位/modify_log.txt -------------------------------------------------------------------------------- /ch04_定位/readme.md: -------------------------------------------------------------------------------- 1 | # 定位 2 | 3 | 自动驾驶汽车的环境感知还包括汽车的精准定位,不仅需要获取车辆与外界环境的相对位置关系,还需要通过车身状态感知确定车辆的绝对位置与方位,即 “我在哪?”的问题。 4 | 5 | 目前自动驾驶领域常见的几种精准定位方式包括惯性导航系统、轮速编码器与航迹推算、卫星导航系统以及SLAM自主导航系统等。 6 | 7 | ## 一、惯性导航系统 8 | 9 | 以陀螺和加速度计为敏感器件的导航参数解算系统,通过测量运动载体的线加速度和角速率数据,并将这些数据对时间进行积分运算,从而得到速度、位置和姿态。 10 | 11 | 具体来说惯性导航系统属于一种推算导航方式。即从一已知点的位置根据连续测得的运载体航向角和速度推算出其下一点的位置,因而可连续测出运动体的当前位置。 12 | 13 | 以百度Apollo自动驾驶技术使用的惯性导航系统为例,其采用了松耦合的方式,并采用了一个误差Kalman滤波器。 14 | 15 | 惯性导航解算的结果用于Kalman滤波器的时间更新,即预测; 而GNSS、点云定位结果用于Kalman滤波器的量测更新。Kalman滤波会输出位置、速度、姿态的误差用来修正惯导模块,IMU期间误差用来补偿IMU原始数据。 16 | 17 | ## 二、轮速编码器与航迹推算 18 | 19 | 通过轮速编码器推算出自动驾驶汽车的位置。轮速编码器主要安装在汽车前轮,用于记录车轮行驶的总转数。通过分析每个时间段里左右轮的转数,可以推算出车辆向前行驶的距离和左右的偏转度。不过,由于在不同地面材质上转数对距离转换存在偏差,所以时间越久,测量偏差也会越大,这种定位方式更多以辅助的形式存在。 20 | 21 | ## 三、卫星导航系统 22 | 23 | 主要包括中国的北斗卫星导航系统、美国的GPS卫星导航系统以及俄罗斯的GLONASS卫星导航系统。这些导航系统可以提供高精度的定位服务。 24 | 25 | ## 四、SLAM(即时定位与地图构建),也称为CML(并发建图与定位) 26 | 27 | 目前主流有两种SLAM方式。第一种是基于激光雷达的SLAM,以谷歌汽车为例。车辆携带有GPS,通过GPS 对位置进行判断,并以激光雷达SLAM点云图像与高精度地图进行坐标配准,匹配后确认自身位姿。 28 | 29 | 第二种是基于视觉的SLAM,以Mobileye为例。Mobileye提出一种无需SLAM的定位方法——REM。车辆通过采集包括信号灯、指示牌等标识,得到了一个简单的三维坐标数据,再通过视觉识别车道线等信息,获取一个一维数据。摄像机中的图像与 REM 地图中进行配准,即可完成定位。 30 | 31 | 目前,SLAM常用于自主导航,特别是在GPS无信号或不熟悉的地区的导航。 -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/5.1.1 基于车道序列的预测.md: -------------------------------------------------------------------------------- 1 | # 基于车道序列的预测 2 | 3 | ## 一、建立车道线序列 4 | 5 | 为了建立车道序列,首先将道路分成多个部分,每一部分都覆盖了一个易于描述车辆运动的区域。比如如图是一个部分区域的十字路口。为了预测,我们更关心车辆如何在这些区域内转换,而不是在某个区域内的具体行为。可以将车辆的行为划分为一组有限的模式组合并将这些模式组合描述为车道序列,例如直行汽车的运动可以描述为车道序列是 0-1-3-7。 6 | 7 |
8 | 9 |
10 |
图1. 建立车道线序列
11 | 12 | ## 二、 目标车辆状态 13 | 14 | ### (一)目标车辆行驶状态: 15 | 16 | 为了预测目标车辆的运动需要知道物体的状态,如:朝向、位置、速度、加速度等。 17 | 18 |
19 | 20 |
21 |
图2. 目标车辆行驶状态
22 | 23 | ### (二)所处车道段内位置: 24 | 25 | 例如预测模块会考虑从物体到车道线段边界的纵向和横向距离,还包含之前时间间隔的状态信息以便做出更准确的预测。 26 | 27 |
28 | 29 |
30 |
图3. 所处车道段内位置
31 | 32 | ## 三、预测目标车道 33 | 34 | 使用车道序列框架的目标是为道路上的物体生成轨迹。先从一个稍微简单的问题开始,会预测车道线段之间的过渡。假设在车道段0中检测到一辆车,并且会预测在接下来的几个时间段中它将如何行驶,它可能停留在车道段0然后向右转或者可能转向车道段1然后直行,我们已经将预测问题简化为选择问题。 35 | 36 |
37 | 38 |
39 |
图4. 预测目标车道
40 | 41 | 现在所要做的就是选择车辆最有可能采取的车道顺序,可以通过计算每个车道序列的概率来进行选择。将车辆状态和车道段作为输入,该模型用于提供车辆可能采用每个车道序列的概率,希望模型能够学习新的行为因此应该使用观测数据对模型进行经验性训练,在训练中将真实的车辆行为提供给模型,不仅包括车道段和对象的状态,还包括对象最终选择哪条车道序列。随着记录随着时间的增加,模型可以自我迭代更新,精确度不断提升。每个记录将由观察对象跟随的车道段序列和对象的相关状态组成,在每个时间点,对象占用一段并具有特定的状态,整个记录由一系列车道段和对象的相关状态组成。 42 | 43 |
44 | 45 |
46 |
图5. 基于模型概率
47 | 48 | ## 四、 递归神经网络在目标车道预测的应用 49 | 50 | 为相关对象状态提供另一个RNN模型。连接这两个RNN的输出并将它们馈送到另一个神经网络,该神经网络会估计每个车道序列的概率,具有最高概率的车道序列是我们预测目标车辆将遵循的序列。为了训练这个网络,使用现有的记录,每条记录都包含一个车道序列、相关的对象状态、一个标签,用于指示对象是否遵循此特定车道序列。在训练中,比较网络输出和真值标记并使用反向传播来训练网络。 51 | 52 |
53 | 54 |
55 |
图6. 基于递归神经网络
56 | 57 | ## 五、 轨迹生成 58 | 59 | 轨迹生成是预测的最后一步,一旦我们预测到物体的车道序列,就可以预测物体的轨迹。在任何两点A和B之间,物体的行进轨迹有无限的可能。 60 | 61 |
62 | 63 |
64 |
图7. 轨迹生成
65 | 66 | 如何预测最有可能的轨迹?可以先通过设置约束条件来去除大部分候选轨迹,首先假定汽车将与目标车道的中心对齐,继续去除车辆无法实际执行的轨迹。通过考虑车辆当前的速度和加速度从剩余的轨迹中进行选择,实际上我们并没有实际列出所有可能的轨迹并逐一去除它们。 67 | 68 | 相反只是在数学理论上来应用这一想法,注意车辆在两点的位置和方位,这两个姿势表示运动模型的初始状态和最终状态,可以使用这两个条件来拟合一个多项式模型,在大多数情况下这种多项式足以进行预测。 69 | -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/imgs/4.1.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.1 预测/imgs/4.1.1.1.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/imgs/4.1.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.1 预测/imgs/4.1.1.2.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/imgs/4.1.1.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.1 预测/imgs/4.1.1.3.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/imgs/4.1.1.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.1 预测/imgs/4.1.1.4.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/imgs/4.1.1.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.1 预测/imgs/4.1.1.5.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/imgs/4.1.1.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.1 预测/imgs/4.1.1.6.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/imgs/4.1.1.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.1 预测/imgs/4.1.1.7.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/imgs/4.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.1 预测/imgs/4.1.1.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/imgs/4.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.1 预测/imgs/4.1.2.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.1 预测/modify_log.txt -------------------------------------------------------------------------------- /ch05_策略规划/5.1 预测/readme.md: -------------------------------------------------------------------------------- 1 | 2 | # 4.1 预测 3 | 4 | 无人车是在许多物体间穿梭行驶,其中许多物体本身就是一直在移动的,比如像其他汽车、自行车、行人。无人车需要预测这些物体的行为,这样才能确保做出最佳决策。在环境中为所有其他的物体做出预测,这些共同形成了在一段时间内的预测路径,在每一个时间段内会为每一辆汽车重新计算预测他们新生成的路径,这些预测路径为无人车在规划阶段做出决策提供了必要信息。 5 | 6 | 预测路径有实时性的要求,实时性是指算法的延迟越短越好,一辆车如果是60千米/小时速度,那么它在每0.25秒会行驶5米,所以需要确保无人车在行驶之前,前方5米没有任何障碍物并且可以安全地穿行。 7 | 8 |
9 | 10 |
11 | 12 | 下一个目标是准确性。如果预测出相邻多车道的汽车想并入我们的车道,我们需要减速。而另一种情况是如果预测它会保持在自己的车道上行驶,我们需要做出的预测尽可能保持准确,这样才能帮助我们无人车做出很好的决策。 13 | 14 | 预测模块也应该能够学习新的行为,当路上有很多车辆,情况将变得复杂。开发出每种场景的静态模型是不可能完成的任务,所以预测模块能够学习新的行为,用这种方式可以使用多源的数据进行训练,使算法随着时间的推移而提升预测能力。 15 | 16 |
17 | 18 |
19 | 20 | CNN根据其任务查找真正需要的特征,任务可能是图像检测、分类、分割、其他类型的目标。 21 | -------------------------------------------------------------------------------- /ch05_策略规划/5.2 路线规划/README.md: -------------------------------------------------------------------------------- 1 | # 路线规划 2 | 3 | ## 一、原理 4 | 5 | 当人们试图在地图上找到从A到B的路线时,通常会沿着道路追踪路径,以查看是否存在通往目的地的任何路径,这被称为搜索。在进行智能搜索算法以前,我们需要将地图数据重新格式化为“图形”的数据结构。 6 | 7 | 该图形由“节点”(node)和“边缘”(edge)组成。节点代表路段,边缘代表这些路段之间的连接。例如:在交叉路口,汽车可从节点1移动到节点2、节点3或节点4,反之亦然。 8 | 9 |
10 | 11 |
12 |
图1. 地图转图形
13 | 14 | 我们可以对一个节点移动到另一个节点所需的成本进行建模。例如在现实生活中,拐过一个交叉路口比直行更费劲,所以从节点1到节点4的成本高于从节点1到节点3的成本。 将地图转换为图形的好处在于,在计算机科学领域中,人们已发现许多用于在图形中查找路径的快速算法(下一节中会详细介绍)。一旦我们在图形中找到了一条好路径,就可以轻松地将图形中的路径重新转换为地图上的路径。 15 | 16 | ## 二、路径查找算法 A* 17 | 18 | A* 是经典的路径查找处理算法。在本节中,我们将演示A* 如何通过网格进行工作。我们把网格中的每个单元格当作一个节点。并且规定能够从任何一个节点移动到与其相邻的任意节点。这个特殊网格还包含一些阻挡潜在路径的墙壁(下图中的灰色部分)。 19 | 20 |
21 | 22 |
23 |
图2. 障碍设置
24 | 25 | 对人类来说,通过查看图形便可以轻易找出最佳路径。但对于计算机而言,这并不明显。计算机必须确认是否存在通往目的地的路径,并竭尽所能地尝试所有可能的路径来从其中选出最优路径。但是,这需要耗费大量的时间,尤其是在地图非常大的时候。从任何给定的节点来看,最多有8个用于下一步的选项,因为存在8个相邻的单元格。对于8个中的每一个选项,下一步又有另外8个选项。如果我们展开所有节点,搜索量将暴增至即使最快的计算机也无法处理的程度。 26 | 27 |
28 | 29 |
30 |
图3. 路径查找
31 | 32 | 下面我们将展示A*算法的详细过程(如下图):从初始节点开始,我们需要确定8个相邻节点中,哪个是最有希望的候选节点。对于每个候选节点,我们考虑两件事情。首先,我们计算从开始节点到候选节点的成本。然后,我们估计从候选节点前往目的地的成本。计算前往候选节点的成本很容易,因为它已经与我们相邻。计算从候选节点到目的地的成本很困难。但是,通过简单计算从候选节点到目的地的距离,我们通常可以做出很好的估计。 33 | 34 | 我们用变量g和h表示每个成本。g值为开始节点前往候选节点的成本,h值为候选节点前往目的地的估计成本或启发式成本。根据我们的具体情况,我们可以自定义成本估算方式。例如,交通堵塞会增加前往目的地的成本,所以交通繁忙的路径具有更高的成本。对于每个候选节点,我们通过添加g值和h值来计算总和,即f值。最佳候选节点是f值最小的节点。每当我们抵达新节点时,我们通过重复此过程来选择下一个候选节点,而且总是选择我们尚未访问过且具有最小f值的节点。这就是A* 算法,它建立了一条稳定前往目的地的路径。 35 | 36 |
37 | 38 |
39 |
图4. 候选节点
40 | 41 | 现在我们来考虑一下现实世界中的地图。 42 | 43 |
44 | 45 |
46 |
图5. 十字路口
47 | 48 | 假设我们到达了一个交叉路口,我们可以沿着公路直走、左转或右转。首先,我们将把这张地图转换为具有三个候选节点(left,straight,right)的图形。接下来,我们将对选项进行评估。在实践中,拐过交叉路口很费劲,所以我们为left节点分配了更高的g值(g值表示从起始点到候选节点的成本)。在查看公路选项之后,我们意识到必须走很长的路,才能离开公路并返回我们的目标,所以我们为straight选项分配了更高的h值(h值表示从候选节点到目的地的估计成本)。最后,我们通过将g值和h值相加来计算每个节点的f值。我们看到最低f值实际对应右边的候选节点。所以,这是我们接下来要前往的节点。 49 | 50 | ## 三、轨迹生成 51 | 52 | 高等级地图路线只是规划过程中的一部分,我们仍需要构建沿这条路线前进的低等级轨迹。这意味着要处理一些不属于地图的物体:如其他车辆、自行车或行人。例如,我们可能需要与试图在我们前面掉头的汽车互动,或者我们可能希望超过一辆在公路上行驶的慢车。这些场景需要更低级别、更高精确度的规划。我们将这一级别的规划称为轨迹生成。 53 | 54 |
55 | 56 |
57 |
图6. 轨迹生成
58 | 59 | 轨迹生成的目标是生成一系列路径点所定义的轨迹。我们为每个路径点分配了一个时间戳和速度。由于移动的障碍物可能会暂时阻挡部分路段,轨迹中的每个路径点都有时间戳。我们可以将时间戳与预测模块的输出相结合,以确保我们计划通过时,轨迹上的每个路径点均未被占用。这些时间戳和空间上的两个维度(2D position)共同创建了一个三维轨迹(3D Trajectory)。我们还为每个路径点指定了一个速度,用于确保车辆按时到达每个路径点。 60 | 61 |
62 | 63 |
64 |
图7. 路径点
65 | 66 | 现实世界中的规划面临多种约束。首先轨迹应能免于碰撞,这意味着必须没有障碍物。其次,要让乘客感到舒适,所以路径点之间的过渡以及速度的任何变化都必须平滑。再者,路径点对车辆应实际可行,例如高速行驶的汽车不能立即做180度转弯。我们不能构建包含这种不可行机动的轨迹。最后,轨迹应合法。我们需要了解每个路径点的交通法律,并确保轨迹遵守这些法律法规。 67 | 68 | 在道路的任何两点,可能会有多个不会发生碰撞、行驶舒适、可行且合法的轨迹。我们如何选择最佳轨迹呢?答案是使用“成本函数”。成本函数为每个轨迹分配了一个“成本”,我们选择成本最低的轨迹。轨迹“成本”由各种犯规处罚组成,例如:偏离道路中心,有可能产生碰撞,速度限制,轨迹的曲率和加速度让乘客感到不舒服等。 69 | 70 |
71 | 72 |
73 |
图8. 轨迹决策
74 | 75 | 轨迹成本将所有这些缺陷聚合为单个数字,这使我们能对不同的轨迹按数字大小进行排名。车辆甚至可能在不同的环境中使用不同的成本函数。例如,高速路的成本函数可能与停车场的不同。 76 | -------------------------------------------------------------------------------- /ch05_策略规划/5.2 路线规划/imgs/4.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.2 路线规划/imgs/4.2.1.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.2 路线规划/imgs/4.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.2 路线规划/imgs/4.2.2.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.2 路线规划/imgs/4.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.2 路线规划/imgs/4.2.3.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.2 路线规划/imgs/4.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.2 路线规划/imgs/4.2.4.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.2 路线规划/imgs/4.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.2 路线规划/imgs/4.2.5.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.2 路线规划/imgs/4.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.2 路线规划/imgs/4.2.6.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.2 路线规划/imgs/4.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.2 路线规划/imgs/4.2.7.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.2 路线规划/imgs/4.2.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.2 路线规划/imgs/4.2.8.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.2 路线规划/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.2 路线规划/modify_log.txt -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/5.3.1 笛卡尔坐标下的规划.md: -------------------------------------------------------------------------------- 1 | # 笛卡尔坐标下的规划 2 | 3 | ## 一、路径-速度解耦规划 4 | 5 | 路径-速度解耦规划将轨迹规划分为两步:路径规划、速度规划。首先在路径规划步骤中生成候选曲线,这是车辆可行驶的路径。使用成本函数对每条路径进行评估,该函数包含平滑度、安全性、与车道中心的偏离以及开发者想要考虑的其他任何因素。然后按成本对路径进行排名并选择成本最低的路径。 6 | 7 | 下一步是确定沿这条路线行进的速度。我们可能希望改变在该路径上的速度,所以真正需要选择的是与路径点相关的一系列速度,而不是单个速度。我们将该序列称作“速度曲线”。我们可以使用优化功能为路径选择受到各种限制的良好速度曲线。通过将路径和速度曲线相结合可构建车辆行驶轨迹。 8 | 9 | ## 二、路径生成与选择 10 | 11 | 为了在路径-速度解耦规划中生成候选路径,首先将路段分割成单元格。然后对这些单元格中的点进行随机采样。通过从每个单元格中取一个点并将点连接,我们创建了候选路径。通过重复此过程可以构建多个候选路径。使用成本函数对这些路径进行评估并选择成本最低的路径,成本函数可能考虑以下因素:与车道中心的偏离、与障碍物的距离、速度和曲率的变化、对车辆的压力、或希望列入的任何其他因素。 12 | 13 |
14 | 15 |
16 |
图1. 路径生成与选择
17 | 18 | ## 三、ST图 19 | 20 | 选择路径后的下一步是选择与该路径关联的速度曲线,一个被称为“ST 图”的工具可以帮助设计和选择速度曲线。在ST图中,“s”表示车辆的纵向位移、“t”表示时间。ST 图上的曲线是对车辆运动的描述,因为它说明了车辆在不同时间的位置。由于速度是位置变化的速率,所以可以通过查看曲线的斜率从 ST 图上推断速度。斜坡越陡则表示在更短的时间段内有更大的移动,对应更快的速度。 21 | 22 |
23 | 24 |
25 |
图2. ST图
26 | 27 | ## 四、速度规划 28 | 29 | 为构建最佳速度曲线需要将 ST 图离散为多个单元格。单元格之间的速度有所变化,但在每个单元格内速度保持不变,该方法可简化速度曲线的构建并维持曲线的近似度。在 ST 图中可以将障碍物绘制为在特定时间段内阻挡道路的某些部分的矩形。例如,假设预测模块预测车辆将在 t0 到 t1 的时间段内驶入的车道。由于该车将在此期间占据位置 s0 到 s1,因此在 ST 图上绘制了一个矩形,它将在时间段 t0 到 t1 期间阻挡位置 s0 到 s1。为避免碰撞,速度曲线不得与此矩形相交。既然有了一张各种单元格被阻挡的 ST 图,便可以使用优化引擎为该图选择最佳的速度曲线。优化算法通过复杂的数学运算来搜索受到各种限制的低成本解决方案。这些限制可能包括:法律限制,如速度限制;距离限制,如与障碍物的距离;汽车的物理限制,如加速度限制。 30 | 31 |
32 | 33 |
34 |
图3. 速度规划
35 | 36 | ## 五、优化 37 | 38 | 路径-速度解耦规划在很大程度上取决于离散化。路径选择涉及将道路划分为单元格,速度曲线构建涉及将 ST 图划分为单元格。尽管离散化使这些问题更容易解决,但该解决方案生成的轨迹并不平滑。 39 | 40 |
41 | 42 |
43 |
图4. 优化
44 | 45 | 为了将离散解决方案转换为平滑轨迹,可使用“二次规划”技术(Quadratic Programming)。二次规划将平滑的非线性曲线与这些分段式线性段拟合。尽管二次规划背后的数学运算很复杂,但对于我们的目的而言,细节并不是必需的。我们只需简单使用几种不同的优化包中的一种,包括一种由 Apollo 推出的运行方案来生成平滑的轨迹,一旦路径和速度曲线就绪,便可以用其构建三维轨迹。 46 | 47 | ## 六、路径-速度规划的轨迹生成 48 | 49 | 回顾一下端到端路径-速度解耦规划。假设我们正在路上行驶,感知系统观察到一辆缓慢行驶的车辆离我们越来越近。首先,在这辆车的周围生成多条候选路线,使用成本函数对这些候选路径进行评估并选择成本最低的路径。然后使用 ST 图来进行速度规划,根据其他车辆随时间变化的位置阻挡了 ST 图的部分区域。优化引擎可帮助确定该图的最佳速度曲线,该曲线受制于约束和成本函数。我们可以使用二次规划让路径和速度曲线变平滑。最后,将路径和速度曲线合并构建轨迹。这里的轨迹在速度较快时为红色,在速度较慢时为蓝色。我们使用该轨迹来安全地绕开其他车辆并继续我们的旅程。 50 | 51 |
52 | 53 |
54 |
图5. 轨迹生成
-------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/5.3.2 Lattice规划.md: -------------------------------------------------------------------------------- 1 | # Lattice规划 2 | 3 | ## 一、基本原理 4 | 5 | Lattice 规划通过使用Frenet坐标可以将环境投射到纵轴和横轴上,目标是生成三维轨迹:纵向维度、横向维度、时间维度。 6 | 7 | 可以将三维问题分解成两个单独的二维问题,这是通过分离轨迹的纵向和横向分量来解决的。其中一个二维轨迹是具有时间戳的纵向轨迹称之为ST轨迹,另一个二维轨迹是相对于纵向轨迹的横向偏移称之为SL轨迹。 8 | 9 |
10 | 11 |
12 |
图1. 分离轨迹
13 | 14 | Lattice 规划具有两个步骤即先分别建立ST和SL轨迹,然后将它们合并为生成纵向和横向二维轨迹。先将初始车辆状态投射到ST坐标系和SL坐标系中,通过对预选模式中的多个候选最终状态进行采样。来选择最终车辆状态。对于每个候选最终状态构建了一组轨迹将车辆从其初始状态转换为最终状态,使用成本函数对这些轨迹进行评估并选择成本最低的轨迹。 15 | 16 |
17 | 18 |
19 |
图2. 分别优化ST、Sl轨迹
20 | 21 | ## 二、ST轨迹的终止状态 22 | 23 | 根据情况可以将状态分成3组:巡航、跟随、停止。巡航意味着车辆将在完成规划步骤后定速行驶,实际上在对图上的点进行采样,在图中横轴代表时间,纵轴代表速度。对于该图上的点,这意味着汽车将进入巡航状态,在时间t以s点的速度巡航,对于这种模式,所有最终状态的加速度均为零。 24 | 25 |
26 | 27 |
28 |
图3. 巡航状态
29 | 30 | 下一个要考虑的模式为跟随车辆,在这种情况下要对位置和时间状态进行采样,并尝试在时间t出现在某辆车后面,在跟随车辆时,需要与前方的车保持安全距离,这时速度和加速度将取决于要跟随的车辆,这意味着在这种模式下,速度和加速度都会进行修正。 31 | 32 |
33 | 34 |
35 |
图4. 跟随状态
36 | 37 | 最后一种模式是停止,对于这种模式只需对汽车何时何地停止进行抽样,这里速度和加速度会被修正为 0 。 38 | 39 |
40 | 41 |
42 |
图5. 停止状态
43 | 44 | ## 三、SL轨迹的终止状态 45 | 46 | 根据这样一个假设来进行SL 规划,即无论车辆进入怎样的终止状态,车辆都应该稳定地与车道中心线对齐。这意味着只需要在一个小区域内,对横向终止位置进行采样。具体来说采样的是道路上相邻车道中心线周围的位置。为了确保稳定性,汽车驶向的终止状态应该与车道中心一致。当用横向位置与纵向位置作图时,想要的候选轨迹应该以车辆与车道对齐并直线行驶而结束。为了达到这种终止状态,车的朝向和位置的一阶和二阶导数都应该为零。这意味着车辆既不是横向移动的,那是一阶导数;也不是横向加速,那是二阶导数。这意味着车辆正沿着车道直行。 47 | 48 |
49 | 50 |
51 |
图6. SL轨迹的终止状态
52 | 53 | ## 四、Lattice规划的轨迹生成 54 | 55 | 一旦同时拥有了 ST 和 SL 轨迹,就需要将它们重新转换为笛卡尔坐标系。然后可以将它们相结合构建由二维路径点和一维时间戳组成的三维轨迹。ST轨迹是随时间变化的纵向位移,SL轨迹是纵向轨迹上每个点的横向偏移。由于两个轨迹都有纵坐标S,所以可以通过将其 S 值进行匹配来合并轨迹。 56 | 57 |
58 | 59 |
60 |
图7. 轨迹合并
-------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.1.1.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.1.2.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.1.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.1.3.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.1.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.1.4.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.1.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.1.5.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.1.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.2.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.3.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.4.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.5.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.6.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/imgs/4.3.2.7.jpg -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/5.3 轨迹规划/modify_log.txt -------------------------------------------------------------------------------- /ch05_策略规划/5.3 轨迹规划/readme.md: -------------------------------------------------------------------------------- 1 | # 4.3 轨迹规划 2 | 3 | 全局路径由一系列路径点构成,这些路径点只要包含空间位置信息即可,也可以包含姿态信息,但是不需要与时间相关,这些路径点被称为全局路径点。路径(Path)和轨迹(Trajectory)的区别就在于,轨迹还包含了时间信息,轨迹点也是一种路径点,它在路径点的基础上加入了时间约束。 -------------------------------------------------------------------------------- /ch05_策略规划/README.md: -------------------------------------------------------------------------------- 1 | # 策略规划 2 | 3 | 路径规划是指通过一定的规则,找到一条通过世界的路径来达到我们想去的地方。规划的第一步是路线导航,侧重于研究如何从地图上的A点前往B点。在路线导航时,将地图数据作为输入,并输出可行驶路径。手机导航系统是路线导航的一个示例。在Apollo中,可以通过路线规划模块处理该任务。一旦我们构建出高水平的路线,我们就会放大至轨迹规划。该轨迹由一系列点定义,每个点都有一个关联速度和一个指示何时应抵达那个点的时间戳。通过轨迹规划,我们可以做出微妙的决策,以避开障碍物,并为乘客创造平稳的乘车体验。路线规划的目标是,找到从地图上的A前往B的最佳路径。轨迹规划的目标是找到避免碰撞和保持舒适度的可执行轨迹。 4 | 5 | 路径规划使用三个输入,第一个输入为地图,地图数据包括公路网和实时交通信息。第二个输入为我们当前在地图上的位置。第三个输入为我们的目的地,目的地取决于车辆中的乘客。 -------------------------------------------------------------------------------- /ch05_策略规划/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch05_策略规划/modify_log.txt -------------------------------------------------------------------------------- /ch06_控制/6.1 PID控制.md: -------------------------------------------------------------------------------- 1 | # PID控制 2 | 3 | ## 一、原理 4 | 首先介绍的算法为PID控制,这个控制器的优点在于它非常简单,只需要知道与目标轨迹有多大的偏离。PID的第一组件为P代表“比例”(Proportional)。设想一辆车正试图遵循目标轨迹,P控制器在车辆开始偏离时立即将其拉回目标轨迹。比例控制意味着,车辆偏离越远,控制器越难将其拉回目标轨迹。 5 | 6 |
7 | 8 |
9 |
图1. P分量
10 | 11 | 在实践中P控制器的一个问题在于,它很容易超出参考轨迹。当车辆越来越接近目标轨迹时,我们需要控制器更加稳定。PID控制器中的D项致力于使运动处于稳定状态,D代表“微分”(Derivative)。PD控制器类似于P控制器,它增加了一个阻尼项,可最大限度地减少控制器输出的变化速度。 12 | 13 |
14 | 15 |
16 |
图2. D分量
17 | 18 | PID控制器中的最后一项I代表积分(Integral),该项负责纠正车辆的任何系统性偏差。例如,转向可能失准,这可能造成恒定的转向偏移。在这种情况下,我们需要稍微向一侧转向以保持直行。为解决这一问题,控制器会对系统的累积误差进行惩罚。我们可以将P、I和D组件结合构成PID控制器。 19 | 20 |
21 | 22 |
23 |
图3. I分量
24 | 25 | ## 二、 PID优劣对比 26 | 27 | PID控制器很简单,但它在很多情况下的效果很好。对于PID控制器,你只需要知道你的车辆与目标轨迹之间的偏差。但是PID控制器只是一种线性算法,对于非常复杂的系统而言,这是不够的。例如,为控制具有多个关节的四轴飞行器或机器人,我们需要建立机器人的物理模型。对无人驾驶而言,我们需要应用不同的PID控制器来控制转向和加速,这意味着很难将横向和纵向控制结合起来。另一个问题在于PID控制器依赖于实时误差测量,这意味着受到测量延迟限制时可能会失效。 -------------------------------------------------------------------------------- /ch06_控制/6.2 线性二次调节器(LQR).md: -------------------------------------------------------------------------------- 1 | # 线性二次调节器(LQR) 2 | 3 | ## 一、 原理 4 | 5 | 线性二次调节器(Linear Quadratic Regulator 或LQR)是基于模型的控制器,它使用车辆的状态来使误差最小化。Apollo使用LQR进行横向控制。横向控制包含四个组件:横向误差、横向误差的变化率、朝向误差和朝向误差的变化率。变化率与导数相同,我们用变量名上面的一个点来代表。我们称这四个组件的集合为X,这个集合X捕获车辆的状态。除了状态之外,该车有三个控制输入:转向、加速和制动。我们将这个控制输入集合称为U。 6 | 7 |
8 | 9 |
10 |
图1. 原理
11 | 12 | LQR处理线性控制,这种类型的模型可以用等式来表示(详见下图)。x(上方带点)=Ax+Bu,x(上方带点)向量是导数,或X向量的变化率。所以x点的每个分量只是x对应分量的导数。等式x点=Ax+Bu,该等式捕捉状态里的变化,即x点是如何受当前状态 x 和控制输入 u 的影响的。 13 | 14 |
15 | 16 |
17 |
图2. 等式表示
18 | 19 | 这个等式是线性的,因为我们用∆x来改变x时,并用∆u来改变u。x点的变化也会让这个等式成立(见下图等式)。现在我们了解了LQR中的L。 20 | 21 |
22 | 23 |
24 |
图3. 等式拆分
25 | 26 | 接下来我们学习LQR中的Q。这里的目标是为了让误差最小化,但我们也希望尽可能少地使用控制输入。由于使用这些会有成本,例如:耗费气体或电力。为了尽量减少这些因素,我们可以保持误差的运行总和和控制输入的运行总和。当车往右转的特别厉害之际,添加到误差总和中。当控制输入将汽车往左侧转时,从控制输入总和中减去一点。然而,这种方法会导致问题。因为右侧的正误差只需将左侧的负误差消除即可。对控制输入来说也是如此。相反,我们可以让x和u与自身相乘,这样负值也会产生正平方,我们称这些为二次项。我们为这些项分配权重,并将它们加在一起。 27 | 28 |
29 | 30 |
31 |
图4. 二次项表示
32 | 33 | 最优的u应该最小化二次项的和随时间的积分。在数学中我们将这个积分值称为成本函数(形式见下图)。我们经常以紧凑的矩阵形式表示加权二次项的总和。 34 | 35 |
36 | 37 |
38 |
图5. 成本函数
39 | 40 | 这里的Q和R代表x和u的权重集合。xT和uT是转置矩阵,这意味着它们几乎与x和u相同,只是重新排列以便矩阵相乘。x乘以xT,u乘以uT,实质上是将每个矩阵乘以它自己。最小化成本函数是一个复杂的过程,但通常我们可以依靠数值计算器为我们找到解决方案。Apollo就提供了一个这样的求解方案。在LQR中,控制方法被描述为u=-Kx。其中,K代表一个复杂的skeme,代表如何从x计算出u。所以找到一个最优的u就是找到一个最优的K。许多工具都可以轻松地用来解决K,尤其当你提供了模拟车辆物理特征的A、B,以及x和u的权重Q、R。 -------------------------------------------------------------------------------- /ch06_控制/6.3 模型控制预测(MPC).md: -------------------------------------------------------------------------------- 1 | # 模型控制预测(MPC) 2 | 3 | ## 一、原理 4 | 5 | 模型预测控制(或MPC)是一种更复杂的控制器,它非常依赖于数学优化,但基本上可以将MPC归结为三个步骤:1、建立车辆模型。2、使用优化引擎计算有限时间范围内的控制输入。3、执行第一组控制输入。MPC是一个重复过程,它着眼未来,计算一系列控制输入,并优化该序列。但控制器实际上只实现了序列中的第一组控制输入,然后控制器再次重复该循环。为什么我们不执行整个控制输入序列呢?那是因为我们只采用了近似测量与计算。如果实现了整个控制输入序列,实际产生的车辆状态与我们的模型有很大差异,最好在每个时间步不断地重新评估控制输入的最优序列。 6 | 7 | MPC的第一步为定义车辆模型,该模型近似于汽车的物理特性,该模型估计了假如将一组控制输入应用于车辆时会发生什么。接下来,我们决定MPC预测未来的能力。预测越深入,控制器就越精确,不过需要的时间也越长。所以,我们需要在准确度与快速获取结果之间做出取舍。获取结果的速度越快,越能快速地将控制输入应用到实际车辆中。 8 | 9 |
10 | 11 |
12 | 13 | 下一步是将模型发送到搜索最佳控制输入的优化引擎。该优化引擎的工作原理是通过搜索密集数学空间来寻求最佳解决方案。为缩小搜索范围,优化引擎依赖于车辆模型的约束条件。 14 | 15 | 优化引擎可间接评估控制输入,它通过使用以下方法对车辆轨迹进行建模:通过成本函数对轨迹进行评估。成本函数主要基于与目标轨迹的偏差;其次,基于其他因素,如加速度和提升旅客舒适度的措施。 16 | 17 |
18 | 19 |
20 | 21 | 为使乘客感觉更舒适,对控制输入的调整应该很小。因为动作变化幅度过大会让乘客感到不舒服。根据具体情况,我们可能需要为其考虑进一步的成本,并设计成本函数。模型、约束和成本函数合并在一起,并作为优化问题加以解决。我们可以在不同的优化引擎中,选择一种来寻找最佳解决方案。 -------------------------------------------------------------------------------- /ch06_控制/imgs/5.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.1.1.jpg -------------------------------------------------------------------------------- /ch06_控制/imgs/5.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.1.2.jpg -------------------------------------------------------------------------------- /ch06_控制/imgs/5.1.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.1.3.jpg -------------------------------------------------------------------------------- /ch06_控制/imgs/5.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.1.jpg -------------------------------------------------------------------------------- /ch06_控制/imgs/5.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.2.1.jpg -------------------------------------------------------------------------------- /ch06_控制/imgs/5.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.2.2.jpg -------------------------------------------------------------------------------- /ch06_控制/imgs/5.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.2.3.jpg -------------------------------------------------------------------------------- /ch06_控制/imgs/5.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.2.4.jpg -------------------------------------------------------------------------------- /ch06_控制/imgs/5.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.2.5.jpg -------------------------------------------------------------------------------- /ch06_控制/imgs/5.3.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.3.1.jpg -------------------------------------------------------------------------------- /ch06_控制/imgs/5.3.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/imgs/5.3.2.jpg -------------------------------------------------------------------------------- /ch06_控制/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch06_控制/modify_log.txt -------------------------------------------------------------------------------- /ch06_控制/readme.md: -------------------------------------------------------------------------------- 1 | # 控制 2 | 3 | ## 一、简介 4 | 5 | 控制是驱使车辆前行的策略。对于汽车而言,最基本的控制输入为转向、加速和制动。通常,控制器使用一系列路径点来接收轨迹。控制器的任务是使用控制输入让车辆通过这些路径点。 6 | 7 | 首先,控制器必须准确,这意味着它应避免偏离目标轨迹。这对于安全来说,尤为重要。即使路面潮湿或者道路比较陡峭,控制器任需要准确地执行轨迹。其次,控制策略对汽车应该具备可行性。例如,如果你的汽车向北行驶,而你希望它立即向东转。你可以在游戏中做到这一点,但在现实中无法实现。最后,需要考虑的是平稳度。舒适的驾驶非常重要。如果车辆行驶得不规律,那乘客永远不会想再次乘坐它了。要使控制顺利进行,驱动必须是连续的。这意味着你应避免突然转向、加速或制动。 8 | 9 | 总之,我们的目标是使用可行的控制输入,最大限度地降低与目标轨迹的偏差、最大限度地提供乘客的舒适度。有三种可用于实现这些目标的控制策略:比例积分微分控制(或PID)、线性二次调节器(或LQR)、模型预测控制(或MPC)。 10 | 11 | ## 二、控制流程 12 | 控制器预计有两种输入:目标轨迹与车辆状态。目标轨迹来自规划模块,在每个轨迹点,规划模块指定一个位置和参考速度。在每个时间戳都对轨迹进行更新。我们还需要了解车辆状态,车辆状态包括:通过本地化模块来计算的车辆位置、从车辆内部传感器获取的数据(如速度、转向和加速度)。我们使用这两个输入来计算目标轨迹与实际行进轨迹之间的偏差。 13 | 14 | 控制器的输出是控制输入(转向、加速和制动)的值。当偏离目标轨迹时,我们希望采取行动来纠正这种偏差。对于普通汽车,我们使用方向盘控制行驶方向(即转向)、使用油门加速、使用刹车减速(即制动)。这也是无人驾驶汽车所做的。一旦将这三个值传递给车辆,汽车实际上已经开始无人驾驶了。之后将介绍不同的控制算法,如何计算这三个输出-转向、加速和制动。 15 | 16 |
17 | 18 |
19 |
图1. 控制流程
20 | 21 | 控制实际上是无人驾驶汽车实现自动移动的方式。在控制中,我们使用转向、加速和制动来运行我们的目标轨迹。我们研究了几种不同类型的控制器。PID控制是一种简单而强大的控制算法,线性二次调节器和模型预测控制是另外两种类型的控制器,它们更复杂,但也更强大、更准确。 -------------------------------------------------------------------------------- /ch07_产品/7.1 ADAS/README.md: -------------------------------------------------------------------------------- 1 | # ADAS 2 | 3 |
4 | 5 |
6 |
图1. ADAS 功能分类
7 | 8 |
9 | 10 |
11 |
图2. ADAS 功能详细列表
-------------------------------------------------------------------------------- /ch07_产品/7.1 ADAS/imgs/6.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch07_产品/7.1 ADAS/imgs/6.1.1.jpg -------------------------------------------------------------------------------- /ch07_产品/7.1 ADAS/imgs/6.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch07_产品/7.1 ADAS/imgs/6.1.2.jpg -------------------------------------------------------------------------------- /ch07_产品/7.1 ADAS/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch07_产品/7.1 ADAS/modify_log.txt -------------------------------------------------------------------------------- /ch07_产品/7.2 DMS/README.md: -------------------------------------------------------------------------------- 1 | # DMS 2 |
3 | 4 |
5 |
图1. DMS 功能分类
6 | 7 | DMS(Driver Monitoring System, 驾驶员检测系统),通过监测驾驶员危险驾驶行为(疲劳、分心、打电话等),并及时发出警告,以此来降低交通事故率。 8 | 9 |
10 | 11 |
12 |
图2. DMS 功能详细列表
13 | 14 | -------------------------------------------------------------------------------- /ch07_产品/7.2 DMS/imgs/6.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch07_产品/7.2 DMS/imgs/6.2.1.jpg -------------------------------------------------------------------------------- /ch07_产品/7.2 DMS/imgs/6.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch07_产品/7.2 DMS/imgs/6.2.2.jpg -------------------------------------------------------------------------------- /ch07_产品/7.2 DMS/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch07_产品/7.2 DMS/modify_log.txt -------------------------------------------------------------------------------- /ch08_工具/8.1 可视化/8.1.1 AVS(Autonomous Visualization System)/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.1 可视化/8.1.1 AVS(Autonomous Visualization System)/modify_log.txt -------------------------------------------------------------------------------- /ch08_工具/8.1 可视化/8.1.1 AVS(Autonomous Visualization System)/readme.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.1 可视化/8.1.1 AVS(Autonomous Visualization System)/readme.md -------------------------------------------------------------------------------- /ch08_工具/8.2 仿真/8.2.1 Carla仿真/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.2 仿真/8.2.1 Carla仿真/modify_log.txt -------------------------------------------------------------------------------- /ch08_工具/8.2 仿真/8.2.1 Carla仿真/readme.md: -------------------------------------------------------------------------------- 1 | # Carla 仿真 2 | 3 | ## 一、简介 4 | 5 | Carla是一个开源的自动驾驶仿真平台,提供了丰富的场景和传感器模型,支持多种自动驾驶算法的开发和测试。本教程将介绍Carla的基本概念、安装和使用方法。 6 | 7 | ## 二、基本概念 8 | 9 | * 场景:Carla中的虚拟环境,包括道路、建筑物、交通标志等。 10 | * 传感器:Carla中的虚拟传感器,包括相机、激光雷达、GPS等。 11 | * 车辆:Carla中的虚拟车辆,可以用于自动驾驶算法的开发和测试。 12 | 13 | ## 三、安装Carla 14 | 15 | 1. 访问Carla官网:https://carla.org/ 16 | 2. 下载适合您操作系统的安装包。 17 | 3. 按照安装包中的说明进行安装。 18 | 19 | ## 四、使用Carla 20 | 21 | ### (一)步骤 22 | 23 | 1. 启动Carla:运行Carla可执行文件,启动Carla仿真平台。 24 | 2. 创建场景:在Carla中创建一个场景,包括道路、建筑物、交通标志等。 25 | 3. 添加车辆:在场景中添加一个或多个虚拟车辆。 26 | 4. 添加传感器:为车辆添加相机、激光雷达、GPS等虚拟传感器。 27 | 5. 运行仿真:启动仿真,观察车辆在场景中的行为。 28 | 6. 收集数据:使用Carla提供的API收集车辆的传感器数据和状态信息。 29 | 7. 开发算法:使用收集到的数据开发和测试自动驾驶算法。 30 | 8. 评估算法:使用Carla提供的评估工具评估自动驾驶算法的性能。 31 | 32 | ### (二)Python API 33 | 34 | Carla提供了Python API,使得开发者可以使用Python语言与Carla进行交互。以下是Carla Python API的基本调用方法: 35 | 36 | 1. 导入模块 37 | 38 | 首先,导入Carla所需的模块: 39 | 40 | ```python 41 | import carla 42 | ``` 43 | 44 | 2. 连接到Carla服务器 45 | 46 | 连接到Carla服务器,启动Carla客户端: 47 | 48 | ```python 49 | client = carla.Client('localhost', 2000) 50 | client.connect() 51 | ``` 52 | 53 | 3. 获取世界 54 | 55 | 获取Carla世界,用于创建和管理场景、车辆和传感器等: 56 | 57 | ```python 58 | world = client.get_world() 59 | ``` 60 | 61 | 4. 创建场景 62 | 63 | 创建一个场景,包括道路、建筑物、交通标志等: 64 | 65 | ```python 66 | blueprint_library = world.get_blueprint_library() 67 | road = blueprint_library.filter('road')[0] 68 | spawn_point = carla.Transform(carla.Location(x=0, z=0), carla.Rotation(yaw=0)) 69 | road = world.spawn_actor(road, spawn_point) 70 | ``` 71 | 72 | 5. 创建车辆 73 | 74 | 创建一个虚拟车辆,并添加到场景中: 75 | 76 | ```python 77 | vehicle_blueprint = world.get_blueprint_library().filter('vehicle.audi.a2')[0] 78 | vehicle_spawn_point = carla.Transform(carla.Location(x=200, z=200), carla.Rotation(yaw=0)) 79 | vehicle = world.spawn_actor(vehicle_blueprint, vehicle_spawn_point) 80 | ``` 81 | 6. 添加传感器 82 | 83 | 为车辆添加相机、激光雷达、GPS等虚拟传感器: 84 | 85 | ```python 86 | camera_blueprint = world.get_blueprint_library().find('sensor.camera.rgb') 87 | camera_spawn_point = carla.Transform(carla.Location(x=2, z=2.5), carla.Rotation(pitch=-15)) 88 | camera = world.spawn_actor(camera_blueprint, camera_spawn_point, attach_to=vehicle) 89 | ``` 90 | 91 | 7. 运行仿真 92 | 93 | 启动仿真,观察车辆在场景中的行为: 94 | 95 | ```python 96 | vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0, brake=0.0, reverse=False)) 97 | ``` 98 | 99 | 8. 收集数据 100 | 101 | 使用Carla提供的API收集车辆的传感器数据和状态信息: 102 | 103 | ```python 104 | sensor_data = camera传感器.传感器名.get_data() 105 | ``` 106 | 107 | 9. 关闭连接 108 | 109 | 完成仿真后,关闭与Carla服务器的连接: 110 | 111 | ```python 112 | client.disconnect() 113 | ``` 114 | 115 | 以上是Carla Python API的基本调用方法。通过使用Carla Python API,开发者可以在Python环境中与Carla进行交互,实现自动驾驶算法的开发和测试。 116 | 117 | -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/8.3.1 TensorRT安装配置.md: -------------------------------------------------------------------------------- 1 | # TensorRT安装配置 2 | 3 | ## 一、简介 4 | 5 |
6 | 7 |
8 | 9 | TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT支持TensorFlow、Caffe、Mxnet、Pytorch等几乎所有的深度学习框架,将TensorRT和NVIDIA的GPU结合起来,能在几乎所有的框架中进行快速和高效的部署推理。 10 | 11 | TensorRT 在运行时,加载一个已经训练好的神经网络,创建一个经过内部高度优化的引擎(engine),来进行快速计算。TensorRT 同时提供 C++ 和 Python API 接口。TensorRT 同时支持 Windows/Ubuntu/iOS 系统,本教程基于Ubuntu18.04 进行讲解。 12 | 13 | ## 二、安装 14 | 15 | ### (一)下载安装 16 | 17 | 本教程安装版本:TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar,[下载链接](https://developer.nvidia.com/nvidia-tensorrt-download) 18 | 19 | 相应的依赖环境: 20 | 21 | * CUDA 10.0 22 | * CUDNN 7.6.5 23 | * Python 2 / Python 3 24 | 25 | ### (二)配置环境变量 26 | 27 | 将下载好的压缩包,放在一个路径下,比如在我的电脑:`/home/TensorRT-7`。然后将 TensorRT 的 `lib` 文件路径加入系统环境变量: 28 | 29 | ```bash 30 | sudo vi ~/.bashrc 31 | export LD_LIBRARY_PATH="TensorRT-${version}/lib:$LD_LIBRARY_PATH" 32 | source ~/.bashrc 33 | ``` 34 | 35 | ### (三)安装 Python 接口 (可选) 36 | 37 | 如果需要用 Python API 进行编程,对应安装如下: 38 | 39 | ```bash 40 | cd TensorRT-${version}/python 41 | sudo pip2 install tensorrt-*-cp27-none-linux_x86_64.whl # python2 42 | # sudo pip3 install tensorrt-*-cp3x-none-linux_x86_64.whl # python3 43 | ``` 44 | 45 | ### (四)安装UFF转换库 (可选) 46 | 47 | 如果需将 TensorFlow 训练后的网络通过 UFF 编码方式转换到TensorRT ,对应安装如下: 48 | 49 | ```bash 50 | cd TensorRT-${version}/uff 51 | sudo pip2 install uff-0.6.5-py2.py3-none-any.whl # python2 52 | # sudo pip3 install uff-0.6.5-py2.py3-none-any.whl # python3 53 | ``` 54 | 55 | ### (五)安装 graphsurgeon(可选) 56 | 57 | **graphsurgeon** 是对UFF编码网络进行定制化操作的库,如插入或删除神经网络某一层`layer`: 58 | 59 | ```bash 60 | cd TensorRT-${version}/graphsurgeon 61 | sudo pip2 install graphsurgeon-0.4.1-py2.py3-none-any.whl # python2 62 | # sudo pip3 install graphsurgeon-0.4.1-py2.py3-none-any.whl # python3 63 | ``` 64 | 65 | ## 三、验证安装 66 | 67 | ### (一)检测目录是否正确: 68 | 69 | ```bash 70 | cd TensorRT-${version} 71 | ``` 72 | 73 | 检查是否包含以下文件夹:`lib`,`include`,`data`… 74 | 75 | ### (二)测试 sampleMNIST 76 | 77 | ```bash 78 | cd /data/mnist 79 | python download_pgms.py 80 | cd /samples/sampleMNIST 81 | make 82 | /bin$:./sample_mnist 83 | 84 | --------------------------- 85 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 86 | @@@@@@@@@@@@@@%.-@@@@@@@@@@@ 87 | @@@@@@@@@@@*- %@@@@@@@@@@ 88 | @@@@@@@@@@= .-. *@@@@@@@@@@ 89 | @@@@@@@@@= +@@@ *@@@@@@@@@@ 90 | @@@@@@@@* =@@@@ %@@@@@@@@@@ 91 | @@@@@@@@..@@@@% @@@@@@@@@@@ 92 | @@@@@@@# *@@@@- @@@@@@@@@@@ 93 | @@@@@@@: @@@@% @@@@@@@@@@@ 94 | @@@@@@@: @@@@- @@@@@@@@@@@ 95 | @@@@@@@: =+*= +: *@@@@@@@@@@ 96 | @@@@@@@*. +@: *@@@@@@@@@@ 97 | @@@@@@@@%#**#@@: *@@@@@@@@@@ 98 | @@@@@@@@@@@@@@@: -@@@@@@@@@@ 99 | @@@@@@@@@@@@@@@+ :@@@@@@@@@@ 100 | @@@@@@@@@@@@@@@* @@@@@@@@@@ 101 | @@@@@@@@@@@@@@@@ %@@@@@@@@@ 102 | @@@@@@@@@@@@@@@@ #@@@@@@@@@ 103 | @@@@@@@@@@@@@@@@: +@@@@@@@@@ 104 | @@@@@@@@@@@@@@@@- +@@@@@@@@@ 105 | @@@@@@@@@@@@@@@@*:%@@@@@@@@@ 106 | 0: 107 | 1: 108 | 2: 109 | 3: 110 | 4: 111 | 5: 112 | 6: 113 | 7: 114 | 8: 115 | 9: ********** 116 | ``` 117 | 118 | 注: 如果 download_pgms.py 下载数据失败,手动下载完成后,修改 download_pgms.py 将原有np.fromstring为np.fromfile,相应的 urllib.request.urlopen() 改为 open(' ', 'rb')。 119 | 120 | 若输出与上述一致, 则证明安装成功。 121 | 122 | -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/8.3.2 TensorRT加速原理.md: -------------------------------------------------------------------------------- 1 | # TensorRT加速原理 2 | 3 | ## 一、加速的必要性 4 | 5 |
6 | 7 |
8 |
图1. Training VS Inference
9 | 10 | 如上图所示,训练(training)是双向运算,而推理(inference)为单向运算。为了提高训练速度,会使用多GPU分布式训练;而部署推理时,为了降低成本,往往使用单个GPU机器或嵌入式平台(比如 NVIDIA Jetson)进行部署;在实际项目中,一个项目可能会使用多个模型,而模型使用的框架也不能确保统一化。 11 | 12 | **使用TensorRT加速最直接的效果如下:** 13 | 14 | - 加快推理速度,降低延迟。 15 | - 推理框架统一化,方便部署。 16 | 17 | ## 二、优化原理 18 | 19 |
20 | 21 |
22 |
图2. 优化原理
23 | 24 | TensorRT优化方法主要有以上5种方法,接下来重点介绍前两种: 25 | 26 | ### (一)层间融合或张量融合(Layer & Tensor Fusion) 27 | 28 |
29 | 30 |
31 |
图3. GoogLeNetInception
32 | 33 | 上图是GoogLeNetInception模块的计算图,首先input后会有多个卷积,卷积完后有Bias和ReLU,结束后将结果concat(连接拼接)到一起,得到下一个input。 34 | 35 |
36 | 37 |
38 |
图4. 层间融合
39 | 40 | **优化内容:** 41 | 42 | - 纵向合并:首先是convolution, Bias和ReLU这三个操作可以合并成CBR,只占用一个CUDA核心,依次合并得到图1,其中包含四个1×1的CBR,一个3×3的CBR和一个5×5的CBR。 43 | - 横向合并:合并三个相连的1×1的CBR为一个大的1×1的CBR,也只占用一个CUDA核心,得到图2。 44 | - 消除concat层:直接连接到下一层的next input,减少传输吞吐,得到图3。 45 | - 并发(Concurrency:如下图左半部分(max pool和1×1 CBR)与右半部分(大的1×1 CBR,3×3 CBR和5×5 CBR)彼此之间是相互独立的两条路径,本质上是不相关的,可以在GPU上通过并发来做,来达到的优化的目标。 46 | 47 | ### (二)数据精度校准(Weight &Activation Precision Calibration) 48 | 49 | PyTorch、TensorFlow 、MxNet等现有的深度学习框架,训练时多采用 Float 32(简称 FP32)的精度来表示权值、偏置、激活值等;由于部署推理不需要反向传播,可以适当降低数据精度,如降为FP16或INT8的精度, 以此来减少计算量以及提升推理速度,同时压缩模型体积。 50 | 51 | 由于INT8只有256个不同的数值,使用INT8来表示 FP32精度的数值会丢失信息,造成性能下降。为此,TensorRT提供自动化校准(Calibration ),以最好的匹配性能将FP32精度的数据降低为INT8精度,最小化性能损失。具体流程如下: 52 | 53 |
54 | 55 |
56 |
图5. 数据精度校准步骤
57 | 58 | **下表为不同精度的动态范围:** 59 | 60 |
61 | 62 |
63 |
图6. 动态范围
64 | 65 | 由上图对比可以看出,INT8 和 FP32 表示范围相差很大。需要最小化该转换过程的信息损失,TensorRT 采用是简单有效的线性量化的转换方式,表示为: 66 | 67 | **Tensor Values = FP32 scale factor * int8 array + FP32 bias** 68 | 69 | Nvidia 研究证明偏置项可以去掉,即: 70 | 71 | **Tensor Values = FP32 scale factor * int8 array** 72 | 73 |
74 | 75 |
76 |
图7. 偏置项截断
77 | 78 | 如何确定**scale factor**的值 ? 79 | 80 | 最简单的方式如上图左,将**FP32 tensor**值中的 **–|max|** 和 **|max|**映射为 **INT8** 对应的**-127 和 127**,中间值按照线性关系进行映射,该方法也被称为**不饱和(No saturation)映射**。但实验表明,该方法精度损失很大。 81 | 82 | 因此,产生了**饱和 (saturate) 映射**的方式(上图右): 83 | 84 | 相对于非饱和映射,不直接将两端的 ±|max|值映射到±127,而是选取一个阈值|T|, 将 ±|T| 映射为±127,其中 |T| < |max|。在 [ -|T|, |T| ] 区间外的值直接映射为 ±127,如上图右直接将三个红色 x 点映射为 -127, 而在 [ -|T|, |T| ] 区间内的按照线性映射的方式。 85 | 86 | **TensorRT 开发者通过实验表明,权重 ( weights ) 采用非饱和映射,激活值采用饱和映射的方式相对全使用饱和映射效果会更好。** 87 | 88 | **Why?Why?** 89 | 90 |
91 | 92 |
93 |
图8. resnet-152 网络模型中间层的激活值统计
94 | 95 | 首先来看上图左,该图是 resnet-152 网络模型中间层的激活值统计,横坐标是激活值,纵坐标是统计数量的归一化表示。 96 | 97 | 可以看到,白线左边的激活值分布比较集中,白线(该线对应的就是阈值 T 线)右边的激活值比较分散,这部分激活值在整个层中所占的比例比较少,因此这部分可以不考虑到映射关系中。非饱和映射使有效值硬合并,降低了表达效果。 98 | 99 | T 值需要满足 FP32 到 INT8 转换信息损失最小化,即 KL 散度(也叫做相对熵)最小化: 100 | 101 |
102 | 103 |
104 |
图9. KL 散度
105 | 106 | 其中 P,Q 分别表示 FP32 和 INT8 模式下的分布,每一层 tensor 对应的 T 值都是不同的,而确定 T 值的过程被称为校准(Calibration)。 107 | 108 | ## 三、计算过程 109 | 110 |
111 | 112 |
113 | 114 | 如上图所示: 115 | 116 | 1. 校准数据集(Calibration Dataset)做 FP32 推理 117 | 118 | 2. 获取每一层激活值的直方图,并用不同的量化阈值生成相应的量化分布(虚线为量化阈值,即T值);此过程结束后,会将校准得到的 T 值保存下来,以后可以方便直接读取,跳过此过程。 119 | 120 | **校准数据集(Calibration Dataset)会直接的影响到激活值的分布,进而影响到 T 值的选择,所以,校准数据集要具有代表性、多样性。** 121 | 122 | ### 8.3.2.4 性能和精度 123 | 124 |
125 | 126 |
127 |
图11. 准确率
128 | 129 |
130 | 131 |
132 |
图12. 速度
133 | 134 | 如上图Accuracy所示,经过校准的 INT8 推理相对于 FP32 推理,准确率(Accuracy)有略微的损失,部分情况下INT8 推理相比 FP32 推理准确率有略微提升(图中绿色所示)。Performance表明,一定范围内,Batch Size 越大,加速效果越好。 135 | 136 | -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.1.1.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.1.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.10.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.11.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.12.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.2.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.3.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.4.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.5.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.6.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.7.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.8.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.2.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.2.9.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.3.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.3.1.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.3.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.3.2.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.3.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.3.3.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.3.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.3.4.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/imgs/7.3.3.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.3 TensorRT加速/imgs/7.3.3.5.jpg -------------------------------------------------------------------------------- /ch08_工具/8.3 TensorRT加速/readme.md: -------------------------------------------------------------------------------- 1 | # 7.3 TensorRT加速 2 | 3 | TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxnet、Pytorch等几乎所有的深度学习框架,将TensorRT和NVIDIA的GPU结合起来,能在几乎所有的框架中进行快速和高效的部署推理。 4 | 5 | TensorRT 是一个C++库,从 TensorRT 3 开始提供C++ API和Python API,主要用来针对 NVIDIA GPU进行 高性能推理(Inference)加速。 -------------------------------------------------------------------------------- /ch08_工具/8.4 SNPE/8.4.1 Snapdragon NPE Runtime.md: -------------------------------------------------------------------------------- 1 | # **Snapdragon NPE Runtime** 2 | 3 | **Overview** 4 | 5 | 以下是SNPE软硬件架构的总览图,图中详细介绍了SNPE运行时涉及到的软件和硬件层,包括Runtime Library和常用后端,以及一些简单的硬件实现。 6 | 7 | ![https://developer.qualcomm.com/sites/default/files/docs/snpe/images/snpe_runtime.png](https://developer.qualcomm.com/sites/default/files/docs/snpe/images/snpe_runtime.png) 8 | 9 | 软件层功能主要包括 : 10 | 11 | **DL Container Loader :** 主要涉及从训练框架到DLC目标格式的转换器,该转换器部分由python实现,可以修改模型转换的逻辑; 12 | 13 | **Model Validation :** 校验模型是否支持,具体可以查看 [SNPE Layer 支持列表](https://developer.qualcomm.com/sites/default/files/docs/snpe/network_layers.html#network_layers),该列表在某些版本中与转换器的支持列表有出入,可以查看python代码确认; 14 | 15 | **Runtime Engine :** 推理引擎,其中内置了Profiling功能,可以在网络初始化时打开,输出的报告可以通过自带的解析器进行解析;UDL或UDO功能,是官方提供的扩展SNPE推理支持的方式,类似于TensorRT中Plugin的概念,可以基于Hexagon SDK进行开发; 16 | 17 | **Partitioning Logic :** 这是一个比较复杂的逻辑,可以简单将它理解为一个“回退”机制:在网络初始化阶段,SNPE允许输入一个backend列表,按照列表中的优先级顺序从高到低地选择网络跑在哪一个后端,当第一优先级后端对网络中某个层不支持的时候,SNPE会尝试将这个层回退到更低优先级的后端。这种做法增加了网络的支持范围,但引入了性能的损耗; 18 | 19 | 硬件层或硬件后端主要包括: 20 | 21 | **CPU Runtime**: 使网络运行在骁龙CPU上,支持FP32/INT8精度模式; 22 | 23 | **GPU Runtime**: 使网络运行在Adreno GPU上,支持FP32/FP16以及a32w16的混合精度模式; 24 | 25 | **DSP Runtime**: 使网络运行在Hexagon DSP上,支持INT8精度模式;图中的Q6是一个软件概念,对应DSP上的神经网络实现,HVX对应硬件的向量计算单元; 26 | 27 | **AIP Runtime**: 使网络运行在Hexagon DSP和CPU的混合模式上,官方称为HTA,支持INT8或a16w8精度模式,需要注意的是,HTA仅在特定硬件上存在,例如:SP855/SP865/XR2。 -------------------------------------------------------------------------------- /ch08_工具/8.4 SNPE/8.4.2 AIP Runtime.md: -------------------------------------------------------------------------------- 1 | # **AIP Runtime** 2 | 3 | ![https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_runtime.png](https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_runtime.png) 4 | 5 | **概述** 6 | 7 | AIP (AI Processor) Runtime 是 Q6、HVX 和 HTA 的软件抽象,用于跨这三个处理器执行模型。用户将模型加载到 Snapdragon NPE 并选择 AIP Runtime 作为目标后,将在 HTA 和 HVX 上运行模型的部分,由 Q6 进行协调。**注意**:要在 HTA 上执行模型的部分,需要对模型进行离线分析,并将相关部分的二进制文件嵌入 DLC 中。有关详细信息,请参见[添加 HTA 部分](https://developer.qualcomm.com/sites/default/files/docs/snpe/hta_support.html)。 8 | 9 | Snapdragon NPE 在 DSP 上加载一个库,该库与 AIP Runtime 通信。该 DSP 库包含一个执行器(管理 HTA 和 HVX 上的模型执行),用于在 HTA 上运行子网的 HTA 驱动程序以及用于使用 HVX 运行子网的 Hexagon NN。 10 | 11 | 执行器使用模型描述,其中还包含分区信息-描述模型的哪些部分将在 HTA 上运行,哪些部分将在 HVX 上运行。下面称分区的部分为"子网"。 12 | 13 | DSP 执行器在各自的核心上执行子网,并根据需要协调缓冲区交换和格式转换以返回适当的输出到运行在 ARM CPU 上的 Snapdragon 运行时(包括必须的dequantization)。 14 | 15 | # 在 AIP Runtime 上执行模型 16 | 17 | 让我们使用以下模型的说明性示例,该模型嵌入在由 Snapdragon NPE snpe-*framework*-to-dlc 转换工具之一创建的 DL Container 中。 18 | 19 | - 圆圈表示模型中的操作 20 | - 矩形表示包含和实现这些操作的层 21 | 22 | ![https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_1.png](https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_1.png) 23 | 24 | 顶层 Snapdragon NPE 运行时根据层亲和性将模型的执行分解为在不同核心上运行的子网。 25 | 26 | 其中一个情况可能是整个网络都使用 AIP 运行时一起执行,如下所示: 27 | 28 | ![https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_2.png](https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_2.png) 29 | 30 | 或者,Snapdragon NPE 运行时可能会创建多个分区-其中几个分区在 AIP 运行时上执行,其余分区则回退到 CPU 运行时,如下所示: 31 | 32 | ![https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_3.png](https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_3.png) 33 | 34 | Snapdragon NPE 运行时将自动添加 CPU 运行时以执行其余部分被识别为回退到 CPU 的部分。 35 | 36 | 让我们使用上面的示例更仔细地检查 AIP 运行时的执行,其中整个模型都使用 AIP 作为参考进行执行。 37 | 38 | AIP Runtime 进一步将 AIP 子网分解为以下内容: 39 | 40 | - HTA 子网:由 HTA 编译器编译的子网的部分,其 HTA 编译器生成的元数据出现在 DLC 的 HTA 部分中。 41 | - HNN 子网:其余可以使用 Hexagon NN 库在 DSP 上运行子网的子网,其元数据出现在 DLC 的 HVX 部分中。 42 | 43 | 在 AIP 运行时进行分区可能会产生几种可能的组合。下面是一些代表性的情况: 44 | 45 | **A. AIP 子网可以完全在 HTA 上运行** 46 | 47 | ![https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_4.png](https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_4.png) 48 | 49 | 在这种情况下,整个 AIP 子网与 HTA 兼容。将 DLC 加载到 Snapdragon NPE 并选择 AIP 运行时后,运行时识别到有一个 HTA 部分,其中包含一个等于整个 AIP 子网的单个 HTA 子网。 50 | 51 | **B. AIP 子网的部分可以在 HTA 上运行,其余部分可以在 HNN 上运行** 52 | 53 | ![https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_5.png](https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_5.png) 54 | 55 | 在某些情况下,整个 AIP 子网可能无法在 HTA 上处理。在这种情况下,HTA 编译器仅为网络中的较小一部分层生成 HTA 部分。或者,用户可能希望通过向 snpe-dlc-quantize 工具提供其他选项来手动分区网络,以选择他们希望在 HTA 上处理的子网(了解有关将网络分区为 HTA 的信息,请参见**[添加 HTA 部分](https://developer.qualcomm.com/sites/default/files/docs/snpe/hta_support.html)**)。在这两种情况下,HTA 编译器成功处理了较小的 HTA 子网,并嵌入了 DLC 中的相应 HTA 部分。将 DLC 加载到 Snapdragon NPE 并选择 AIP 运行时后,运行时识别到有一个 HTA 部分,其中包含一个仅覆盖 AIP 子网的一部分的单个 HTA 子网,以及其余部分可以使用 Hexagon NN 运行。 56 | 57 | **C. AIP 子网被分成多个分区** 58 | 59 | ![https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_6.png](https://developer.qualcomm.com/sites/default/files/docs/snpe/images/aip_execution_6.png) 60 | 61 | 作为前面情况的扩展,可能会发现离线 HTA 编译器只能处理已识别的 AIP 子网的某些部分,从而使其余部分由多个 HNN 子网覆盖,如上所示。或者,用户可能希望通过向 snpe-dlc-quantize 工具提供其他选项来手动分区网络,以将网络分成多个 HTA 子网(了解有关将网络分区为 HTA 的信息,请参见[添加 HTA 部分](https://developer.qualcomm.com/sites/default/files/docs/snpe/hta_support.html))。 -------------------------------------------------------------------------------- /ch08_工具/8.4 SNPE/imgs/7.4.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/8.4 SNPE/imgs/7.4.1.jpg -------------------------------------------------------------------------------- /ch08_工具/8.4 SNPE/readme.md: -------------------------------------------------------------------------------- 1 | # 特性介绍 2 | 3 | SNPE(Snapdragon Neural Processing Engine),是一个在高通骁龙系列芯片上进行神经网络推理的框架,SNPE toolkit包含的主要功能或特性有: 4 | 5 | - 端侧网络推理,支持的后端包括骁龙CPU,Adreno GPU以及Hexagon DSP; 6 | - x86 Ubuntu Linux主机端调试,仅支持CPU; 7 | - 多种训练框架格式转换到SNPE DLC(Deep Learning Container)格式用于模型推理,支持Caffe,Caffe2,ONNX,TensorFlow和PyTorch; 8 | - 模型定点量化功能,主要用于Hexagon DSP相关后端的推理; 9 | - 针对模型推理阶段的分析和调试工具; 10 | - 可通过C++/Java接口,将神经网络推理功能集成到可执行程序或Android APP中。 11 | 12 | 下图展示了基于SNPE部署网络的workflow: 13 | 14 |
15 | 16 |
17 |
图1. SNPE workflow
18 | 19 | 该workflow可以简单概括为以下步骤:首先,选择一个SNPE支持转换模型的框架,经过训练/测试等步骤后,输出待部署的模型;然后,将该模型转换到SNPE推理所需的DLC模式,如果需要在DSP/AIP后端硬件上进行推理,则需要额外对模型进行一次量化,或在推理阶段选择在线量化;最后,在运行时指定预设的后端,给模型输入数据,进行网络推理。 20 | 21 | 以下是针对SNPE/AIP更详细的介绍: 22 | 23 | [Snapdragon NPE Runtime](./7.4.1%20Snapdragon%20NPE%20Runtime.md) 24 | 25 | [AIP Runtime](./7.4.2%20AIP%20Runtime.md) -------------------------------------------------------------------------------- /ch08_工具/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch08_工具/modify_log.txt -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/9.1.1 路径以及运动规划算法.md: -------------------------------------------------------------------------------- 1 | # 路径以及运动规划算法 2 | 3 | 有关路径规划介绍请参考[这里](../../ch05_%E7%AD%96%E7%95%A5%E8%A7%84%E5%88%92/),简单来说,场景越复杂,路径以及运动规划更难,当前很多智能驾驶的使用场景基本都在高速环路等半封闭的场景。 4 | 5 | 此次特斯拉AI DAY分享了自动驾驶最难的场景之一,也是最考验路径规划的场景---拥堵十字路口,前方道路有行人横穿和行车占道通行的情况下,路径以及运动规划如何进行安全舒适的无保护左转,场景如下图1所示: 6 | 7 |
8 | 9 | ![图1. 拥堵十字路口](./imgs/8.1.1.1.gif) 10 | 11 |
12 |
图1. 拥堵十字路口
13 | 14 | 遇到上图1所示场景,一般处理的方式有: 15 | 16 | - 坚持自己的路径,让其他车辆,行人等交通参与者让自己。 17 | - 在行人和汽车等交通参与者中间找到空隙行驶。 18 | - 礼让汽车和行人,等他们走了,再走。 19 | 20 | 相对应的运算步骤如下: 21 | 22 | (1)对当前场景下所有交通参与者进行运动轨迹预测; 23 | 24 | (2)基于各个轨迹的成本以及约束进行计算; 25 | 26 | (3)让本车以及其他交通参与者的运动轨迹进行交互。 27 | 28 | 特斯拉表示这个运算过程大概耗时10ms,一般一个拥堵的十字路口左转场景,会有超过20个交互相关的交通参与者,有超过100种交互相关组合,那么目标路径规划时间大概是50ms。 29 | 30 | **特斯拉FSD交互搜索算法(Interaction Search)** 31 | 32 |
33 | 34 |
35 |
图2. 交互相关组合
36 | 37 | 该算法主要分为五步: 38 | 39 | (1)视觉环境识别 40 | 41 | 采用稀疏抽取的方法抽取潜在特征来识别车道,障碍物,移动物体等交通参与者。 42 | 43 | (2)选定目标候选人 44 | 45 | 确定车道线,非结构化区域来形成可通行的空间信息。 46 | 47 | (3)产生可能的轨迹 48 | 49 | 通过轨迹优化,神经元规划生成运动轨迹。 50 | 51 | (4)产生运动方案 52 | 53 | 例如到底是强行插入交通还是等待行人通行。 54 | 55 | (5)确定轨迹和时间,速度 56 | 57 | 当确定好运动方案时候,还需要考虑运动轨迹下的其他车辆通行情况,多种考虑之后才能输出运动规划。 58 | 59 | 特斯拉表示第5步,是最难的,因为随着每一步约束的增加,每一种新的轨迹生成运算都需要1-5ms,那么你想想这种情况下大约有一百多种方案,那么显然都快需要0.5s的时间用来运算了。 60 | 61 | 特斯拉想到的方案是lightweight queryable networks轻量化可查询的神经元算法,这种算法是去查找基于其人类驾驶方法场景库以及线下虚拟仿真运算出的结论,也就是查找库已有方案,看他的运动轨迹会怎么做,这样可以在大约100us,也就是0.1ms内来生成一种轨迹。 62 | 63 |
64 | 65 |
66 |
图3. 交互搜索算法框架
67 | 68 | 有了多种轨迹和运动规划之后,接下来还需要选择一种,这个时候特斯拉算法采取对碰撞检查,控制舒适性,需要介入的可能性,是否拟人化等多项要求,进行打分来确定,选定最终轨迹和运动规划。 69 | 70 | 以上就是特斯拉利用其路径规划算法,在解决交通繁忙条件下无保护左转采用的交互搜寻算法,寻找最优的结果的流程。这里一个比较妙的方法是特斯拉有一个人类驾驶行为和仿真参考库提供检索。 71 | -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/9.1.2 环境感知算法.md: -------------------------------------------------------------------------------- 1 | # 环境感知算法 2 | 有关感知的介绍请参考[这里](./../../ch03_感知/), 环境感知是智能驾驶获得外部信息的源头,与大多数厂商不同的是特斯拉环境感知主要依赖视觉,而视觉存在天生缺少深度信息问题。特斯拉本次介绍了其Occupancy Networks 算法用来探索可运动3D空间, 本文接下来将对其提出的Occupancy Networks 算法进行研究分析。 3 | 4 | ## 一、Occupancy Network 5 | 6 | ### (一)算法介绍 7 | 8 | Occupancy Network 算法是特斯拉近几年一直在开发的算法,主要是通过特斯拉外部的8个摄像头视频流,去构建基于几何体积块的环绕汽车的3D空间,并持续去识别全貌即使短时间内有遮挡物,能够识别标注Occupancy的物体,例如马路牙子、汽车、行人等。此外算法还能识别物理的流动,来预测一些偶然的流体运动,如长巴士(拖挂车)的甩尾,Occupancy Network 算法可以高效识别感兴趣的点。特斯拉表示其Occupancy Network算法在算力和内存之间取得很好的效率,大概10ms就可建模完成,目前此算法已经运行在所有FSD的特斯拉上,如下图1所示。 9 | 10 |
11 | 12 | ![图1. 拥堵十字路口](./imgs/8.1.2.1.gif) 13 | 14 |
15 |
图1. 构建环绕汽车的3D空间
16 | 17 | ### (二)算法架构 18 | 19 |
20 | 21 |
22 |
图2. Occupancy Network算法架构
23 | 24 | 如上图2所示,Occupancy Network算法工作流大概分以下七个步骤: 25 | 26 | **1. Image Input** 27 | 28 | 8个摄像头依据摄像头标定矫正后直接输入给算法,视觉输入不使用ISP(以人为本的图像处理); 由于摄像头的原始数据是4 位颜色16倍的动态范围给到算法,可以减少输入的延迟。 29 | 30 | * 注: ISP模块会将Sensor采集到的数据进行插值和特效处理,例如:如果一个感光点感应的颜色是R,那么,ISP模块就会根据这个感光点周围的G、B感光点的数值来计算出此点的G、B值,那么,这一点的RGB值就被还原了,然后在编码成601或656的格式传送给Host。经过彩色插值就变成RGB。RGB 每个像素都有三种颜色,每一个的值在0~255之间, 即8位颜色。 31 | 32 | **2. Image Featurizers** 33 | 34 | 使用预训练的深度神经网络模型对图像进行提取特征, 输入给下一步。特斯拉采用RegNet和BiFPNs算法来提取特征,特征化基本就是识别物体了。 35 | 36 | **3. Spatial Attention** 37 | 38 | 是卷积神经网络中用于空间注意的模块。它利用特征的空间关系生成空间注意力图,也就是构建空间信息。将 Mlticam Qurey Emdedding(多摄像头查询)和 Spatial Query(空间查询)的输出,输入入注意力Attention模块来构建空间。 39 | 40 | **4. Temporal Alignment** 41 | 42 | 分为两个部分,一个部分是自己车辆的轨迹对齐,另外一个将各个识别特征物对齐,初步形成了时空特征。 43 | 44 | **5. Deconvolutions** 45 | 46 | 去卷积也就是把浓缩的特征反向成物体。路面地理信息(如上下坡度)一直普通视觉算法的难点,特斯拉表示其算法能够识别路面的地理特征。 47 | 48 | **6. Volume Outputs** 49 | 50 | 去卷积之后的反向物体,将从空间上能代表物体大小,被放置在时空中,而且此类空间占据还根据路面的情况自动匹配,这里特斯拉讲到一个算法NeRF state,能够表示具有复杂遮挡的详细场景几何,这样可以让时空更加真实。 51 | 52 | **7. Queryable Outputs** 53 | 54 | 去卷积之后的反向物体有些可能不能完全代表真实的物体的大小,所以特斯拉算法采用查询法去数据库中查询真实世界的结果,进行位置和大小的矫正再进行空间放置。 55 | 56 | Occupancy Networks 算法可以通过摄像头获取数据,然后利用NeRFs算法构建真实世界的精准映射,即虚拟世界。当然特斯拉当前的虚拟构建并未把摄像头色彩完全投影进来,特斯拉目前主要任务是通过车辆获取数据来构建可支持自动驾驶所需关键信息的虚拟3D世界。 57 | 58 |
59 | 60 | ![图3. 虚拟3D世界](./imgs/8.1.2.3.gif) 61 | 62 |
63 |
图3. 虚拟3D世界
64 | 65 | 特斯拉表示其Occupancy Networks 算法都是自动标注算法训练而成的,与 BEV(Bird's-eye view 鸟瞰图)相比,Occupancy Networks 算法可以让自动驾驶对可行驶空间有了进一步的理解,对后续决策更加友好。 66 | 67 | ## 二、新车道识别算法 68 | 69 |
70 | 71 |
72 |
图4. 基于2D的车道识别
73 | 74 | 特斯拉老版本车道识别算法是基于2D平面的RegNet分割算法,在高速以及清晰高度结构化的场景应用的比较好,目前基本上国内车型应该都采用此类算法,当然国内的道路结构化都比较好,但在国外那种路面国内车型都是挑战,毕竟国外的设施都没有国内新。 75 | 76 | 当然车道清晰等也不是特斯拉老算法的主要问题,特斯拉在国外训练的算法对于清晰度应该也不是问题,问题是城市应用场景中,简单转弯分隔的结构化车道,繁忙交通中交汇口前车遮挡等无法采集到足够的数据的时候,此类问题是经典车道识别算法无法解决。 77 | 78 | 当然国内依赖高精地图的智能驾驶方案,此类问题基本可以解决,这就是为什么现在的城市领航辅助迟迟没上。高精地图,一需要测绘,二需要有关部门批准。所以不使用高精地图仅仅依靠视觉算法的特斯拉给出的答案是:用神经元算法预测,生成全套车道实例及其相互连接。 79 | 80 | ## 三、FSD新车道算法三个组件 81 | 82 |
83 | 84 |
85 |
图5. FSD新车道算法三个组件
86 | 87 | ### (一)视觉组件 88 | 89 | 车辆上八个摄像头的视频流输入卷积层、注意层和其他神经网络层进行编码,或许丰富的环境信息,然后生成带有粗略路线图的表示。 90 | 91 | ### (二)地图组件 92 | 93 | 额外的神经网络层编码的道路级地图数据,特斯拉称之为车道引导,这张地图不是高清地图,但它提供了许多关于交叉口的有用提示,车道内的拓扑结构,交叉路口的车道数,以及一组其他属性。 94 | 95 | 这里的前两个组成部分产生了一个密集张量世界,可以对世界进行编码,但特斯拉真正想做的是转换这个稠密的张量为智能驾驶车道的连通集合。 96 | 97 | ### (三)语言组件 98 | 99 |
100 | 101 |
102 |
图6. FSD新车道算法语言组件
103 | 104 | 特斯拉将这个任务看成一个图像转字幕的语言任务,这个任务的输入是这个稠密的张量,输出的特殊的文本语音用来预测车道连通。用这种车道语言单词和符号对车道进行编码,这些单词和符号就是3D中的车道位置,在单词符号中引入修饰语,对连接词进行编码通过将任务建模为语言问题,我们可以利用语言人工智能算法的最新技术来处理道路的多重连通集合。 105 | 106 | 用最先进的语言建模和机器学习算法来解决计算机视觉问题,语言算法应该在人工智能算法中属于比较先进发展较快的一个分支,主要原因应该是语言数据更易得和数据量小,便于学习训练,此次特斯拉发布的车道线识别算法的亮点就是这个。 107 | 108 | 109 | -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/9.1.3 训练算法、设施、软件.md: -------------------------------------------------------------------------------- 1 | # 训练算法、设施、软件 2 | 3 |
4 | 5 |
6 |
图1. 特斯拉算力
7 | 8 | ## 一、算力及数据 9 | 10 | ### (一)算力 11 | 12 | 特斯拉目前有3个超算中心,采用了1.4万个GPU,其中4000个用于自动标注数据,其中10000个用于训练算法。 13 | 14 | ### (二)数据 15 | 16 | **1. 图像数据:** 17 | 18 | 特斯拉表示需要训练Occupancy Networks算法,特斯拉目前已经从采集视频中提取出14.4亿张图片;训练这些数据,需要GPU温度达到90度高温的情况下,10万个GPU满负荷计算一小时。 19 | 20 | **2. 视频数据:** 21 | 22 | 目前有30PB分布式视频缓存,1PB=1048576GB你想想30PB多大。其中抽取了1600亿张图片。而且这些数据不是静态的,是动态流转的,每天50万个视频轮流缓存更替,每秒40万个视频转化。 23 | 24 | 所以显然,特斯拉当前这数据中心按照正常的方法肯定行不通,同时可想而知特斯拉对于GPU超算的饥渴程度,另外特斯拉还想加速他的计算能力,这样决定了特斯拉必须自己搞芯片。 25 | 26 | ## 二、数据流优化 27 | 28 | 特斯拉从数据的存储,到数据的加载,最后处理,形成一个倒漏洞的形状,最大限度的压榨计算资源。 29 | 30 |
31 | 32 |
33 |
图2. 数据流优化
34 | 35 | 要实现这些,必须考虑数据量的分配,数据流的带宽,CPU,内容,机器学习的框架,而多台GPU同步运算你要考虑延迟,考虑GPU之间的带宽是非常复杂的。 36 | 37 | 首先视频是动态和复杂的,不是简单的图片机器学习,特斯拉的视频到图片再到学习处理过程是动态,所以第一步加速视频库可以增加30%的训练速度。 38 | 39 |
40 | 41 |
42 |
图3. 视频压缩
43 | 44 | 特斯拉采用Pytorch进行视频压缩类的工作,加速视频库,如上图3,图中I 帧(帧内编码图片)是完整的图像,例如JPG或BMP图像文件。P帧(预测图片)仅保存图像与前一帧相比的变化。例如,在汽车穿过静止背景的场景中,只需要对汽车的运动进行编码。编码器不需要在 P 帧中存储不变的背景像素,从而节省空间。P 帧也称为增量帧。 45 | 46 |
47 | 48 |
49 |
图4. 数据优化指标
50 | 51 | 如上图4所示,通过这种方式特斯拉实现了2.3倍的训练速度增加,现在特斯拉用1024块GPU可以实现几天内从头开始聚合这些数据。 52 | 53 | ## 三、算法编译器以及推理优化 54 | 55 | 上一节讲了对数据链路进行了优化,训练速度提升明显,接下来的优化点放在芯片级上,具体提到算法编译器compiler以及reference推理。 56 | 57 | 58 |
59 | 60 |
61 |
图5. 算法编译器以及推理优化
62 | 63 | 算法编译器compiler,将AI算法模型映射到高效的指令集和数据流。执行复杂的优化,例如层融合、指令调度和尽可能重用片上内存。特斯拉的人工智能算法代码运行会并行,重复以及回滚,那么特斯拉想要解决的问题是,如何高效的让代码运行在芯片上面,例如不重复计算,计算之间编排紧凑不空闲不堵塞,这样可以减少延迟,降低功耗。为此,特斯拉设计了一个Arc Max 以及一个中央操作来将稀疏(例如车道的空间位置)编码到首页,然后选择学习算法过程链接到首页。然后在静态内存SRAM中构建一个查询表格,把重复算法存入缓存,这样就不需要重复计算,只需要查询调用。 64 | 65 | 特斯拉表示在FSD车道识别算法中,这项编码提升了其算法9.6ms的延迟,能耗大概只有8w。这种编码的思维贯穿到整个特斯拉FSD算法中,特斯拉构建了一个新的算法编译器用来编译超过1000多个算法信号。通过编译器和推理的优化,确保优算力,低功耗,低延迟的AI计算,即“不拼算力,拼算法软件”。 66 | 67 | 68 | -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/9.1.4 数据标注、采集、虚拟化.md: -------------------------------------------------------------------------------- 1 | # 数据标注、采集、虚拟化 2 | 3 | 现阶段,人工智能的实现多数基于数据标注;广义上,数据喂的越多,算法效果越精准。所以海量数据是精准算法的基础,而海量数据的前提是这些数据带标签,即标注信息。 4 | 5 | 数据标注有两种方法,一种是人工标注,依靠人给数据打标签,非常消耗人力物力,更重要的是时间。一种是自动标注,比如采用聚类的方式,自动标注显然是省时省力的事情,下文将分析特斯拉自动标注方法。 6 | 7 | 特斯拉认为他要实现十字路口车道算法,大概需要几千万个驾驶旅程,经过大概百万个十字路口。特斯拉目前大概每天有50万个旅程,但是要把这些旅程转化成可训练的数据是非常难的课题,特斯拉表示尝试了各种人工和自动标注方法,显然不太可能。为此,特斯拉开发了新自动标注算法耗时12个小时对1万个驾驶旅程,相当于500万小时的人工标注。 8 | 9 | ## 一、自动标注步骤 10 | 11 | 特斯拉表示其车道算法的自动标注,主要采用以下三个步骤来实施: 12 | 13 |
14 | 15 |
16 |
图1. 车道的自动标注
17 | 18 | ### (一)高精轨迹获取 19 | 20 | >特斯拉每天可以获取50万个旅程,这些旅程的采集信息为车辆的视频,车辆运动IMU陀螺仪,速度作为原始信号输入,之后在车上的2个CPU线程(所有开通FSD的车辆产生这些信息)去跟踪优化,特征提取输出车辆6个自由度100hz的运动轨迹以及3D结构的道路细节。 21 | 22 | ### (二)多旅程重构 23 | 24 | >由于获取的数据来自不同车辆,所以还需要得到每辆车的高精轨迹信息,进行旅程的道路信息的匹配、重构、接缝优化、包面优化,最后人工分析师进行验证,形成多重旅程的轨迹信息。 25 | 26 | ### (三)自动标注旅程 27 | 28 | >自动标注只会去标注新添加的旅程,而不是去重构所有的片段,相比于几小时的人工标注,自动标注仅需半个小时就可以完成一段旅程的标注。 29 | 30 |
31 | 32 | ![图2. 自动标注过程](./imgs/8.1.4.2.gif) 33 | 34 |
35 |
图2. 自动标注过程
36 | 37 | 自动标注方式极其容易规模化,只需要有计算单元以及驾驶旅程信息,如上图2所示,此片段时间内,自动标注系统标注了来自53台车的50组数据。自动标注的方法应用于特斯拉算法的各个方面。 38 | 39 | ## 二、构建3D虚拟场景 40 | 41 | 现实的数据获取困难同时很难去标注,但传统的3D场景重构缓慢,所以特斯拉在虚拟验证方面,应用新的方法5分钟就能够构建3D虚拟场景。 42 | 43 | ### (一)介绍 44 | 45 | 特斯拉的建模是首先把场景的真值(Ground truth)输入3D建模软件Houdini,先开始构建道路的边缘,在构建路面地理特征,之后将车道信息投影进入路面,接下来使用道路中间的边缘形成绿化岛。这样基本的主要特征形成,那么道路两边的树以及建筑物都可以随机构建。 46 | 47 |
48 | 49 |
50 |
图3. 车道线投影建模
51 | 52 | 车道信息基础上可以引入地图交通信息,如红绿灯、行人、道路名等信息,形成了场景的基础;当然还有天气、光线等形成模拟场景。特斯拉更进一步去改变道路的真值形成新的场景,例如十字路口车道线场景,可以改变里面的车道信息,创建更多基于真实场景的变种场景,来帮助算法训练,而不是只能通过现实采集。在构建虚拟数据后,可以快速的进行各种场景的虚拟测试去优化算法,而省去实际测试费时费力的时间。 53 | 54 | ### (二)场景构建架构 55 | 56 |
57 | 58 |
59 |
图4. 场景构建架构
60 | 61 | 构建过程如上图4所示,先有道路交通真值信息,然后元素创造者将交通信息标签转换成元素,例如上文将到的车道线,马路牙子,建筑物等都属于元素。再通过元素提取工具将这些信息分成几何信息和交通实例元素放到150平米Geohash中,并给他命名ID 方便使用加载调用。 62 | 63 | 这样建模信息更加简洁,更容易加载和渲染,然后使用元素加载器工具,特斯拉可以使用Geohash ID编码去加载任意数量的缓存切片,一般虚拟的时间就加载感兴趣的地点以及周边。最后是虚拟引擎生成场景。 64 | 65 | ### (三)场景构建流程 66 | 67 |
68 | 69 |
70 |
图5. 场景构建流程
71 | 72 | 基于以上流程,工程师2周就可以生成旧金山的街道虚拟世界,而非几个月甚至年来做单位。相同的技术可以拓展到城市和国家,或者更新原有的虚拟世界,确保数据依据现实动态发展。 73 | 74 | ### (四)现实数据采集器 75 | 76 |
77 | 78 | ![图6. Corner Case极端场景](./imgs/8.1.4.6.gif) 79 | 80 |
81 |
图6. Corner Case极端场景
82 | 83 | 特斯拉的仿真能力虽然很强,但很多corner case 极端的场景依然需要真实场景数据。如上图6所示,特斯拉的FSD正在进入弯路口,通过这里的时候,看到旁边有一个车子,现有算法下的特斯拉会认为有车子在等待通行,所以特斯拉自动驾驶车子会减速,但现实这是一个没有人在里面的奇怪停车。 84 | 85 | 此类场景估计任何脑洞大开的虚拟验证都不会想到,必须要有实际场景来识别这类corner case极端场景,所以自动驾驶真实场景数据的收割必须要有,而且还是动态发展的,不同时间,不同城市,不同文化的数据都会不一样。 86 | 所以特斯拉构建了一个工具去识别错误的判断并去纠正标签,并把这个片段归类为需要重新评估的系列。这个场景特斯拉把它诊断为挑战性的在转弯处有停车的场景,目前特斯拉识别了126个这样的场景,挖掘以及促进训练了1.39万视频数据,来提升预测准确性。 87 | 88 | ### (五)数据引擎 89 | 90 |
91 | 92 |
93 |
图7. 数据引擎
94 | 95 | 特斯拉解决这类场景需要成千上万这种场景,而特斯拉利用数据采集车辆(客户的车或试验车),以及设备去采集和更正标签来解决这种琐碎的场景。把这种数据引擎框架实施到所有算法的持续优化中,数据引擎是一个完整的从实验车型,虚拟验证,终端用户的流。特斯拉能够大规模使用数据引擎的基础设施为算法提供数据食物,得益于其庞大的车队(终端用户汽车影子模式传输客户使用FSD时候的介入信息以及实验车队的再确认数据)。 96 | -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
图1. FSD2022 更新解析
5 | 6 | 2022年的特斯拉 AI Day分为三大主题:AI机器人-Optimus、AI智能驾驶FSD、AI超算芯片技术。本文针对只介绍FSD智能驾驶,该部分主要介绍特斯拉底层人工智能算法技术,也是其汽车,机器人共用的底层算法。 7 | 8 | **一、特斯拉自动驾驶FSD现状** 9 | 10 |
11 | 12 |
13 |
图2. 特斯拉自动驾驶FSD现状
14 | 15 | 目前特斯拉自动驾驶软件FSD的使用客户已经从2021年的2千人上升到现在的16万人。仅去年就通过480万段数据训练了超过75000个算法模块,其中交付给车辆281个算法模块,完成了35次版本的发布。 16 | 17 | 关于特斯拉的FSD的算法技术部分,此次特斯拉2022 AI Day把其FSD背后的技术,按照从终端客户使用感觉到的使用问题开始,然后一步一步深入背后的算法创新优化,算法背后的数据训练等串起来讲。本文将其总结为如下四个部分: 18 | 19 | **二、特斯拉自动驾驶FSD算法优化情况** 20 | 21 |
22 | 23 |
24 |
图3. 特斯拉自动驾驶FSD算法优化情况
25 | 26 | (1) 路径以及运动规划算法: 27 | 当算法植入到终端(车或者机器人),终端通过算法感知环境,规划路径,确保安全,平顺前进。 28 | 29 | (2) 环境感知算法: 30 | - Occupancy 算法,也就是可活动空间探测 31 | - Lane & Objects 车道以及物体算法,交通中的信息语义层也就是车道线,物体识别以及运动信息。 32 | 33 | (3) 训练算法设施以及软件: 34 | - 训练数据的设施,超算中心用来支持数据处理,算法训练。 35 | - 人工智能算法的编译器以及推理,就是训练算法的框架以及软件方法。 36 | 37 | (4) 数据标注,采集和虚拟: 38 | - 自动标注算法,训练环境感知算法必须需要已经具有标签的数据,自动标注算法就是标注数据,训练环境感知算法识别这类场景或者物体。 39 | - 环境虚拟,合成制造虚拟场景。 40 | - 数据引擎,现实场景车辆,测试软件获取真实场景环境数据,闭环数据引擎,更正标签等。 -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.1.1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.1.1.gif -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.1.2.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.1.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.1.3.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.1.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.1.gif -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.2.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.3.gif -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.4.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.5.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.6.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.2.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.1.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.2.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.3.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.4.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.5.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.6.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.3.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.1.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.2.gif -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.3.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.4.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.5.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.6.gif -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/imgs/8.1.4.7.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.1 特斯拉 AI Day2022/modify_log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.1 特斯拉 AI Day2022/modify_log.txt -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.1.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.10.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.11.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.12.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.2.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.3.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.4.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.5.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.6.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.7.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.8.jpg -------------------------------------------------------------------------------- /ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/ch09_厂商方案/9.2 百度阿波罗apollo/imgs/8.2.9.jpg -------------------------------------------------------------------------------- /imgs/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/imgs/1.jpg -------------------------------------------------------------------------------- /imgs/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/imgs/2.jpg -------------------------------------------------------------------------------- /imgs/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gotonote/Autopilot-Notes/04e38c8f5cdd29b8fd77440784f4b9d0018490b5/imgs/3.jpg -------------------------------------------------------------------------------- /文章撰写规范.md: -------------------------------------------------------------------------------- 1 | # 文章撰写规范 2 | 3 | ## 一、文章序号用法说明 4 | . 5 | 6 | |ch01 7 | 8 | |-- 1.1、1.2、1.3 9 | 10 | |---- 1.1.1、1.1.2、1.1.3 11 | 12 | |------- 1.1.1.1、1.1.1.2、1.1.1.3 13 | 14 | |--------- 章节名称 ---------------------- '#' 15 | 16 | |--------- 一、二、三 -------------------- '##' 17 | 18 | |----------- (一)、(二)、(三) ---- '###' 19 | 20 | |--------------- 1.、2.、3. -------------- '** **' 21 | 22 | |------------------ (1)、(2)、(3)---- '* *' 23 | 24 | |--------------------- • ------------------ '*' 25 | 26 | |--------- 注解 -------------------------- '##' 27 | 28 | |--------- 参考文献 ---------------------- '##' 29 | 30 | 31 | 32 | ## 二、图片插入 33 | 34 | 35 |
36 | 37 |
38 |
图1.样例
39 | 40 | 41 | 42 | ## 三、注解 43 | 44 | ### 1. annotate 45 | 46 | * 使用方法:[A](#1-annotate) 47 | 48 | 49 | ## 四、参考文献章内索引 50 | 51 | 索引[1](#refer-anchor) 52 | 53 |
54 | 55 | ## 参考文献 56 | 57 | [1] autopilot updating notes 58 | 59 | 60 | --------------------------------------------------------------------------------