如果我们要在carla中使用强化学习,那么将世界设置为同步模式是一个十分方便的设置,在同步模式中与sever的通信使用tick来校准,因此整个过程便成为收集一次world场景中的信息做一次操作,而在此操作的过程中world不会有变化 。
同步模式中需要使用carla.World.tick() 向服务器发送确认信息,并且从服务器返回一个新的帧的ID信息,通过此ID信息我们可以对获得信息进行校准 。
在执行world.tick()时会自动调用world.()函数,world.()的参数包括,在初始化时可以将回调函数传入,在每次tick()时便会自动执行回调函数中的操作,()将一个carla. 传入此回调函数 。通过回调函数我们可以获得此帧下世界的具体信息,更新所有的参数 。例如下面的一个carla官方给的类函数
class CarlaSyncMode(object):def __init__(self, world, *sensors, **kwargs):self.world = worldself.sensors = sensorsself.frame = Noneself.delta_seconds = 1.0 / kwargs.get('fps', 20)self._queues = []self._settings = Nonedef __enter__(self):self._settings = self.world.get_settings()self.frame = self.world.apply_settings(carla.WorldSettings(no_rendering_mode=False,synchronous_mode=True,fixed_delta_seconds=self.delta_seconds))def make_queue(register_event):q = queue.Queue()register_event(q.put)# register_event(push_snapshot)self._queues.append(q)make_queue(self.world.on_tick)for sensor in self.sensors:make_queue(sensor.listen)return selfdef tick(self, timeout):self.frame = self.world.tick()data = http://www.kingceram.com/post/[self._retrieve_data(q, timeout) for q in self._queues]assert all(x.frame == self.frame for x in data)return datadef __exit__(self, *args, **kwargs):self.world.apply_settings(self._settings)def _retrieve_data(self, sensor_queue, timeout):while True:data = sensor_queue.get(timeout=timeout)if data.frame == self.frame:return data
当在程序的某一处使用同步模式时便会执行中的初始化,将world.()作为事件传入中,申请一个队列q,将q.put作为回调函数放入()中,以后每次执行tick()都会执行该操作 。
在该类函数的tick()函数中,每次执行world.tick()函数返回的帧ID都被保存在类变量self.frame中,并且以此从队列中取出carla.这是该某一帧下这个世界中所有信息的快照即保存此时刻所有物体的状态 。之后通过中判断该数据的frame是否和此时刻的frame相同,并将此时刻的信息返回 。通过返回的信息我们可以获得车辆的当前状态即其他参与者的信息 。
强化学习部分 方法 自动驾驶综述
参考链接:知乎-暨华-CARLA: An Open Urban
文章插图
参考论文 > CARLA: An Open Urban
链接: arxiv
此文章中使用CARLA研究了自动驾驶的三种方法,第一种是经典的 ,第二种是 , 第三种是。
感知模块使用 ,具体使用来估计车道、边缘、其他物体的状态同时有一个模型用来判断是否到达了路口 。规划模块利用导航数据生成一系列最近的,目的是保证在到达目的地时保证避免碰撞 。规划模块基于一个状态机模型,包含五种状态:道路跟随、左转弯、右转弯、十字路口直行、紧急停车 。控制模块使用PID,根据当前位置、速度和一个列表输出方向、油门、刹车 。输入的数据为前置摄像头的数据,在采样时给input添加一点噪音,采用和data 方法 。网络构成:处理图像=>处理标量=>将感知与测量信息融合=>输出控制输入:最近两帧图片,以及一个测量向量包括speed,to goal,from ,high-level , one-hot。一个CNN和一个MLP分别处理两种数据 。终止条件:碰撞、到达终点或者到达最长时间 。奖励:speed的增值,与终点的距离,碰撞因子,在人行道的时间,反向行驶的时间 。实验结果
- scitb5函数1
- 小程序连接MYSQL实现增删改查
- Android 最流行的吸顶效果的实现及代码
- UFO-R6 HA集成ESP8266和涂鸦红外万能遥控器实现家庭影院一键放映
- Spring Security实现短信验证码登录
- cocos ceater 如何实现显示 Tip 的 同时能响应点击其他功能?
- swoole的TCP服务器实现-swoole_server创建过程
- CUDA 学习笔记四
- 草在日语中什么意思 草的日语意思是什么
- 使用Ubuntu中的Docker部署Remix