UE5 Advanced VR FrameWork学习笔记05| Anchor组件 实现Grab物体吸附至指定位置

前言:

在实际VR项目中常常会遇到拿起物体并放在指定位置的功能。在VRA中正好有能够配合Grab组件实现这一功能的专属组件——Anchor组件。这一组件的运用方式与之前几篇文章中介绍的组件有个非常不同的特点,它需要结合Anchor和Connector_Anchor两个组件组合实现功能。下文将概述这两个组件如何实现物体吸附至指定未知的功能。

参数设置:

Comp_Connector_Anchor:

Connector组件需要添加在物体将要吸附在的Actor上,相当于一个吸附的基底。它的参数设置并不复杂:

Anchor Deactivated:

该bool参数用于开启/关闭Connector组件,当bool为true时带有Anchor组件的物体将无法与该connector进行交互,参数默认是false。

Connector IDs to Allow:

需要将吸附在Connector位置的Anchor Comp的ID填入该参数栏中,这样两个组件才能互相通信实现吸附交互。

Connector should attach:

该bool参数用于设定当开启了物理模拟的Anchor物体吸附在Connector上时是否继续持续吸附在Connector上。如果为false,当connector倾斜时或物体收到物理体影响时,吸附的物体会因为重力掉下。

Sphere Radius:

该参数决定了能够检测到Anchor组件的球形范围大小。

Connector_Anchor组件的Transform设置:

Anchor组件与Connector组件吸附的方向与位置是根据这两个组件的Location和Rotation决定的,并且吸附后的物体Scale时由Connector的Scale决定的。
官网推荐在Anchor组件上添加一个Arrow组件辅助判断方向,这两个组件的吸附的方式是两个组件的X轴相对地吸附:

Comp_Anchor:

Comp_Anchor组件需要放置在被抓起的Actor上,Anchor组件与Grab组件之间不需要额外设置,并且只有当物体被抓取后才会触发Anchor组件与Connector组件之间的识别:

ConnectorID: 

 需要用户自行添加一个自定义的ID,用于与对应的connector进行吸附的识别。

Search Radius&Distance:

Anchor组件检测Connector组件的范围半径与距离,结合起来类似以Anchor组件为原点的一个胶囊体范围进行检测。

Comp_Anchor的Location与Rotation调整:

Anchor组件的位置与旋转与Connector的组件的位置与旋转决定了物体吸附在基座上时的位置与旋转。根据Connector组件介绍中的图片进行设置即可。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
抓取动作需要使用机械臂等实际硬件进行控制,这里我无法提供具体方案。但是我可以给您提供如何使用YOLOv5检测指定物体的Python代码示例: ```python import cv2 import numpy as np import torch import time # 加载YOLOv5模型 model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True) # 设定要检测的类别 class_names = ['apple', 'banana', 'orange'] # 加载摄像头 cap = cv2.VideoCapture(0) while True: # 读取摄像头帧 ret, frame = cap.read() # 将帧转换为RGB格式 frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 使用YOLOv5进行物体检测 results = model(frame) # 获取检测结果 detections = results.pandas().xyxy[0] # 遍历检测结果 for index, detection in detections.iterrows(): class_name = class_names[int(detection['class'])] if class_name == 'apple': # TODO: 执行抓取动作 print("Found an apple! Do the grab action!") elif class_name == 'banana': # TODO: 执行抓取动作 print("Found a banana! Do the grab action!") elif class_name == 'orange': # TODO: 执行抓取动作 print("Found an orange! Do the grab action!") # 显示帧 cv2.imshow('frame', cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)) # 等待按下ESC键退出循环 if cv2.waitKey(1) == 27: break # 释放摄像头 cap.release() # 关闭窗口 cv2.destroyAllWindows() ``` 上述代码使用YOLOv5模型检测摄像头中的物体,并根据指定的类别进行抓取动作。但是,您需要根据具体的硬件和场景来实现抓取动作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值