carla使用pythonAPI創(chuàng)建演員

一涩禀、準(zhǔn)備
安裝pygame和numpy
退出:ALT+F4
二、示例程序

  1. 向world中添加100輛車(chē)瓣履,注意最多添加200輛檐薯,默認(rèn)為10輛
$ python tm_spawn_npc.py -n 100
image.png

查到目前用的python3.8.0,但是dist文件夾下的egg文件用的python3.7。下載python3.8袍冷,重新安裝python3.7即可磷醋。


image.png
  1. 手動(dòng)控制車(chē)輛
$ python manual_control.py  
    W            : throttle 油門(mén)    
    S            : brake  剎車(chē)
    AD           : steer  方向盤(pán)角度
    Q            : toggle reverse  方向切換
    Space        : hand-brake  手剎
    P            : toggle autopilot 切換自動(dòng)駕駛儀
    M            : toggle manual transmission  撥動(dòng)式手動(dòng)駕駛器
    ,/.          : gear up/down 下載/上傳

    TAB          : change sensor position 改變傳感器位置
    `            : next sensor 下一個(gè)傳感器
    [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 開(kāi)始重放上次錄制的模擬
    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. 自動(dòng)控制
$ python automatic_control.py
  1. 動(dòng)態(tài)變化天氣
$ python dynamic_weather.py

三、導(dǎo)入actor對(duì)象

  1. 引入carla模塊难裆,須將pythonAPI同級(jí)目錄下carla/dist下的egg文件解壓子檀,否則程序找不到carla模塊镊掖;另外,需要用egg文件對(duì)應(yīng)的python版本打開(kāi)程序褂痰,否則可能出錯(cuò)亩进。
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模擬器默認(rèn)端口為2000缩歪,保證該端口沒(méi)有被占用归薛;設(shè)置連接時(shí)間押袍,防止聯(lián)網(wǎng)操作被一直阻止火本。
client = carla.Client('localhost', 2000)
client.set_timeout(2.0)

也可以通過(guò)命令行獲取端口號(hào):

client = carla.Client(args.host, args.port)
  1. 創(chuàng)建world,添加演員
world = client.get_world()  #模擬世界
blueprints = world.blueprint_library().filter('vehicle.*') #尋找目標(biāo)actor庫(kù)乳愉,如:vehicle
spawn_points = world.get_map().get_spawn_points()  #每一個(gè)地圖都會(huì)提供一組可用坐標(biāo)點(diǎn)

獲取所有2輪車(chē)

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屬性設(shè)置

color = random.choice(blueprint.get_attribute('carla').recommend_values)  #獲取隨機(jī)顏色
blueprint = random.choice(blueprints)   #在actor庫(kù)中選擇任意一個(gè)actor
blueprint.setattribute('color', color)
blueprint.setattribut('role-name', 'autopilot')   #設(shè)置自動(dòng)駕駛儀

顏色屬性也可用rgb比例設(shè)置:

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

創(chuàng)建actor生成點(diǎn)坐標(biāo)

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))

檢查生成點(diǎn)坐標(biāo)是否碰撞逛球,若發(fā)生碰撞則報(bào)錯(cuò)

actor = world.spawn_actor(blueprint,transform)  #創(chuàng)建actor

注意千元,carla提供了兩種創(chuàng)建carla的函數(shù),spawn_actor和try_spawn_actor颤绕;
spawn_actor添加actor失敗會(huì)引發(fā)異常幸海;try_spawn_actor添加失敗返回none。
添加actor失敗通常是因?yàn)樯牲c(diǎn)發(fā)生碰撞奥务。

添加傳感器:

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)) #將傳感器的數(shù)據(jù)保存到本地

spawn_actor后面附加參數(shù)可以控制物體是否和其他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)設(shè)置車(chē)輛位自動(dòng)駕駛

程序結(jié)束時(shí)需銷(xiāo)毀演員:

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

carla.VehicleControl 車(chē)輛控制函數(shù)
carla.WalkerControl 行人控制函數(shù)

carla.VehicleControl(
throtte = 0.0,
steer = 0.0,
brake = 0.0,
hand_brake = False,
reverse = False,
manual_gear_shift = False,
gear = 0)
車(chē)輛動(dòng)力學(xué)特性

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)

四、創(chuàng)建其他actor

actor_list = world.get_actors()  #獲取所有actor列表
actor = actor_list.find(id)  #根據(jù)id查找actor
for speed_sign in actor_list.filter('traffic.speed_limit.*'):
    print(speed_sign.get_location())  #打印限速標(biāo)志位置
  1. 創(chuàng)建天氣時(shí)參數(shù)有:
    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)   #設(shè)置天氣

也可以直接應(yīng)用world的預(yù)定義天氣預(yù)設(shè)列表:

world.set_weather(carla.WeatherParameters.WetCloudySunset)
  1. 創(chuàng)建路標(biāo):
waypoint = map.get_waypoint(vehicle.get_location())  #獲取所有路標(biāo)位置
vehicle.set_simulate_physics(False)  #關(guān)閉車(chē)輛動(dòng)力學(xué)特性

while true:
    waypoint = random.choice(waypoint.next(2.0))   #查找前面2m處的路標(biāo)
    vehicle.set_transform(waypoint.transform)  #將路標(biāo)信息發(fā)送給車(chē)輛

3.錄放系統(tǒng)

client.start_recorder('recording01.log')  #開(kāi)始記錄挡篓,recording01.log為文件名
client.stop_recorder()  #停止記錄
client.replay_file('recording01.log')  #回放
client.set_replayer_time_factor(2.0)  #設(shè)置播放速率,1.0為正常播放帚称,小于1.0為慢放官研,大于1.0為快放
client.show_recorder_file_info('recording01.log')

上面回放方法是從頭全部回放,我們也可以通過(guò)添加參數(shù)控制回放指定時(shí)長(zhǎng)

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

其中:start--開(kāi)始回放時(shí)間世杀,若為正阀参,則從頭開(kāi)始的第start秒開(kāi)始回放;若為負(fù)瞻坝,則從倒數(shù)第start秒開(kāi)始回放
duration--回放時(shí)長(zhǎng)
camera--聚焦并跟隨的演員id

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛛壳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子所刀,更是在濱河造成了極大的恐慌衙荐,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浮创,死亡現(xiàn)場(chǎng)離奇詭異忧吟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)斩披,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)溜族,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)讹俊,“玉大人,你說(shuō)我怎么就攤上這事煌抒∪耘” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵寡壮,是天一觀(guān)的道長(zhǎng)贩疙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)况既,這世上最難降的妖魔是什么这溅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮棒仍,結(jié)果婚禮上悲靴,老公的妹妹穿的比我還像新娘。我一直安慰自己莫其,他們只是感情好对竣,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著榜配,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吕晌。 梳的紋絲不亂的頭發(fā)上蛋褥,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音睛驳,去河邊找鬼烙心。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乏沸,可吹牛的內(nèi)容都是我干的淫茵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蹬跃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼匙瘪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蝶缀,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤丹喻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后翁都,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碍论,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年柄慰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳍悠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片税娜。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖藏研,靈堂內(nèi)的尸體忽然破棺而出敬矩,到底是詐尸還是另有隱情,我是刑警寧澤遥倦,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布谤绳,位于F島的核電站,受9級(jí)特大地震影響袒哥,放射性物質(zhì)發(fā)生泄漏缩筛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一堡称、第九天 我趴在偏房一處隱蔽的房頂上張望瞎抛。 院中可真熱鬧,春花似錦却紧、人聲如沸桐臊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)断凶。三九已至,卻和暖如春巫俺,著一層夾襖步出監(jiān)牢的瞬間认烁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工介汹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留却嗡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓嘹承,卻偏偏與公主長(zhǎng)得像窗价,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叹卷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容