使用CARLA模拟器实现DQN自动驾驶(一)安装环境

CARLA是一个自动驾驶环境仿真软件(官网),自带python API,对于Q-learning或DQN来说,能从环境中及时获得反馈非常重要。因此自带API的模拟器对于python编程实现自动驾驶非常方便。

安装好CARLA之后,就可以打开模拟器观察环境,如下图所示: 

(街景)

可以通过键盘WASD和鼠标控制视角。

 (地图全景)

CARLA的发布中自带代码example,搭建自动驾驶环境时可以参考:

导入函数库(Carla+pytorch)、设置变量参数:

import abc
import glob
import os
import sys
from types import LambdaType
from collections import deque
from collections import namedtuple

try:  #carla除了函数库还需要导入一个egg文件,在carla自带的carla文件夹里,路径需要自己设置
    sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % (
        sys.version_info.major,
        sys.version_info.minor,
        'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
except IndexError:
    pass


import carla
import random 
import time
import numpy as np
import cv2
import math

IM_WIDTH = 640
IM_HEIGHT = 480
SHOW_PREVIEW = True


定义环境类:

class Car_Env():
    SHOW_CAM = SHOW_PREVIEW  #设置是否显示摄像头画面
    STEER_AMT = 1.0
    im_width = IM_WIDTH  #设置摄像头传感器图像宽度
    im_height = IM_HEIGHT  #设置摄像头传感器图像高度
    front_camera = None

    def __init__(self):
        self.client = carla.Client('localhost',2000)  #与carla模拟器建立连接
        self.client.set_timeout(10.0)
        self.world = self.client.get_world()  #读取carla已经定义好的环境-world
        self.blueprint_library = self.world.get_blueprint_library()  #读取carla中的blue-print库,包括车辆,传感器等
        self.model_3 = self.blueprint_library.filter('model3')[0]  #选取一辆车作为actor
    
    #初始化场景
    def reset(self):
        self.collision_hist = []
        self.radar_hist = []
        self.actor_list = []
        self.transform = self.world.get_map().get_spawn_points()[100]
        #spwan_points共265个点,随机选一个点可作为初始化小车的位置
        
        self.vehicle = self.world.spawn_actor(self.model_3 , self.transform)

        self.actor_list.append(self.vehicle)
        
        #定义传感器——RGB三通道摄像头
        self.rgb_cam = self.blueprint_library.find('sensor.camera.rgb')
        self.rgb_cam.set_attribute('image_size_x',f'{self.im_width}')  #设置图像宽度
        self.rgb_cam.set_attribute('image_size_y',f'{self.im_height}')  #设置图像高度
        self.rgb_cam.set_attribute('fov',f'110')  #设置摄像头位置,fov(front of view)表示前置摄像头

        transform = carla.Transform(carla.Location(x=2.5 ,z=0.7 ))
        self.sensor = self.world.spawn_actor(self.rgb_cam,transform, attach_to=self.vehicle)
        self.actor_list.append(self.sensor)
        self.sensor.listen(lambda data: self.process_img(data))

        self.vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=0.0))
        
        time.sleep(4)

        
        #collision sensor
        colsensor = self.blueprint_library.find('sensor.other.collision')
        self.colsensor = self.world.spawn_actor(colsensor, transform, attach_to = self.vehicle)
        self.actor_list.append(self.colsensor)
        self.colsensor.listen(lambda event: self.collision_data(event))
       

        #target_transform
        self.target_transform = self.world.get_map().get_spawn_points()[101]
        self.target_dis = self.target_transform.location.distance(self.vehicle.get_location())
    
        while self.front_camera is None:
            time.sleep(0.01)

        self.vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=0.0))
               
        return self.front_camera
        
    def collision_data(self, event):
        self.collision_hist.append(event)
     
                
    def process_img(self, image):
        i = np.array(image.raw_data)
        i2 = i.reshape((self.im_height, self.im_width , 4))
        i3 = i2[: , : , : 3]
        if self.SHOW_CAM:
            cv2.imshow("",i3)
            cv2.waitKey(1)
        self.front_camera = i3
        return i3/255.0
    

当前虽然还没有加入神经网络,但已经可以让环境运行了:

if __name__ == '__main__':
    env=Car_Env()
    s=env.reset()

运行主函数后,就可以在模拟器窗口中看到一辆生成的特斯拉(doge),python也会产生一个窗口展示摄像头的视角。

 (自定义的分辨率:640*480)

具体的DQN实现在下一篇详细展开。如果对内容又疑问,欢迎留言交流。

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值