美文网首页智能交通开发者专栏
carla使用pythonAPI创建演员

carla使用pythonAPI创建演员

作者: 荆白雪_1984 | 来源:发表于2020-01-07 13:58 被阅读0次

一、准备
安装pygame和numpy
退出:ALT+F4
二、示例程序

  1. 向world中添加100辆车,注意最多添加200辆,默认为10辆
$ python tm_spawn_npc.py -n 100
image.png

查到目前用的python3.8.0,但是dist文件夹下的egg文件用的python3.7。下载python3.8,重新安装python3.7即可。


image.png
  1. 手动控制车辆
$ python manual_control.py  
    W            : throttle 油门    
    S            : brake  刹车
    AD           : steer  方向盘角度
    Q            : toggle reverse  方向切换
    Space        : hand-brake  手刹
    P            : toggle autopilot 切换自动驾驶仪
    M            : toggle manual transmission  拨动式手动驾驶器
    ,/.          : gear up/down 下载/上传

    TAB          : change sensor position 改变传感器位置
    `            : next sensor 下一个传感器
    [1-9]        : change to sensor [1-9]
    C            : change weather (Shift+C reverse)  天气
    Backspace    : change vehicle

    R            : toggle recording images to disk

    CTRL + R     : toggle recording of simulation (replacing any previous) 模拟切换记录
    CTRL + P     : start replaying last recorded simulation 开始重放上次录制的模拟
    CTRL + +     : increments the start time of the replay by 1 second (+SHIFT = 10 seconds)
    CTRL + -     : decrements the start time of the replay by 1 second (+SHIFT = 10 seconds)

    F1           : toggle HUD
    H/?          : toggle help
    ESC          : quit
image.png
  1. 自动控制
$ python automatic_control.py
  1. 动态变化天气
$ python dynamic_weather.py

三、导入actor对象

  1. 引入carla模块,须将pythonAPI同级目录下carla/dist下的egg文件解压,否则程序找不到carla模块;另外,需要用egg文件对应的python版本打开程序,否则可能出错。
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模拟器默认端口为2000,保证该端口没有被占用;设置连接时间,防止联网操作被一直阻止。
client = carla.Client('localhost', 2000)
client.set_timeout(2.0)

也可以通过命令行获取端口号:

client = carla.Client(args.host, args.port)
  1. 创建world,添加演员
world = client.get_world()  #模拟世界
blueprints = world.blueprint_library().filter('vehicle.*') #寻找目标actor库,如:vehicle
spawn_points = world.get_map().get_spawn_points()  #每一个地图都会提供一组可用坐标点

获取所有2轮车

bps = [x for x in blueprints if not x.id.endswith('isetta')]
bps = [x for x in blueprints if not x.id.endswith('carlacola')]

actor属性设置

color = random.choice(blueprint.get_attribute('carla').recommend_values)  #获取随机颜色
blueprint = random.choice(blueprints)   #在actor库中选择任意一个actor
blueprint.setattribute('color', color)
blueprint.setattribut('role-name', 'autopilot')   #设置自动驾驶仪

颜色属性也可用rgb比例设置:

buleprint.setattribut('color', '255,0,0')

创建actor生成点坐标

location = random.choice(spawn_points).location
transform = carla.Transform(location, carla.Rotation(yaw = 180))

transform = Transform(Location(x=230,y=195,z=40), Rotation(yaw = 180))

检查生成点坐标是否碰撞,若发生碰撞则报错

actor = world.spawn_actor(blueprint,transform)  #创建actor

注意,carla提供了两种创建carla的函数,spawn_actor和try_spawn_actor;
spawn_actor添加actor失败会引发异常;try_spawn_actor添加失败返回none。
添加actor失败通常是因为生成点发生碰撞。

添加传感器:

sensor_bp = world.get_blueprint_library().find('sensor.camera.rgb')
sensor = world.spawn_actor(sensor_bp, carla.Transform(), attach_to = my_vehicle)
sensor.listen(lambda image: image.save_to_disk('_out/%8d'%image.frame_number)) #将传感器的数据保存到本地

spawn_actor后面附加参数可以控制物体是否和其他actor绑定。

批量添加actor:

batch = []
actor_list = []
batch.append(SpawnActor(blueprint, transform).then(SetAutopilot(FutureActor,True)))

for response in client.apply_batch_sync(batch):
  if response.error:
    logging.error(response.error)
  else:
    actor_list.append(response.actor_id)  

SetAutopilot(FutureActor,True)设置车辆位自动驾驶

程序结束时需销毁演员:

vehicle.destroy()
client.apply_batch([carla.command.DestroyActor(x) for x in actor_list])
  1. 控制车辆
vehicle.apply_control(carla.VehicleControl(throtte=1.0, steer = -1.0))

carla.VehicleControl 车辆控制函数
carla.WalkerControl 行人控制函数

carla.VehicleControl(
throtte = 0.0,
steer = 0.0,
brake = 0.0,
hand_brake = False,
reverse = False,
manual_gear_shift = False,
gear = 0)
车辆动力学特性

vehicle.apply_physics_control(carla.VehiclePhysicsControl(max_rmp=5000.0, center_of_mass=carla.Ventor3D(0.0, 0.0, 0.0), torque_curve=[[0,400],[5000,400]]))

轮胎控制

carla.WheelPhysicsControl(tire_firction, damping_rate, steer_angle, disable_steering)

四、创建其他actor

actor_list = world.get_actors()  #获取所有actor列表
actor = actor_list.find(id)  #根据id查找actor
for speed_sign in actor_list.filter('traffic.speed_limit.*'):
    print(speed_sign.get_location())  #打印限速标志位置
  1. 创建天气时参数有:
    cloudyness(0-100), precipition(0-100), precipition_deposits(主要用于控制道路上的积水面积)(0-100),wind_instensity(0-100), sun_azimuth_angle(0-360), sun_altitude_angle(-90 - 90)
weather = world.get_weather()   #获取天气
world.set_weather(weather)   #设置天气

也可以直接应用world的预定义天气预设列表:

world.set_weather(carla.WeatherParameters.WetCloudySunset)
  1. 创建路标:
waypoint = map.get_waypoint(vehicle.get_location())  #获取所有路标位置
vehicle.set_simulate_physics(False)  #关闭车辆动力学特性

while true:
    waypoint = random.choice(waypoint.next(2.0))   #查找前面2m处的路标
    vehicle.set_transform(waypoint.transform)  #将路标信息发送给车辆

3.录放系统

client.start_recorder('recording01.log')  #开始记录,recording01.log为文件名
client.stop_recorder()  #停止记录
client.replay_file('recording01.log')  #回放
client.set_replayer_time_factor(2.0)  #设置播放速率,1.0为正常播放,小于1.0为慢放,大于1.0为快放
client.show_recorder_file_info('recording01.log')

上面回放方法是从头全部回放,我们也可以通过添加参数控制回放指定时长

client.reply_file('recording01.log', start, duration, camera)

其中:start--开始回放时间,若为正,则从头开始的第start秒开始回放;若为负,则从倒数第start秒开始回放
duration--回放时长
camera--聚焦并跟随的演员id

相关文章

网友评论

    本文标题:carla使用pythonAPI创建演员

    本文链接:https://www.haomeiwen.com/subject/hwaxoctx.html