日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自动驾驶高精地图调研

發布時間:2023/12/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自动驾驶高精地图调研 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 高精地圖定義

高精地圖即為“兩高一多”的地圖,在自動駕駛中常常被稱為HapMap,這是自動駕駛汽車中非常重要的一部分

  • 高精度:精度可以達到厘米級別
  • 高動態:高精地圖實時性,為了應對各類突發狀況,自動駕駛車輛需要高精地圖的數據具有較好的實時性
  • 多維度:地圖中不僅包含有詳細的車道模型、道路部件信息,還包含與交通安全相關的一些道路屬性信息,例如GPS信號消失的區域、道路施工狀態等

2. 自動駕駛地圖框架

? 2.1 Apollo OpenDrive(百度)

  • 道路邊界是強約束,即自動駕駛的時候,道路邊界是永遠不能壓的。車道線理論上也是不能壓的,但是如果在緊急情況下可以壓車道線,比如說可以越過虛黃線進行借道超車。
  • 可以通過路口的邊界,對感知進行過濾。如果感知識別到的靜態物體不在地圖的路口邊界之內,就可以暫時忽略它。虛擬車道主要是用來路口的行駛引導。
  • 高精地圖會為紅綠燈提供一個三維空間位置,其次也會提供紅綠燈跟車道之間的關聯關系,即告知當前所在車道,應該看哪個燈。道路標志主要包括人行橫道,停止線以及一些路上的文字信息。
  • 邏輯關系表述。當前,地圖中各個元素之間的關系并沒有嵌入到元素的表述中,而是使用overlap來表述兩個元素之間的空間關系。如下圖所示,Lane和Junction在空間上有重疊,它們之間就會有Overlap。

? 2.2 Lanelet2(Autoware)

  • points由ID,3d坐標和屬性組成,是唯一存儲實際位置信息的元素,ID必須是唯一的。其他基本元素都是直接或者間接由points組成的。在Lanelet2中,Points本身并不是有意義的對象,Points僅與Lanelet2中的其他對象一起使用有意義。
  • 線串是兩個或者多個點通過線性插值生成的有序數組,用來描述地圖元素的形狀。線串可以是虛線,它可以通過高度離散化實現,來描述任何一維形式,并應用于地圖上的任何可物理觀察到的部分。與樣條曲線相比,線串可以高效計算,并且可以用來描述尖角,最終轉化為非線性微分方程的求解問題。

  • 多邊形與線串非常相似,但形成一個Area。隱式假定多邊形的第一個點和最后一個點被連接以閉合形狀。多邊形很少用于傳輸地圖信息(交通標志除外)。相反,它們通常用作將有關區域的自定義信息添加到地圖(例如,感興趣區域)的一種手段。

  • Lanelets定義了發生定向運動時,地圖車道的原子部分。原子表示沿當前lanelet行駛時,有效的交通規則不會改變,而且與其他Lanelet的拓撲關系也不會更改。

    lanelet可以引用表示適用于該lanelet的交通規則的regulatory elements。多個lanelet可以引用同一regElem。必須始終始終可以直接從車道上確定車道的當前速度限制。可以通過引用SpeedLimit監管元素或標記小車的位置來完成。在這種情況下,假定道路類型的最大速度(例如,如果位置是德國城市,則為最大50公里/小時)。

  • Areas是地圖上沒有方向或者是無法移動的部分區域,比如路標,停車位,綠化帶等。他們由一條或者多條linestring組成的閉合的區域。Area也有相關聯的regulatory elements。

  • regElem是表達交通規則的通用方式,它們由適用的lanelet或Area引用。在應用的時候,regElem 會和一個或者多個Lanelets、Areas相關聯。regElem是動態變化的,意味著它只是在某些條件下是有效的。

  • 諸如限速,道路優先級規則、紅綠燈等,交通規則有許多不同的類型,因此每個regElem的準確結構大都不一樣。他們通常引用定義規則的元素(例如交通標志),并在必要時引用取消規則的元素(例如速度區末尾的標志)。

3.制圖流程概述

高精地圖是一種語義地圖,概括地說,就是利用SLAM/SFM等算法融合多種傳感器數據,構建高精度的三維點云地圖,在點云地圖上或者是圖像上,對所用到的元素進行分類和提取、之后對不同元素分別進行矢量化并構建路網與車道關聯關系,最后進行質量校驗,形成一套地圖引擎來存儲并支撐其他模塊的需求。

高精地圖制作完成后,其數據量其實是非常小的。地圖數據可以存儲在云端,也可以直接直接在本地,大地圖還有可以用數據庫來存儲。先暫且不論地圖格式是Lanelet2還是OpenDrive以及其他,完整的理解高精地圖的元素結構設計,以及數據存儲和使用則為重中之重,后續的自定義格式要求可按自己的需求來適配。

小地圖手工標注方法

對于3km以內的小地圖而言,一般可以采取手工標注點云地圖的方法來制圖。目前我了解到的以下軟件均可,比如

  • RoadRunner

    2020年最新版可直接標注點云PCD文件,添加語義,可直接導出標準Opendrive,缺點就是目前語義類別不太完善,導出格式只支持標準OpenDrive。在使用上,高校等科研單位申請免費,每所學校一個密鑰。

  • LGSVL Map Annotation(windows Unity 插件版,需要手動編譯)

    支持目前的主流地圖格式,可導入導出如Apollo Opendrive/標準Opendrive/Autoware VectorMap/Lanelet2等,缺點是目前只能標注LGSVL提供的一些虛擬環境,使用上是完全開源的。目前2020.03的版本已經開始支持直接標注點云pcd

在這里插入圖片描述

  • Autocore MapToolBox插件

    AutoCore提供的開源工具,用于標注生成Autoware vector map矢量地圖,更新速度快,目前可標注車道線,路沿,紅綠燈,目前已全面支持Lanelet2 ,項目完全開源,本篇將著重于此。大家可以在issue里面多提bug,感謝作者moelang以及Autocore做出的極大貢獻!

  • Assure mapping tools

    Github@hatem-darweesh開源的標注工具,格式支持齊全,包括Google Earth、KML、opendrive、Lanelet、Vector Map等,標注上自動Fix height、smooth line,并集成了一些自動化的提取算法和。功能相當齊全,就是性能較差,大地圖加載進來很卡,需要配合GPU使用,另外有些功能也可能是目前我還沒有研究透徹。

  • 51VR、四維圖新等高精地圖地圖服務提供商(收費)

    一般是圖商直接用自家的制圖車進行采集數據制作,按次數收費,目前一般城區道路收費5k-1w/每公里。少數廠商會提供高精地圖標注軟件及相關仿真系統服務,成本較高,目前就試用情況來看也不是十分完善。

4.制圖流程實踐
構建點云底圖

構建點云地圖可以用一些主流的激光SLAM算法,結合多種傳感器來完成,其中要保證戶外場景的建圖效果,IMU和GPS是必須的,下面有一些推薦的開源算法,按優先級排列

  • LIO-SAM(緊耦合的激光慣導SLAM算法,速度快)

  • LIO-MAPPING (緊耦合的激光慣導SLAM算法,第一套緊耦合的激光慣導)

  • LEGO-LOAM(松耦合、輕量級,性能不錯,配置簡單)

  • VLOAM(能找到非官方的代碼)

  • ALOAM(僅里程計,可用于學習)

自動標注

自動標注涉及到的算法相當多,流程大致如下:

  • 點云地圖提取路面信息GroundExtraction(強度圖、密度圖、高程圖)
  • 路面信息部分,激光點云提取路沿、車道線、各種路標、停止線、人行橫道等,非路面部分提取路牌,紅綠燈,路燈,燈桿等。(各種多層強度閾值過濾方法)
  • 視覺語義分割方法,提取各道路元素(在自己標注的數據集上可能表現更好)。將視覺分割得到的像素點反投影轉換到世界(通過內參->外參參轉換,需要激光雷達相機聯合標定),去補充激光提取出來的不完整的部分
  • 對每一類的線段部分分別進行分段直線/曲線擬合,有序保留端點和均勻的采樣點,按位置進行排序。將有序的線段再次分類,比如左車道線,右車道線,中心線(可根據直線截距或者斜率閾值過濾),計算同一條車道線的各段線段的方向,連接端點,完成矢量化
  • 對每一類的多邊形部分,比如路標,進行輪廓計算,從點云輪廓中提取出矩形或者箭頭端點,按逆時針/順時針存儲(有內外圈的區分)。
  • 用Lanelet2等地圖框架,根據之前的各種點云分類,添加語義及車道的關聯關系,構建地圖索引和數據存儲,生成高精地圖數據文件,后面的博客有介紹Lanelet2用法。
  • 用地圖編輯軟件打開地圖并手工修正相應的輪廓,或者補充缺失部分。
  • 人工校驗道路的每一段是否存在質量問題。
  • 手工標注(Autoware)

    對比下來發現采用Autoware的地圖標注插件更好,Unity + MapToolBox進行標注,插件地址如下:https://github.com/autocore-ai/MapToolbox,這里注意下載的Unity版本需2019.3+,在Windows環境下使用,最新版的priview6已經加入對road mark和crosswalk的支持。目前Autoware社區已經增加了對Lanelet2的支持。

    手工標注(Apollo)

    Apollo Opendrive高精地圖的話一般存在下面四種思路。

    • 可以根據上面Autoware開源的MapToolbox,這倆都是C#項目,前者可以改寫后端,存儲標準點的時候按照Apollo Opendrive的格式去存儲,由于都是坐標序列描述,改寫難度不大。

    • LGSVL Map Annotation,目前支持直接導入PCD點云標注(2020.03版新功能不完善),也可導入已有的Apollo Opendrive/標準Opendrive/Lanelet2,可導出Apollo Opendrvie/Autoware Vector Map/Lanelet2/標準Opendrive等格式的地圖。其問題主要在于性能較差,對硬件要求高。

    • 利用RoadRunner標注點云PCD,導出標準Opendrive地圖,采用LGSVL模擬器將標準Opendrive轉換到Apollo Opendrive地圖。此步驟已驗證,示例標注的Apollo Opendrive地圖如下

    由于目前支撐Opendrive的開源lib庫很少,雖然自己寫也不是特別費勁,可以利用其他的開源地圖框架,生成高精地圖之后再轉換為Apollo Opendrive格式。這里目前可選擇的僅僅是Liblanelets/Lanlets2,按照Lanlets2的接口規范可以生成OSM地圖,在用開源的JSOM編輯器編輯完OSM地圖后,再轉換成Apollo Opendrive地圖

    5. Lanelet2地圖代碼解析

    地圖格式官方推薦的是OSM格式(XML),開源可編輯。當然也可以是二進制文件,加載速度快,缺點是不可直接編輯。下面的地圖文件是按XML形式來存儲的,結構十分明朗。關于OSM規范,可以參考其WIKI,https://wiki.openstreetmap.org/wiki/Map_Features。

    地圖里面的每一個3D點都會用一個node標簽存儲,包含其經緯度LaLon,id是其唯一標志。后續的way標簽存儲lineString形式的元素,通過id引用node節點存儲的3D點。而和交規相關的relation標簽則又引用這些way id。

    我們在JOSM編輯器中打開可以看到地圖的基本形狀,此編輯器的使用方法可查看官網https://learnosm.org/en/josm/correcting-imagery-offset/。下圖是一個復雜的十字路口,地圖上所有的黃色小框框都是一個3D/2D坐標點。這里紅色的線是地圖里面的stop_line,在軟件界面右側可以看到其屬性是stop line,并且有四個節點。地圖上畫出來了所有的車道線,路沿,人行橫道,綠化帶區域等,還有各個road user(比如行人,車輛等)需要遵守的交通規則,以及車輛在十字路口可能的換道路線(現實中是沒有的,屬性定義為virtual)。


    Lanelet2代碼的安裝可以參考官方文檔https://github.com/JokerJohn/Lanelet2,其層級結構如下

    我們常用的代碼在lanelet_core、lanelet_io、lanelet_projection、lanelet_routing和lanelet_traffic_rules這幾個模塊中。項目采用gtest框架來測試,閱讀起來比較容易。

    這里我們首先需要知道如何去使用,首先是圖元的基本定義方法(增刪改查),還有交通規則的定義方法及其與車道和road user的關聯關系。之后是如何去構建、加載使用OSM地圖,并且根據需求查詢相關的車道等信息。最后是如何生成生成路由圖,并利用路由圖和實際需求進行合理的路徑規劃。

    詳細參考了高精地圖制作流程詳解與實踐、Lanelet2地圖框架代碼解析、高精地圖與車輛協同

    總結

    以上是生活随笔為你收集整理的自动驾驶高精地图调研的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。