論文簡介

這是我在實踐大學資訊科技與通訊學系學士畢業論文專案(民國100年,2011年),與侯圳嶺、侯劭東、劉文茜、葉曉霈、鄧靜容同學共同完成,指導教授為吳啟偉老師。

研究主題: 開發一套完整的無人飛行船自動導航控制系統

核心突破:

  • ✅ 飛行船能夠自主飛行,根據預設 GPS 座標自動導航
  • 手動/自動模式即時切換,解決人工操控失控問題
  • 突破地面遙控範圍限制,飛行船可在任意地點航行
  • GPRS 即時回傳飛行資料至地面監控站
  • 地面站動態模擬,Google Maps + Flash 即時顯示飛行狀態

技術棧: Microchip PIC24FJ128GB106 + GPS + GPRS + Compass (I2C) + Java Server + MySQL + Google Maps + Flash


🎯 研究背景與動機

問題現況

傳統飛行船的限制:

  1. 地面遙控範圍過小
    • 遙控器訊號有效範圍有限(約數百公尺)
    • 超出範圍後失去控制
    • 無法進行長距離飛行任務
  2. 完全依賴人工操控
    • 操作員技術要求高
    • 人為失誤容易導致失控
    • 無法自主應對突發狀況
  3. 失控後無法自救
    • 訊號中斷後飛船失聯
    • 無法自動返航或降落
    • 可能造成飛安問題或財產損失

研究動機

開發一套自主飛行控制系統,解決上述問題,並擴展飛行船的應用範圍:

軍事應用:

  • 利用飛行船雷達截面積小(RCS)的特性
  • 軍事偵察、情報蒐集

商業/民間應用:

  • 廣告宣傳(空中廣告看板)
  • 溫度濕度監測
  • 空中拍攝、環境監控

🎓 研究目的

1. 飛行船自主飛行

目標: 輸入目標 GPS 座標後,飛行船能自動航向目的地

實現方式:

  • GPS 即時定位
  • Compass 獲取航向
  • 自動計算飛行路徑
  • 馬達動力自動調整

2. 手動/自動模式切換

目標: 飛行船具備自動與手動兩種飛行模式,可即時切換

應用場景:

  • 正常狀況:使用自動模式,按照預設路線飛行
  • 特殊需求:切換手動模式,由操作員介入控制
  • 操作失誤:自動模式接手,啟動安全降落程序

切換機制:

  • 遙控器可即時切換模式
  • 自動模式優先權設定
  • 安全機制防止誤切換

3. 突破飛行範圍限制

目標: 不再受限於遙控器訊號範圍,可在任意地點航行

技術實現:

  • 使用 GPRS 無線通訊(不受距離限制)
  • 自動導航系統不依賴地面遙控
  • 地面站可透過 GPRS 下達指令

實際效益:

  • 飛行範圍從數百公尺擴展到無限制
  • 可執行長距離飛行任務
  • 地面站隨時可監控與介入

4. 即時飛行資料傳達地面站

目標: 將飛行資料即時回傳,如同「飛航黑盒子」

回傳資料:

  • 位置資訊:GPS 經緯度、高度
  • 姿態資訊:航向 (Heading)、俯仰角 (Pitching)、翻滾角 (Rolling)
  • 環境資訊:溫度、氣壓
  • 控制資訊:當前模式、目標座標、馬達輸出

技術實現:

  • GPRS 定期回傳資料(例如每秒)
  • Java Server 接收並存入 MySQL 資料庫
  • 建立完整的飛行記錄

5. 地面即時模擬飛行動態

目標: 當飛行船超出可視範圍時,地面站仍能清楚看到飛行狀態

技術實現:

  • Google Maps 地圖顯示:標示飛行船即時位置
  • Flash 動態模擬:3D 動畫顯示飛行船姿態與動作
  • 儀表板介面:顯示所有飛行參數

實際效益:

  • 飛行船飛到高空或遠處,地面仍能掌握狀態
  • 提供直觀的視覺化監控
  • 方便記錄與分析飛行數據

🚁 飛行船系統架構

飛船主體

供應商: 天興化工 類型: 氦氣填充式飛船

動力系統:

  1. 前進推力
    • 載台左右兩側的直流馬達
    • 轉動葉片產生推力
  2. 上升/下降
    • 固定葉片的軸承上下轉動
    • 控制俯仰角
    • 由升降伺服馬達控制
  3. 左右轉向
    • 船體歷經三個版本演進(A型、B型、C型)
    • 轉向機構不同
    • 主推力馬達也持續優化

飛船船體版本演進

專案期間共開發三種船體版本,持續優化轉向與推力系統:

A型船體:伺服馬達轉向

轉向機構:

  • 推進馬達架設於轉向伺服馬達之上
  • 左右各 75 度風向吹送角度
  • 零度時(直往後吹)可作為前進加速

優點:

  • ✅ 轉向角度可精確控制
  • ✅ 零度位置可提供額外推力

缺點與改進需求:

  • ⚠️ 轉向能力不足
  • ⚠️ 風大時反應速度過慢
  • ⚠️ 路徑偏移量過大
  • ⚠️ 手動操作控制不理想

測試結果: 多次試飛後決定更換轉向機構


B型船體:碳刷馬達正反轉

轉向機構:

  • 碳刷馬達固定於下尾翼中間
  • 利用極性切換達成正反吹送
  • 增加垂直襟翼加強轉向效果

優點:

  • ✅ 轉向迅速(直接切換馬達極性)
  • ✅ 反應速度比 A 型快

缺點:

  • ⚠️ 碳刷馬達正反轉出力有明顯落差
  • ⚠️ 兩個方向的轉向速度不一致

C型船體:主推力升級 + 四組襟翼(最終版本)

主要改良重點:

  1. 主推力系統升級
    • 更換更強力的主推進馬達
    • 加強電力輸出
    • 螺旋槳從三翼式改為四翼式
    • 翼長增大,風力吹送更強
  2. 襟翼系統(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. 其他感測器

溫度感測器:

  • 監控系統溫度
  • 過熱保護機制

氣壓計:

  • 輔助高度測量
  • 提升高度精確度

🧠 自動飛行演算法

核心程式架構

開發流程(四大階段):

  1. 第一階段:公用程式開發
    • 定義主板各 I/O、週邊連接 PIN 腳
    • 開發 LCD、LED、KEY 按鍵等基本功能
    • 建立開發與除錯基礎
  2. 第二階段:模組程式開發
    • 利用公用程式對各週邊模組進行功能測試
    • 將功能模組化,便於副程式運用
    • 模組:PWM、GPS、GPRS、Compass
  3. 第三階段:副程式開發
    • 將系統需解決的問題進行切割
    • 依先後順序歸類統整
    • 分別撰寫副程式提供主程式所需功能
  4. 第四階段:整合測試
    • 整合各階段程式
    • 進行地面測試及飛行測試
    • 依測試結果檢討並修改程式

主程式版本演進表

從 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. 補償機制

  • 風向補償:根據環境風向調整航向
  • 高度補償:根據氣壓變化微調高度
  • 推力補償:根據電池電量調整輸出

手動/自動模式切換

模式切換機制:

  • 手動模式:遙控器直接控制馬達
  • 自動模式:程式控制馬達,遙控器無效(除了切換鈕)
  • 切換方式:遙控器特定按鈕,即時切換

安全機制:

  1. 自動模式優先權
    • 當遙控器訊號中斷,自動切換至自動模式
    • 執行預設的安全降落程序
  2. 手動介入權限
    • 特殊情況下,手動模式可強制接管
    • 例如:緊急閃避障礙物

🌐 地面監控系統

地面 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

完整功能:

  1. 接收飛行資料
    • 飛行船透過 GPRS 傳送資料
    • Server 透過 TCP Socket 接收
    • 解析資料後存入 MySQL 資料庫
  2. 下達控制指令
    • 地面站可透過 Server 發送指令
    • Server 透過 GPRS 傳送給飛行船
    • 可改變目標點
    • 可改變行列的資料
    • 可操作飛船馬達升降角度
    • 可控制馬達出力百分比
  3. 資料庫管理
    • 記錄完整的飛行歷史
    • 提供查詢與分析功能
    • 記錄測試場次、位置、風力、天氣、飛船尺寸
  4. 介面設計
    • 文字框、按鈕、標籤組成
    • 資料分類顯示(過多時可用按鈕切換)
    • 顯示連結時間和接收資料時間
    • 右上角顯示目前狀態

測試資訊記錄(開啟時必須輸入):

  • 測試場次
  • 測試位置
  • 風力
  • 天氣
  • 飛船尺寸

Google Maps 整合

使用技術:

  • Google Maps API (JavaScript)
  • Google Maps API for Flash

顯示內容:

  1. 飛行船即時位置
    • 根據 GPS 資料標示在地圖上
    • 動態更新位置(例如每秒更新)
  2. 飛行軌跡
    • 顯示歷史飛行路徑
    • 用不同顏色標示不同階段
  3. 目標點標示
    • 顯示預設的導航點
    • 顯示當前目標點

Flash 動態展示系統

開發工具: Flash CS4 + ActionScript 3.0 + PHP


Flash 動畫展示系統版本演進

設計目的:

  • 當飛航高度過高,飛行船不在可視距離內時,檢視飛行資訊不易
  • 資料庫數據繁多也不易查詢
  • 需要更清楚了解飛船飛行資訊
  • 同時擁有美觀與傳遞資訊功能

經歷 6 個版本的迭代改進:


版本 1:簡易資料顯示版

設計重點: 測試連結 PHP 載入資料庫資料的功能

顯示項目:

  • 出發時間:飛船出發時間(西元年月日)
  • 出發位置:飛船出發座標(度度,分分,分分分分)東西經或南北緯
  • 中繼站:下一個飛行目標的座標
  • 終點站:最後的飛行目標
  • 目前位置:飛船飛行的當下座標
  • 已花費時間:從出發到當下的時間(時分秒)
  • 時速:飛行速度(公里/小時)
  • 已行走距離:從出發到當下的距離(公尺)
  • 高度:目前飛船飛行高度(公尺)
  • 傾角:飛船與水平線夾角
  • 方向角:飛船水平轉向角度

特色: 以資料為主,供控制模組測試用


版本 2:三視角動畫版

改進重點: 達到更佳的展示效果

新增功能:

  • 中景(Rear View):飛船後方視角
  • 近景(Side View):飛船側方視角
  • 遠景(Bird View):飛船上方視角

設計特色:

  • ✅ 用三種不同視角呈現飛船即時動態
  • ✅ 資訊用小圖示配合數據表示
  • ✅ 畫面不會過於繁雜

發現問題:

  • ⚠️ 圖示無法使觀看者清楚了解含意

版本 3:增加彩虹按鈕說明

改進重點: 增加說明文字,幫助使用者了解圖示

新增功能:

  • ✅ 增加彩虹按鈕
  • ✅ 滑鼠指向按鈕上的文字時,對應物件會發亮表示位置
  • ✅ 藉此幫助使用者了解圖示含意

發現問題:

  • ⚠️ 加入彩虹按鈕使畫面更加擁擠

版本 4:場景分離版

改進重點: 解決畫面擁擠問題

新增功能:

  • ✅ 把三種場景分為三個部分
  • ✅ 增加近中遠按鈕,可利用按鈕選擇要看的場景
  • ✅ 各景有專用的彩虹按鈕
  • ✅ 移入按鈕時更容易注意相對物件的動畫效果

發現問題:

  • ⚠️ 動畫播放速度異常緩慢
  • ⚠️ Flash CS4 軟體不穩定,常常因不明原因發生錯誤必須強制關閉
  • ⚠️ 慢速播放讓展示平台的即時性大幅下降

問題根源:

  • 地板物件中大量的補間動畫拖慢整體速度
  • 每次播放時一次處理太多補間動畫導致軟體不穩

版本 5:移除地板物件

改進重點: 解決速度與穩定性問題

修改:

  • ✅ 將中景飛船畫面改為無地板空中飛行
  • ✅ 移除大量補間動畫的地板物件
  • ✅ 解決速度緩慢問題
  • ✅ 解決軟體不穩定問題

發現問題:

  • ⚠️ 經協調性檢測,彩虹按鈕的畫面與中景以外的場景有過度的差異化
  • ⚠️ 畫面轉到近景及遠景時產生不協調感

版本 6:最終版本(簡約協調版)

改進重點: 提高整體畫面協調

修改:

  • ✅ 省略整個彩虹按鈕物件
  • ✅ 將近中遠按鈕改為簡約風英文按鈕
  • ✅ 說明部分改為移入物件彈出文字框說明
  • ✅ 提高整體畫面協調

最終顯示功能:

  1. 3D 飛行船模型
    • 即時顯示飛行船姿態
    • 航向 (Heading)
    • 俯仰角 (Pitching)
    • 翻滾角 (Rolling)
  2. 三種視角切換
    • 中景(Rear View):飛船後方視角
    • 近景(Side View):飛船側方視角
    • 遠景(Bird View):飛船上方視角
  3. 動畫場景
    • 模擬真實環境(天空、雲朵)
    • 飛行船在場景中移動
    • 視覺化飛行狀態
  4. 儀表板介面
    • 顯示所有飛行參數
    • 速度、高度、航向
    • 溫度、電池電量
    • 當前模式(手動/自動)

技術亮點:

  • 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月)

測試準備工作:

  1. 氦氣填充(第一天測試)
  2. 飛行船組裝:綁上襟翼與船艙
  3. 行前確認:使用檢查清單
    • 電源電力檢查
    • 監控站開啟確認
    • 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 動態展示系統正常運作
  • ✅ 系統各項功能完整驗證

🏆 研究成果

技術突破

  1. 自主飛行控制
    • 成功開發完整的自動導航系統
    • 飛行船可根據 GPS 座標自動飛行
    • 不再依賴人工遙控
  2. 手動/自動模式
    • 實現即時切換
    • 提供安全機制
    • 解決人工操控失控問題
  3. 無限制飛行範圍
    • 透過 GPRS 突破遙控距離限制
    • 可執行長距離飛行任務
  4. 完整監控系統
    • Java Server + MySQL 資料管理
    • Google Maps 地圖顯示
    • Flash 3D 動態模擬
    • 提供完整的飛行記錄

系統整合能力

硬體整合:

  • Microchip 微控制器
  • GPS、GPRS、Compass 等多種週邊模組
  • 伺服馬達、直流馬達控制
  • 自製子板電路設計

軟體整合:

  • 嵌入式 C 語言程式開發
  • 自動飛行演算法設計
  • Java Server 開發
  • MySQL 資料庫設計
  • Google Maps API 整合
  • Flash/ActionScript 介面開發

系統整合:

  • 嵌入式系統 + 無線通訊 + 地面站
  • 硬體 + 軟體 + 網路的完整整合
  • 從概念設計到實際飛行測試

專案規模

開發時程: 約 8-10 個月

開發階段:

  1. 需求分析與系統設計
  2. 硬體電路設計與製作
  3. 嵌入式程式開發
  4. 週邊模組整合
  5. 地面站系統開發
  6. 地面整合測試
  7. 飛行測試與驗證
  8. 系統優化與調整

團隊協作:

  • 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! 🚁