学习Autoware开源框架的资料整理,侵删!
开源自动驾驶框架Autoware介绍
Autoware包含以下模块:
1.定位:通过结合GNSS和IMU传感器的3D地图和SLAM算法来实现定位
2.检测:使用具有传感器融合算法和深度神经网络的摄像机以及LiDAR
3.预测和规划:基于概率机器人技术和基于规则的系统,部分还使用深度神经网络
4.控制:Autoware向车辆输出的速度和角速度的扭曲量
以上四个模块覆盖了自动驾驶的技术流程:
感知层 – 预测及规划层 – 控制层
Autoware框架:浅析Apollo和Autoware的异同
主要包括感知(preception)和规划(planning)两部分:
(参考Autoware主要模块的解释及构架框图)
1.Localization
- lidar_localizar:计算车辆在全局坐标的当前位置(x,y,z,roll,pitch,yaw),使用Lidar的扫描数据和预先构建的地图信息。Autoware推荐使用NDT算法来匹配激光雷达当前帧和3D Map。
pitch是围绕X轴旋转,也叫做俯仰角;yaw是围绕Y轴旋转,也叫偏航角;roll是围绕Z轴旋转,也叫翻滚角。
- gnss_localizer:转换GNSS接收器发来的NEMA消息到位置信息(x,y,z,roll,pitch,yaw),结果可以被单独使用为车辆的当前位置,也可以作为lidar_localizar的初始参考位置。
- dead_reckoner:主要使用IMU传感器预测车辆的下一帧位置,也可以用来对lidar_localizar和gnss_localizar的结果进行插值。
2.Detection
- lidar_detector:从激光雷达单帧扫描读取点云信息,提供基于激光雷达的目标检测。主要使用欧几里得聚类算法,从地面以上的点云得到聚类结果,除此之外还可以使用卷积神经网络的算法进行分类(VoxelNet,LMNet)。
- image_detector:读取来自摄像头的图片,提供基于图像的目标检测。主要的算法包括R-CNN,SSD和Yolo,可以进行多类别(汽车,行人等)实时目标检测。
- image_tracker:使用image_detector的检测结果完成目标跟踪功能。算法基于Beyond Pixels,图像上的目标跟踪结果被投影到3D空间,结合lidar_detector的检测结果输出最终的目标跟踪结果。
- fusion_detector:输入激光雷达的单帧扫描点云和摄像头的图片信息,进行在3D空间的更准确的目标检测。激光雷达的位置和摄像头的位置需要提前进行联合标定,现在主要是基MV3D算法来实现。
- fusion_tools: 将lidar_detector和image_detector的检测结果进行融合,image_detector 的识别类别被添加到lidar_detector的聚类结果上。
- object_tracter: 预测检测目标的下一步位置,跟踪的结果可以被进一步用于目标行为分析和目标速度分析。跟踪算法主要是基于卡尔曼滤波器。
3.Prediction
- moving_predictor: 使用目标跟踪的结果来预测临近物体的未来行动轨迹,例如汽车或者行人。
- collision_predictor: 使用moving_predictor的结果来进一步预测未来是否会与跟踪目标发生碰撞。输入的信息包括车辆的跟踪轨迹,车辆的速度信息和目标跟踪信息。
以下内容学习《无人驾驶车辆模型预测控制》(针对低速)
路径跟踪与轨迹规划:
路径点 + 时间约束 = 轨迹点
路径规划 + 车辆的横、纵向动力学约束 = 轨迹规划
对于无人汽车来说,全局路径点只要包含空间信息,或者包含姿态信息,而不需要和时间相关,但是对于局部规划需要考虑时间信息。
对于触须生成时,采用圆弧曲线,忽略了车辆转弯半径的变换,但是在高速环境下容易跟踪失败!
假设车辆在运动过程中没有滑移,那么就是非完整性动力学约束,在低速行驶过程中可以考虑忽略横向动力学。(纯跟踪算法Pure Pursuit)
在参考书中,通过2自由度和14自由度模型的跟踪结果对比表明:
复杂的预测模型并不是最好的选择,对车辆的动力学模型进行合理简化并且选择满足行驶工况的约束条件才是研究的对象。也就是说,在模型预测控制中,模型约束条件能够表达控制对象的真实物理限制即可。
车辆运动学建模推导
在后轴的行驶轴心上,
X
r
ˊ
\acute{X_r}
Xrˊ和
Y
r
ˊ
\acute{Y_r}
Yrˊ分别代表在XY方向上的导数,即速度。将其分解到车辆的行驶方向上,即:
v
r
=
X
r
ˊ
c
o
s
φ
+
Y
r
ˊ
s
i
n
φ
v_r = \acute{X_r}cos\varphi+\acute{Y_r}sin\varphi
vr=Xrˊcosφ+Yrˊsinφ且在前后轴上,横向速度应当为0,即满足运动学约束:
X
f
ˊ
c
o
s
(
φ
+
δ
f
)
−
Y
f
ˊ
s
i
n
(
φ
+
δ
f
)
=
0
\acute{X_f}cos(\varphi+\delta_f)-\acute{Y_f}sin(\varphi+\delta_f)=0
Xfˊcos(φ+δf)−Yfˊsin(φ+δf)=0
X
r
ˊ
s
i
n
φ
−
Y
r
ˊ
c
o
s
φ
=
0
\acute{X_r}sin\varphi-\acute{Y_r}cos\varphi=0
Xrˊsinφ−Yrˊcosφ=0
联立上式:
X
r
ˊ
=
Y
r
ˊ
c
o
s
φ
s
i
n
φ
\acute{X_r}=\acute{Y_r}{cos\varphi \over sin\varphi}
Xrˊ=Yrˊsinφcosφ
v
r
=
Y
r
ˊ
c
o
s
φ
s
i
n
φ
c
o
s
φ
+
Y
r
ˊ
s
i
n
φ
=
Y
r
ˊ
c
o
s
φ
2
+
Y
r
ˊ
s
i
n
φ
2
s
i
n
φ
=
Y
r
ˊ
s
i
n
φ
v_r = \acute{Y_r}{cos\varphi \over sin\varphi}cos\varphi+\acute{Y_r}sin\varphi ={ \acute{Y_r}cos\varphi ^2+\acute{Y_r}sin\varphi^2 \over sin\varphi}= {\acute{Y_r} \over sin\varphi}
vr=Yrˊsinφcosφcosφ+Yrˊsinφ=sinφYrˊcosφ2+Yrˊsinφ2=sinφYrˊ
因此可得:
v
r
s
i
n
φ
=
Y
r
ˊ
v_r sin\varphi = \acute{Y_r}
vrsinφ=Yrˊ同理:
v
r
c
o
s
φ
=
X
r
ˊ
v_r cos\varphi = \acute{X_r}
vrcosφ=Xrˊ
根据前后轮的几何关系:
X
f
=
X
r
+
l
c
o
s
φ
X_f = X_r + lcos\varphi
Xf=Xr+lcosφ
Y
f
=
Y
r
+
l
s
i
n
φ
Y_f = Y_r + lsin\varphi
Yf=Yr+lsinφ
根据轮速差估算横摆角速度:
Y
a
w
r
a
t
e
=
(
外
侧
轮
速
−
内
侧
轮
速
)
轮
距
×
c
o
s
(
车
轮
转
角
)
Yaw_{rate}={(外侧轮速-内侧轮速) \over 轮距}×cos(车轮转角)
Yawrate=轮距(外侧轮速−内侧轮速)×cos(车轮转角)
使用后轮计算横摆角,因为后轮没有偏移角,即
c
o
s
0
=
1
cos0=1
cos0=1,但是一般使用驱动轮因此:
ω
=
v
r
l
t
a
n
δ
f
\omega = {v_r \over l}tan\delta_f
ω=lvrtanδf
同时可得到:
R
=
v
r
ω
R={v_r \over \omega}
R=ωvr
δ
f
=
a
r
c
t
a
n
(
ω
l
v
r
)
=
a
r
c
t
a
n
(
l
R
)
\delta_f = arctan({\omega l \over v_r})=arctan({l \over R})
δf=arctan(vrωl)=arctan(Rl)
综上可得到运动学模型:
[
X
r
ˊ
Y
r
ˊ
φ
ˊ
]
=
[
c
o
s
φ
s
i
n
φ
t
a
n
δ
f
l
]
v
r
=
[
c
o
s
φ
s
i
n
φ
0
]
v
r
+
[
0
0
1
]
ω
\begin{bmatrix} \acute{X_r} \\ \acute{Y_r} \\ \acute{\varphi} \end{bmatrix}= \begin{bmatrix} cos\varphi \\ sin\varphi \\ {tan\delta_f \over l} \end{bmatrix}v_r=\begin{bmatrix} cos\varphi \\ sin\varphi \\ 0 \end{bmatrix}v_r+\begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix}\omega
⎣⎡XrˊYrˊφˊ⎦⎤=⎣⎡cosφsinφltanδf⎦⎤vr=⎣⎡cosφsinφ0⎦⎤vr+⎣⎡001⎦⎤ω