Carla学习心得1:程序初步创建

看着carla的官网流程有点懵逼,就去搜大家怎么写的,大概总结出了一个初步的框架,先上代码:

import carla
import random
import glob
import os
import sys
import time
import random
import cv2
import numpy as np

try:
    sys.path.append(glob.glob('../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

actor_list = []
try:
    synchronous_master = False
    client = carla.Client('localhost', 2000)
    client.set_timeout(10.0)
    world = client.get_world()
    client.load_world('Town02')
    blueprint = world.get_blueprint_library()

    ego_vehicle_bp = blueprint.find('vehicle.audi.a2')  # 找到奔驰的蓝图
    ego_vehicle_bp.set_attribute('color', '52, 192, 235') # 给奔驰上颜色
    ego_vehicle_bp_2 = blueprint.find('vehicle.audi.etron')
    ego_vehicle_bp_2.set_attribute('color', '79, 235, 52')
    # 找到所有可以作为初始点的位置并随机选择一个
    transform = random.choice(world.get_map().get_spawn_points())
    # 设置固定点
    # transform = carla.Transform(carla.Location(x=-13, y=80, z=2), carla.Rotation(yaw=90))
    # 在这个位置生成汽车
    ego_vehicle_0 = world.spawn_actor(ego_vehicle_bp, transform)
    ego_vehicle_2 = world.spawn_actor(ego_vehicle_bp,
                                      carla.Transform(carla.Location(x=-40, y=1, z=2), carla.Rotation(yaw=90)))

    # set walker as spawn_actor
    walker_bp = random.choice(blueprint.filter('walker.pedestrian.*'))
    spawn_point = carla.Transform(carla.Location(x=-15, y=124.1, z=2))
    # spawn_point = carla.Transform(carla.Location(x=152, y=62.3, z=2),carla.Rotation(yaw=-90))
    pedestrain = world.spawn_actor(walker_bp, spawn_point)

    control = carla.WalkerControl()
    revert_flag = False

    while True:
        world.wait_for_tick()
        control = carla.WalkerControl()
        control.direction.y = 0
        control.direction.z = 0
        control.speed = 3
        if (pedestrain.get_location().x > 10):
            revert_flag = True
        if (pedestrain.get_location().x < -10):
            revert_flag = False
        if (revert_flag):
            control.direction.x = -1
        else:
            control.direction.x = 1
        pedestrain.apply_control(control)
        time.sleep(1)
        # Debug Tool
        # logging.warning(pedestrain.get_location())
        # print(,control.direction.x,revert_flag)

    actor_list.append(ego_vehicle_0)
    actor_list.append(ego_vehicle_2)
    actor_list.append(pedestrain)



finally:
    if synchronous_master:
        settings = world.get_settings()
        settings.synchronous_mode = False
        settings.fixed_delta_seconds = None
        world.apply_settings(settings)

    for actor in actor_list:
        actor.destroy()
        time.sleep(0.5)
        print(actor.id, "is destroyed.")

将上述代码分割成两段:模板+自己的内容

模板:


import carla
import random
import glob
import os
import sys
import time
import random
import cv2
import numpy as np

try:
    sys.path.append(glob.glob('../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

actor_list = []
try:
    自己填写内容
finally:
    for actor in actor_list:
        actor.destroy()
        time.sleep(0.5)
        print(actor.id, "is destroyed.")

自己的内容:选择地图+调出蓝图+从蓝图中选择演员+设置演员的属性+设置演员生成的位置+生成演员。这里说一下对上述概念自己的理解:蓝图就是一个很大的仓库,仓库里面有人车等演员,我们通过固定句式来调用这些演员,设置他们的属性。

    client = carla.Client('localhost', 2000)
    client.set_timeout(10.0)
    world = client.get_world()
    client.load_world('Town02')
    blueprint = world.get_blueprint_library()

    ego_vehicle_bp = blueprint.find('vehicle.audi.a2')  # 找到奔驰的蓝图
    ego_vehicle_bp.set_attribute('color', '52, 192, 235') # 给奔驰上颜色
    ego_vehicle_bp_2 = blueprint.find('vehicle.audi.etron')
    ego_vehicle_bp_2.set_attribute('color', '79, 235, 52')
    # 随机设置生成点
    transform = random.choice(world.get_map().get_spawn_points())
    # 或者设置固定点
    # transform = carla.Transform(carla.Location(x=-13, y=80, z=2), carla.Rotation(yaw=90))
    # 在这个位置生成汽车
    ego_vehicle_0 = world.spawn_actor(ego_vehicle_bp, transform)
    ego_vehicle_2 = world.spawn_actor(ego_vehicle_bp,
                                      carla.Transform(carla.Location(x=-40, y=1, z=2), carla.Rotation(yaw=90)))
    #添加演员到列表中,方便集体销毁
    actor_list.append(ego_vehicle_0)
    actor_list.append(ego_vehicle_2)
    actor_list.append(pedestrain)

再进阶的代码,等我在看看,再更新,有问题大家可以指出来,也可以发表一下自己的学习心得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值