国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

利用NVIDIA Omniverse Extension開發FreeD定位系統

麗臺科技 ? 來源:麗臺科技 ? 2025-09-23 17:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1什么是 FreeD 定位系統

FreeD 定位系統(通常稱為 FreeD 協議)是一種業界廣泛應用的攝像機追蹤數據通信協議,主要用于虛擬演播室(AR/VR)、電影虛擬制作等實時追蹤場景。在很多工業數字軟生項目中也有類似接收發送數據協同的需求,可以參考下面的流程作參考。

FreeD 主要傳遞包括攝像機三維位置(XYZ)、旋轉(Pitch、Yaw、Roll)、鏡頭參數(焦點、變焦)。

44d446d4-9215-11f0-8c8f-92fbcf53809c.png

我們采取的協議包含 29 個字節的數據,其 FreeD 發送的定位設備一般是一個獨立于攝影機的組件,其實現原理大致分為紅外定位點,雙目攝像頭,多攝像頭等。包括著名的 Mosys、Redspy、HTC Vive Mars 等。FreeD 是一個通用的定位協議,常見的定位系統默認都支持 FreeD 協議。

2開始開發

首先創建一個插件,命名為omni.freed.livelink。具體步驟可參考:《NVIDIA Omniverse Extension 開發秘籍:Python/C++ 實戰,附完整代碼》

2.1 背景分析

首先找到 FreeD 的定義文檔,并且分析其協議 (https://www.manualsdir.com/manuals/641433/vinten-radamec-free-d.html?download),然后根據協議在 Omniverse Extension 編寫接收協議,且實時更新 Omniverse USD 的 Camera,讓 Omniverse 的 Camera 跟隨外部的相機定位系統實時同步更新,實現數字孿生效果。

*注:文本下面需要用到很多計算機編程開發的基礎知識。

2.2 開發解析

2.2.1 端口創建

FreeD 協議基于 UPD 協議傳輸,一般默認是廣播方式,接收的端口是 40000 (可以在相機定位設備里更改端口,或者進行點對點傳輸)。

45319bae-9215-11f0-8c8f-92fbcf53809c.png

_startUPDServe函數里面創建 Socket 端口(或者使用已有框架比如 python-osc)

458d9a4e-9215-11f0-8c8f-92fbcf53809c.png

2.2.2 協議解析

分析 FreeD 的協議,通用 FreeD 采用的是 Type D1 的數據格式,接收 29 個 Bytes。在文檔的第 30 頁,根據指引“Appendix”去看第 40 頁。

45e7d7e8-9215-11f0-8c8f-92fbcf53809c.png

FreeD字段說明

再通過下圖更直觀地表達 FreeD 的 29 個字節所,按照文檔計算 Pan, Tilt, Roll 的數值。

*注:從網絡端口傳來的數據是大端格式, 并且如果是負數的話則需按照負數補碼來解析。

44d446d4-9215-11f0-8c8f-92fbcf53809c.png

2.2.3計算 Yaw Pitch Roll:

46a862f6-9215-11f0-8c8f-92fbcf53809c.png

旋轉 Pan,Tilt,Roll(Yaw Pitch Roll)的角度定義

47071e54-9215-11f0-8c8f-92fbcf53809c.png

2.2.4計算位置 X, Y, Z:

同理按照文檔計算 Translate 的 X Y Z 數據。

47659434-9215-11f0-8c8f-92fbcf53809c.png

位置信息 X,Y,Z 的定義

按照定義給出代碼。

47c3a90c-9215-11f0-8c8f-92fbcf53809c.png

Zoom 和 Focus 和鏡頭文件相關,由于每一個鏡頭文件對應的解析都不太一樣,這里就不再詳細判斷。

最后把解析得到的 Yaw Pitch Roll 和 X,Y,Z 的數據更新到我們綁定的 Camera 上面實時更新。

3創建 Event 事件

3.1 發現問題

在子線程運行的時候發現無法對 USD Stage 場景的 Prim 操作,調試發現 USD Prim 都是 None。

這時候可以利用AI幫助,描述清楚問題的前因后果。

482318ec-9215-11f0-8c8f-92fbcf53809c.png

488e420c-9215-11f0-8c8f-92fbcf53809c.png

根據上面 AI 給出的提示,原因是 Omniverse 子線程中無法對 Stage 的 USD Prim 進行操作。 此時需要一個注冊主線程 Event 事件,在這個 Event 事件中去更新每一個 Prim 的操作。

此后還需考慮以下幾件事情:同步性(幀率統一)、設置延時、設置偏移、相機旋轉順序。

3.2 鎖定Omniverse渲染幀率

首先鎖定渲染的幀率。例如 FPS 鎖定在每秒 25 幀,FreeD 的發送幀率也鎖定到 25 幀。目的是保證良好的同步性,同時保證 Genlock 的傳輸接收效果良好。

關閉 Omniverse, 首先找到你對應的 Build 出來的 Composer 對應的.Kit文件,在“..kit107.3\_buildwindows-x86_64 eleaseapps” 里面包含所有配置的信息,用文本打開。

48fbf9aa-9215-11f0-8c8f-92fbcf53809c.png

[settings]下面添加以下字段, 注意是單獨的[settings]字段。

app.runLoops.main.rateLimitEnabled = true

app.runLoops.main.rateLimitFrequency = 25

app.runLoops.main.rateLimitUsePrecisionSleep = true

app.runLoops.main.syncToPresent = true

app.runLoops.present.rateLimitEnabled = true

app.runLoops.present.rateLimitFrequency = 25

app.runLoops.present.rateLimitUsePrecisionSleep = true

app.runLoops.rendering_0.rateLimitEnabled = true

app.runLoops.rendering_0.rateLimitFrequency = 25

app.runLoops.rendering_0.rateLimitUsePrecisionSleep = true

app.runLoops.rendering_0.syncToPresent = true

app.runLoops.rendering_1.rateLimitEnabled = true

app.runLoops.rendering_1.rateLimitFrequency = 25

app.runLoops.rendering_1.rateLimitUsePrecisionSleep = true

app.runLoops.rendering_1.syncToPresent = true

app.runLoopsGlobal.syncToPresent = true

app.vsync=true

重新打開 Omniverse 的 Composer ,可以看到此時的幀率是 50。原因是我們開啟了 DLSS 的 Frame Generation功能。 如果去掉 Frame Generation ,則會顯示 25 幀率。

49549308-9215-11f0-8c8f-92fbcf53809c.png

3.3 注冊渲染 on_update 事件

要得到渲染事件的事件,需要在每一次渲染 Render 開始的時候取出一幀進行合并。

https://docs.omniverse.nvidia.com/dev-guide/latest/programmer_ref/events.html

Event streams 是以線程安全的方式傳遞數據,是由 Omniverse 的核心組件 carb 來提供,下面就是每一幀渲染的時候都會調用的函數, 后還需要再on_update函數去處理。

49afa3ec-9215-11f0-8c8f-92fbcf53809c.png

注冊 Event:

sub1= update_stream.create_subscription_to_pop(on_update, name="My Subscription Name")

解除注冊:需要把這個 sub1 設置為 None (并沒有 unsubscription 這個函數)

sub1= None

這里需要注意的是,在實際工程中要注意這個 sub1 的生命周期,不能用一個局部變量去存儲注冊的 event,否則在出了這個局部函數sub1以后會自動設置為 None,解決辦法是用一個成員變量去控制

self._sub= update_stream.create_subscription_to_pop,

然后在不需要的時候設置為 None:

self._sub= None

4相機延遲和定位偏移

4.1 相機延遲

相機延遲:在虛擬拍攝當中,除了相機定位,還有動捕數據,綠幕視頻流傳輸數據,這些數據需要處理的時間比 FreeD 要耗時,所有可能會造成不同步,這就需要給相機定位在本地緩沖增加一些延時,例如可以在程序中開一個 Buffer 來緩沖一下

4.2 定位偏移

因為定位設備和實際有偏移,所以利用 Nodal offset 來手動添加偏移量。

4a0b88ec-9215-11f0-8c8f-92fbcf53809c.png

4a68172e-9215-11f0-8c8f-92fbcf53809c.png

5設置 Camera 旋轉順序

歐拉角的旋轉是有順序的,其本質是因為旋轉對應的矩陣乘法不具備交換律。在 Omniverse Rotate 有 6 種方式,我們應該以哪種旋轉指定呢?

在 Omniverse 當中,應 Y 軸向上,按照 FreeD 的解析,即 Y, X, Z 的順序。 我們在 Omniverse 里按照 ZXY 給出旋轉順序的具體原理可以查看知乎中的這篇帖子:https://zhuanlan.zhihu.com/p/85108850

4ac59de0-9215-11f0-8c8f-92fbcf53809c.png

4b27963a-9215-11f0-8c8f-92fbcf53809c.png

6最終

結合所有的步驟,完成最終所有功能。

iPhone 上面的 JetSet 軟件可以發送 FreeD 定位協議,這樣我們即可通過上面的思路完整做出一個符合工業標準的插件。

文案&技術支持:

宋毅明 NVIDIA Omniverse & OpenUSD 開發者關系經理

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 通信協議
    +關注

    關注

    28

    文章

    1092

    瀏覽量

    42151
  • 定位系統
    +關注

    關注

    10

    文章

    655

    瀏覽量

    37598
  • 攝像機
    +關注

    關注

    3

    文章

    1764

    瀏覽量

    63112

原文標題:實戰項目拆解!當 FreeD 定位系統遇上 Omniverse Extension

文章出處:【微信號:Leadtek,微信公眾號:麗臺科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    NVIDIA Omniverse Extension開發秘籍

    NVIDIA Omniverse 是一個模塊化平臺,使用高級 API 和微服務來構建由 OpenUSD 和 NVIDIA RTX 提供支持的 3D 應用。OpenUSD 功能強大的 3D 框架與
    的頭像 發表于 08-22 15:52 ?3715次閱讀
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Omniverse</b> <b class='flag-5'>Extension</b><b class='flag-5'>開發</b>秘籍

    NVIDIANVIDIA Omniverse帶給全球超過250萬的開發

    的面紗。 NVIDIA正在提供一套Omniverse應用程序和工具,以增強開發者工作流水線。開發人員可以插入平臺堆棧的任何一層——無論是在頂層,還是
    的頭像 發表于 08-16 16:08 ?2154次閱讀

    NVIDIA Omniverse連接游戲開發工作流

    NVIDIA Omniverse 為游戲中的藝術和虛擬世界提供實時、協作的設計平臺,從而加快開發速度
    的頭像 發表于 04-01 09:30 ?1839次閱讀

    NVIDIA Omniverse Create最新版功能介紹

      NVIDIA Omniverse Create 2021.3 現已在中提供公開測試版,為 Omniverse 藝術家、設計師、開發人員和工程師提供一組新功能,以增強圖形和內容創建工
    的頭像 發表于 04-07 15:34 ?2378次閱讀

    NVIDIA Omniverse的特性及應用

    NVIDIA Omniverse 基于 Pixar 的 Universal Scene Description 和 NVIDIA RTX技術打造,是一款可擴展的多 GPU 實時推理開發
    的頭像 發表于 06-15 09:53 ?2324次閱讀

    利用NVIDIA RTX和Omniverse取得的工作成果

    NVIDIA RTX 和 NVIDIA Omniverse 可帶來卓越性能,幫助全球各地的專業人員、創作者、開發者和學生改進 3D 設計工作流。借助
    的頭像 發表于 10-13 09:47 ?1793次閱讀

    利用 NVIDIA Omniverse 和 Bentley LumenRT 創建實時模擬

    Omniverse ,快速創建引人注目且高質量的可視化效果與項目交付成果。 LumenRT for NVIDIA Omniverse 是市面上首個基于 NVIDIA
    的頭像 發表于 05-18 00:35 ?1416次閱讀
    <b class='flag-5'>利用</b> <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Omniverse</b> 和 Bentley LumenRT 創建實時模擬

    奧比中光將接入 NVIDIA Omniverse開發平臺

    ,作為其合作伙伴,奧比中光正式宣布將Femto Mega和其它3D相機集成到NVIDIA Omniverse生態開發平臺中。 NVIDIA 全球產業數字化生態布局伙伴, 奧比中光也在其
    的頭像 發表于 05-31 09:03 ?1515次閱讀

    探索NVIDIA AI和Omniverse加速設計創作

    協作,是專為虛擬協作和實時逼真模擬而打造的易于擴展的開放式平臺。NVIDIA Omniverse 是連接世界上最大的工具生態系統,目前連接 220 個工具軟件,下載量超過 30 萬。
    的頭像 發表于 06-13 15:40 ?1230次閱讀

    NVIDIA Omniverse中的物理模擬功能

    NVIDIA Omniverse? Simulation 作為 NVIDIA Omniverse? 平臺的關鍵組件之一,由 NVIDIA
    的頭像 發表于 03-08 11:30 ?2763次閱讀
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Omniverse</b>中的物理模擬功能

    Omniverse教程(12):NVIDIA Omniverse USD Presenter的基礎應用

    如前所述,NVIDIA Omniverse? 是一個參考開發平臺,通過模塊化的開發框架能夠輕松擴展和自定義。
    的頭像 發表于 05-20 10:09 ?1816次閱讀
    <b class='flag-5'>Omniverse</b>教程(12):<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Omniverse</b> USD Presenter的基礎應用

    使用OpenUSD和NVIDIA Omniverse開發虛擬工廠解決方案

    工業開發者正在借助 NVIDIA AI、NVIDIA Omniverse 和通用場景描述 (OpenUSD)生態系統的力量構建虛擬工廠解決方
    的頭像 發表于 05-28 18:12 ?2242次閱讀
    使用OpenUSD和<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Omniverse</b><b class='flag-5'>開發</b>虛擬工廠解決方案

    借助OpenUSD和NVIDIA Omniverse開發數字孿生應用

    接口、軟件開發套件和服務組成的,使開發者能夠開發基于 OpenUSD 的應用 NVIDIA Omniverse
    的頭像 發表于 09-06 14:18 ?1265次閱讀

    Foxconn利用NVIDIA AI和Omniverse訓練機器人

    全球最大電子制造商 Foxconn 正準備制造 NVIDIA 最復雜的產品之一,并開始使用 NVIDIA Omniverse 和 Isaac 平臺驅動的數字孿生。
    的頭像 發表于 10-10 09:40 ?1376次閱讀

    使用USDRT優化NVIDIA Omniverse的動態數據更改功能

    NVIDIA Omniverse 開發中,此前我們已探討了常見的性能瓶頸、如何使用 Tracy 等工具進行問題定位,并初步介紹了 FSD(Fabric Scene Delegati
    的頭像 發表于 01-12 09:11 ?409次閱讀
    使用USDRT優化<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Omniverse</b>的動態數據更改功能