强化学习与自动驾驶——Carla环境配置与benchmark解读

本文介绍了如何配置Carla Server,包括无界面启动和Docker启动,并详细阐述了Carla Client的连接与控制。此外,文章详细讲解了Driving Benchmark的概念,解析了CoRL2017实验基准,包括四种导航任务,并展示了如何定制实验配置和定义智能体,为使用强化学习训练自动驾驶提供了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Carla Server

Carla目前的稳定版为0.8.2,https://github.com/carla-simulator/carla/releases/tag/0.8.2 即可下载,linux解压后命令行执行

$ ./CarlaUE4.sh

这将启动一个全屏的仿真窗口,你能使用WASD驾驶车辆

实验中往往增加各种参数进行配置

$ ./CarlaUE4.sh -carla-server -benchmark -fps=10 -windowed -ResX=300 -ResY=300  
  • carla-server参数表示以服务端模式运行,等待客户端连接

  • benchmark fps=10 表示仿真中每一个step的时间间隔相同

  • windowed ResX=300 ResY=300 表示窗口化以及大小

1.1 无界面启动

配置环境变量:SDL_VIDEODRIVER=offscreen 和 SDL_HINT_CUDA_DEVICE=0

程序中可以这么写

my_env = {
   **os.environ, 'SDL_VIDEODRIVER': 'offscreen', 'SDL_HINT_CUDA_DEVICE': '0', }
cmd = [path.join(environ.get('CARLA_ROOT'), 'CarlaUE4.sh'), self.map,
       "-benchmark", "-carla-server", "-fps=10", "-world-port{}".format(self.port),
       "-windowed -ResX={} -ResY={}".format(carla_config.server_width, carla_config.server_height),"-carla-no-hud"]
p = subprocess.Popen(cmd, env=my_env)

这个目前的缺点是默认第0块GPU,选择其他的会失效,在https://github.com/carla-simulator/carla/issues/225 有提到

如果你想能够选择gpu,可以选择下面的docker启动

1.2 docker启动

关于docker和nvidia docker的安装以及carla镜像的安装可以参考官网

在程序中

p = subprocess.Popen(['docker', 'run', '--rm', '-d', '-p',
                                   str(self.port) + '-' + str(self.port + 2) + ':' + 
                                   str(self.port) + '-' + str(self.port + 2),
                                   '--runtime=nvidia', '-e',                                   								  'NVIDIA_VISIBLE_DEVICES='+str(self.gpu), 
                                   "carlasim/carla:0.8.4",
                                   '/bin/bash', 'CarlaUE4.sh', self.map, '-windowed',
                                   '-benchmark', '-fps=10', '-world-port=' +                 								  str(self.port)], shell
强化学习是一种机器学习方法,它通过试错来学习如何在特定环境中采取行动以最大化奖励。CARLA是一个开源的自动驾驶仿真平台,可以用于测试和评估自动驾驶算法。下面是使用强化学习CARLA中实现自动驾驶的一些步骤: 1. 安装CARLA和Python API ```shell # 安装CARLA wget https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/CARLA_0.9.11.tar.gz tar -xvf CARLA_0.9.11.tar.gz # 安装Python API pip install pygame numpy networkx scipy matplotlib git clone https://github.com/carla-simulator/carla.git cd carla/PythonAPI/carla/dist easy_install carla-0.9.11-py3.7-linux-x86_64.egg ``` 2. 创建CARLA环境 ```python import carla # 连接到CARLA服务器 client = carla.Client('localhost', 2000) client.set_timeout(10.0) # 获取CARLA世界 world = client.get_world() # 设置天气和时间 weather = carla.WeatherParameters(cloudiness=10.0, precipitation=10.0, sun_altitude_angle=70.0) world.set_weather(weather) world.set_sun_position(carla.Location(x=0.0, y=0.0, z=0.0)) # 创建车辆和摄像头 blueprint_library = world.get_blueprint_library() vehicle_bp = blueprint_library.filter('vehicle.tesla.model3')[0] spawn_point = carla.Transform(carla.Location(x=50.0, y=0.0, z=2.0), carla.Rotation(yaw=180.0)) vehicle = world.spawn_actor(vehicle_bp, spawn_point) camera_bp = blueprint_library.find('sensor.camera.rgb') camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) ``` 3. 实现强化学习算法 这里我们以Deep Q-Network (DQN)为例,使用Keras实现神经网络。 ```python import keras from keras.models import Sequential from keras.layers import Dense, Flatten from keras.optimizers import Adam class DQNAgent: def __init__(self, state_size, action_size): self.state_size = state_size self.action_size = action_size self.memory = deque(maxlen=2000) self.gamma = 0.95 self.epsilon = 1.0 self.epsilon_min = 0.01 self.epsilon_decay = 0.995 self.learning_rate = 0.001 self.model = self._build_model() def _build_model(self): model = Sequential() model.add(Flatten(input_shape=(1,) + self.state_size)) model.add(Dense(24, activation='relu')) model.add(Dense(24, activation='relu')) model.add(Dense(self.action_size, activation='linear')) model.compile(loss='mse', optimizer=Adam(lr=self.learning_rate)) return model def remember(self, state, action, reward, next_state, done): self.memory.append((state, action, reward, next_state, done)) def act(self, state): if np.random.rand() <= self.epsilon: return random.randrange(self.action_size) act_values = self.model.predict(state) return np.argmax(act_values[0]) def replay(self, batch_size): minibatch = random.sample(self.memory, batch_size) for state, action, reward, next_state, done in minibatch: target = reward if not done: target = (reward + self.gamma * np.amax(self.model.predict(next_state)[0])) target_f = self.model.predict(state) target_f[0][action] = target self.model.fit(state, target_f, epochs=1, verbose=0) if self.epsilon > self.epsilon_min: self.epsilon *= self.epsilon_decay # 初始化DQNAgent state_size = (800, 600, 3) action_size = 3 agent = DQNAgent(state_size, action_size) # 训练DQNAgent for e in range(EPISODES): state = env.reset() state = np.reshape(state, [1, 1] + list(state_size)) for time in range(500): action = agent.act(state) next_state, reward, done, _ = env.step(action) next_state = np.reshape(next_state, [1, 1] + list(state_size)) agent.remember(state, action, reward, next_state, done) state = next_state if done: break if len(agent.memory) > batch_size: agent.replay(batch_size) ``` 4. 运行CARLA仿真 ```shell ./CarlaUE4.sh -windowed -carla-server -benchmark -fps=20 ```
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值