You are on page 1of 43

GPS 應用 - 行車資訊互連網

班 級: SI-503
組 別: 第一組
組 員:
97951066 王欣偉
97951069 范易詮
97951071 謝欣恭
97951079 鄭依純
97951088 陳章玄 1
大綱
• 功能與構想
• 系統硬體架構
• 系統軟體架構
• 實作內容
– Ad Hoc
– Socket
– GPS
– Push To Talk
– Porting
• 成果與進度
• 參考資料
2
動機與目標
• 具有網路功能的衛星導航系統,透過網路讓衛
星導航系統間可互相溝通、互傳訊息、互傳資
料的功能。
• 在現有的衛星導航功能上,實現車隊模式的功
能。

3
功能描述
• 以無線網路進行資料傳輸
• GPS 導航
• 車隊定位系統
• 求救模式
• Push to talk

4
系統硬體架構

5
軟硬體需求 ( 硬體 )
• ARM9 S3C2440 開發板 DMA-2440
• RS232 GPS 模組
• USB IEEE802.11 無線網
• 耳機麥克風

6
系統軟體架構
Application
GPS Message Push to talk QT GUI

Lib
Glibc QTE Lib …
Kernel
Device Driver
TS Wireless GPS Sound
7
軟硬體需求 ( 軟體 )
• ARM-Linux (Kernel 2.6.14.7)
• Device Driver
(Wireless,GPS,Touchscreen,Sound…etc)
• GUI ( 使用 QT 開發 )
• Library(Glibc,QTE Lib…etc)

8
系統流程
AP Start AP Start
GPS Data
Message Data
初始化裝置 初始化裝置
並取得資料 Voice Data 並取得資料

存取資料於 存取資料於
Client() Server()
buffer,flash buffer , flas
h
顯示資料於 顯示資料於
Server() Client()
LCD LCD

播放聲音於 播放聲音於
耳機 耳機
9
Ad-Hoc

10
Ad hoc
• 無基礎架構無線網 (Ad-hoc Networks) 是指
由一群可隨意移動之行動站臺所組成,且不需
要經由中控臺或是預先設置好的基礎架構
(Infrastructure) 即可運作的行動特殊網。
• 網路
– PLANEX GW-US54Mini (zd1211 )

11
Ad hoc
• 測試平台
– Fedora9
– Kernel 2.6.25.14.fc9.i686
– GW-US54Mini × 2
• 測試結果

12
Ad hoc
• 解決方案
– 上網查詢發現 kernel 2.6.26.6 ,對 zd1211rw.ko 作
更新。
• Fedora 9 解決方法
– 方法 1
• 執行 #yum update
• 執行 #yum install kernel
• 重新開機,並選擇新 kernel
– 方法 2
• 更新 zd1211rw.ko mac80211.ko cfg80211.ko
13
Setting Ad Hoc mode on Linux(PC)
• 檢查系統的無線網路設備
– #iwconfig
• 設定無線網路
– MODE
– ESSID / CHANNEL
– IP / NETMASK
• 重新啟動無線網路
• 測試
14
Ad-hoc

15
Socket

16
Socket 傳送格式 (GPS)
1@#0@#1@#2@#172.16.16.20@#Momo@#2459.3010@#12177.7010@#172.16.16.10

[0] [1] [2] [3] [4] [5] [6] [7] [8]

[0] :訊息類別, 1 代表 GPS


[1] :車隊狀態
[2] :訊息轉送次數
[3] :發送者 / 轉送者中最多 list_nodes 者
[4] :發送者 IP
[5] :發送者名字
[6] :緯度
[7] :經度
[8] :轉送者 IP ,中途 Multi-hop 轉送者之 IP ,可能有 [9][10][11] 等欄位

17
Socket 傳送格式 (Message)
2@#0@#1@#2@#172.16.16.20@#Momo@#Hello Wrold@#172.16.16.10

[0] [1] [2] [3] [4] [5] [6] [7]

[0] :訊息類別, 2 代表 Message


[6] :傳送訊息
[7] :轉送者 IP ,中途 Multi-hop 轉送者之 IP ,可能有 [8][9][10] 等欄位

18
車隊 list table
status car_name car_addr locate_x locate_y re_time
-1 Jeter 172.16.16.102 121777010 24593010 1212342000
1 Mark 172.16.16.25 122972982 24570109 1212342242
0 Frank 172.16.16.18 120987387 24509872 1212342232
1 Alice 172.16.16.3 123974872 24089721 1212342252
2 Momo 172.16.16.20 122364596 24695429 1212342228
Status : 1 車隊 1
2 車隊 2…( 依此類推 )
0 網段內
-1 離線

re_time :超過 60 秒未有連線訊息即判定離線


19
Multi-Hop 演算法
• Multi-Hop 指收到訊息再轉送出去

• 停止 Multi-Hop 條件:
– if 轉送次數 > 5 次
– if 本機 .IP in the 字串
– if 本機 .status = 發送者 .status
– if 本機 .list_node <= 字串 .list_node( 決定路隊長 )

20
接收資料 分裂字串
訊息接 收流程 符合停止 Multi-Hop 條件?

轉送次數超過 5 次? N
Y
將改變之數值接回
N 發送者的 IP 在 list 中? 字串並加入本機 IP
Y
Y N
擷取 list 廣播轉送
status=0
status
發送者的 IP 在 list 中?

字串內容有關鍵字? Y N
& 符合關鍵字條件?
status 更新
新增資料
re_time 更新
[create] [join] [exit] else
GPS 訊息?
系統指定 加入指定
status=0
null status status N Y
座標更新
《迴圈》
其它 node>60 秒未更新?
print Y
Y
N
status 同車隊?
status=-1 21
N
GPS

22
GPS Format
• 主要在車用導航方面所用到的訊號有 GPGGA 、
GPRMC 、 GPGSA 、 GPGSV 。
• $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<
9>,<10>,<11>
<3> 緯度:度度分分 . 分分分分
<4> 緯度區分 :北半球 (N) 或 南半球 (S)
<5> 經度:度度分分 . 分分分分
<6> 經度區分:東半球 (E) 或 西半球 (W)
23
車隊成員狀態判定
• struct Listtable{
int status ;
char car_name[20] ;
char car_addr[20] ;
int locate_x ;
int locate_y ;
int ttl ;
}
Struct listable carlist[10] ;
24
車隊模式定位

25
Dijkstra’s Algorithm:
導航路徑計算
• 資料結構 : Graph
• 實作 : 矩陣
• 起點 : 最近節點
• 終點 : 使用者選擇

26
Dijkstra’s Algorithm (Example)
Step start N D(B),p(B) D(C),p(C) D(D),p(D) D(E),p(E) D(F),p(F)
0 A 2,A 5,A 1,A infinity infinity
1 AD 2,A 4,D 2,D infinity
2 ADE 2,A 3,E 4,E
3 ADEB 3,E 4,E
4 ADEBC 4,E
5 ADEBCF

5
3
B C 5
2
A 2 1 F
3
1 2
D E
1
27
導航路徑規畫 ( 最短路徑 )

28
Dijkstra’s Algorithm:
時間複雜度
• Dijkstra’s Algorithm 的計算時間複雜度
(Time Complexity) :
– 假設共有 n 個節點。
– 需要 n*(n+1)/2 次比較 :O(n2)

29
Push To Talk

30
WAVE format

31
Push to talk 細部流程
Record wav file: Transfer wav file:
Step1:open device Step1:open socket
Step2:init device Step2:connect
Step3:open empty file Step3:open file
Step4:set wave file header Step4:read file to buffer
Step5:repeat step6 until interrupt Step5:send buffer
Step6:read from device Step6:close file
Step7:interrupt Step7:close socket
Step8:write to file
Step9:save and close file
Step10:close device

32
Push to talk 細部流程
Receive wav file: Play wav file:
Step1:open socket Step1:open file
Step2:bind Step2:get file status
Step3:listen Step3:read file
Step4:open empty file Step4:set skip offset (header)
Setp5:repeat step6 until receive client data Step5:open device
Step6:accept Step6:setup device
Step7:receive from buffer Step7:write to device
Step8:write buffer to file Step8:close device
Step9:save and close file Step9:close file

33
Push to talk exec in ARM
Arm 版上 Push to talk Rec/Play 執行畫面

34
Voice 與 QT 介面整合

QT 選取 Member 移除錄音檔

錄音 button press 撥放錄音檔

錄音 5 秒並存檔 檔案另存檔名

Socket client 傳檔 Socket server 收檔

35
Voice 與 QT 介面整合
• Step1: 點選 Member 選取與對話之人員
• Step2: 點選對話按鈕開始錄音並傳送

Step2

Step1
36
Porting

37
DMA-2440 執行環境建置
• ARM9 DMA-2440 開發平台
• 交叉工具鏈 cross-3.4.1
• Linux kernel 2.6.14.7
• qt-embedded-2.3.10-free
• Wireless Tools for Linux
• BusyBox
• Rootfs
• GW-US54GXS_Linux_v2.15.0.0_CE
38
編譯 kernel
• S3C2410 LCD framebuffer support
• S3C2410 UDA1341 driver (DMA2410)
• Samsung S3C2410 touchscreen input driver

39
編譯 BusyBox & qte & 編輯 shell
• 解壓縮 -> 組態設定 ->Make
• 複製相關檔案至 ROOTFS
• 修改啟動相關 shell 檔,建置環境組態
• 建立執行 AP 的 shell script

40
成果與進度
• 無線網路
– 透過 802.11G 無線網卡做網路連線,將 GPS 定位位置傳送給車隊其它
人。
• Socket
– QT 選單完成建構,將圖資轉換成絕對座標,並可展現車隊間各車的
GPS 定位位置。
• Push to talk
– 使用單鍵控制可將本車的發話傳至車隊間各車的喇叭輸出。
• GPS
– 導航路徑規畫,以 Dijkstra 演算法實現最短路徑規畫。
– 路徑重新規劃,偏離導航路現時即重新規劃導航路徑。
• QT
– 地圖可行駛路線二維陣列建置,將地圖做處理,以 0 跟 1 作為可行駛
路線與埠可行駛路線區分。
41
參考資料
中國 IT 資訊網
http://embed.chinaitlab.com/gy/763676.html
鳥哥的私房菜
http://linux.vbird.org/linux_server/0130internet_connect.php
ARM Linux
http://www.arm.linux.org.uk/
維基百科
http://zh.wikipedia.org/wiki/%E5%85%A8%E7%90%83%E5%AE%9A%E4%BD%8
維基 GOOGLE 神廟
http://www.google.com.tw/

42
實際成果影像

43

You might also like