論文簡介
這是我在實踐大學資訊科技與通訊學系的學士畢業論文專案(民國100年,2011年),與侯圳嶺、侯劭東、劉文茜、葉曉霈、鄧靜容同學共同完成,指導教授為吳啟偉老師。
研究主題: 開發一套完整的無人飛行船自動導航控制系統
核心突破:
- ✅ 飛行船能夠自主飛行,根據預設 GPS 座標自動導航
- ✅ 手動/自動模式即時切換,解決人工操控失控問題
- ✅ 突破地面遙控範圍限制,飛行船可在任意地點航行
- ✅ GPRS 即時回傳飛行資料至地面監控站
- ✅ 地面站動態模擬,Google Maps + Flash 即時顯示飛行狀態
技術棧: Microchip PIC24FJ128GB106 + GPS + GPRS + Compass (I2C) + Java Server + MySQL + Google Maps + Flash
🎯 研究背景與動機
問題現況
傳統飛行船的限制:
- 地面遙控範圍過小
- 遙控器訊號有效範圍有限(約數百公尺)
- 超出範圍後失去控制
- 無法進行長距離飛行任務
- 完全依賴人工操控
- 操作員技術要求高
- 人為失誤容易導致失控
- 無法自主應對突發狀況
- 失控後無法自救
- 訊號中斷後飛船失聯
- 無法自動返航或降落
- 可能造成飛安問題或財產損失
研究動機
開發一套自主飛行控制系統,解決上述問題,並擴展飛行船的應用範圍:
軍事應用:
- 利用飛行船雷達截面積小(RCS)的特性
- 軍事偵察、情報蒐集
商業/民間應用:
- 廣告宣傳(空中廣告看板)
- 溫度濕度監測
- 空中拍攝、環境監控
🎓 研究目的
1. 飛行船自主飛行
目標: 輸入目標 GPS 座標後,飛行船能自動航向目的地
實現方式:
- GPS 即時定位
- Compass 獲取航向
- 自動計算飛行路徑
- 馬達動力自動調整
2. 手動/自動模式切換
目標: 飛行船具備自動與手動兩種飛行模式,可即時切換
應用場景:
- 正常狀況:使用自動模式,按照預設路線飛行
- 特殊需求:切換手動模式,由操作員介入控制
- 操作失誤:自動模式接手,啟動安全降落程序
切換機制:
- 遙控器可即時切換模式
- 自動模式優先權設定
- 安全機制防止誤切換
3. 突破飛行範圍限制
目標: 不再受限於遙控器訊號範圍,可在任意地點航行
技術實現:
- 使用 GPRS 無線通訊(不受距離限制)
- 自動導航系統不依賴地面遙控
- 地面站可透過 GPRS 下達指令
實際效益:
- 飛行範圍從數百公尺擴展到無限制
- 可執行長距離飛行任務
- 地面站隨時可監控與介入
4. 即時飛行資料傳達地面站
目標: 將飛行資料即時回傳,如同「飛航黑盒子」
回傳資料:
- 位置資訊:GPS 經緯度、高度
- 姿態資訊:航向 (Heading)、俯仰角 (Pitching)、翻滾角 (Rolling)
- 環境資訊:溫度、氣壓
- 控制資訊:當前模式、目標座標、馬達輸出
技術實現:
- GPRS 定期回傳資料(例如每秒)
- Java Server 接收並存入 MySQL 資料庫
- 建立完整的飛行記錄
5. 地面即時模擬飛行動態
目標: 當飛行船超出可視範圍時,地面站仍能清楚看到飛行狀態
技術實現:
- Google Maps 地圖顯示:標示飛行船即時位置
- Flash 動態模擬:3D 動畫顯示飛行船姿態與動作
- 儀表板介面:顯示所有飛行參數
實際效益:
- 飛行船飛到高空或遠處,地面仍能掌握狀態
- 提供直觀的視覺化監控
- 方便記錄與分析飛行數據
🚁 飛行船系統架構
飛船主體
供應商: 天興化工 類型: 氦氣填充式飛船
動力系統:
- 前進推力
- 載台左右兩側的直流馬達
- 轉動葉片產生推力
- 上升/下降
- 固定葉片的軸承上下轉動
- 控制俯仰角
- 由升降伺服馬達控制
- 左右轉向
- 船體歷經三個版本演進(A型、B型、C型)
- 轉向機構不同
- 主推力馬達也持續優化
飛船船體版本演進
專案期間共開發三種船體版本,持續優化轉向與推力系統:
A型船體:伺服馬達轉向
轉向機構:
- 推進馬達架設於轉向伺服馬達之上
- 左右各 75 度風向吹送角度
- 零度時(直往後吹)可作為前進加速
優點:
- ✅ 轉向角度可精確控制
- ✅ 零度位置可提供額外推力
缺點與改進需求:
- ⚠️ 轉向能力不足
- ⚠️ 風大時反應速度過慢
- ⚠️ 路徑偏移量過大
- ⚠️ 手動操作控制不理想
測試結果: 多次試飛後決定更換轉向機構
B型船體:碳刷馬達正反轉
轉向機構:
- 碳刷馬達固定於下尾翼中間
- 利用極性切換達成正反吹送
- 增加垂直襟翼加強轉向效果
優點:
- ✅ 轉向迅速(直接切換馬達極性)
- ✅ 反應速度比 A 型快
缺點:
- ⚠️ 碳刷馬達正反轉出力有明顯落差
- ⚠️ 兩個方向的轉向速度不一致
C型船體:主推力升級 + 四組襟翼(最終版本)
主要改良重點:
- 主推力系統升級
- 更換更強力的主推進馬達
- 加強電力輸出
- 螺旋槳從三翼式改為四翼式
- 翼長增大,風力吹送更強
- 襟翼系統(4組伺服馬達)
- 左右水平襟翼:輔助船體上升與下降
- 上下垂直襟翼:輔助船體左右轉向
- 與後方轉向伺服切換器共用一組 PWM 訊號
優點:
- ✅ 逆風環境下推力充足
- ✅ 升降反應迅速(襟翼輔助)
- ✅ 轉向性能大幅提升
- ✅ 整體船身控制性能改善
缺點:
- ⚠️ 船體重量增加(需增加氦氣填充量)
- ⚠️ 重心位置需重新調配
- ⚠️ PWM 訊號規劃更複雜(4組襟翼伺服馬達)
- ⚠️ 電力耗損增加,飛行時間縮短
意外發現:
- 🎯 測試中發現:即使主轉向馬達失效,單靠轉向襟翼也能達到轉向功能
- 🎯 襟翼轉向較慢但更穩定,角度變化緩和
💻 自動控制系統架構
核心控制板
主板: Microchip PIC24FJ128GB106 (APP-026-3X)
選擇理由:
- 16位元微控制器,運算能力足夠
- 內建 UART、I2C、SPI 等通訊介面
- 豐富的 GPIO 可連接多個週邊模組
- 支援 PWM 輸出,控制伺服馬達
週邊模組整合
系統採用「主板 + 自製子板」架構:
- 主板:負責核心運算與決策
- 子板:銜接各種週邊模組,轉接訊號格式
整合的週邊模組:
1. GPS 模組
專案使用兩種 GPS 模組(演進過程):
GPS 模組 1:Leadtek LR9548S
| 規格項目 | 規格值 |
|---|---|
| 型號 | LR9548S |
| 連接介面 | RS-232 |
| 外觀大小 | 24 × 20 × 2.9 mm |
| 重量 | 2.5 g |
| 輸入電壓範圍 | 3.2 ~ 5 V |
| 資料更新頻率 | 1 秒 |
| GPS 精確度 | < 15 m(95% typical) |
| DGPS 精確度 | < 3~5 m(95% typical) |
| Reacquisition | < 2 seconds |
| 同時追蹤衛星數 | 12 |
狀態: 腳位損壞,改用 GPS15XL-W
GPS 模組 2:GARMIN GPS15XL-W(最終使用)
| 規格項目 | 規格值 |
|---|---|
| 型號 | GPS15XL-W |
| 連接介面 | RS-232 |
| 外觀大小 | 35.56 × 45.85 × 8.31 mm |
| 重量 | 14.1 g |
| 輸入電壓範圍 | 3.3 ~ 5 V |
| 資料更新頻率 | 1 秒 |
| GPS 精確度 | < 15 m(95% typical) |
| DGPS 精確度 | < 3~5 m(95% typical) |
| Reacquisition | < 2 seconds |
| 同時追蹤衛星數 | 12 |
通訊協定: NMEA 0183 資料格式: GPGGA、GPRMC、GPGSA、GPGSV 功能: 即時定位(經緯度、高度、速度、方向)
GPS 程式開發過程(6 個版本迭代):
| 版本 | 開發研析 | 資料項目 | 備註 |
|---|---|---|---|
| Ver 1 | 抓取 GPGGA 格式資料,分析陣列內容,依資料項目放入各別陣列 | - 時間 - 緯度(GGA 格式) - 經度(GGA 格式) - 高度 |
原本是抓取 RMC 格式資料,但因定位時間過久,所以改成 GGA 格式嘗試 |
| Ver 2 | 陣列資料轉為數字型態。時間為 UTC 型式,於是把「時」的部分加 8,變成台灣時間 | 同上 | 1. 資料轉為數字型態目的在便於計算 2. 發現定位時間過久是因為實驗室走廊位置遮蔽較多,且天候因素也有影響 |
| Ver 3 | 把各資料項目放入 GPSgetData 函數 | - 時間 - 緯度(GGA 格式) - 經度(GGA 格式) - 高度 - 北半球或南半球 - 東半球或西半球 |
資料統一放到陣列內,便於飛控程式抓取 |
| Ver 4 | 增加 GPRMC、GPGSA、GPGSV 格式 | - 時間 - 緯度(GGA 及 RMC 格式) - 經度(GGA 及 RMC 格式) - 高度 - 北半球或南半球 - 東半球或西半球 - 定位狀態 getStatus() - 對地速度 Speed() - 對地方向 Direction() - 磁極變量 Mag() |
比較 GGA 及 RMC 格式的經緯度資料,發現兩者數值相差約 2~3 度 |
| Ver 5 | 增加 GPVTG 格式。GPRMV 格式的速度、方向、日期由 Array() 函數擷取。由 Resolve(char str[]) 函數分析 | - 時間 - 緯度(GGA 及 RMC 格式) - 經度(GGA 及 RMC 格式) - 高度 - 北半球或南半球 - 東半球或西半球 - 定位狀態 getStatus() - 速度、方向、日期 Array() |
除了 VTG 格式抓取的資料仍為字元外,其餘資料皆為數字型態 |
| Ver 6 | 刪掉 GPVTG 格式,全部資料轉為數字型態 | 同上 | 因為 Leadtek 的 LR9548S 模組損壞,所以改為 GARMIN 的 GPS15XL-W。後者的出廠預設 NMEA 格式沒有 GPVTG,於是不擷取該格式資料 |
除錯機制:
- 透過 LCD 顯示資料數值,便於開發過程查看
- 設計按鍵切換,顯示各種資訊
- 利用 LED 亮燈檢查旗標,可知程式出錯於哪個流程
2. GPRS 模組
型號:Create GPRS4SIM100
| 規格項目 | 規格值 |
|---|---|
| 重量 | 11 公克 |
| 外觀大小 | 53 × 33 × 3.0 mm |
| 連接介面 | RS-232 |
| 輸入電壓範圍 | 3.2 ~ 4.5 V |
| 工作電流 | < 500 mA |
| 待機電流 | < 3 mA |
| 工作溫度 | -30°C ~ +80°C |
| 儲存溫度 | -40°C ~ +85°C |
通訊協定: AT 指令 功能: 無線數據傳輸(突破遙控器距離限制) 資料傳送頻率: 約 3 秒/筆
3. Compass 模組(電子羅盤)
型號:HONEYWELL HMC6343
功能:
- 獲取航向角度(Heading):0-360 度
- 俯仰角(Pitching)
- 翻滾角(Rolling)
通訊: I²C 精度: ±1 度(航向角度)
4. PWM 控制
功能:
- 控制伺服馬達(升降、轉向、襟翼)
- 控制直流馬達(前進推力)
控制對象:
- 升降伺服馬達:1 組
- 轉向伺服馬達/碳刷馬達:1 組
- 襟翼伺服馬達(C型船體):4 組
- 主推力直流馬達:2 組(左右)
5. 其他感測器
溫度感測器:
- 監控系統溫度
- 過熱保護機制
氣壓計:
- 輔助高度測量
- 提升高度精確度
🧠 自動飛行演算法
核心程式架構
開發流程(四大階段):
- 第一階段:公用程式開發
- 定義主板各 I/O、週邊連接 PIN 腳
- 開發 LCD、LED、KEY 按鍵等基本功能
- 建立開發與除錯基礎
- 第二階段:模組程式開發
- 利用公用程式對各週邊模組進行功能測試
- 將功能模組化,便於副程式運用
- 模組:PWM、GPS、GPRS、Compass
- 第三階段:副程式開發
- 將系統需解決的問題進行切割
- 依先後順序歸類統整
- 分別撰寫副程式提供主程式所需功能
- 第四階段:整合測試
- 整合各階段程式
- 進行地面測試及飛行測試
- 依測試結果檢討並修改程式
主程式版本演進表
從 2010 年 7 月到 9 月,主程式經歷 11 個版本迭代:
| 版本 | 更新項目 | 新增需求 |
|---|---|---|
| MainPT_Ver0712 | InitAll、llStop、Show、Show7kAt、ShowAt、ShowERROR、ShowDelay、ShowSP、CleanLCD、LinsFunnyLCDL2R、LinsFunnyLCDR2L | LED 燈控制、按鍵控制(增加程式開發的便利性) |
| MainPT_Ver0713 | ShowNum、LEDCtrl、LEDON、LEDOFF、LEDChkFlag、IsKey、IsClick | 開啟、關閉 LCD、KEY、LED 的功能(有時不需要使用) |
| MainPT_Ver0714 | ShowEN、ShowDIS、LEDEN、LEDDIS、KeyEN、KeyDIS | LCD 印出不需宣告的字串、判別何按鍵被按下、等待任意或指定按鍵 |
| MainPT_Ver0716 | ShowLn、ShowDouble、WhichKey、WaitFor | 無正負號 CHAR 轉換 |
| MainPT_Ver0731 | ShowUnCh | - |
| MainPT_Ver0801 | 加入 PWM 模組程式 | 開始整合伺服馬達控制 |
| MainPT_Ver0816 | 加入 GPS 模組程式 | 整合 GPS 定位功能 |
| MainPT_Ver0820 | 加入 CMPS 模組程式 | 整合電子羅盤(航向感測) |
| MainPT_Ver0822 | 加入 GPRS 模組程式 | 整合無線通訊功能 |
| MainPT_Ver0921 | 整合所有副程式 | 完整系統整合 |
開發時程: 約 2.5 個月(2010/07/12 - 2010/09/21)
FLYDATA 副程式版本演進表
FLYDATA 是核心飛行控制副程式,負責計算飛行路徑與馬達控制:
| 版本 | 功能 | 新增需求/問題 |
|---|---|---|
| MainPT_Ver0720 | 基礎距離與角度計算 - GetVD:算目前所在緯度之一度的長度 - GetXD:算目標與飛船間的距離(經緯) - GetDegree:算目標與飛船間的角度 - GetHD:算目標與飛船間的距離(高度差) - GetRD:算目標與飛船間的距離(實際距離) |
⚠️ 算出距離後,尚不知道要做何動作 ⚠️ 不知道要輸出何種訊號控制馬達 ⚠️ 其他副程式也無法得知此計算結果 |
| MainPT_Ver0731 | 飛行資料陣列與動作判斷 - 新增飛行資料陣列儲存飛行中計算、接受、判斷的資料 - DataRec:更新資料-接收 - DataMath:資料計算 - FlyDataLoad:提供其他程式載入本程式之資料 - FlyDataSave:提供其他程式輸入更新資料 - GetNDegree:算目標與飛船間的角度 - GotoLorRD:飛船要左或右多少度 - GotoUorDD:飛船要升或降多少度 - GetPitchDegree:目標與船的仰角 - 原函式 GetVD 更名為 GetLonUnit - 原函式 GetXD 更名為 Get2DM - 原函式 GetHD 更名為 GetHeightDoX - 原函式 GetRD 更名為 Get3DM |
⚠️ 將 LOAD 與 SAVE 函式完成後,需要讓其他程式試著存取,以確定函式正確運作 ⚠️ 由於此時也完成了 CMPS 的模組程式,故可以進行目標判斷程式的測試 ⚠️ 判斷向左或向右的動作,但仍未連接 PWM 飛船馬達,故尚未完成 PWM 數值指令表的設定 |
| MainPT_Ver0822 | 飛行資料陣列擴充 - 因測試整合其他程式,飛行資料陣列大小進行調整 - 由 10×10 更改為 16×16 |
⚠️ 整合中發現程式會相互干擾 ⚠️ communication 與 pwm 模組的 init 內有相衝突的設定 ⚠️ 以致於無法同時初始化成功 |
| MainPT_Ver0921 | 完整整合(最終版本) - 加入 PWM 數值輸出參數設定 - 完全整合所有模組與副程式 |
⚠️ 發生 14 秒問題 ⚠️ 此問題記錄:主要是 gprs 的 Rx 沒反應所以 delay 到時間 |
核心架構(最終版本):
FLYDATA 副程式
├── DataRec(資料接收)
│ ├── GPS 資料:經緯度、高度
│ ├── Compass 資料:heading、pitching、rolling
│ └── 其他感測器:溫度等
│
├── DataMath(資料計算與路徑規劃)
│ ├── 計算目標點所在方位
│ ├── 結合 Compass 資料計算航向差異
│ ├── 決定飛船應該升降幾度
│ └── 決定左右轉動多少度
│
└── FlyDataSysUpt(系統更新與馬達控制)
├── 判斷系統是否過熱
├── 判斷飛行船模式(自動/手動)
├── 依照 DataMath 的判斷決定實際推力輸出
└── 決定馬達動作角度
程式階層架構(五層式架構):
第一層:自動飛行控制系統(頂層)
│
↓
第二層:系統主程式
├── PIC24FJ128GB106 主板提供的函式
└── 本系統定義的副程式
│
↓
第三層:副程式
├── INIT(初始化)
├── FLYDATA(飛行資料處理)
├── TUNER(參數調整)
├── WHEREIS(位置判斷)
├── FYBTCTRLOR(馬達輸出控制)
└── COMMUNICATION(地面通訊)
│
↓
第四層:模組程式(週邊模組)
├── PWM 控制
├── GPS 資料解析
├── GPRS 通訊
└── Compass 讀取
│
↓
第五層:公用程式
├── LCD 顯示
├── LED 燈控制
└── KEY 按鍵偵測
自動飛行流程
1. 資料讀取
- GPS:取得當前位置(經度、緯度、高度)
- Compass:取得當前航向(0-360度)
- 氣壓計:輔助高度測量
2. 位置判斷 (WHEREIS)
- 計算當前位置與目標位置的距離
- 計算當前位置與目標位置的方位角
- 判斷是否已到達目的地
3. 動作決策 (FLYDATA)
- 根據方位角差異,決定左轉或右轉
- 根據高度差異,決定上升或下降
- 根據距離,決定推力大小
4. 馬達控制 (FYBTCTRLOR)
- 升降伺服馬達:控制俯仰角
- 轉向伺服馬達:控制航向
- 推力馬達:控制前進速度
5. 補償機制
- 風向補償:根據環境風向調整航向
- 高度補償:根據氣壓變化微調高度
- 推力補償:根據電池電量調整輸出
手動/自動模式切換
模式切換機制:
- 手動模式:遙控器直接控制馬達
- 自動模式:程式控制馬達,遙控器無效(除了切換鈕)
- 切換方式:遙控器特定按鈕,即時切換
安全機制:
- 自動模式優先權
- 當遙控器訊號中斷,自動切換至自動模式
- 執行預設的安全降落程序
- 手動介入權限
- 特殊情況下,手動模式可強制接管
- 例如:緊急閃避障礙物
🌐 地面監控系統
地面 Server 架構
技術棧: Java + MySQL + TCP Socket
監控站 Server 版本演進
經歷三個主要版本的開發:
Ver 1:VB 版本(初期測試)
開發工具: Visual Basic
功能:
- ✅ 接收 Client 端資料
- ✅ 存入文字檔
- ✅ 顯示基本飛行資訊
顯示項目:
- IP、PORT、傳輸資料
- 目前位置座標、目的地座標
- 經度、緯度、現在時間
- 左右轉、傾角、方向角
測試方式:
- 模擬 1 個傳送端傳資料
- 未使用 GPRS 測試(僅 TCP 測試)
限制:
- ⚠️ 只能接收資料,無法存入資料庫
- ⚠️ 無法下達控制指令
Ver 2:Java 初版(GPRS 整合)
開發工具: Java
功能:
- ✅ 改用 Java 撰寫
- ✅ 先把資料存成文字檔
- ✅ GPRS 測試成功,確認資料可透過 GPRS 傳送並存入文字檔
新增顯示項目:
- 目前位置(經緯度、南北緯、東西經)
- 目的地(經緯度、南北緯、東西經)
- 高度(GPS 抓取)
- 手動/自動模式(新增)
改進:
- ✅ 介面更清楚,資訊分類更完整
- ✅ 清空文字框功能
- ✅ 全部收到的資料都會印出
Ver 3:Java 完成版(資料庫 + 控制功能)
開發工具: Java + MySQL
完整功能:
- 接收飛行資料
- 飛行船透過 GPRS 傳送資料
- Server 透過 TCP Socket 接收
- 解析資料後存入 MySQL 資料庫
- 下達控制指令
- 地面站可透過 Server 發送指令
- Server 透過 GPRS 傳送給飛行船
- 可改變目標點
- 可改變行列的資料
- 可操作飛船馬達升降角度
- 可控制馬達出力百分比
- 資料庫管理
- 記錄完整的飛行歷史
- 提供查詢與分析功能
- 記錄測試場次、位置、風力、天氣、飛船尺寸
- 介面設計
- 文字框、按鈕、標籤組成
- 資料分類顯示(過多時可用按鈕切換)
- 顯示連結時間和接收資料時間
- 右上角顯示目前狀態
測試資訊記錄(開啟時必須輸入):
- 測試場次
- 測試位置
- 風力
- 天氣
- 飛船尺寸
Google Maps 整合
使用技術:
- Google Maps API (JavaScript)
- Google Maps API for Flash
顯示內容:
- 飛行船即時位置
- 根據 GPS 資料標示在地圖上
- 動態更新位置(例如每秒更新)
- 飛行軌跡
- 顯示歷史飛行路徑
- 用不同顏色標示不同階段
- 目標點標示
- 顯示預設的導航點
- 顯示當前目標點
Flash 動態展示系統
開發工具: Flash CS4 + ActionScript 3.0 + PHP
Flash 動畫展示系統版本演進
設計目的:
- 當飛航高度過高,飛行船不在可視距離內時,檢視飛行資訊不易
- 資料庫數據繁多也不易查詢
- 需要更清楚了解飛船飛行資訊
- 同時擁有美觀與傳遞資訊功能
經歷 6 個版本的迭代改進:
版本 1:簡易資料顯示版
設計重點: 測試連結 PHP 載入資料庫資料的功能
顯示項目:
- 出發時間:飛船出發時間(西元年月日)
- 出發位置:飛船出發座標(度度,分分,分分分分)東西經或南北緯
- 中繼站:下一個飛行目標的座標
- 終點站:最後的飛行目標
- 目前位置:飛船飛行的當下座標
- 已花費時間:從出發到當下的時間(時分秒)
- 時速:飛行速度(公里/小時)
- 已行走距離:從出發到當下的距離(公尺)
- 高度:目前飛船飛行高度(公尺)
- 傾角:飛船與水平線夾角
- 方向角:飛船水平轉向角度
特色: 以資料為主,供控制模組測試用
版本 2:三視角動畫版
改進重點: 達到更佳的展示效果
新增功能:
- 中景(Rear View):飛船後方視角
- 近景(Side View):飛船側方視角
- 遠景(Bird View):飛船上方視角
設計特色:
- ✅ 用三種不同視角呈現飛船即時動態
- ✅ 資訊用小圖示配合數據表示
- ✅ 畫面不會過於繁雜
發現問題:
- ⚠️ 圖示無法使觀看者清楚了解含意
版本 3:增加彩虹按鈕說明
改進重點: 增加說明文字,幫助使用者了解圖示
新增功能:
- ✅ 增加彩虹按鈕
- ✅ 滑鼠指向按鈕上的文字時,對應物件會發亮表示位置
- ✅ 藉此幫助使用者了解圖示含意
發現問題:
- ⚠️ 加入彩虹按鈕使畫面更加擁擠
版本 4:場景分離版
改進重點: 解決畫面擁擠問題
新增功能:
- ✅ 把三種場景分為三個部分
- ✅ 增加近中遠按鈕,可利用按鈕選擇要看的場景
- ✅ 各景有專用的彩虹按鈕
- ✅ 移入按鈕時更容易注意相對物件的動畫效果
發現問題:
- ⚠️ 動畫播放速度異常緩慢
- ⚠️ Flash CS4 軟體不穩定,常常因不明原因發生錯誤必須強制關閉
- ⚠️ 慢速播放讓展示平台的即時性大幅下降
問題根源:
- 地板物件中大量的補間動畫拖慢整體速度
- 每次播放時一次處理太多補間動畫導致軟體不穩
版本 5:移除地板物件
改進重點: 解決速度與穩定性問題
修改:
- ✅ 將中景飛船畫面改為無地板空中飛行
- ✅ 移除大量補間動畫的地板物件
- ✅ 解決速度緩慢問題
- ✅ 解決軟體不穩定問題
發現問題:
- ⚠️ 經協調性檢測,彩虹按鈕的畫面與中景以外的場景有過度的差異化
- ⚠️ 畫面轉到近景及遠景時產生不協調感
版本 6:最終版本(簡約協調版)
改進重點: 提高整體畫面協調
修改:
- ✅ 省略整個彩虹按鈕物件
- ✅ 將近中遠按鈕改為簡約風英文按鈕
- ✅ 說明部分改為移入物件彈出文字框說明
- ✅ 提高整體畫面協調
最終顯示功能:
- 3D 飛行船模型
- 即時顯示飛行船姿態
- 航向 (Heading)
- 俯仰角 (Pitching)
- 翻滾角 (Rolling)
- 三種視角切換
- 中景(Rear View):飛船後方視角
- 近景(Side View):飛船側方視角
- 遠景(Bird View):飛船上方視角
- 動畫場景
- 模擬真實環境(天空、雲朵)
- 飛行船在場景中移動
- 視覺化飛行狀態
- 儀表板介面
- 顯示所有飛行參數
- 速度、高度、航向
- 溫度、電池電量
- 當前模式(手動/自動)
技術亮點:
- Flash 與 PHP 整合:透過 PHP 讀取資料庫,提供給 Flash 顯示
- 即時更新:Flash 定期向 PHP 請求最新資料
- 視覺化設計:直觀易懂的介面,方便監控
- 簡約協調:經過 6 個版本優化,達到最佳使用者體驗
🔬 系統整合測試
地面測試(2010年12月)
測試時程: 2010年12月10日至12月26日
測試場次: 共進行 17 場次地面測試
室內測試(第1場次):
- 日期:2010/12/10
- 測試項目:
- ✅ 升降伺服馬達自動控制
- ✅ 手動/自動模式切換(遙控器硬體切換)
- ✅ GPRS 連線測試
- ✅ 地面站控制與自動模式切換
- ✅ Flash 動態展示即時更新
- ✅ 馬達推力自動控制
室外測試(精選場次):
第1場次(2010/12/12):
- 時間:晚上 10:55 - 11:33
- 記錄資料:767 筆
- 測試重點:GPS 定位精度、資料傳送速度
- 發現問題:靠近建築物時出現定位錯誤點
第2場次(2010/12/15):
- 時間:晚上 8:48 - 9:17
- 記錄資料:597 筆
- 測試成果:
- ✅ 四個目標點皆可計算距離
- ✅ 目標距離判斷誤差 < 3 公尺(Google Earth 驗證)
- ✅ 資料傳送穩定:每筆間隔約 3 秒
第3場次(2010/12/15):
- 時間:晚上 9:33 - 10:06
- 記錄資料:655 筆
- 測試成果:
- ✅ 飛行方向判斷正確
- ✅ 目標點範圍判斷:約 25 公尺內判斷抵達
- ✅ GPS 誤差範圍內(10 公尺)
第5-7場次(2010/12/17):
- 搭載飛行船船艙(A型)
- 使用推車模擬船身移動
- 測試馬達實際動作與反應
- 調整 PWM 參數
第13場次(2010/12/24):
- 記錄資料:907 筆
- 測試成果:
- ✅ Compass 方向補償正常
- ✅ GPRS 控制反應速度:約 4-5 秒
- ✅ 遙控器切換反應:4-20 秒
第17場次(2010/12/26):
- 時間:晚上 9:57 - 10:41
- 記錄資料:917 筆
- 最終地面測試,確認各項功能正常
室外地面測試總結
| 測試項目 | 測試結果 | 達成 |
|---|---|---|
| GPS 定位精準度 | 誤差 < 15 公尺 | ✅ |
| 資料傳送速度 | 約 3 秒/筆 | ✅ |
| 目標距離判斷 | 實際距離差距 < 10 公尺 | ✅ |
| 抵達目標判斷 | 約 15-20 公尺範圍內 | ✅ |
| 飛行方向判斷 | 左右轉及角度判斷正確 | ✅ |
| 目標點範圍精準度 | 平面 30M、直線 40M | ✅ |
| 馬達動作控制 | 轉動角度與推力正常 | ✅ |
| GPRS 控制反應速度 | 約 4-5 秒 | ✅ |
| 遙控器切換反應速度 | < 4 秒 | ✅ |
飛行測試(2011年1月)
測試準備工作:
- 氦氣填充(第一天測試)
- 飛行船組裝:綁上襟翼與船艙
- 行前確認:使用檢查清單
- 電源電力檢查
- 監控站開啟確認
- GPS 定位確認
- GPRS 連線確認
第一次飛行測試(2011/01/08)
重點場次: 第 29 場次
飛行數據:
- 海平面高度:約 105 公尺
- 最高飛行高度:127 公尺
- 記錄資料筆數:超過 400 筆飛行資料
- 目標點設定:6 個目標點(操場跑道逆時針方向)
飛行軌跡記錄:
詳細記錄了飛行資料點 243-482 的完整飛行軌跡:
- 起飛點:第 243 筆資料
- 飛行資料點 258-278:初期飛行階段
- 飛行資料點 298-312:中期飛行階段
- 飛行資料點 462-482:後期飛行階段
Google Maps 路徑驗證:
- 使用自製路徑軌跡圖程式
- 將資料庫記錄的 GPS 資料點在 Google Maps 上標示
- 繪製完整飛行路徑
- 驗證飛行方向與目標點關係
測試發現:
- ⚠️ 馬達推力不足
- ⚠️ 浮力不足(氦氣未充飽)
- ⚠️ 船艙過重(多加兩組推進馬達但未使用)
- ⚠️ 緊急時切換手動模式仍偶爾失控
改進措施:
- ✅ 拆除多餘的推進馬達(減輕重量)
- ✅ 補充氦氣填充
- ✅ 規劃行前準備表
- ✅ 準備足夠的備用電池
第二次飛行測試(2011/01/09)
重點場次: 第 42、43 場次
改進成果:
- ✅ 重新設定 6 個目標點(操場中間偏北,較安全)
- ✅ 船艙減重後飛行穩定性提升
- ✅ 氦氣補充後浮力充足
測試驗證總結
地面測試成果(17場次):
- ✅ 系統各模組功能正常
- ✅ GPS 定位精度達標(< 15m)
- ✅ GPRS 通訊穩定(3秒/筆)
- ✅ 自動導航邏輯正確
- ✅ 手動/自動切換功能正常
飛行測試成果:
- ✅ 成功完成自動飛行導航
- ✅ 飛行高度達 127 公尺
- ✅ 記錄超過 400 筆飛行資料
- ✅ 地面監控資料接收正常
- ✅ Google Maps 即時顯示飛行路徑
- ✅ Flash 動態展示系統正常運作
- ✅ 系統各項功能完整驗證
🏆 研究成果
技術突破
- 自主飛行控制
- 成功開發完整的自動導航系統
- 飛行船可根據 GPS 座標自動飛行
- 不再依賴人工遙控
- 手動/自動模式
- 實現即時切換
- 提供安全機制
- 解決人工操控失控問題
- 無限制飛行範圍
- 透過 GPRS 突破遙控距離限制
- 可執行長距離飛行任務
- 完整監控系統
- Java Server + MySQL 資料管理
- Google Maps 地圖顯示
- Flash 3D 動態模擬
- 提供完整的飛行記錄
系統整合能力
硬體整合:
- Microchip 微控制器
- GPS、GPRS、Compass 等多種週邊模組
- 伺服馬達、直流馬達控制
- 自製子板電路設計
軟體整合:
- 嵌入式 C 語言程式開發
- 自動飛行演算法設計
- Java Server 開發
- MySQL 資料庫設計
- Google Maps API 整合
- Flash/ActionScript 介面開發
系統整合:
- 嵌入式系統 + 無線通訊 + 地面站
- 硬體 + 軟體 + 網路的完整整合
- 從概念設計到實際飛行測試
專案規模
開發時程: 約 8-10 個月
開發階段:
- 需求分析與系統設計
- 硬體電路設計與製作
- 嵌入式程式開發
- 週邊模組整合
- 地面站系統開發
- 地面整合測試
- 飛行測試與驗證
- 系統優化與調整
團隊協作:
- 6 人團隊分工合作
- 嵌入式開發、地面站開發、系統整合、週邊模組、測試驗證
- 指導教授技術指導
💡 關鍵技術挑戰
1. GPS 訊號處理
挑戰:
- GPS 模組輸出格式複雜(NMEA 0183 協定)
- 需要解析多種訊息類型(GPGGA、GPRMC 等)
- 資料需要轉換(度分秒格式)
解決方案:
- 開發 GPS 解析模組
- 提取所需資料(經緯度、高度、速度)
- 轉換為系統可用格式
2. GPRS 通訊穩定性
挑戰:
- GPRS 訊號可能不穩定
- 資料傳輸可能中斷
- AT 指令控制複雜
解決方案:
- 實作重連機制
- 資料緩衝與重送
- 完整的 AT 指令處理流程
3. 姿態控制精度
挑戰:
- 飛行船容易受風影響
- Compass 容易受電磁干擾
- 馬達控制需要精確調整
解決方案:
- 實作補償演算法
- 多次測試調整參數
- 平滑控制避免劇烈變化
4. 系統整合複雜度
挑戰:
- 多個模組同時運作
- 時序控制困難
- 除錯不易(飛行中無法 debug)
解決方案:
- 模組化設計
- 完整的地面測試
- 記錄 log 協助分析
📚 學習收穫
技術層面
嵌入式系統開發:
- Microchip PIC24F 系列微控制器
- UART、I2C、SPI 通訊協定
- PWM 控制原理
- 中斷處理與時序控制
週邊模組整合:
- GPS 訊號解析
- GPRS AT 指令控制
- Compass I2C 通訊
- 馬達驅動電路
地面站開發:
- Java Socket 程式設計
- MySQL 資料庫設計
- Google Maps API 應用
- Flash/ActionScript 開發
系統整合:
- 嵌入式 + 無線通訊 + 地面站
- 硬體設計 + 軟體開發
- 從需求到實現的完整流程
專案管理
團隊協作:
- 6 人團隊分工合作
- 定期討論與進度追蹤
- 問題解決與互相支援
時程管理:
- 規劃開發階段
- 控制進度與里程碑
- 處理突發狀況
測試驗證:
- 系統化的測試流程
- 記錄與分析測試結果
- 持續優化改進
經驗體悟
這個專案讓我深刻體會到:
系統整合的挑戰:
- 每個模組單獨測試都正常,但整合後會出現問題
- 時序衝突、資源競爭、訊號干擾等
- 需要系統化思考,而不是只看個別模組
實際應用的考量:
- 理論上可行,實際環境有很多變數
- 風向、溫度、電磁干擾都會影響
- 需要大量測試與調整
除錯的困難:
- 飛行中無法即時 debug
- 只能透過回傳資料分析
- 需要設計完善的 log 機制
這些經驗對我後續在工業自動化領域的開發非常有幫助,讓我更注重系統的穩定性、可靠性與容錯機制。
🔗 相關專案
這個畢業論文專案後來延伸出另一個專案:
在畢業後,我又開發了一個更精簡的飛行船監控 DEMO,用來監控:
- 溫度、濕度、氣壓
- 飛行姿態(航向、俯仰角、翻滾角)
- GPS 位置
- 39 個飛行參數
使用 Flash/ActionScript 開發地面站監控介面,透過 GPRS 即時接收飛行資料。
論文資訊
- 論文標題:無人飛行船自動導航系統
- 學校:實踐大學 資訊科技與通訊學系
- 作者:林亞澤、侯圳嶺、侯劭東、劉文茜、葉曉霈、鄧靜容
- 指導教授:吳啟偉老師
- 完成時間:民國100年(2011年)
- 專案類型:學士畢業論文專案
- 技術棧:Microchip PIC24F + GPS + GPRS + Compass + Java + MySQL + Google Maps + Flash
Happy Coding! 🚁