carla unreal engine源码:如何创建radar可视化探测锥

news2024/12/23 22:09:11

文章目录

  • 前言
  • 一、C++实现方法
      • 1、DrawDebugCone函数
      • 2、carla工程修改
      • 3、make launch
      • 4、探测锥验证
  • 二、蓝图实现方法
      • 1、创建并打开蓝图
      • 2、打开蓝图事件图表
      • 3、绘制蓝图事件
      • 4、编译再运行


前言

1、在自动驾驶仿真调试以及测试过程中,我们经常会用到雷达的探测锥,能够很直观地看到目标是否在雷达探测范围内。
2、而在unreal engine中可视化探测锥体其实很简单,有两种方法,一种是通过创建蓝图的方法,一种是调用C++函数,这篇文章简单讲一下两种方法的实现。

在这里插入图片描述


一、C++实现方法

1、DrawDebugCone函数

其实就是Unreal engine用于绘制调试锥体的函数;

void DrawDebugCone(const UWorld* InWorld, FVector const& Origin, FVector const& Direction, float Length, float AngleWidth, float AngleHeight, int32 NumSides, FColor const& Color, bool bPersistentLines=false, float LifeTime=-1.f, uint8 DepthPriority = 0, float Thickness = 0.f)
参数名描述
InWorldcarla当前世界
Origin探测锥的起始位置
Direction探测锥的方向
Length探测锥的长度,即探测的最远距离
AngleWidth水平FOV`
AngleHeight垂直FOV`
NumSides探测射线的数量
Color探测射线的颜色
bPersistentLines是否不持久显示
LifeTime生存周期,-1表示永久存在
Thickness射线的粗细

2、carla工程修改

1)找到对应路径下的:\unrealengine\carla\Unreal\CarlaUE4\Plugins\Carla\Source\Carla\Sensor\Radar.h,在private加入函数定义void DrawRadarCone();,如下图所示:

在这里插入图片描述


2)找到对应路径下的:\UnrealEngine\carla\Unreal\CarlaUE4\Plugins\Carla\Source\Carla\Sensor\Radar.cpp,将#include "Runtime/Engine/Public/DrawDebugHelpers.h"添加到上方,如下图所示:

在这里插入图片描述


3)找到对应路径下的:\UnrealEngine\carla\Unreal\CarlaUE4\Plugins\Carla\Source\Carla\Sensor\Radar.cpp,将下述代码复制到Radar.cpp的最下方;

void ARadar::DrawRadarCone() {

  FVector Origin = GetActorLocation(); // 获取雷达位置
  FVector Direction = GetActorForwardVector(); // 获取雷达前向矢量
  float Length = Range; // 雷达锥体探测范围
  float AngleWidth =
      FMath::DegreesToRadians(HorizontalFOV); // 横向FOV(度数转弧度)
  float AngleHeight =
      FMath::DegreesToRadians(VerticalFOV); // 纵向FOV(度数转弧度)
  int32 NumSides = 100; // 锥体的边数
  FColor Color = FColor::Yellow;  // 锥体的颜色

  DrawDebugCone(
				GetWorld(), 
				Origin, 
				Direction, 
				Length,
				AngleWidth, 
				AngleHeight,
                NumSides,
				Color,
                false, // 不持久显示
                -1.0f, // 持续时间(-1 表示不自动移除)
                0      // 射线的粗细程度
  );
}

在这里插入图片描述


4)在void ARadar::PostPhysTick(UWorld *World, ELevelTick TickType, float DeltaTime) 函数中加入对DrawRadarCone();的调用,如下图所示:

在这里插入图片描述


3、make launch

在这里插入图片描述
在这里插入图片描述

4、探测锥验证

1)需要编写python脚本生成radar,生成radar后会根据实际的fov参数可视化探测锥。

import carla
import random
import time


def set_spectator(carla_world, vehicle):
    carla_world.get_spectator().set_transform(
        carla.Transform(vehicle.get_transform().location +
                        carla.Location(z=50), carla.Rotation(pitch=-90))
    )

def main():
    # 连接到CARLA服务器
    client = carla.Client('localhost', 2000)
    client.set_timeout(10.0)

    # 获取仿真世界
    world = client.get_world()

    # 获取蓝图库
    blueprint_library = world.get_blueprint_library()

    # 选择车辆蓝图
    vehicle_bp = blueprint_library.filter('vehicle.*')[0]

    # 选择一个随机的起始位置
    spawn_points = world.get_map().get_spawn_points()
    spawn_point = random.choice(spawn_points)

    # 生成车辆
    vehicle = world.spawn_actor(vehicle_bp, spawn_point)

    set_spectator(world, vehicle)
    
    # 选择雷达蓝图
    radar_bp = blueprint_library.find('sensor.other.radar')

    # 设置雷达属性
    radar_bp.set_attribute('horizontal_fov', '30')  # 水平视场角
    radar_bp.set_attribute('vertical_fov', '10')    # 垂直视场角
    radar_bp.set_attribute('range', '20')           # 检测范围

    # 设置雷达的位置和方向
    radar_transform = carla.Transform(carla.Location(x=2.0, z=1.0))

    # 生成雷达传感器并附加到车辆上
    radar_sensor = world.spawn_actor(radar_bp, radar_transform, attach_to=vehicle)

    # 定义雷达数据处理回调函数
    def radar_callback(data):
        for detection in data:
            print(f"Detected object at distance: {detection.depth} meters")

    # 绑定回调函数到雷达传感器
    radar_sensor.listen(radar_callback)

    # 让仿真运行一段时间
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        pass
    finally:
        # 清理
        radar_sensor.stop()
        radar_sensor.destroy()
        vehicle.destroy()

if __name__ == '__main__':
    main()

2)运行carla unreal engine以及python脚本

在这里插入图片描述

二、蓝图实现方法

1、创建并打开蓝图

1)创建空actor,编辑并选择蓝图,以camera为例,选择cameraActor;
在这里插入图片描述

2、打开蓝图事件图表

1、carla中一般不用蓝图的方法去实现,这里简单提供个方法,在蓝图的事件图表中设置;
在这里插入图片描述


3、绘制蓝图事件

在这里插入图片描述

4、编译再运行


综上,完成两种探测锥体的实现,如有问题及时沟通;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SkyWalking部署(监控系统)

简介 SkyWalking 是一个开源的应用性能监控 (APM) 和可观测性平台,旨在帮助开发者、运维人员和架构师监控、诊断和优化微服务架构中的应用。SkyWalking 提供了一套完整的工具链,用于收集、分析和可视化应用的性能指标、追踪和日志数据。 SkyWalking 的…

wpf prism 《2》、导航

》》》主程序 using Prism.Commands; using Prism.Mvvm; using Prism.Navigation; using Prism.Navigation.Regions; using System;namespace BlankApp2.ViewModels {public class MainViewModel : BindableBase{private string _title "Prism Application";public…

数据结构《排序》

在之前数据结构之算法复杂度章节中我们学习了复杂度相关的概念,这就使得懂得如何来区分算法的好坏,在之前C语言专题中在指针的学习时我们了解了冒泡排序,之后再数据结构的二叉树章节中我们又学习了堆排序,其实排序不止这两种&…

搜剧平台源码 可一键转存他人链接

简介 1、一键转存他人链接:就是将别人的分享链接转为你自己的 2、转存心悦搜剧资源:就是将心悦搜剧平台上的所有资源都转成你自己的 3、每日自动更新:自动转存每天的资源并入库 前端uin-app,后端PHP,兼容微信小程序…

基于vue框架的博物馆预约网站的设计与实现8k352(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,类别,博物馆,预约信息,馆藏精品 开题报告内容 基于Vue框架的博物馆预约网站的设计与实现开题报告 一、开题报告名称 基于Vue框架的博物馆预约网站的设计与实现 二、研究背景与意义 随着信息技术的飞速发展和人们生活水平的日益…

QT5.14.2编译有界面的DLL供C#Winform程序调用步骤

目标:公司要设计一套软键盘程序给到WinForm程序调用、因此需要封装QT的软键盘程序给到C#调用,跟C#调用MFC的DLL代码差不多,感觉就是封装了一下QT的代码成为MFC格式的。 步骤:1、新建QT对应的库项目、编译器使用MSVC2017 64位、编…

Apache RocketMQ 中文社区全新升级丨阿里云云原生 7 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 趋势热点 🥇 通义灵码入选 2024 世界人工智能大会最高荣誉「镇…

Beyond Compare忽略特定格式文本,忽略匹配正则表达式

一 概述 文本对比时忽略某些文本。比如有些生成的文件需要做差异对比,除了内容有差异外,自动生成的ID也不同,想忽略这些ID。特别是文件内容比较多的时候。 如上图,其中UUID“*”的部分我想忽略。 二 方法 方法1 通过Beyond Co…

开放大世界的碰撞与物理

众所周知,物理开销一直是 CPU 的一个大头,而且还很容易出问题。对于开放世界,该如何进行物理运算,以及采用什么方案计算碰撞。 本文针对这个问题做了一些细微的研究,算是对 Unity 下的解决方案有了一个大致的方向。 1、…

《“草莓”引领风潮:全能AI与专业型AI的未来市场较量》

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Vmware下安装Rocky Linux9.4

Rocky Linux简介 Rocky Linux是一个开源、社区拥有和管理、免费的企业Linux发行版,提供强大的生产级平台。可作为CentOS停止维护后的替代方案。 下载Rocky Linux 下载地址 Download - Rocky Linux 根据电脑实际情况选择对应版本的Linux,这里下载AMD/In…

springboot在线办公小程序论文源码调试讲解

第二章 技术介绍 2.1 B/S结构 随着软件系统的不断改进和升级,B/S结构产品更为方便的特征体现地十分明显。对于一个中等偏大的公司来说,如果系统管理员每天要在很多台电脑之间来回查看,不断奔走,那么效率和工作量就会变得很低&…

HSE软件组件有哪些?如何实现HSE与主机的通信(同步/异步)?如何使用HSE提供的安全服务?

《S32G3系列芯片——Boot详解》系列——HSE软件组件有哪些?如何实现HSE与主机的通信(同步/异步)?如何使用HSE提供的安全服务? 一、HSE子系统软件组件1.1 NXP交付用户的HSE固件内容1.2 HSE固件提供的安全服务1.3 HSE固件…

代码随想录刷题day15丨110.平衡二叉树,257. 二叉树的所有路径, 404.左叶子之和 ,222.完全二叉树的节点个数

代码随想录刷题day15丨110.平衡二叉树,257. 二叉树的所有路径, 404.左叶子之和 ,222.完全二叉树的节点个数 1.题目 1.1平衡二叉树(优先掌握递归) 题目链接:110. 平衡二叉树 - 力扣(LeetCode&a…

探索数字沙龙——文本描述生成数字人3D发型的专业工具

一、引言 随着数字媒体创作领域不断发展,创作者们对于细节和真实感的要求越来越高。特别是在头发造型这一方面,如何准确地捕捉到人物的个性和情感,成为了3D建模和动画制作中的重要环节。为此,我们介绍了一款名为“数字沙龙”的3D头发造型工具,它旨在为数字媒体创作者提供…

分类预测|基于灰狼GWO优化BP神经网络的数据分类预测Matlab程序GWO-BP|基于鲸鱼WOA优化BP神经网络的数据分类预测Matlab程序WOA-BP

分类预测|基于灰狼GWO优化BP神经网络的数据分类预测Matlab程序GWO-BP|基于鲸鱼WOA优化BP神经网络的数据分类预测Matlab程序WOA-BP 文章目录 前言分类预测|基于灰狼GWO优化BP神经网络的数据分类预测Matlab程序GWO-BP|基于鲸鱼WOA优化BP神经网络的数据分类预测Matlab程序WOA-BP 一…

系统编程-多线程1

多线程1 目录 多线程1 引入 认识线程 1、线程的概念 2、线程的优缺点 3、进程和线程的区别和联系 4、什么时候选进程,什么时候选线程? 线程相关函数 1、创建线程 2、线程的退出函数 3、阻塞等待线程退出 并回收资源 4、获取自身线程号的函数…

算法设计:实验一分治与递归

【实验目的】 深入理解分治法的算法思想,应用分治法解决实际的算法问题。 【实验内容与要求】 设有n2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表: 1.每个选手必须与其他n-1个选手各赛一次;2.每个选手一天只能赛一…

[Algorithm][综合训练][消减整数][最长上升子序列(二)][春游]详细讲解

目录 1.消减整数1.题目链接2.算法原理详解 && 代码实现 2.最长上升子序列(二)1.题目链接2.算法原理详解 && 代码实现 3.春游1.题目链接2.算法原理详解 && 代码实现 1.消减整数 1.题目链接 消减整数 2.算法原理详解 && 代码实现 解法&#x…

【Linux】POSIX版本 信号量

目录 信号量的基本操作 基于信号量和环形队列的生产消费模型 之前我们在System V版本的进程间通信说过信号量,这里我们说的是POSIX(Portable Operating System Interface for uniX 可移植操作系统接口)版本的并且会说的更加详细 我们之前对…