Carla指定位置生成车辆


我之前感觉carla的入门十分困难,可能是我走了太多的坑,从carla的安装开始就开始被坑,好不容易安装完成之后编程又出现问题,可能我Python能力真的还不够熟练吧,总之在某视频网站的帮助下,现在可算摆脱了之前一筹莫展的状态,终于能用carla做一些简单的事情了。

1. Carla安装与示例程序

快速安装Carla

Carla的下载安装其实非常简单,步骤如下:

  1. Carla的github网站上找到想用的版本,我这里用的是0.9.5windows版本。并下载到指定的任意硬盘。
    在这里插入图片描述
    (这里并不需要按照官方文档build on windows的步骤进行安装,除非要自己创建地图,否则UnrealEngine基本用不上。)
  2. 打开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中的内容大概整理一下如何开始编程。

  1. 首先是如下基本上固定的代码片段,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
  1. 成功导入carla库之后,需要先连接上localhost 2000端口,再按照下文的三个元素抽象层级的顺序进行编程。
  1. world
  2. blueprint
  3. 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!")

参考

  1. Carla官网
  2. Introduction - Self-driving cars with Carla and Python part 1
  3. Carla与Python的强化学习视频系列
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值