文章目录
我之前感觉carla的入门十分困难,可能是我走了太多的坑,从carla的安装开始就开始被坑,好不容易安装完成之后编程又出现问题,可能我Python能力真的还不够熟练吧,总之在某视频网站的帮助下,现在可算摆脱了之前一筹莫展的状态,终于能用carla做一些简单的事情了。
1. Carla安装与示例程序
快速安装Carla
Carla的下载安装其实非常简单,步骤如下:
- 在Carla的github网站上找到想用的版本,我这里用的是0.9.5windows版本。并下载到指定的任意硬盘。
(这里并不需要按照官方文档build on windows的步骤进行安装,除非要自己创建地图,否则UnrealEngine基本用不上。) - 打开CarlaUE4.exe
非想用命令行的输入:
将carla所在文件夹的目录地址换成cmd并输入:
CarlaUE4.exe
开启carla的终端,用WASD和鼠标调整视角可以得到下图
打开终端之后,默认的地图是Town03,后文会提到如何用其他内置地图,除此之外,运行carla之后也不会有任何的actor,需要用Python程序进行控制才可以。其实到这里,已经算装好了carla,后续的python编程才是重点!
运行示例程序
好在carla给了一系列的参考程序,这些程序在路径 .\CARLA_0.9.5\PythonAPI\examples
下。本节运行下spawn_npc.py和manual_control.py文件。
(**注意!!**运行之前需要安装好必要的Python包,最重要的是pygame:pip install pygame
)
spawn_npc.py
在cmd中运行:python spawn_npc.py -n 100
(这里的100也可以是任意小于200的整数,因为生成点一次最多只能有200个)
结果如下:
manual_control.py
cmd中输入:
python manual_control.py
由于该程序基于Pygame开发的,所以运行之后可以得到pygame的界面:
手动控制的键盘指令见cmd中提示。
2. Carla简单介绍
安装了carla之后,需要了解下carla的基本内容,它是基于游戏引擎Unreal Engine开发的,主要有两个组成部分,一个是模拟器部分,另外一部分就是用Python脚本对模拟器进行人为控制(比如控制车辆的运动,获取传感器的数据)
由于是基于模拟器开发的,所以carla对电脑的硬件还是有要求的。
推荐配置是:
- 四核Intel或者AMD处理器,2.5GHZ或更快;
- NVIDIA GeForce 470 GTX及以上;
- 8GB RAM
- 10GB硬盘空间
另外,据官网信息,carla还有很多高级功能,之后也许会用到RoadRunner和Unreal Engine模拟器DIY整个城市的地图(可惜RoadRunner是收费的软件),还是一步步来,先在carla给定的地图上搭好一些危险场景。
3. 如何用Python控制Carla
3.1 PythonAPI基本介绍
carla文档中提供了丰富的Python API的库函数。我这里按照PythonAPI tutorial中的内容大概整理一下如何开始编程。
- 首先是如下基本上固定的代码片段,
try/exept
的部分是要找到carla的库,该库在路径:\CARLA_0.9.5\PythonAPI\carla\dist
下,只有成功找到该代码库,才能执行import carla
import glob
import os
import sys
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
import carla
- 成功导入carla库之后,需要先连接上localhost 2000端口,再按照下文的三个元素抽象层级的顺序进行编程。
- world
- blueprint
- actor
必须要先获取world的数据,才能得到所有actor的blueprint(包含了actor的具体名称,包括各种牌子的车辆,行人,一些传感器)。这一部分的代码如下:
client = carla.Client('localhost',2000)
client.set_timeout(5.0)
world = client.get_world()
blueprint_library = world.get_blueprint_library()
##Search for specific actor and get its blueprint.
vehicle_bp = blueprint_library.filter(name)[0]
#print(blueprint_library.filter('model3'))
print(vehicle_bp)
3.2 程序1:更换不同的Town Map
在正式生成车辆之前,我们可以选择更改地图,API中提供了更改地图的方式:world = client.load_world('Town04')
,使用Town04的地图的原因是它显示了类似于高速公路的工况,很适合用于建立危险场景。
代码如下:(接在上文的import carla
的后面)
...
import random
import time
TOWN = 'Town04'
client = carla.Client('localhost',2000)
client.set_timeout(10)
world = client.load_world(TOWN)
Town04景象:
也可以更换其他的内置地图(0.9.5版本提供了Town01~Town07七张地图)
3.3 程序2:在特定的位置生成Vehicle
接下来就可以正式生成一个Actor了,生成之前我们需要指定特定位置,我选择了 Location = ( x = − 115.4 , y = 4.0 , z = 11 ) , Rotation = ( p i t c h = 0 , y a w = 180 , r o l l = 0 ) \text{Location} =(x=-115.4, y=4.0, z=11),\ \ \text{Rotation}=(pitch=0, yaw=180, roll=0) Location=(x=−115.4,y=4.0,z=11), Rotation=(pitch=0,yaw=180,roll=0)并且选择生成颜色比较鲜艳的奥迪tt以方便找到它的生成地点。
指定特定位置的代码语句如下:
#Import the library Transform used to explicitly spawn an actor
from carla import Transform, Location, Rotation
...
spawn_point = Transform(Location(x=-115.4, y=4.0, z=11),
Rotation(pitch=0, yaw=180, roll=0))
vehicle = world.spawn_actor(vehicle_bp, spawn_point)
这里的from carla import Transform, Location, Rotation
是为了使用carla库中的函数Transform
,这里标注一下,因为我之前在调用这个函数的时候cmd提示没有找到该函数,思考了下才发现没import。
生成了车辆之后,我们就可以给车控制指令(throttle, steer等),控制车辆的Python API是:
...
vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0))
我们可以修改throttle和steer的数值,如果按以上代码(车辆一直直行)的话,车辆最终会发生碰撞,该处需要根据道路点不断改进。
最后如果我们不需要生成的actor之后,我们可以用代码把原来生成的车辆关闭,语句如下:
(注意!!当执行多个脚本文件的时候,服务器是不会自动清理掉上一个脚本生成的actor的,所以需要手动清除)
finally:
for actor in actor_list:
actor.destroy()
print("All cleaned up!")