2026年6月21日 星期日

SimConnect SDK - 微軟模擬飛行開發套件

SimConnect SDK 是微軟模擬飛行(Microsoft Flight Simulator,如 MSFS 2020/2024)以及 Prepar3D (P3D) 等飛行模擬器中最核心的應用程式介面 (API)。它允許外部程式或硬體與模擬器進行雙向通訊。正因為 SimConnect SDK 提供了如此深度的開放性與網路通訊能力,才打造出了飛行模擬界(特別是微軟模擬飛行系列)極度蓬勃的第三方生態系。

SimConnect SDK是 .NET Framework 開發,所以 .NET 語言皆可使用。
以下是我一些小小的實作,當中實現了空中巴士A320的幾個 Overhead Panel的燈開關(Strobe, Beacon, Land, Nose, Seatbelts, NoSmoking, Emergency Exit等)、FCU的幾個按鈕 (AutoPilot、Flight Director、Auto-Thrust、Approach、LS等),以及機輪Gear開關。

架構如下:
開關 <-> Arduino <-> USB Serial <-> PC Program (C# SDK) --> (pipe) 微軟模擬飛行

幾張示意圖:




以上的硬體實踐只是SimConnect SDK的其中一小部份。
開發者和玩家可以利用 SimConnect SDK 實現以下關鍵功能:
1. 讀取與寫入模擬器數據 (Simulation Variables)
這能實現與飛機狀態、環境相關的所有數據互動:
  • 飛行數據監控:即時讀取飛機的經緯度、高度、空速、航向、垂直速度、傾角等數值。
  • 系統狀態控制:讀取或調整燃油量、起落架狀態、襟翼位置、燈光開關、引擎參數與油門位置。
  • 無線電與導航:讀取及設定 COM/NAV 頻率、轉發器代碼 (Squawk Code) 以及調整自動駕駛系統。
2. 連接硬體週邊與自製駕駛艙 (Home Cockpits)
許多外部硬體玩家必備 SimConnect:
  • 外部儀表板:將模擬器內的儀表數據傳送到實體 LCD 螢幕、平板電腦,或外接的模擬儀表上。
  • 體感與震動設備:將飛機的加速度、失速、觸地反彈等物理數據傳送給動態座椅(如 JetSeat、Buttkicker),提供真實的體感回饋。
  • 客製化搖桿與開關面板:繞過遊戲內建的設定,直接透過外部程式將實體按鍵映射到飛機的特定指令。
3. 生成與控制 AI 實體 (Object & AI Control)
允許程式在虛擬世界中動態創造物件:
  • 動態產生飛機/物件:在指定位置生成其他飛機、地勤車輛、船隻或地標物件。
  • 控制 AI 飛行計劃:為非玩家控制的 AI 飛機設定航線、起飛點、巡航路徑與降落行為。
4. 開發第三方擴充軟體 (Add-on Software)
市面上多數知名的飛行輔助工具都是基於 SimConnect 開發的:
  • 飛行追蹤與電子飛行包 (EFB):如 SimBrief、Volanta、LNM (Little Navmap),能在外部地圖上即時顯示玩家的飛機位置與軌跡。
  • 虛擬航空 (VA) 插件:追蹤虛擬機長的飛行數據(如降落 G 力、油耗、是否超速),並在上傳到線上管理系統。
  • 聯飛與空中交通管制 (ATC):如 VATSIM、IVAO 的客戶端程式,利用它來同步全球玩家的飛機位置與姿態。
  • 動態天氣插件:將真實世界的即時天氣數據(風向、氣壓、雲層)寫入模擬器中。
5. 跨電腦網路連線 (Networked Environment)
  • 分散式運算:SimConnect 支援網路 TCP/IP 協定。你可以讓主電腦專注渲染主視覺畫面,而透過區域網路讓第二台、第三台電腦運行動態地圖、外部儀表或聯飛軟體,大幅減輕主機的效能負擔。
6. 自行車與工業 AI 飛控測試
  • 數位雙生與 AI 訓練:可結合外部演算法或 SCADA 工業系統,透過 API 提取環境資訊,測試無人機的自主飛行控制(如物流、監測路徑測試)。

2023年7月6日 星期四

Jetson Nano啟動RTSP串流服務

# 切root
sudo su

# 套件安裝
apt-get install gtk-doc-tools
apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base
apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
apt-get install gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools
apt-get install gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

# gst-rtsp-server下載與編譯
git clone git://anongit.freedesktop.org/gstreamer/gst-rtsp-server
cd gst-rtsp-server
git clone https://github.com/GStreamer/common.git
./autogen.sh
make -j4
make install

#啟動RTSP Server:
cd examples

#直接讀取CSI鏡頭

./test-launch "nvarguscamerasrc ! nvvidconv ! clockoverlay ! omxh264enc ! rtph264pay pt=96 name=pay0" --- 成功
./test-launch "(  mfw_v4lsrc device=/dev/video0 ! queue ! vpuenc codec=6 ! rtph264pay name=pay0 pt=96 )" --- 失敗

參考: Jetson 学习笔记(十二):CSI摄像头实现rtsp流的传输并对动态获取多路流进行探索_nvvidconv含义_ZZY_dl的博客-CSDN博客



2020年1月22日 星期三

[Hack] 網頁爬蟲,網頁看的到要爬的東西卻無法解出API。[python][selenium][webdriver][chrome]

筆記 (CentOS 7 為例):

    網頁看的到要爬的東西卻無法Hack解出 API,有可能因為 API 要 key 才能 access,或是 API 資料編碼過,回傳到 browser 端才由 javascript 解析塞進 HTML 中。這種情形無法直接用 python request, wget, curl去抓網頁,可透過程式模擬 user 操作 browser 去抓。

    1. 安裝 chrome
        Install google-chrome-stable

a. 於/etc/yum.repos.d/ 建立 google-chrome.repo,內容如下:
        [google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

b. install google-chrome-stable
yum -y install google-chrome-stable

2018年12月28日 星期五

Kong - 註冊 API、Postman 測試 API (二)


    前一篇文章完成了 Kong以及管理介面 Konga 的安裝,接著我們要開始測試 API 代理的基本功能。
    在 Kong 0.13.0 版後,再將 API 概念抽象化為 Services 與 Route,而原來的 API 標記為 Deprecated。


    Services 用來定義上游 (upstream) API 的連接資訊。
    Routes 用來定義給 Client 呼叫調用的介面接口。


2018年12月24日 星期一

Kong - API Gateway - 安裝 (一)

3. Kong Load Balancer (Upstream, Target, Hash-on)
4. Plugin - 認證 Authentication、授權 ACL (待)
5. Plugin - Logging (待)
6. Plugin - Traffic 流量管制 (待)

2018年11月22日 星期四

SpringBoot WebSocket Broadcast 範例

  WebSocket 如其名,即是 Socket over Web。可以做到使用者的 Browser 與 Server 直接建立 Socket 連線,不像傳統  HTTP Request/Response 一來一回,傳完 TCP/IP 連線就結束。WebSocket 同 Socket 可以做到 Connection 不中斷,Server 持續不斷的拋送訊息給 Browser 端,並且在 UI 的上不斷更新資料。不再需像過去使用週期性的javascript timeout polling方式向 Server 要最新狀態,週期設太寬,使用者端就比較晚得知數值狀態的改變,設太密又造成 Server Loading。



  本篇範例是建立一個 WebSocket 通道,連上此 WebSocket 的所有 Client 端,每5秒會收到 Server 廣播的訊息。使用 Spring Boot 1.4.2 版本,gradle設定如下:

2017年12月12日 星期二

在 MAC 上製作樂高組裝說明書


因為家裡小朋友超愛樂高,時不時有讓人驚艷的作品,所以很想把作品併裝的過程記錄下來,也分享給別人可以做出一樣的東西。所以試了一下怎麼做組裝樂高的說明書。就像買主題樂高裡都會附的說明書那樣。

在 MAC 上製作樂高說明書需要的一些軟體:
1. LDraw,LEGO零件資料,下載點: http://www.ldraw.org/parts/latest-parts.html
   下載 complete.zip,解開即可。不用管它。


2017年12月10日 星期日

2017年11月22日 星期三

以員工證別證或自然人憑證 (憑證晶片卡) 登入系統


PC上要裝卡片驗證軟體(跨平台網頁元件),軟體中含有一 Local Server (HTTP Server Listen 某個 port)。

Client(Browser)端做的事:
1. User 鍵入 pin code,將 pin code 交給 LocalServer 檢查。

2017年9月5日 星期二

三套 Embedded Java Database


  小小的Application有時候不會想架 DB Server,或是網路防火牆把你卡的很死,不想給資安的人知道你有裝 DB,這時候可以考慮一下 Embedded Database。之所以叫 Embedded Database ,因為它可以跟你的 Application 跑在同一個 process 裡。當然它也可以選擇架設成一般 Client-Server 的模式。


2017年6月13日 星期二

東京淺草里士滿國際酒店-縮時攝影


這次東京自由行,住了淺草寺旁的里士滿國際酒店,

交通蠻方便,到淺草車站走路大概 7 、 8 分鐘,到筑波快線淺草站只要 2 分鐘。

重點是,面晴空塔的房間,View 非常讚!躺在床上,關著燈看著晴空塔,唔~~~

HTC RE 縮時攝影,10:00 pm ~ 07:00 am。(每天都玩到很晚,只好從 10:00 pm 開始架機器...)



【台中-北屯】Red Garden 紅花園複合式餐廳 - 高CP值早午餐
【屏東-墾丁】-海都旅店一館---大灣路民宿
【屏東。墾丁】濰克-up---墾丁好吃的早午餐


2016年11月22日 星期二

[Note] 原來如此~~ Linux daemon 啟動順序 && TCPWrappers

原來....
/etc/rc5.d 是 boot 啟動 daemon 順序...
現在才知道..........

S開頭: 開機自動啟動
K開頭: 開機不自動啟動

可用 ntsysv 工具設定是否自動啟動

chkconfig

之前雖然會用chkconfig
現在才知道..........
現在才知道..........
現在才知道..........
現在才知道原來是用這樣的方式控制.....


原來.... 這叫 TCP Wrappers。
先判斷 /etc/hosts.allow 再判斷 /etc/hosts.deny。

如何檢查 service 是否支援 TCP Wrapper 管制:
使用 ldd 指令檢查 service 用的 library,若有 libwrap.so 則可用 TCP Wrapper 管制。

# ldd $(which rsyslogd sshd xinetd httpd)
...略 ...
sshd
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fb41d3c9000)

參考鳥哥: TCP Wrappers






2016年6月3日 星期五

[筆記] 四套 MOM Server MQTT 支援比較,Mosquitto, RabbitMQ, Apache Apollo, Apache ActiveMQ


最近有點起肖,測試了四套 MOM Server 的 MQTT 方式送收。

使用同一組測試程式,Paho Project Java Sample 測試,Subscriber (Sample.java), Publisher (MqttPublishSample.java)

Scenario 1 如下:
1. Subscriber 連上 MOM
2. Publisher 連續送出 message。
Check Subscriber 是否可以收到所有的 message。(Publisher送10個,Subscriber應該收到10個。)

Scenario 2 如下:
1. Subscriber 連上 MOM
2. Publisher 送出 message。
3. Subscriber 斷線。
4. Publisher 繼續送 message。
5. Subscriber 重新連線。
Check Subscriber 是否可以收到斷線時期,Publisher 送出的資料。


Mosquitto v1.4.9RabbitMQ v3.6.2Apache Apollo v1.7.1Apache ActiveMQ v5.13.3
Scenario 1OKOKNGOK
Scenario 2NGOKOKOK
有Admin UINOYESYESYES

沒有另外做壓測,因為先找功能可以正常的 MOM Server。。。。
And....  Apollo 好像沒什麼在 maintain... see here...

Update: Mosquitto有1.5了,不知道有沒有測過 Scenario 2呢?

2016年5月23日 星期一

使用 Paho Client (in C & Java) 連接 MQTT Server

MQTT Server 是個 MOM(Message-oriented Middleware)。
Paho Project 是 MQTT Client implementation,拿來對 Server 收送資料。它有支援許多語言,包括: C/C++, Java, Python, .NET, Javascript。本篇測試 C/C++ embedded clients。
參考: https://www.eclipse.org/paho/

一、架設一個 MQTT Server (蚊子伺服器(mosquitto)) on CentOS

2015年10月28日 星期三

Linux FTP Server 安全性設定 (VSFTPD on CentOS 7)

相關的安全性設定,包括:
一、關閉 FTP 匿名登入。
二、FTP 帳號, 不可透過 ssh 登入作業系統。
三、FTP 帳號登入後,只看的到自己的 home 目錄,不可隨意切換到作業系統上層目錄。
四、防火牆設定。

2015年10月4日 星期日

Raspberry Pi 縮時攝影 - 清境




曝光時間自動、白平衡自動,總之,全部自動。
弄個 cronjob,30秒拍一張,然後做成 12frame/sec 的影片。

太陽出來後,整個太白,完全看不到天空的細節。不過因為是出來玩的,沒有想花時間去調它。
文件上說,曝光時間可以設定,下次面向太陽的話,曝短一點看看。。。

<< 前一篇: Raspberry Pi 連接 Serial Port 週邊裝置