全國高級中等學校商業與管理群 專題及創意製作競賽複賽 · 2021. 1. 15. · 全國高級中等學校商業與管理群110年 專題及創意製作競賽複賽
96 學年度 電機工程學系 專題製作競賽
description
Transcript of 96 學年度 電機工程學系 專題製作競賽
GPS SensorGPS Sensor
GPS 衛星
天線
全球定位系統 PC or Notebook
MATLAB
描繪路徑點(waypoint)
即時顯示地圖傳送資料
擷取與分析資料串列埠
介面串列埠介面
antennaSensor: GARMIN GPS 15H
serial port (RS232)
notebook
GPS 接收器
串列埠
NMEA 0183文字檔
選擇模式
位元組可用觸發事件
計時器觸發事件
持續接收資訊狀態
取得字句
分析字句
儲存資料
顯示路徑圖
調整圖軸邊際
顯示地圖
衛星資料文字檔
定位資料文字檔
地圖影像檔
地圖產生器
地圖目錄檔
主程式
地圖程式
start
模式選擇
組態GPS
Sensor
資料記錄
UTC↓臺灣時間
knot→km/hr
經緯度、高度
NMEA 字句
GPS 衛星狀態
GPS 衛星位置圖
版本: NMEA 0183 由 GPS sensor接收: Received NMEA 0183 sentences 由 GPS sensor送出: Transmitted NMEA 0183 sentences Transmitted sentences 摘要:
字句種類 原文意義 說明$GPRMC Recommended Minimum Specific
GPS/TRANSIT Data (RMC)
經緯度、高度等定位基本資訊
$GPGGA Global Positioning System Fix Data (GGA)
GPS 定位資料,包含 GPS 及衛星相關資訊
$GPGSA GPS DOP and Active Satellites (GSA) 使用中衛星編號及位置、水平、垂直幾何精度$GPGSV GPS Satellites in View (GSV) 可視衛星的資訊$PGRME Estimated Error Information
(PGRME)估測誤差資訊
$PGRMB DGPS Deacon Information (PGRMB) 差分 GPS 資訊$PGRMM Map Datum (PGRMM) 地圖座標系統$PGRMT Sensor Status Information (PGRMT) GPS 感測器狀態資訊(型號、狀態、溫度等)
NMEA 0183句型,以 RMC為例:
讀取原則:◦ 以 <CR><LF>為終止字元 (terminator) (carriage return, line feed)
◦ 確認起始記號 ($)與終止記號 (*)◦ 以句型種類決定讀取程序
偵錯法:◦ 判斷偵錯碼 (checksum)◦ 確認欄位數符合該句型的格式◦ $GPGSV,3,1,10,K,,N,N*31
$GPGSA,A,3,03,,11,13,16,W*61兩者的 checksum 都正確,所以偵錯碼偵錯結果沒有問題。但是其實這兩個句子是不合 NMEA 協定的,部分欄位(field) 出現該欄位不該出現的值,甚至欄位的個數跟標準協定不符,但 checksum 是對的。
$GPRMC,025219,A,2432.5300,N,12048.6776,E,031.5,160.9,211107,003.3,W*6A
句型
起始記號
GPS狀態
對地速度
對地航徑 終止記號
偵錯碼UTC時間
經度
<CR><LF>UTC日期
磁偏角
緯度
回轉檔案定位器
取得一列字句
記錄字句 分析字句
顯示字句
記錄衛星資料
顯示衛星資料
顯示衛星位置示意圖
End_satellitesdata = 0
記錄定位資料
顯示定位資料
End_fixddata = 0
End_satellitesdata == 1
End_fixdata == 1
RMCGo_fixdata = 1(End_fixdata = 1)GGA
GSA
GSV第一 GSV 字句Go_satellitesdata = 1最後 GSV 字句End_satellitesdata = 1Go_satellitesdata = 0PGRMEGo_fixdata == 1End_fixdsdata = 1Go_fixdata = 0PGRMM顯示地圖座標系統資訊
PGRMB
PGRMT顯示 GPS 裝置資訊
NMEA 文字檔GPS 接收器
取得的字句的種類順序
地圖 & 軌跡
定位顯示
地圖檔來源設定
軌跡點數設定
刻度尺大小設定
路徑點顯示範圍
2D2D
3D3D
高度高度
整批軌跡顯示
整批軌跡顯示
控制 XY軸邊際,使路徑點及地圖保持在畫面顯示的範圍內 多重目的整合的設計:
即時顯示路徑點時:判斷單點 顯示歷史路徑點時:判斷多點 調整刻度尺大小時:針對中心點 ( 定點 )
路徑點追蹤範圍
圖軸中心點
waypoints
0 2 4 6 8 10‧ ‧ ‧ ‧ ‧ ‧
0 xpixel
0
ypixel
x1 x2
y1
y2
long0
long
lat
long1 long2
lat1
lat2
lat0
][
pixely
pixelx
)(
)(
)(
)(
0022
11
22
11
latlonglatlong, latlong
, latlong
, yx
, yx
圖形寬、長
兩點座標
已知其中任意兩點的經緯度座標 南北為縱向、東西為橫向 經緯刻度間隔分別為定值 格式化結果:
• 取得圖檔的經緯度分佈範圍• 存成地圖目錄 ( 文字檔 )
給定地圖間距的最小截距 (R),算出用來判斷地圖的位置點座標。 當 R=1時,則判斷點座標為畫面的四個角落。
YLim(1)
XLim(2)XLim(1)
YLim(2)
X = XLim(2) – XLim(1) = YLim(2) – YLim(2)N = ceil( X / R ); ceil: round toward +infinityn = 0 →NXp = XLim + X/N*n
RR
Xp(0) Xp(1)
R
Xp(2) Xp(3)
對某位置點判斷包含該點之地圖圖檔,顯示之。
利用地圖結構 (cell array: Im)存放地圖資訊,減少開啟地圖目錄檔的頻率。
1 個路徑點座標
判斷該點是否在「地圖結構」的範圍內:
isinmapregion
該地圖是否「顯示中」
是
是
否該點位置已經有地圖顯示,此時不必做與地圖相關的動作
插入地圖*藉由「地圖結構陣
列」的識別碼插入
*
否
從「地圖目錄檔」中搜尋:開啟檔案→搜索地圖範圍
確認範圍:check region
否是
插入地圖*藉由「地圖結構陣
列」的識別碼插入
*將地圖資訊存入「地圖結構」中
該點位置沒有找到相對應的地圖可以顯示
實測時間: 96 年 11 月 21 日 上午 10:00 至 12:00 實測路徑:聯合大學(尖豐公路)→後汶公路
→經國路→新東大橋→苗栗交流道→國道 1 號 →三義交流道→國道 1 號→後汶公路→聯合
大學
速度顯示( km/hr)
新東大橋
新東大橋實景 實測路徑圖(新東大橋)
高速公路上坡路段實景
實測高度圖(坡度顯示)
高度圖顯示(上坡中)
聯合大學
苗栗交流道( 132.8 km)
三義交流道( 150.2 km)
國道 1號中山高速公路
路徑點追蹤範圍欄位的值若大於 10 則重設為 10 ;
若小於 0 則重設為 0
取得路徑點追蹤範圍欄位的值
將路徑點追蹤範圍欄位的值( 0~10 )除以 10 ,成為精密度百分比: precise_focus%
取得刻度尺滑軸的值: scale
取得目前圖軸的邊際值: xlim, ylim
判斷 p2c 是否超出路徑點追蹤範圍的半徑
求出路徑點追蹤範圍的圓的邊界(點到圖軸中心的距離),即路徑點追蹤範圍的圓的半徑: bound_focus = (scale / 2) * precise_focus
求出圖軸中心的座標:xc, yc 分別為 xlim, ylim 的平均
值
求出某點或多點與圖軸中心的最大距離 p2c
是
若 p2c 大於 scale/2 ,則改變 scale(使 p2c = scale * pof )
重設圖軸中心點 xc, yc :在單點時以該點為圖軸中心;在多點時把所有點的幾何中心作為圖軸中心
否
完成圖軸邊際設定
執行運算式 情況 1 (單點) 情況 2 ( n 點) 情況 3 (定點)px, py px, py px(1 : n), py(1 : n) xc, yc
dx = max(abs(xc – px));
dy = max(abs(yc – py));
dx = |xc – px|
dy = |yc – py|
dx = |xc – px| max
dy = |yc – py| max
dx = 0
dy = 0
p = sqrt(dx^2 + dy^2); p = p = p = 0
p bound_focus ? p bound_focus ? p bound_focus ? 0 bound_focus
max(px)-min(px) scale ?
max(py)-min(py) scale ?
max(px)-min(px) = 0 < scale
max(py)-min(py) = 0 < scale
max(px)-min(px) scale ?
max(py)-min(py) scale ?
max(px)-min(px) = 0 < scale
max(py)-min(py) = 0 < scale
scale = max((max(px)-min(px)),(max(py)-min(py))) /
precise_focus;
max(px)-min(px) scale ?
max(py)-min(py) scale ?
xc = mean(px); yc = mean(py); ( xc = px, yc = py ) xc = mean(px); yc = mean(py);
( xc = xc, yc = yc )
2dy
2dx 2
dy2
dx