跳转至

SensorRadar4D 4D 毫米波雷达(原始数据接入)

注意

示例目录:[SimOne 安装目录]\SimOneAPI\SensorRaw\SensorRadar4D

用法简述

4D 毫米波雷达数据传输的演示代码,您可以参考此代码来实时发送 4D 毫米波雷达仿真点云数据至您的算法或控制器。

在传感器配置页面正确填写接收端的 IP 和端口,SimOne 将通过 UDP 协议发送数据。

接收 4D 雷达点云示例

4D 雷达点云格式为 SimOne_Streaming_Radar4D_Point,每个点包含方位角(azimuth)、仰角(elevation)、距离(range)和多普勒速度(doppler)四个维度。需通过球坐标转换计算 XYZ:

#include <SimOneStreamingAPI.h>
#include "visualization/cloud_viewer.h"

std::string gIP = "127.0.0.1";
unsigned short gPort = 9966;

// 预计算三角查找表以提高性能
void lookup_table_init()
{
    cos_lookup_table_.resize(36000);
    sin_lookup_table_.resize(36000);
    for (uint16_t i = 0; i < 36000; i++) {
        double rad = i / 100.0 * M_PI / 180.0;
        cos_lookup_table_[i] = std::cos(rad);
        sin_lookup_table_[i] = std::sin(rad);
    }
}

void dataPointCloudCallback(SimOne_Streaming_Point_Cloud* pPointCloud)
{
    std::lock_guard<std::mutex> lock(gDataPointCloudMutex);
    gDataPointCloud = *pPointCloud;  // 拷贝帧数据
}

int main()
{
    lookup_table_init();
    SimOneAPI::SetStreamingRadar4DPointCloudUpdateCB(
        gIP.c_str(), gPort, dataPointCloudCallback);

    while (true) {
        std::lock_guard<std::mutex> lock(gDataPointCloudMutex);
        if (gDataPointCloud.pointStep == sizeof(SimOne_Streaming_Radar4D_Point)) {
            int pointCount = gDataPointCloud.pointCloudDataSize / gDataPointCloud.pointStep;
            SimOne_Streaming_Radar4D_Point* pPoint =
                (SimOne_Streaming_Radar4D_Point*)gDataPointCloud.pointCloudData;

            for (int i = 0; i < pointCount; i++, pPoint++) {
                // 球坐标 → 笛卡尔坐标转换
                int az  = ((int)(pPoint->azimuth   * 100) + 36000) % 36000;
                int el  = ((int)(pPoint->elevation * 100) - 9000 + 36000) % 36000;
                float x = pPoint->range * cos_lookup_table_[el] * cos_lookup_table_[az];
                float y = -pPoint->range * cos_lookup_table_[el] * sin_lookup_table_[az];
                float z = pPoint->range * sin_lookup_table_[el];
                // pPoint->doppler:径向速度,可用于目标运动状态判断
            }
        }
    }
    return 0;
}

编译环境

  • CMakeList.txt 支持生成 windows / ubuntu 的项目工程。

  • 先运行 gen_vs_proj.bat 生成 Visual Studio 工程位于 build 文件夹,再运行 build_release.bat,最后运行 run_sensor_radar4d_view.bat

使用流程

在 SimOne 中运行用例,在 VS 中运行算法。