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

文章目录

  • 前言
  • 一、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 timedef 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:passfinally:# 清理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.mzph.cn/bicheng/52758.shtml

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

相关文章

OpenCV小练习:身份证号码识别

目标:针对一张身份证照片,把身份证号码识别出来(转成数字或字符串)。 实现思路:需要将目标拆分成两个子任务:(1) 把身份证号码区域从整张图片中检测/裁剪出来;(2) 将图片中的数字转化成文字。第…

快速学习go-zero

go的web框架有很多,目前go的社区大家对于框架的态度也不尽相同,有些轻量级的框架,但是也就代表整合第三方中间件就需要自己根据客户端进行封装,比如gingorm,也有些功能完全但是被认为丢失了go本身轻量设计的初衷, 比如goframe,而同样的微服务有很多框架,国内比较出门的就是go-z…

rockyliunx 救援模式下禁用docker

目录地址 /usr/lib/systemd/system/docker.service 进入系统界面: 选择系统 按E 按e出现 如下界面,找到 quite 后面添加 init/bin/bash 按 ctrl x 保存 后,到如下界面 加载文件系统为读写 输入命令 mount -o remount, rw / 修改docer.s…

docker的安装+docker镜像的基本操作

一.docker的介绍 1、Docker 是什么? Docker 是⼀个开源的应⽤容器引擎,可以实现虚拟化,完全采⽤“沙 盒”机制,容器之间不会存在任何接⼝。 Docker 通过 Linux Container(容器)技术将任意…

【线程池】

什么是线程池? 线程池是一个可以复用线程的技术。简单来说,线程池是一种基于池化技术的思想来管理线程的技术,旨在减少线程的创建和销毁次数,提高系统的响应速度和吞吐量。它预先创建了一定数量的线程,并将这些线程放…

Java中的定时器(Timer)

目录 一、什么是定时器? 二、标准库中的定时器 三、实现自定义定时器 一、什么是定时器? 定时器就像一个"闹钟",当它到达设定的时间后,就会执行预定的代码。 例如,我们在TCP的超时重传机制中讲过,如果服务器在规定…

DNS劫持问题

目录 DNS劫持概述 定义 图示 ​编辑图示说明 DNS劫持的原理 1. DNS请求与响应过程 图示 ​编辑2. 劫持发生点 本地劫持 路由器劫持 中间人攻击 图示 ​编辑图示说明 DNS劫持的影响 1. 对个人用户的影响 图示 ​编辑图示说明 2. 对企业的影响 图示 ​编辑图示…

0828作业+梳理

一、作业 代码&#xff1a; #include <iostream>using namespace std;using datatype int; //类型重命名 #define MAX 2 //宏定义 //结构体定义 struct Sqlist { private:datatype *data; //顺序表数组int size 0; //数组大小int len 0; …

Ubuntu 16.04下Firefox版本更新

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 在Ubuntu 16.04上更新Firefox的过程可能涉及多个步骤&#xff0c;具体取决于你的需求&#xff0c;比如是要安装一个稳定版本&#xff0c;还是需要使用最新的开发者版本或beta版本。下面我将详细介绍如何在Ub…

Python酷库之旅-第三方库Pandas(105)

目录 一、用法精讲 456、pandas.DataFrame.rdiv方法 456-1、语法 456-2、参数 456-3、功能 456-4、返回值 456-5、说明 456-6、用法 456-6-1、数据准备 456-6-2、代码示例 456-6-3、结果输出 457、pandas.DataFrame.rtruediv方法 457-1、语法 457-2、参数 457-3…

搭建面向切面编程项目

此项目在整合Mybatis基础上修改&#xff0c;可参考主页的整合Mybatis文章 注解版本 第一步 引入maven坐标 <!-- 切面编程所需jar包--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId>…

学生管理系统升级(登录注册 + 关联学生管理系统)

新增需求 这是在昨天的基础初代版本上面新增一个登录注册忘记密码的功能 需求分析 注册 登录 忘记密码 user类代码呈现 package StudentSystem;public class User {private String username;private String password;private String personID;private String phoneNumber;pu…

PHP同城派送多区域运营配送小程序源码

&#x1f69a;&#x1f4a8;「同城派送多区域运营小程序」——让每一份需求快速触达&#xff01;&#x1f308;&#x1f680; &#x1f525; 开篇燃爆&#xff1a;同城生活新风尚&#xff0c;一键速达不是梦&#xff01; Hey小伙伴们&#xff0c;你还在为找不到合适的同城服务…

推荐并整理一波vscode插件(哪些内置了,哪些好用)

文章目录 背景现在还在用的&#xff08;21款&#xff09;Chinese(Simplified)简体中文Chinese LoremLorem ipsumCode Runner&#xff08;很推荐&#xff09;Codeium: AI Coding Autocomplete&#xff08;推荐&#xff09;Draw.io IntegrationESLintHighlight Matching TagJavaS…

甄选范文“论软件系统建模方法及其应用”,软考高级论文,系统架构设计师论文

论文真题 软件系统建模(Software System Modeling)是软件开发中的重要环节,通过构建软件系统模型可以帮助系统开发人员理解系统、抽取业务过程和管理系统的复杂性,也可以方便各类人员之间的交流。软件系统建模是在系统需求分析和系统实现之间架起的一座桥梁,系统开发人员…

【二叉树】OJ题目

&#x1f31f;个人主页&#xff1a;落叶 目录 单值⼆叉树 【单值二叉树】代码 相同的树 【相同二叉树】代码 对称⼆叉树 【对称二叉树】代码 另一颗树的子树 【另一颗树的子树】代码 二叉树的前序遍历 【二叉树前序遍历】代码 二叉树的中序遍历 【二叉树中序遍历】…

NVIDIA将在Hot Chips 2024会议上展示Blackwell服务器装置

NVIDIA 将在 Hot Chips 2024 上展示其 Blackwell 技术堆栈&#xff0c;并在本周末和下周的主要活动中进行会前演示。对于 NVIDIA 发烧友来说&#xff0c;这是一个激动人心的时刻&#xff0c;他们将深入了解NVIDIA的一些最新技术。然而&#xff0c;Blackwell GPU 的潜在延迟可能…

【freeDiameter】服务端和客户端的连接流程

连接流程详解 进程启动时&#xff0c;先使用main_cmdline解析命令行参数&#xff0c;比如使用-c就会使用指定路径的配置文件&#xff0c;使用-d就会启用后台进程。 之后使用fd_core_initialize初始化核心库。具体会先使用fd_conf_init初始化配置&#xff0c;比如设置各项的默…

最长的一帧学习 part3

文章目录 八、osgUtil:: SceneView::cull ()part1 初始化必要的SceneView类成员变量part2 立体显示的处理part3 执行SceneView::cullStage函数&#xff0c;它也是场景视图筛选工作的核心函数part3.1 首先统计场景中的遮挡节点&#xff08;OccluderNode&#xff09;&#xff0c;…