史上最详细Carla增加Town6,Town7,Town10地图教程以及简单代码测试
简单记录一下再Carla中增加Town6,Town7,Town10环境以及代码测试笔记本配置1、内存:+16 GB RAM memory2、显存:+8 GB Video memory3、处理器: Intel® Core™ i9-14900HX 2.20 GHz4、操作系统:10Windows,64 位操作系统, 基于 x64 的处理器5、Carla版本:0.9.146、python版本:3.7.1
简单记录一下再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。
更多推荐
所有评论(0)