基于carla和python的自动驾驶仿真系列3
发布日期:2021-05-20 09:15:18 浏览次数:23 分类:精选文章

本文共 1281 字,大约阅读时间需要 4 分钟。


在本教程中,我们将利用Carla API的知识,将驾驶问题转化为强化学习问题。强化学习通过试错机制来学习最优策略,而在这个问题中,我们将使用一个具体的环境模型来模拟驾驶过程。

接下来,我们将创建一个接近标准化强化学习环境的类。这个环境将提供一个以步进为单位的交互方式,称为step方法,该方法返回观察值、奖励、是否结束当前任务以及额外信息。同时,我们还将实现一个reset方法,根据done标志对环境进行重置。

首先,我们需要导入必要的库以及Carla API。为了避免依赖问题,我们通过模块路径的方式来确保代码的可执行性。接下来的常量定义SHOW_PREVIEW用于控制是否显示预览窗口,STEER_AMT用于控制转向力的大小。

CarEnv类详细说明

class CarEnv:    SHOW_CAM: bool  # 是否显示预览窗口    STEER_AMT: float  # 转向力的大小    im_width: int  # 图像宽度    im_height: int  # 图像高度    actor_list: List[Actor]  # 记录所有动作的对象    front_camera: Sensor  # 前置摄像头传感器    collision_hist: List[CollisionEvent]  # 碰撞历史记录

这个类的详细实现如下。首先,在初始化时,连接Carla服务器,并获取模拟世界。然后,选择一个随机的起始位置,并在该位置上生成一个底盘车。同时,添加了一个前置摄像头传感器和碰撞传感器来跟踪车辆行为。

在环境重置过程中,我们首先清空碰撞历史和动作列表。随后,生成一个随机的起始位置,并在该位置上生成底盘车。前置摄像头传感器会被配置成适合当前图像大小的参数,并通过监听函数来处理获取到的图像数据。

为了确保车辆的初始位置不会导致碰撞检测过早触发,我们设置了一个4秒的等待时间。这段时间可以让碰撞传感器充分初始化,并确保车辆不会因为起始位置问题导致连续的碰撞触发。

一旦初始设置完成,环境将返回当前的前置摄像头图像,这将作为第一个观察值。

动作处理与碰撞检测

每一次动作都会通过step方法进行处理。这个方法将参数作为对车辆的控制指令(例如油门、转向力)。车辆的速度将根据当前状态计算,并转换为公里/小时。如果发生碰撞,Done标志将被置为True,奖励将被设置为负值。车辆在低于50公里/小时时也会获得负奖励。反之,车辆在安全驾驶状态下将获得正奖励。

此外,我们还添加了对当前回合时间的检查。如果已经超过了所设定的回合时间限制,Done标志将被置为True,强迫结束当前回合。

图像处理

前置摄像头传感器会定期返回当前图像数据,这些数据将被处理为numpy数组,并转换为RGB格式。如果需要,当前帧的图像将被显示,这将有助于调试过程。

到目前为止,我们已经完成了环境的基本实现。下一篇教程中,我们将介绍一个代理类,它将基于强化学习模型与这个环境进行交互。


以上是本教程的全部内容,希望能为您的学习之路提供帮助。

上一篇:基于carla和python的自动驾驶仿真系列4
下一篇:基于carla和python的自动驾驶仿真系列2

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月02日 00时42分58秒