在用于强化学习的自动驾驶仿真场景highway-env(1)中,我们简要说明如何使用该仿真场景。
本文重心为关键的场景配置说明。
所有的环境都包含观测模型。可以通过config来配置对应模型。
观测就是使用一种合适的数学模型将周围交互环境表征出来。对应到强化学习中的state!比如car的位置朝向起点、终点等特征。
最常用的一种表征环境的形式。
通过list的形式,将所有的vehicle的坐标的速度表示出来。
形如:
上表中共包含四个feature,横纵坐标和速度。
ego-vehicle总是在第一排。
如果配置参数中的normalize=True
,意味着所有参数都统一伸缩固定比例。
如果参数absolute = False
,所有的坐标值是指相对于ego-vehicle而言
grayscale image
config:
config = {
"observation": {
"type": "GrayscaleObservation",
"observation_shape": (128, 64),
"stack_size": 4,
"weights": [0.2989, 0.5870, 0.1140], # weights for RGB conversion
"scaling": 1.75,
},
"policy_frequency": 2
}
config
"observation": {
"type": "OccupancyGrid",
"vehicles_count": 15,
"features": ["presence", "x", "y", "vx", "vy", "cos_h", "sin_h"],
"features_range": {
"x": [-100, 100],
"y": [-100, 100],
"vx": [-20, 20],
"vy": [-20, 20]
},
"grid_size": [[-27.5, 27.5], [-27.5, 27.5]],
"grid_step": [5, 5],
"absolute": False
}
效果如下:
第一个维度的presence表征当前的小车相对于ego vehicle的位置。
time to collision碰撞时间
config
"observation": {
"type": "TimeToCollision"
"horizon": 10
}
基于当前速度,计算可能发生的碰撞时间。这种表征模式感觉不太好用。
与状态的表征一样,仿真平台同样提供很多动作类型的描述。
这种action类型允许agent直接设置Kinematic Bicycle Model. 通过throttle 和 steering angle
关于该模型的详细描述,参见论文
Philip Polack, Florent Altché, and Brigitte D’Andréa-Novel. The Kinematic Bicycle Model : a Consistent Model for Planning Feasible Trajectories for Autonomous Vehicles ? IEEE Intelligent Vehicles Symposium, pages 6–8, 2017.
公式表述如下:
其中, x , y x, y x,y为车辆的pos, v v v为车辆的前向速度, ψ \psi ψ为车体朝向角, β \beta β为车重心的slip angle, δ \delta δ 为方向盘命令的前轮转动角度。
这些计算将会出现在对应的step()
function中。
在continuous low-level control
的基础上,增加了一层speed and steering controllers
,从而实现ego-vehicle按照设定速度自动follow road
meta-actions
包括改变速度和改变lane,可用于为底层控制器setpoint
ACTIONS_ALL = {
0: 'LANE_LEFT',
1: 'IDLE',
2: 'LANE_RIGHT',
3: 'FASTER',
4: 'SLOWER'
}
longitudinal纵向控制与lateral横向控制的action,都可以通过对应参数选择是否开启。
env也能单纯用于仿真器
import gym
import highway_env
env = gym.make("highway-v0")
env.configure({
"manual_control": True
})
env.reset()
done = False
while not done:
env.step(env.action_space.sample())
env.render()
这个时候使用手动控制就好。使用上下左右键盘控制小车的变道与加减速。
dynamics部分主要描述车辆的运动和行为。
roads是由RoadNetwork
+ Vehicle
共同构成。
主要包括如下几种:
road-network: road的拓扑结构图,edge用lane
表示,nodes用intersections
表示
交通规则,定义车辆的哪种行为拥有较高的优先权。
当前仅仅实现了靠右行,避障等基础规则。当然你可以基于源码进行扩展。
主要叙述车的物理与行为模型。
在前文描述continuous action 的时候已经介绍过这种运动学模型。
控制器使得小车能够按照既定速度既定轨道行进。在调用act()
function的时候,执行对应的控制。纵向的控制主要是对应油门开度。而横向的控制需要对应到方向盘转角。
longitudinal controller
a = K p ( v r − v ) a=K_p(v_r-v) a=Kp(vr−v)
a a a是车辆的加速度,对应油门开度。
v v v是车子当前速度。
v r v_r vr是参考车速(reference)
K p K_p Kp是比例调节参数
lateral controller
一个简单的比例微分控制器。
position control:
v l a t , r = − K p , l a t Δ l a t v_{lat,r}=-K_{p,lat}\Delta_{lat} vlat,r=−Kp,latΔlat
Δ ψ r = a r c s i n ( v l a t , r v ) \Delta\psi_r=arcsin(\frac{v_{lat,r}}{v}) Δψr=arcsin(vvlat,r)
Heading control:
ψ r = ψ L + Δ ψ r \psi_r = \psi_L+\Delta\psi_r ψr=ψL+Δψr ψ ˙ r = K p , ψ ( ψ r − ψ ) \dot\psi_r=K_{p,\psi}(\psi_r-\psi) ψ˙r=Kp,ψ(ψr−ψ) δ = a r c s i n ( l 2 v ψ ˙ r ) \delta=arcsin(\frac{l}{2v}\dot\psi_r) δ=arcsin(2vlψ˙r)
对于其他的仿真vehicles,运动学的实现更为简单。
Longitudinal Behavior
纵向的加速度模型,使用如下模型 Intelligent Driver Model (IDM)表示:
出自论文:
Martin Treiber, Ansgar Hennecke, and Dirk Helbing. Congested traffic states in empirical observations and microscopic simulations. Physical Review E - Statistical Physics, Plasmas, Fluids, and Related Interdisciplinary Topics, 62(2):1805–1824, 2000.
v是车速,d是与前车的距离,a、b分别是最大加速度和最大减速度。
v 0 v_0 v0: target_velocity
T: desired time gap,时间间隔
d 0 d_0 d0: jam distance, 安全距离
Lateral Behavior
变道的决策通过模型Minimizing Overall Braking Induced by Lane change(MOBIL)给出。论文出处:
Arne Kesting, Martin Treiber, and Dirk Helbing. General lane-changing model MOBIL for car-following models. Transportation Research Record, 2007. doi:10.3141/1999-10.
激励方案:
其中: