简单记录一下再Carla中增加Town6,Town7,Town10环境以及代码测试

笔记本配置
1、内存:+16 GB RAM memory
2、显存:+8 GB Video memory
3、处理器: Intel® Core™ i9-14900HX 2.20 GHz
4、操作系统:10Windows,64 位操作系统, 基于 x64 的处理器
5、Carla版本:0.9.14
6、python版本:3.7.1

在之前的文章中已经具体介绍了Carla与其依赖包的安装,这里不再叙述,有需要的小伙伴可以看这一篇(window10系统下载Carla0.9.14版本
本次博客主要记录两个内容,一个是地图的增加,一个是简单测试Carla功能,如果需要了解更多功能或内容可以去Carla官网查看(官网链接),也可以查看中文文档(中文文档

下面介绍第一个内容

地图添加

查看Carla

在下载好的Carla安装包中,我们对其进行解压,打开exe文件可以进入软件
在这里插入图片描述
在这里插入图片描述
通过W,A,S,D键与鼠标可以拖动视角,查看地图情况

切换地图

通过Python编译器我们可以切换到不同的地图(注意:解释器环境要使用之前配置好的环境)

连接客户端

import carla
import numpy as np
import time
client = carla.Client("localhost", 2000)
client.set_timeout(20.0)

设置Carla中环境

 world = client.load_world('Town01')   #Town01为一号地图,一般是Carla中

设置天气

 weather = carla.WeatherParameters(
        cloudiness=0.0,           #是否多云
        precipitation=0.0,		  #是否有降水
        sun_altitude_angle=50.0)  #太阳角度
 world.set_weather(weather)    #在实例化的world中设置天气

此时运行程序就可以看到我们所设置的地图情况,下面是博主设置的两个不同天气情况,分别为
cloudiness=50.0,
precipitation=100.0,
sun_altitude_angle=30.0
在这里插入图片描述
cloudiness=50.0,
precipitation=0.0,
sun_altitude_angle=0.0
在这里插入图片描述
两个对比效果还是比较明显的

这里插叙讲解一下地图的问题,Carla0.9.14的初始地图并不全,大家可以通过下面的程序进行查看

# 生成汽车流
import glob
import os
import sys
# ==============================================================================
# -- Find CARLA module ---------------------------------------------------------
# ==============================================================================

try:
    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

# ==============================================================================
# -- Add PythonAPI for release mode --------------------------------------------
# ==============================================================================
try:
    sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/carla')
    sys.path.append("../examples/")
except IndexError:
    pass

import carla

# Connect to the client and retrieve the world object
try:
    client = carla.Client('127.0.0.1', 2000)
    for i in range(len(client.get_available_maps())):
         print(client.get_available_maps()[i])
except IndexError:
    pass

输出内容应该如下:
在这里插入图片描述
这里可以看到只有部分地图,下边我们对所有地图进行详述并添加地图Town6,Town7,Town10:

在这里插入图片描述
下面进行地图添加,首先安装Carla附加的地图包,可以参考上一篇文章(window10系统下载Carla0.9.14版本
下载好后进行解压,得到两个文件
在这里插入图片描述
还有我们之前解压好的Carla主文件
在这里插入图片描述
在我们已经解压好的Carla主文件中找到如下路径
在这里插入图片描述
打开文件可以看到里面有部分地图资源但不全,此时我们继续打开附加的地图包的文件,文件路径如下
在这里插入图片描述

注意,这个路径是附件地图包的文件的路径,把这个Maps文件中的地图文件相应复制到Carla主文件的Maps文件中即可,复制完后重新运行检查地图的程序,即可看到多出来的地图
在这里插入图片描述
回到正题,我们继续进行Carla的简单代码测试,刚刚已经生成了特定地图和天气,下面我们在地图中添加车辆

添加车辆

# 生成车辆
    model3_bp = world.get_blueprint_library().find('vehicle.tesla.model3')
    model3_bp.set_attribute('color', '255,255,255')
    spawn_points = world.get_map().get_spawn_points()
    model3 = world.spawn_actor(model3_bp, np.random.choice(spawn_points))

启动自动驾驶模式

model3.set_autopilot(True)
print(“车辆已启动自动驾驶”)

生成相机

camera_bp = world.get_blueprint_library().find('sensor.camera.rgb')
camera_bp.set_attribute('image_size_x', '1280')
camera_bp.set_attribute('image_size_y', '720')
camera_bp.set_attribute('sensor_tick', '0.05')  # 约20FPS

相机位置(车辆后方)

camera = world.spawn_actor(
camera_bp,
carla.Transform(carla.Location(x=-5.5, z=2.5), carla.Rotation(pitch=8.0)),
attach_to=model3,
attachment_type=carla.AttachmentType.SpringArm
)

获取spectator(游戏窗口视角)

spectator = world.get_spectator()

主循环:更新视角跟随车辆

start_time = time.time()
duration = 30 # 运行30秒

while time.time() - start_time < duration:
# 获取车辆位置和朝向
vehicle_transform = model3.get_transform()

# 设置 spectator 位置(车辆上方俯视)
spectator.set_transform(carla.Transform(
    vehicle_transform.location + carla.Location(z=50),  # 上方50米
    carla.Rotation(pitch=-90)  # 俯视角度
))

time.sleep(0.01)  # 短暂休眠,避免CPU占用过高

如果需要保存拍摄到的图片到特定文件,可运行下面的完整程序

import carla
import numpy as np
import os
import time
import shutil  # 用于删除目录

try:
    # 检查并清理输出目录
    output_dir = 'output'
    if os.path.exists(output_dir):
        print(f"检测到旧的 {output_dir} 目录,正在删除...")
        shutil.rmtree(output_dir)  # 删除目录及其内容
    os.makedirs(output_dir)  # 创建新目录
    print(f"已创建新的输出目录: {output_dir}")

    # 连接客户端
    client = carla.Client("localhost", 2000)
    client.set_timeout(20.0)
    world = client.load_world('Town01')

    # 设置天气
    weather = carla.WeatherParameters(
        cloudiness=10.0,
        precipitation=50.0,
        sun_altitude_angle=50.0)
    world.set_weather(weather)

    # 生成车辆
    model3_bp = world.get_blueprint_library().find('vehicle.tesla.model3')
    model3_bp.set_attribute('color', '255,255,255')
    spawn_points = world.get_map().get_spawn_points()
    model3 = world.spawn_actor(model3_bp, np.random.choice(spawn_points))

    # 启用自动驾驶
    model3.set_autopilot(True)
    print("车辆已启动自动驾驶")

    # 生成相机
    camera_bp = world.get_blueprint_library().find('sensor.camera.rgb')
    camera_bp.set_attribute('image_size_x', '1280')
    camera_bp.set_attribute('image_size_y', '720')
    camera_bp.set_attribute('sensor_tick', '0.05')  # 约20FPS

    # 相机位置(车辆后方)
    camera = world.spawn_actor(
        camera_bp,
        carla.Transform(carla.Location(x=-5.5, z=2.5), carla.Rotation(pitch=8.0)),
        attach_to=model3,
        attachment_type=carla.AttachmentType.SpringArm
    )

    # 图像保存回调
    saved_frames = []


    def save_image(image):
        image.save_to_disk('output/%06d.png' % image.frame)
        saved_frames.append(image.frame)
        if len(saved_frames) % 20 == 0:
            print(f"已保存 {len(saved_frames)} 张图片")


    camera.listen(save_image)

    # 获取 spectator(游戏窗口视角)
    spectator = world.get_spectator()

    print("开始采集图像,按Ctrl+C停止...")

    # 主循环:更新视角跟随车辆
    start_time = time.time()
    duration = 30  # 运行30秒

    while time.time() - start_time < duration:
        # 获取车辆位置和朝向
        vehicle_transform = model3.get_transform()

        # 设置 spectator 位置(车辆上方俯视)
        spectator.set_transform(carla.Transform(
            vehicle_transform.location + carla.Location(z=50),  # 上方50米
            carla.Rotation(pitch=-90)  # 俯视角度
        ))

        time.sleep(0.01)  # 短暂休眠,避免CPU占用过高

finally:
    # 清理资源
    if 'camera' in locals() and camera is not None:
        camera.stop()
        camera.destroy()
    if 'model3' in locals() and model3 is not None:
        model3.destroy()
    print("资源清理完成")

运行此程序有两个输出
1、可以生成一个output文件夹用于存储camera拍摄到的图片。
2、可以驱动Carla模拟器中的汽车运动
代码中并没有对所有代码函数进行解释,有需要的同学可以自行去官网或者使用AI解读。

输出1:
请添加图片描述

输出2:
在这里插入图片描述

以上就是本次博客全部内容,如果觉得还不错可以关注一下博主,后续更新更多RL相关内容,如果发现文章内容有问题可以在评论区友好讨论,THX。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐