強化學習:自動駕駛——Carla 模擬器簡介

自動駕駛是機器學習的一個重要的應用領域柜砾,作為普通學習者,我們是否可以運用自己學到的機器學習方法訓練自動駕駛模型换衬,完成自動駕駛的任務呢痰驱?是否需要一輛真實的汽車和真實的馬路環(huán)境呢证芭?

對于普通學習者來說,我們當然沒有必要去駕駛真實的汽車担映。使用模擬器可以大大降低自動駕駛研究的門檻废士,這篇文章我們就簡單地介紹一下 Carla 這個開源的用于自動駕駛研究的開源模擬器。

1. CARLA 簡介

Carla 是一個開源的模擬器蝇完,可以模擬真實的交通環(huán)境官硝,行人行為,汽車傳感器信號等等短蜕。如下圖所示氢架,模擬器使用C++ 和虛幻 (Unreal) 引擎構成,使用者可以通過 Python API 使用 Python 腳本代碼對模擬器的環(huán)境進行操作和控制朋魔。

CARLA Modules

image from carla with MIT license

2. CARLA 簡單上手

CARLA的快速上手指南請參考官方文檔岖研, 本文僅做簡單介紹和總結

  1. CARLA 目前僅支持 Linux 和 Windows,需要去下載相應的版本警检。在本文寫作的時間缎玫,Windows 僅支持到 0.9.5 版本,Linux 支持到0.9.6解滓。
  2. 需要 安裝 numpy 和 pygame.
  3. 下載解壓文件夾之后,Windows 環(huán)境下直接運行 “CarlaUE4.exe” 文件筝家,linux 環(huán)境下 終端命令: “./CarlaUE4.sh” 即可打開模擬器洼裤。

模擬器就是一個小鎮(zhèn)的環(huán)境,有道路溪王,建筑腮鞍,街道,交通燈等等莹菱。不過目前是沒有行人和車輛的移国。需要運行 python 腳本代碼。

終端 cd 到 \PythonAPI\examples 目錄道伟,里面有不少python 腳本實例迹缀,首先我們運行 spawn_npc.py 可以在模擬器中增加 80 倆汽車。

python spawn_npc.py -n 80

也可以運行這個腳本添加天氣變量(天黑蜜徽,下雨祝懂,刮風等)

python dynamic_weather.py

當然也可以體驗一下手動駕駛汽車的感覺,僅需要運行這個腳本就可以了拘鞋。

python manual_control.py
manual_control.py

image from carla with MIT license

如上圖所示砚蓬,可以像玩游戲一樣手動操作窗口中汽車前進、后退盆色、轉彎和剎車等動作灰蛙,同時環(huán)境的及時反饋也可以收集到祟剔。可以感應到周圍車輛的大小摩梧,交通燈信號物延,是否有撞擊等等。

當然你也可以用快捷鍵 P 讓汽車處于自動駕駛狀態(tài)障本。不過需要注意的是教届,此時汽車的自動駕駛并不是通過機器學習得到的模型,而是通過對模擬器中設置的汽車行駛交通規(guī)則實現的驾霜。

注意如果在運行腳本的時候出現導入 carla 失敗的錯誤案训,請檢測python版本。在PythonAPI\carla\dist 目錄中可以看到相應的python 版本的.egg 文件粪糙。筆者使用的是0.9.5 版本 carla 其中 Windows 10 需要使用 python 3.7. Linux 需要使用 python 3.5.

3. Python 控制汽車快速上手

為了便于進后機器學習的需要强霎,本文我們快速在模擬器中創(chuàng)建一輛汽車,并讓他直線行駛蓉冈,通過攝像頭將感知到的圖片顯示出來城舞。之后我們便可用攝像頭收集到的圖像信息以及汽車在環(huán)境中的反饋訓練(強化學習)模型,完成自動駕駛的任務寞酿。詳細指南請參考官方 Python API 指南家夺。

  1. 初始化環(huán)境。創(chuàng)建 Client 連接模擬器的服務器伐弹,并通過 "blueprint" 創(chuàng)建一個汽車blueprint拉馋。
    # set up the environment
    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]
  1. 初始化汽車,在模擬器世界中惨好,隨機出現一輛汽車
    spawn_point = random.choice(world.get_map().get_spawn_points())
    vehicle = world.spawn_actor(bp,spawn_point)
  1. 控制汽車煌茴,當然你可以用自動駕駛模式"vehicle.set_autopilot(True)"讓汽車根據模擬器制定的規(guī)則行駛,不過我們在這里讓汽車直行
    vehicle.apply_control(carla.VehicleControl(throttle=1.0,steer=0.0)) # car go straight
    actor_list.append(vehicle)
  1. 設置攝像頭
    cam_bp = blueprint_library.find("sensor.camera.rgb")
    cam_bp.set_attribute("image_size_x", "{}".format(IM_WIDTH))
    cam_bp.set_attribute("image_size_y", "{}".format(IM_HEIGHT))
    cam_bp.set_attribute("fov","110") #"fov" feel of view
    spawn_point = carla.Transform(carla.Location(x=2.5,z=0.7)) #locate the camera
    sensor = world.spawn_actor(cam_bp, spawn_point, attach_to = vehicle)
    actor_list.append(sensor)
  1. 獲取攝像頭圖片日川,這里通過 .listen 的 lambda 函數傳回數據蔓腐。當然不要忘了設計一個延時。

    sensor.listen(lambda data: process_img(data))
    
    time.sleep(25)
    

    其中通過 process_img() 方法傳回攝像頭圖像

    def process_img(image):
        i = np.array(image.raw_data)
        # print(i.shape)
        i2 = i.reshape((IM_HEIGHT,IM_WIDTH,4)) #4 changels "rgba"
        i3 = i2[:,:,:3] # 3 changels "rgb"
    
        cv2.imshow("",i3)
        cv2.waitKey(1)
        return i3/255.0
    

    這里需要注意的是龄句,攝像頭得到的圖片有4個通道 “rgba”回论,需要將第四個通道去掉,并用opencv 的 cv2.imshow() 將攝像頭捕捉到的圖片 歸一化之后回傳回來分歇。

最后透葛,我們運行一下這個python 腳本獲取汽車直線前進,攝像頭所“看到” 的畫面卿樱。汽車直行然后撞在了隧道的墻壁上僚害。

gif animation created by @hongtao

4. 總結

本文簡單介紹了 Carla 這個開源自動駕駛的環(huán)境,并簡單上手并實現了創(chuàng)建汽車,控制汽車直線運動萨蚕,同時將汽車上攝像頭捕捉的圖像信號傳回靶草。后面我們將使用這些圖像信號和環(huán)境的其他反饋,通過強化學習的方式訓練模型岳遥,實現自動駕駛奕翔。


參考資料

[1] Reinforcement Learning: An Introduction (2nd Edition)
[2] David Silver's Reinforcement Learning Course (UCL, 2015)
[3] Github repo: Reinforcement Learning


相關文章

用 Keras 搭建 Double DQN 模型
深度強化學習——Policy Gradient 玩轉 CartPole 游戲
強化學習——MC(蒙特卡洛)玩21點撲克游戲
強化學習實戰(zhàn)——動態(tài)規(guī)劃(DP)求最優(yōu)MDP
強化學習——強化學習的算法分類
強化學習——重拾強化學習的核心概念
AI學習筆記——Sarsa算法
AI學習筆記——Q Learning
AI學習筆記——動態(tài)規(guī)劃(Dynamic Programming)解決MDP(1)
AI學習筆記——動態(tài)規(guī)劃(Dynamic Programming)解決MDP(2)
AI學習筆記——MDP(Markov Decision Processes馬可夫決策過程)簡介


首發(fā)steemit

歡迎掃描二維碼關注我的微信公眾號“tensorflow機器學習”,一起學習浩蓉,共同進步

image
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末派继,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子捻艳,更是在濱河造成了極大的恐慌驾窟,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件认轨,死亡現場離奇詭異绅络,居然都是意外死亡,警方通過查閱死者的電腦和手機嘁字,發(fā)現死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門恩急,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纪蜒,你說我怎么就攤上這事衷恭。” “怎么了纯续?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵随珠,是天一觀的道長。 經常有香客問我杆烁,道長,這世上最難降的妖魔是什么简卧? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任兔魂,我火速辦了婚禮,結果婚禮上举娩,老公的妹妹穿的比我還像新娘析校。我一直安慰自己,他們只是感情好铜涉,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布智玻。 她就那樣靜靜地躺著,像睡著了一般芙代。 火紅的嫁衣襯著肌膚如雪吊奢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天纹烹,我揣著相機與錄音页滚,去河邊找鬼召边。 笑死,一個胖子當著我的面吹牛裹驰,可吹牛的內容都是我干的隧熙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼幻林,長吁一口氣:“原來是場噩夢啊……” “哼贞盯!你這毒婦竟也來了?” 一聲冷哼從身側響起沪饺,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤躏敢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后随闽,有當地人在樹林里發(fā)現了一具尸體父丰,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年掘宪,在試婚紗的時候發(fā)現自己被綠了蛾扇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡魏滚,死狀恐怖镀首,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情鼠次,我是刑警寧澤更哄,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站腥寇,受9級特大地震影響成翩,放射性物質發(fā)生泄漏。R本人自食惡果不足惜赦役,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一麻敌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掂摔,春花似錦术羔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叭披,卻和暖如春寥殖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工扛禽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锋边,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓编曼,卻偏偏與公主長得像豆巨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掐场,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容