自動駕駛是機器學習的一個重要的應用領域柜砾,作為普通學習者,我們是否可以運用自己學到的機器學習方法訓練自動駕駛模型换衬,完成自動駕駛的任務呢痰驱?是否需要一輛真實的汽車和真實的馬路環(huán)境呢证芭?
對于普通學習者來說,我們當然沒有必要去駕駛真實的汽車担映。使用模擬器可以大大降低自動駕駛研究的門檻废士,這篇文章我們就簡單地介紹一下 Carla 這個開源的用于自動駕駛研究的開源模擬器。
1. CARLA 簡介
Carla 是一個開源的模擬器蝇完,可以模擬真實的交通環(huán)境官硝,行人行為,汽車傳感器信號等等短蜕。如下圖所示氢架,模擬器使用C++ 和虛幻 (Unreal) 引擎構成,使用者可以通過 Python API 使用 Python 腳本代碼對模擬器的環(huán)境進行操作和控制朋魔。
image from carla with MIT license
2. CARLA 簡單上手
CARLA的快速上手指南請參考官方文檔岖研, 本文僅做簡單介紹和總結
- CARLA 目前僅支持 Linux 和 Windows,需要去下載相應的版本警检。在本文寫作的時間缎玫,Windows 僅支持到 0.9.5 版本,Linux 支持到0.9.6解滓。
- 需要 安裝 numpy 和 pygame.
- 下載解壓文件夾之后,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
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 指南家夺。
- 初始化環(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]
- 初始化汽車,在模擬器世界中惨好,隨機出現一輛汽車
spawn_point = random.choice(world.get_map().get_spawn_points())
vehicle = world.spawn_actor(bp,spawn_point)
- 控制汽車煌茴,當然你可以用自動駕駛模式"vehicle.set_autopilot(True)"讓汽車根據模擬器制定的規(guī)則行駛,不過我們在這里讓汽車直行
vehicle.apply_control(carla.VehicleControl(throttle=1.0,steer=0.0)) # car go straight
actor_list.append(vehicle)
- 設置攝像頭
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)
-
獲取攝像頭圖片日川,這里通過 .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機器學習”,一起學習浩蓉,共同進步