自动驾驶模拟工具CARLA的安装

最近研究了一下自动驾驶的模拟器Airsim和CARLA,准备搭建一个学习环境来学习自动驾驶的相关知识。

Airsim最初是微软推出的一个模拟飞行的平台,之后增加了模拟驾驶的内容,这个平台据网上的资料是微软的一个较小的开源项目,因此也没有得到太大的重视,我看了一下平台好像也好久没有更新了,平台上的问题也没有什么人解答。我在Linux环境上下载的City Environment始终解压有问题,看到平台上也没有人答复,因此暂时放弃。

CARLA是Intel和西班牙的一个实验室的合作项目,也是目前比较出名的一个开源的模拟驾驶平台,因此我目前是选择了这个项目来搭建我的模拟驾驶平台。我的环境是由一台Linux PC(装配了1个GTX1070Ti和1个GTX2080Ti显卡,没有配置显示器),另外一台Windows PC远程接入进行控制。CARLA在Linux的安装可以直接在https://github.com/carla-simulator/carla上下载编译好的文件,也可以自己下载源代码进行编译,下面介绍一下这两种方式。

1. 直接下载编译好的文件

推荐这种方式。把下载好的文件解压缩到CARLA文件夹后,即可直接运行CarlaUE4.sh来启动CARLA服务器。因为我的Linux PC没有接显示器,因此我需要把图形输出定向到我的Windows PC,以下是配置过程:

  • 在Linux PC上配置虚拟显示器,运行sudo nvidia-xconfig -s -a --force-generate --allow-empty-initial-configuration --cool-bits=12 --registry-dwords="PerfLevelSrc=0x2222" --no-sli --connected-monitor="DFP-0",修改/etc/X11/xorg.conf文件,增加虚拟显示器的EDID(这个可以自己在有连接显示器的PC上生成或者网上下载),修改后的xorg.conf文件如下:
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 410.48

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0"
    Screen      1  "Screen1" RightOf "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync       28.0 - 33.0
    VertRefresh     43.0 - 72.0
    Option         "DPMS"
EndSection

Section "Monitor"
    Identifier     "Monitor1"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync       28.0 - 33.0
    VertRefresh     43.0 - 72.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GTX 1070 Ti"
    BusID          "PCI:1:0:0"
    Option "ConnectedMonitor" "DFP"
    Option "CustomEDID" "DFP-0:/etc/X11/edid.bin"
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce RTX 2080 Ti"
    BusID          "PCI:38:0:0"
    Option "ConnectedMonitor" "DFP"
    Option "CustomEDID" "DFP-0:/etc/X11/edid.bin"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Coolbits" "12"
    Option         "ConnectedMonitor" "DFP-0"
    Option "CustomEDID" "DFP-0:/etc/X11/edid.bin"
    Option         "RegistryDwords" "PerfLevelSrc=0x2222"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Section "Screen"
    Identifier     "Screen1"
    Device         "Device1"
    Monitor        "Monitor1"
    DefaultDepth    24
    Option         "Coolbits" "12"
    Option         "ConnectedMonitor" "DFP-0"
    Option "CustomEDID" "DFP-0:/etc/X11/edid.bin"
    Option         "RegistryDwords" "PerfLevelSrc=0x2222"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection
  • 编写调整显卡转速的脚本文件。因为在Linux里面只用图形界面才能调整风扇转速,通过上面的配置,我们不需要接显示器也能调整风扇转速:
export DISPLAY=:0
xhost +
nvidia-settings -a "[gpu]/GPUFanControlState=1" -a "[fan]/GPUTargetFanSpeed=90"
  • 安装CARLA的python库。在CARLA->PythonAPI->carla->dist目录里面有2个egg文件。我的Linux安装的是Anaconda的3.7的Python,因此用easy_install来安装3.5的那个egg文件。
  • 配置VirtualGL和TurboVNC,按照CARLA的介绍配置即可https://carla.readthedocs.io/en/latest/carla_headless/, 只是其中的“Configure your X”这里的命令不需要执行,因为在前面我们已经用另一种方式配置过了(这个原因是我发现按照这里的命令来执行则无法通过nvidia-settings来设置显卡的风扇转速)
  • 运行sudo nohup Xorg :7 &,这个命令运行之后有可能会自动stop,不太清楚是什么原因,一般可以运行sudo service lightdm status之后再运行就没问题了。之后运行/opt/TurboVNC/bin/vncserver :8,然后运行DISPLAY=:8 vglrun -d :7.0 ./CarlaUE4.sh -carla-server -benchmark -fps=50 -windowed -ResX=80 -ResY=60, 这样就可以通过TurboVNC连接:8端口来显示CARLA Server。要运行CARLA的Python客户端,可以运行/opt/TurboVNC/bin/vncserver :9,然后运行DISPLAY=:9 vglrun -d :7.1 python PythonAPI/examples/manual_control.py,这样就可以通过TurboVNC连接:9端口来模拟控制车。另外,可以运行python spawn_npc.py -n 80来自动增加一些车和行人。

2. 下载CARLA的源代码进行编译

参考官网的这个文档:

https://carla.readthedocs.io/en/latest/how_to_build_on_linux/

Unreal Engine 4.22的安装

这个按照官网的步骤安装即可,没有遇到问题。需要注意的是,要从UE4的Github上面把代码克隆下来,但是Github实在是太慢了,可以在码云gitee.com上面来复制一个仓库,这样就快很多。

CARLA的安装

首先是克隆CARLA的Github仓库,同理可以在gitee.com上面复制一份。执行./Update.sh,这个操作会下载CARLA的UE4资源,大概有6个多G,建议下载完后把这个Content目录保存一下,以后重装的时候直接用回这个目录的数据即可,不用再运行./Update.sh

然后执行make launch,这里我就遇到了pyconfig.h无法找到的问题。我用的是Anaconda的python 3.7的环境,因为CARLA建议的是python 3.5,因此创建一个3.5的环境,执行conda create --name carla python=3.5, conda activate carla

环境创建完成后,还要再输入命令export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:path/to/your/Anaconda3/include/python3.5m

之后再执行make launch即可

然后是make PythonAPI, 这里会出现问题说在PythonAPI/carla/dependicies/lib里面找不到libboost_python35.a文件,看了Github的 issues里面提到了可以把libboost_python27.a拷贝一份为libboost_python35.a,但是我试过了虽然可以make成功,但是之后执行Python,import carla就会报错, Pystring_type not define。我研究了一下Util/BuildTools/Setup.sh文件,在其中和boost相关的部分我们可以看到对于python3的安装,有以下语句:

./b2 toolset="${BOOST_TOOLSET}" cxxflags="${BOOST_CFLAGS}" --prefix="../${BOOST_BASENAME}-install" -j

在这一句里面增加

--with-python include="path/to/your/anaconda3/envs/carla/include/python3.5m/"

然后再编译即可。

注意如果之前采用拷贝libboost_python27.a为libboost_python35.a的方式编译过,那么需要把path/to/your/anaconda3/envs/carla/lib/python3.5/site-packages里面的carlaXXX.egg文件删掉,把easy-install.pth里面相应的那行也删掉。

最后编译make package,应该就没有遇到什么问题了。可以增加-j10的参数(10表示用10个CPU核心来make,加快速度,根据你的环境来设置)

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
强化学习是一种机器学习方法,它通过试错来学习如何在特定环境中采取行动以最大化奖励。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 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gzroy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值