修復Simulink到UE5丟包時被控船體的殘影問題

提問

simulink 有一個和UE5協同的模塊,叫做Simulation 3D Scence Configuration,還有一個發送來自simulink到UE5數據的模塊叫做Simulation 3D Message。

現在遇到的問題是,這兩個模塊的優先級設置是正確的,且sample time都設置為0.02s,Simulation 3D Message用于發送被控Actor的位置坐標(例如x=100)。然而在UE5中,運行后發現被控的Actor得到的位置坐標中間會夾雜0,一開始運行時還好,到后面會穩定在2個正常的接收(x=100)中間夾雜3個x=0. ,這會導致被控的actor在畫面中會出現殘影。

現在請你分析一下原因,為什么會出現被控的Actor得到的位置坐標中間會夾雜0這種情況

在這里插入圖片描述
這是目前的關卡藍圖

回答

看了你的關卡藍圖(Event Tick → 兩個 Read Vector From Simulation 3D Message,直接把 Data 接到 SetActorLocationAndRotation),需要改。現在“Status/Found”沒用到,未命中時 Data 會回退為 (0,0,0),你就把 0 寫回去了,所以會閃回到原點。

就在你截圖里。每個 Read Vector Float 節點右側,黃色 Data 的下面那個紅色引腳,標的就是 Status——這就是我前面說的 Found/Valid 等價物。

怎么用(最小改動):

  1. 在關卡藍圖里先建緩存變量:LastLocation(Vector)、LastRotation(Rotator)、bLocValidbRotValid

  2. 對“位置”的那個 Read Vector Float

    • Status → Branch
    • True:LastLocation = DatabLocValid = true
    • False:不接 Data(別把 0 寫回)。
  3. 對“姿態”的那個 Read Vector Float 同樣處理:

    • Status → Branch
    • True:LastRotation = MakeRotator(BreakVector(Data))bRotValid = true
  4. 在兩個分支之后,用 緩存 去驅動 SetActorLocationAndRotation

    • New LocationLastLocation
    • New RotationLastRotation
    • 不要再把兩個 Data 直接連去 SetActor…

如果你的節點 Status 不是 Bool 而是返回枚舉/整型(個別版本會這樣),就先做個判斷:“Status == Success(0)”→ 再喂給 Branch;邏輯一樣。

繼續追問

status的作用是什么

回答

你藍圖節點里的 Status 引腳,其實就是用來告訴你 這一次讀取有沒有成功拿到 Simulink 發來的數據

具體來說:

  • 成功(Found/Valid):說明這一幀里 UE5 真正收到了數據包,那么 Data 引腳里就是 Simulink 發送的數值(位置、姿態等)。
  • 失敗(Not Found/Invalid):說明這一幀 UE5 沒有收到對應 Key 的消息。這時如果你直接用 Data,它會給你一個默認值(通常是 0(0,0,0))。這就是你看到“夾雜 0”殘影的根源。

所以 Status 的作用就是一個 有效性標志位,等價于 “有沒有數據 / 數據是否可靠”。

正確用法

  1. Status 接到一個 Branch(條件分支)
  2. True 分支:更新緩存(LastLocation/LastRotation = Data),再更新 Actor。
  3. False 分支:不要用 Data,而是直接沿用上一次緩存的值(或者什么都不做)。

這樣,即使某一幀 Simulink 沒有發數據(UE 讀取未命中),你也不會把 0 寫進 Actor 的位置。

繼續追問

你說的Rotator是不是就是旋轉體數據類型?還是向量數據類型?

回答

UE 的 Rotator 類型(旋轉體),不是普通向量。
Rotator 在 UE 里表示歐拉角,三個分量是 Roll / Pitch / Yaw,單位是。而 Vector 只是三維數值(位置、方向或任意三元組),沒有“旋轉”的語義。

你藍圖里的做法是:Read Vector Float 拿到一個三元組 → Break Vector → 用 Make Rotator(Roll= X, Pitch= Y, Yaw= Z) 組裝成 Rotator → 喂給 SetActorLocationAndRotation。這沒問題,但要注意:

  • 如果 Simulink 發來的是弧度,要先乘 180/π 變成度。
  • 如果發來的順序不是 (Roll, Pitch, Yaw),要在藍圖里重排對應到 Rotator 的 (Roll, Pitch, Yaw)。
  • 只發 Yaw 時:Make Rotator(Roll=0, Pitch=0, Yaw=YawDeg) 即可。
  • 若你要緩存,變量就建成 LastRotation(Rotator),比存 Vector 更直觀。

(坐標系/旋轉方向如果與 UE 不同,還需要做軸向和符號的映射;UE 默認 X 前、Y 右、Z 上,Rotator 按 Roll→X、Pitch→Y、Yaw→Z 解釋,單位是。)

繼續追問

為什么我變量名叫做bLoc_Valid,但是搜索只能搜索到 Loc Valid的變量名?

回答

這是 UE 的“友好顯示名(Friendly Name)”在作祟。
Blueprint 默認會把布爾變量名的前綴 b 去掉、把下劃線變成空格、再按大小寫加空格顯示。所以
bLoc_Valid 在面板/搜索里會顯示成 “Loc Valid”。搜索框默認也是按“顯示名”匹配,不按內部名字匹配。

你有三種處理方式:

  1. 關掉友好顯示名(顯示原始變量名)
  • 打開 Editor PreferencesBlueprint Editor(或 General → Blueprint)
  • 取消勾選 Use Friendly Variable Names(或類似選項)
  • 變量列表與搜索就會顯示/匹配 bLoc_Valid
  1. 給變量自定義顯示名
  • 選中變量 → Details 面板 → 勾開 AdvancedDisplay Name
  • 填你想要的名字(比如 bLoc_Valid 或“位置有效”)。搜索會按這個顯示名匹配。
  1. 維持現狀,按顯示名搜索
  • 直接搜 Loc Valid(或 Loc、Valid 關鍵詞)。

這是正常行為;UE 遵循布爾用 b 前綴的命名規范,但在藍圖 UI 里默認把它“藏起來”,讓名字更可讀。

繼續追問

是不是還要一個“New Location”變量?

回答

不需要單獨再建一個叫 “New Location” 的變量。
SetActorLocationAndRotation 里寫著 New Location 只是節點的輸入引腳名,不是要求你有同名變量。直接把你的緩存變量接過去就行。

最小配置(夠用了)

  • LastLocation : Vector(緩存上一幀成功收到的位置)
  • LastRotation : Rotator(緩存上一幀成功收到的姿態)
  • bLocValid : Bool
  • bRotValid : Bool

讀消息 → Status 為真時更新 LastLocation/LastRotation → 最后把 LastLocation 接到 SetActorLocationAndRotation 的 New Location,把 LastRotation 接到 New Rotation


什么時候“多一個變量”會更好(可選)

  1. 只收到 X,需要拼成向量

    • 增加 LastX : Float(可選)

    • 每次有效時:Make Vector(LastX, LastLocation.Y, LastLocation.Z) 得到一個臨時的 NewLocation,再:

      • SetActorLocationAndRotation(NewLocation, LastRotation)
      • 同時 LastLocation = NewLocation(保持緩存同步)
    • 這里的 NewLocation 只是臨時拼裝值,不必建成持久變量。

  2. 想做平滑/抗抖動

    • 增加 TargetLocation : Vector(收到新值就更新)
    • 增加 SmoothedLocation : Vector(實際用于設置位置)
    • Tick/定時器里:SmoothedLocation = VInterpTo(SmoothedLocation, TargetLocation, DeltaSeconds, Speed) → 接到 New Location
    • 這時 LastLocation 可當 TargetLocation 用,也能省一個。
  3. 直接收 Transform

    • LastTransform : Transform 即可 → SetActorTransformNew Transform 引腳,不需要 New Location 變量。

小結:默認不需要“New Location”這個變量名;除非你為了拼裝/插值想把“當前要寫入的位置”單獨存一下,否則直接用 LastLocation 接到 New Location 就是最簡潔、正確的做法。

結果

成功解決。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94207.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94207.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94207.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式第三十五課!!Linux下的網絡編程

一、目的網絡編程的目的實際上也是進程通信的一種方式,不過它可以在不同的主機上進行通信;二、需要解決的問題1. 主機與主機之間物理層面必須互聯互通。指的是參與通信的計算機(主機)需要通過物理設備建立連接(光纖、網…

遙感機器學習入門實戰教程|Sklearn案例⑦:特征選擇與重要性分析

很多同學問:波段/特征一多就“維度災難”,訓練慢、過擬合,且很難解釋“哪些特征最關鍵”。本篇用 sklearn 給出一套能跑、可視化、可比較的最小工作流,并配上方法論速記,幫助你在高光譜/多特征任務里做出穩健篩選。 &a…

地理數據制備:蔚藍地圖空氣質量數據的獲取、清洗與坐標匹配指南

【📊】手把手攻略:如何從“蔚藍地圖”挖寶——獲取濟南市可用空氣質量數據全記錄 一份不需要寫代碼也能搞定環境數據獲取的實用指南 ? 引言:為什么選擇蔚藍地圖? 作為一名環境數據愛好者,我經常需要獲取準確、可靠、…

Unreal Engine USceneComponent

Unreal🏛 Unreal Engine - USceneComponent📚 定義🏷 類繼承? 關鍵特性?? 常見配置🛠? 使用方法🔗 創建與掛載🔄 獲取與修改 Transform🧩 附加/分離組件🏊 典型應用場景&#x1…

2025年9月5090工作站、

在深度學習與大模型訓練領域,算力是決定研發效率與模型性能的核心要素,而顯卡作為算力輸出的核心硬件,其性能參數直接影響著訓練任務的速度、穩定性與成本控制。對于企業與科研機構而言,選擇一套適配自身需求且性價比優異的顯卡及…

亞矩陣云手機:亞馬遜第三方店鋪多賬號安全合規運營的核心技術支撐

亞矩陣云手機在亞馬遜第三方店鋪多賬號安全合規運營的技術支持,通過硬件級虛擬化、AI 行為建模、動態資源調度三大核心技術模塊,構建了覆蓋設備、網絡、行為、數據的四維防御體系,確保賬號在亞馬遜平臺規則下的長期穩定運行。以下從技術架構、…

使用C++11改進工廠方法模式:支持運行時配置的增強實現

在軟件開發中,工廠方法模式是一種常用的設計模式,用于創建對象。通過使用C11的新特性,我們可以進一步改進工廠方法模式,使其更加靈活和高效。本文將詳細介紹如何使用C11的std::function、lambda表達式和智能指針來實現一個支持運行…

小程序插件使用

插件介紹 插件是對一組 js 接口、自定義組件 或頁面的封裝,用于嵌入到小程序中使用。插件不能獨立運行,必須嵌入在其他小程序中才能被用戶使用;而第三方小程序在使用插件時,也無法看到插件的代碼。因此,插件適合用來封…

要區分一張圖片中的網狀圖(如網格結構或規則紋理)和噪點(隨機分布的干擾像素),比如電路的方法 計算機視覺

要區分一張圖片中的網狀圖(如網格結構或規則紋理)和噪點(隨機分布的干擾像素),需結合圖像預處理、特征提取和分割算法。以下是系統化的解決方案,分階段說明關鍵技術和算法選擇: 🔍 一…

06_并發編程高級特性

第6課:并發編程高級特性 課程目標 掌握context包的使用 理解sync包中的同步原語 學會處理并發安全問題 掌握性能優化技巧 1. Context包 1.1 Context基礎 import ("context""fmt""time" )// 基本Context使用 func basicContext()

X00238-非GNSS無人機RGB圖像衛星圖像視覺定位python

獲取方式見文末,可開發票隨著無人機在工業和科研領域應用的加速發展,在非城市環境中使用無gnss、基于視覺的方法進行無人機定位的需求日益增長。本文提出了一種基于視覺的定位算法,利用深度特征計算無人機在野外飛行的地理坐標。該方法基于匹…

Eino 開源框架全景解析 - 以“大模型應用的搭積木指南”方式理解

Eino 開源框架全景解析 - 大模型應用的搭積木指南 🎯 什么是 Eino?一句話概括 Eino 是字節跳動開源的大語言模型應用開發框架,就像是一個專門為 AI 應用設計的"搭積木工具箱",讓開發者能夠像搭樂高一樣輕松構建復雜的 A…

嵌入式開發中,usb通信中輸出端點和輸入端點

一. 簡介本文簡單學習一下,嵌入式開發中,usb的輸出端點和輸入端點。在嵌入式開發的 USB 通信場景中,輸出端點(OUT Endpoint) 和 輸入端點(IN Endpoint) 是 USB 設備與主機(如電腦、嵌…

【自用】Maven常用依賴

【自用】Maven常用依賴 工具類 Guava Guava(Google Guava)是由Google團隊開發的一套Java開源工具庫,旨在簡化和增強Java開發者的日常工作。它提供了許多實用的工具和基礎設施,覆蓋了集合、并發、字符串處理、I/O、數學運算等多個…

Java 18 新特性及具體應用

目錄 1. UTF-8 默認編碼 (JEP 400) 2. 簡單 Web 服務器 (JEP 408) 3. Javadoc 代碼片段 (JEP 413) 4. switch 模式匹配 (JEP 420, 第二次預覽) 5. 向量 API (JEP 417, 第三次孵化) 總結 Java 18 于 2022 年 3 月發布,引入了多項新特性,旨在提升開發…

unistd.h 常用函數速查表

在這篇文章中,我們將整理一份 unistd.h 常用函數速查表,便于快速查找和記憶,涵蓋文件 I/O、進程管理、系統信息、用戶/組信息等方面。unistd.h 常用函數速查表(POSIX/Linux/macOS) 1. 文件與 I/O 操作函數說明示例int …

【電子通識】芯片生產考驗“三重門”之CP、FT與WAT測試

在我們日常生活中,從手機、電腦到汽車、家電,都離不開一顆顆小小的芯片。你可曾想過,這些功能強大的芯片在出廠前要經過怎樣嚴苛的“體檢”才能保證質量可靠?今天,我們就來聊聊芯片制造過程中三道至關重要的測試關卡&a…

Java RESTful API 構建從入門到精通:一步步打造高效后端服務

還在為高昂的AI開發成本發愁?這本書教你如何在個人電腦上引爆DeepSeek的澎湃算力! 在當今數字化時代,RESTful API 已成為現代Web應用的核心組成部分,它提供了一種標準化、靈活的方式來實現前后端分離和跨平臺數據交互。本文作為一篇完整的指南,將從基礎概念入手,詳細闡述…

TypeScript 接口(interface)

一、接口基礎概念接口(interface)是 TypeScript 的核心類型系統工具,用于定義對象的結構規范。它不關心具體實現細節,只強制要求符合接口定義的對象必須包含指定屬性和方法。例如:interface Person {name: string;age:…

selenium3.141.0執行JS無法傳遞element解決方法

問題:在Chrome 131版本以下執行下面代碼沒有問題,但是在131版本以上出現element無法傳遞問題,執行下面代碼會出現 "Message: javascript error: Cannot read properties of undefined (reading click)"# xpath匹配元素,…