当前位置: 首页 > article >正文

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 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.kler.cn/a/282586.html

相关文章:

  • Ubuntu从入门到精通(一)系统安装
  • 字节青训-小M的多任务下载器挑战、版本号比较
  • 安装paddle
  • Spring Boot3 实战案例合集上线了
  • 游戏引擎学习第九天
  • 03-axios常用的请求方法、axios错误处理
  • YOLOv9改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性
  • 滴滴出行:分布式数据库的架构演进之路|OceanBase案例
  • Android实现自定义方向盘-7livedata,viewmodel相关问题
  • React基础面试题
  • Android使用前台服务
  • 从“养老社区、居家健康”迈向“全生活场景”,保险+康养步入3.0时代!
  • 系统开发压力测试高并发
  • 了解ceph scrub deep-scrub
  • elasticsearch整合java使用创建索引、指定索引映射、操作添加文档、删除文档、更新文档、批量操作
  • 计算机习题(一)
  • 【深度学习】迭代次数 vs bs? 迭代次数 vs epoch
  • 无线终端ZWS云应用(二)—DTU云的环境监测行业应用
  • Qt第二课----信号和槽
  • python把dbc转换成excel
  • 在Ubuntu 18.04上安装Linux、Nginx、MySQL、PHP(LEMP堆栈)的方法
  • 使用LinkedHashMap实现固定大小的LRU缓存
  • 【分享】7-Zip解压缩软件的4个功能模块
  • HarmonyOS NEXT未成年人模式无缝联动所有应用,过滤非适龄内容
  • centos中yum安装时提示Cannot find a valid baseurl for repo: base/7/x86_64 出现仓库源问题
  • 大模型知识检索RAG业务实践实践(初级篇)