Unreal 與機械手臂同步 串接 Modbus TCP

達明機器人_機械手臂_基準

為了達成XR攝影同步!

在XR攝影中,將Unreal專案檔導入後
使背景與在Unreal專案中操作一致

為了在實拍機械手臂時與背景的動畫一致
需要將實體機械手臂的訊號串接到 Unreal

與技術人員詢問後得知
機械手臂的通訊系統是使用 Modbus 協定

達明機器人_機械手臂_基準1
達明機器人_機械手臂_Modbus文件
本地端的開發模擬

在本地模擬時,使用 Modbus Slave
可在本機端測試模擬送出 TCP 訊號
到時實體串接,再改變 Port 與 IP 即可

雖然 Unreal 串接 TCP 的資源很多
但針對 Modbus 導出的訊號串接的資料卻非常少(可能是因為沒有這個需求)
且不可能將一台機械手臂運回公司做研究

因此在串接系統時
選擇使用網站慣用的方法
在 Unreal 外,多架設了 Node Server
至少能在 npm 上找到 Modbus 的框架外掛

XR_達明機器人攝影_測試TCP

通訊測試

測試用 Windows 開 Modbus Slave
Mac用 Node Server 測試請求
幾乎是隨插隨用

(通訊協定的安全性真的是相對的低很多呢…)

Unreal 處理訊號

在 Unreal 上一般可以使用內建功能打 TCP 訊號
但因上述原因,改用 http

內建雖然有 Http Request 的功能
但常見是寫 C++ 處理

在搜尋方法時找到一款名為 VaRest 的 Plugin
有 Blueprint 較簡易可視化
用於連接自己的 Node Server

整體的流程為
Unreal -> Node -> Modbus(得到訊號)
Modbus(回傳) -> Node -> Unreal(更新)

達明機器人_機械手臂_實體模型
XR_達明機器人攝影_Unreal2

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

1 / 4
XR_達明機器人攝影_手動操作3

實際上,在旋轉軸調整上“周旋”了一陣子
回傳的數值並非實際度數而是 Double Word 格式

在 Node Server 上轉譯即可
Javascript 處理 Buffer 中有對應的功能

XR_達明機器人攝影_手動操作2

Unreal 的顯示角度也不應該直接同步實際數值

應在實際值間多設個緩進的數值
存取與上一偵的線性插值

以免在高頻率打訊號的情況
發生延遲或斷線等不可預期的跳針問題

XR_達明機器人攝影_手動操作1
使用插件
Node: modbus-serial
https://github.com/yaacov/node-modbus-serial
Unreal Plugin: VaRest
https://www.unrealengine.com/marketplace/en-US/product/varest-plugin