針對AR HUD Unity3D軟體技術說明文件和原始碼arincar_real所做的文件整理
1、資料通訊服務(Global Service)
(1)UDP資料接收(UDP Receive Service)
(2)UDP資料傳送(UDP Board)
(3)CAN資料(CAN Service)
資料格式參考Net Command下的CAN所對應的FramePacket.cs(幀資料包)類。
(4)導航狀態資料的接收服務(NAVI Data Service)
其中,(4)中NAVI Data Service用於接收兩種型別的導航資料:GpsNaviRoutePacket和GpsRealtimeNaviPacket。
2、AR邏輯演算法(Logic)
(1)名稱空間 Packet.CAN: CANFramePacket.cs
(2)命名空間 ArHud.Logic:
Main.cs Main類中當收到Packet.CAN.FramePactet時觸發OnCANFrameReceived事件。
CarMotionState.cs 更新車輛狀態資訊,CarMotionState類中Update方法完成,其狀態資訊主要包括車輛前行速度、車輛航向角速度以及車輛座標系等資料。
(3)命名空間 ArHud.Logic.Adas:
Main.cs Main類中的Update方法完成,更新ADAS資訊,ADAS資訊主要包括前方障礙物資訊(FPW和FCW)和車道線資訊(LDW),該方法中除了更新以上資訊外,還需要判斷車輛當前車道前方預警距離內是否有障礙物
PreciseLane.cs PreciseLaneCalc.cs
(4)命名空間 ArHud.Logic.Navi:
Main.cs Main類中的Update方法完成,導航狀態資訊主要包括GPS車輛行駛路徑程序(GpsProgressTracker)、實時車輛行駛路徑程序(RealProgressTracker)、車頭行駛方向姿態資訊(RunAttitudeTracker)以及下一個導航節點資訊(NaviGuideNotifier)等。
RunAttitudeTracker.cs Route.cs RealProgressTracker.cs Progress.cs
GpsRealtimeState.cs NaviDataService.cs
其中,在ArHud.Logic.Navi中Main類中的Update方法中:
之前面AR邏輯演算法Logic所提到的更新導航狀態資訊:
① GPS車輛行駛路徑程序(GpsProgressTracker)
② 實時車輛行駛路徑程序(RealProgressTracker)
③ 車頭行駛方向姿態資訊(RunAttitudeTracker)
④ 下一個導航節點資訊(NaviGuideNotifier)
除了之前上面所提到的更新導航狀態資訊之外,在3中還有:
還需要根據這些資訊向ARHUD資料包ArHudFramePacket類中更新不同的資料型別成員。主要為:
① 導航事件狀態(naviStatusEvent)
② 導航路徑點集(naviPathPoints)
③ 導航關鍵節點(naviKeyNode)
④ 前方障礙物資訊(fcw/fpw)
⑤ 車道線資訊(ldw)
⑥ 車速(carspeed)
⑦ 轉向角度(turnAngle)
注意:在ArHud.Logic.Navi中Main類中的Update方法中,只有
① 導航事件狀態(naviStatusEvent)
② 導航路徑點集(naviPathPoints)
③ 導航關鍵節點(naviKeyNode)
⑦ 轉向角度(turnAngle)
3、在AR場景動畫顯示(AR Scene and AR UI)中,AR Scene(AR場景)主要包含導航箭頭動畫(Navigation)和安全警示動畫(Safety Warning)兩部分。
(1)其中導航箭頭動畫主要包括:
① 直行箭頭動畫(Navi Arrow Line)
② 轉彎箭頭動畫(Navi Turn Path)
其中:直行箭頭動畫(Navi Arrow Line),ArrowLine.cs指令碼
指令碼事件OnArHudFrameReceived
轉彎箭頭動畫(Navi Turn Path), TurnPath.cs指令碼
指令碼事件OnArHudFrameReceived
(2)安全警示動畫主要包括:
① 障礙物警示動畫(Forward Car/Forward Pest(行人))
② 車道線警示動畫(Lane(道路))
其中,障礙物警示動畫(Forward Car/Forward Pest);
Forward Warning.cs指令碼和Smooth Move Animation.cs指令碼
Acc.cs 格子顯示 FcwInformation.cs 障礙物資訊
(3)車道線警示動畫(Lane);
Lane Departure Warning.cs指令碼 Departure:偏離
New Lane Departure Warning.cs指令碼
指令碼中事件OnArHudFramePacketReceived LineRenderer3D.cs線渲染器元件指令碼
ParamCurve3.cs指令碼 CurveRenderer.cs指令碼 Poly3.cs指令碼)
車道線偏離警示運用了第二節中Logic邏輯演算法的Mobile Eye車道線方程:X=C3*X3 + C2*X2 + C1*X + C0)
4、在AR UI中,AR UI(AR UI使用者介面)主要包含面板調整(Canvas Adjust)和UI資訊切換(Navi UI Controller)兩部分。
① 面板調整(Canvas Adjust);檢視CanvasAdjust類的Update方法
② UI資訊切換(Navi UI Controller);根據ARHUD資料包(ArHudFramePacket)中的導航事件狀態(NaviStatusEvent)的型別切換。檢視NaviUiController類的OnArHudFramePacketReceived事件。
5、在AR畫面成像校正(AR System)中:
(1)觀測畫面的畸變校正
(2)車輛視角座標系校正
(3)畫面投影成像的顯示比例校正(透視投影)
①標定工作生成標定檔案(ar_calib_data),在讀取標定檔案內容之後,畸變校正演算法需要計算成像畫面上每個畫素在觀測畫面上的對應位置,並顯示該位置期望的顏色值(R,G,0)。這一過程主要運用了雙線性插值演算法完成。
FullMappingGeneration 指令碼
Generate方法。
②在前面的畸變校正演算法中,還包含了車輛座標系標定。
指令碼Ar System其作用主要是用來讀寫標定檔案。除了前面標定檔案ar_calib_data;還有檔案ar_root_transform。
Ar System指令碼。
③產生透視投影效果需要給Camera元件輸入透視投影矩陣,ar_calib_data中兩個座標點(Xmin,Ymin)和(Xmax,Ymax)和遠近裁剪平面距離(Far/Near Clipping Plane)。
ArUndistortionEffect指令碼。
6、 在實車路況資料記錄(Log System)中,
(1)資料記錄(Sensor Data Record):儲存:
① 路徑點集資料(GpsNaviRoutePacket)
② GPS導航實時狀態資料(GpsRealtimeNaviPacket)
③ Mobile Eye檢測到的ADAS資料(CAN.FramePacket)
(2)資料重放(Sensor Data Replay):
實車駕駛狀態和環境資料讀取出來,進行模擬再現。
兩個指令碼:
① Sensor Data Record.cs 資料記錄指令碼
② Sensor Data Replay.cs 資料重放指令碼
7、 在本地線上模擬除錯(Debug)中,
在Debug中:行駛軌跡模擬和障礙物模擬。
(1)車道線和行駛軌跡模擬:
① Car From Motion.cs 指令碼 ② Precise Lane Calc Visualizer.cs 指令碼
順便看程式碼指令碼PreciseLaneCalc.cs
(2)障礙物模擬繪製
① Debug下與Adas繫結的Main.cs 指令碼
app_windshieldar\ForDebug\scripts\Adas\Main.cs
8、在APP環境配置(APP)中,
(1)AR座標系以及畫面模式顯示上的調整:
APP.cs 指令碼 app_windshieldar\basic\scripts\app.cs
(2)AR動畫的顯示策略調整:
AppConfig.cs 指令碼 app_windshieldar\basic\scripts\appconfig.cs