類技術分享

為了達成XR攝影同步!
在XR攝影中,將Unreal專案檔導入後
使背景與在Unreal專案中操作一致
為了在實拍機械手臂時與背景的動畫一致
需要將實體機械手臂的訊號串接到 Unreal
與技術人員詢問後得知
機械手臂的通訊系統是使用 Modbus 協定


在本地模擬時,使用 Modbus Slave
可在本機端測試模擬送出 TCP 訊號
到時實體串接,再改變 Port 與 IP 即可
雖然 Unreal 串接 TCP 的資源很多
但針對 Modbus 導出的訊號串接的資料卻非常少(可能是因為沒有這個需求)
且不可能將一台機械手臂運回公司做研究
因此在串接系統時
選擇使用網站慣用的方法
在 Unreal 外,多架設了 Node Server
至少能在 npm 上找到 Modbus 的框架外掛

通訊測試
測試用 Windows 開 Modbus Slave
Mac用 Node Server 測試請求
幾乎是隨插隨用
(通訊協定的安全性真的是相對的低很多呢…)
在 Unreal 上一般可以使用內建功能打 TCP 訊號
但因上述原因,改用 http
內建雖然有 Http Request 的功能
但常見是寫 C++ 處理
在搜尋方法時找到一款名為 VaRest 的 Plugin
有 Blueprint 較簡易可視化
用於連接自己的 Node Server
整體的流程為
Unreal -> Node -> Modbus(得到訊號)
Modbus(回傳) -> Node -> Unreal(更新)


純粹使用機械手臂六軸的角度資訊,套用在模型的旋轉軸,理論上就可以了吧!

實際上,在旋轉軸調整上“周旋”了一陣子
回傳的數值並非實際度數而是 Double Word 格式
在 Node Server 上轉譯即可
Javascript 處理 Buffer 中有對應的功能

Unreal 的顯示角度也不應該直接同步實際數值
應在實際值間多設個緩進的數值
存取與上一偵的線性插值
以免在高頻率打訊號的情況
發生延遲或斷線等不可預期的跳針問題
