修复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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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匹配元素,…