---
# System prepended metadata

title: Main System｜系統概觀
tags: [' 文件', 企劃書]

---

---
title: Main System｜系統概觀
tags: 企劃書, 文件
---

# 系統概觀

## 系統簡介
本專題製作之全息投影體驗設備，主要分為軟硬體兩部分：硬體部分由我們自主研發的光學鏡組完成立體成像的全息投影，而 Leap Motion 則作為浮空手勢感測的傳感器，兩者連接到搭載著本專案軟體系統的 Raspberry Pi Model 4B 上作為控制與整合中樞。除 Leap Motion 需自行採購外，本專案其他硬體都能依需求自行改裝，開源的 Raspberry Pi 也是便宜且易取得的，再加上本專案軟體原始碼將全數採用 MIT License 開源授權釋出，希望能幫助日後他人發展相關研究，甚至將其技術改進用於商業用途、促進全息投影技術科技發展。

## 系統架構

以下將分成硬體與軟體兩部分進行本次專案的系統架構說明：

### 硬體

![](https://i.imgur.com/KfhmAwG.jpg)
> 硬體概念模型圖

#### 浮空投影模組

投影模組由顯示器與光學鏡系統兩部分構成。藉雙面鏡的物理特性，使用兩面夾角 45° 的雙面鏡，將螢幕呈現的影像於鏡組內成現正立 1:1 虛像（如概念模型圖）。

#### 手勢偵測模組

手勢偵測模組的硬體部分我們預計利用 Leap Motion 電子硬體感應裝置來進行開發，手勢模組將會直接連接 `Sensor` 子系統進行光學訊號初步分析與正規化處理後將向量資訊傳入主系統。

#### 平台

平台將採用 Raspberry Pi Model 4B 開發版，手勢偵測模組透過 USB 與其介接、浮空投影模組的顯示器使用 HDMI 與其介接。開發版安裝 Ubuntu Server for ARM (18.04.3 LTS) 作業系統，軟體部分將執行於此開發版上。

### 軟體
![軟體系統架構圖](https://i.imgur.com/TCARxZ2.png)
> 軟體系統架構圖

本專案於軟體部分將由 `Sensor`, `Controller` 與 `Application` 三個子系統構成，佈建於安裝 Ubuntu Server for ARM (18.04.3 LTS) 的 Raspberry Pi Model 4B 開發版上，並於搭載 Nodejs Engine 的 Docker Container 內執行。

子系統 `Sensor` 直接介接 Leap Motion 電子硬體感應裝置，進行光學訊號初步分析與正規化處理後將向量資訊傳入負責中央控制的 `Controller`，而 `Controller` 會將 `Sensor` 模組傳入的向量資訊對應至系統功能並且對 `Application` 傳送事件觸發，而 `Application` 負責介面的呈現，在收到事件觸發後作出對應的畫面算繪更新，並回傳新的事件處理狀態樹給 `Controller`。系統模組間將互相提供 API，並且採用 WebSocket 溝通；對於個別子系統的詳細架構、內部流程與說明請參見對應的子系統章節。

## 介面需求描述
![](https://i.imgur.com/3OGaBqi.jpg)
> 軟體系統介面

### 內部介面需求
| ID  | Name              | Description                                                                              |
| --- | ----------------- | ---------------------------------------------------------------------------------------- |
| IUS | Captured Gesture  | 捕捉使用者手勢並傳入 `Sensor`                                                            |
| ISC | Normalized Vector | `Sensor` 依指定模式分析使用者的手勢資料，並將正規劃後的手勢向量資料傳給 `Controller`     |
| ICS | Mode Command      | `Controller` 依據事件觸發或需求回傳命令以切換 `Sensor` 的捕捉模式                        |
| ICA | Tigger Event      | `Controller` 將手勢向量資料轉換為對應的系統事件並傳給 `Application` 進行 UI 的處理或更動 |
| IAC | Event Handler     | `Application` 在特定事件被觸發後更新 `Controller` 上的事件監聽列表                       |
| IAS | Draw Frame        | `Application` 算繪 UI 並且顯示於顯示器上                                                 |

### 使用者介面需求
| ID  | Name    | Description      |
| --- | ------- | ---------------- |
| UUS | Display | 顯示畫面給使用者 |

#### 備註
此處會將顯示器獨立出來的原因是在本設備架構下，`Application` 傳遞畫面給顯示器後雖透過光學鏡組成像顯示給使用者，但使用者的操作是被手勢傳感器傳入 `Sensor` 子系統後進行處理，所以使用者的操作不會接入 `Application`，而是透過中間一連串的處理機制 Reflection（反應）在介面上，達到好像真的在與虛像互動的體驗。

## 功能性需求

我們將提供四種不同的展示操作情境，由本專案的浮空投影設備方式展示，讓使用者透過手勢操作與其進行互動，達成展示浮空投影並提供直覺、良好操作體驗的目標。

## 非功能性需求
因其應用介面上的展示模式部分功能需透過網際網路 API 取得資訊，故本系統建議在有無線網路連線的狀況下運行以達成最佳體驗。

## 操作概念與應用場景
- 手勢辨識：
    - 支援點選、拖動、縮放、旋轉等動作
- 應用呈現介面
    - 呈現四大展示操作情境
        - 平面輸入操作、3D 地球、簡單媒體觀看、天氣預報

### Use Case Diagram
![](https://i.imgur.com/FWZ1KC0.png)

