自动驾驶模拟器Carla之python编程-(2)控制汽车

本文介绍了如何使用Python API在Carla环境中创建、控制和清理角色,包括world、actors(如汽车和行人)以及blueprints(角色属性)。通过实例展示了如何生成特斯拉Model3并使其前进。
摘要由CSDN通过智能技术生成

在本节,我们将向您介绍Carla的Python API

Carla中有几种类型的对象。首先,您当然拥有world(世界),这就是你的环境。这样,您便拥有了这个世界中的actors(角色)。角色诸如汽车、汽车上的传感器、行人等之类的东西。最后,我们有blueprints(蓝图)。蓝图是我们角色的属性。

有了这些信息,让我们开始编写一些实际的代码。让我们制造一辆可以生成汽车并简单地向前行驶的汽车。

1. 导入carla及其他依赖包

代码的前几行,我只是从examples目录中的其他脚本之一复制并粘贴的,下面还将在目录examples中编写我们的代码。

import glob
import os
import sys

try:
    # 由相对路径导入carla包
    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.egg文件,这就是我们在Carla包本身中使用的文件。为了实际导入carla,我们需要找到它,这也是为什么我们现在只是将文件扔到examples目录中的原因。您也可以只将所需的Carla文件移动到site-packagesPython中,然后也以这种方式导入。

接下来,我们将再进行一些导入:

import random
import time
import numpy as np  # numpy
import cv2          # opencv-python

如果需要,请安装numpy和cv2:

pip install opencv-python numpy

2. 定义actor_list(角色列表),并清理

我们要立即处理的第一件事是actor_list(角色列表),并在完成后清理它们。回想一下,我们既有客户端又有服务器。当我们开始在服务器上运行客户端时,我们在服务器上创建参与者。如果我们只是退出而没有清理,我们的参与者仍然会在服务器上。

actor_list = []
try:


finally:

    print('destroying actors')
    for actor in actor_list:
        actor.destroy()
    print('done.')

3. 创建world(世界)及blueprint(蓝图)

在这里,我们将在尝试/最后中封装大部分代码。我们将尝试所有的逻辑和参与者创建,然后最后一步将为我们清理。

接下来,回想一下我们在Carla有3个主要的“事物”:world(世界),blueprint(蓝图)和actors(角色)。首先,我们将连接到我们的服务器,了解世界,然后访问蓝图。

actor_list = []
try:
    client = carla.Client('localhost', 2000)  # 连接端口号2000
    client.set_timeout(2.0)  # 连接超时2秒

    world = client.get_world()

    blueprint_library = world.get_blueprint_library()

请注意,您需要运行CarlaUE4.exe(或CarlaUE4.sh)才能进行连接。

4. 创建特斯拉model3,并进行控制

现在我们有了蓝图,我们可以进行筛选。例如:

    bp = blueprint_library.filter('model3')[0]   # 创建特斯拉model3

这将为我们提供特斯拉model3的默认蓝图。既然有了蓝图,我们就可以生成这辆车,但是在哪里?Carla带有大约200个生成点,因此我们可以随机选择其中之一:

    spawn_point = random.choice(world.get_map().get_spawn_points())

现在我们可以生成那辆车了:

    vehicle = world.spawn_actor(bp, spawn_point)

我们通过以下方式控制汽车:

    vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0))  # 油门1.0,方向盘0.0

最后,别忘了将此车辆添加到我们需要跟踪和清理的actor_list列表中:

    actor_list.append(vehicle)

太好了,我们有汽车,我们可以实际运行。让我们运行5秒钟,然后清理:

    time.sleep(5)
  • 完整的代码如下
# control.py
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

import random
import time
import numpy as np
import cv2

im_width = 640
im_height = 480


def process_img(image):
    i = np.array(image.raw_data)
    i2 = i.reshape((im_height, im_width, 4))
    i3 = i2[:, :, :3]
    cv2.imshow("", i3)
    cv2.waitKey(1)
    return i3/255.0


actor_list = []
try:
    client = carla.Client('localhost', 2000)
    client.set_timeout(2.0)

    world = client.get_world()

    blueprint_library = world.get_blueprint_library()

    bp = blueprint_library.filter('model3')[0]
    print(bp)

    spawn_point = random.choice(world.get_map().get_spawn_points())

    vehicle = world.spawn_actor(bp, spawn_point)
    vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0))
    actor_list.append(vehicle)

    # sleep for 5 seconds, then finish:
    time.sleep(5)

finally:

    print('destroying actors')
    for actor in actor_list:
        actor.destroy()
    print('done.')

(1) 执行CarlaUE4.exe(或CarlaUE4.sh)
(2) 运行 python3.7.exe control.py

现在,可能很难在5秒钟内找到您的汽车,但是可以去服务器上查看一下carla环境,使用鼠标往下看,然后s开始放大。例如:
在这里插入图片描述
我们可以将脚本运行到现在为止,并且从上方看,我们可能可以看到:
在这里插入图片描述
很难看到,但是当它移动时,很容易发现。请注意,汽车可能会在隧道中产生。如果您没看到车辆,只需再次运行脚本即可。

  • 12
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值