跳转至

Lidar 激光雷达(原始数据接入)

注意

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

用法简述

物理级激光雷达数据传输的演示代码,您可以参考此代码来实时发送激光雷达仿真点云数据至您的算法或控制器。

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

接收点云数据示例

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

std::string gIP = "127.0.0.1";
unsigned short gInfoPort = 7788;
unsigned short gPort = 6699;
SimOne_Streaming_Point_Cloud gDataPointCloud;
std::mutex gDataPointCloudMutex;

// 回调函数:每帧点云数据到达时触发(在独立线程中调用)
void dataPointCloudCallback(SimOne_Streaming_Point_Cloud* pPointCloud)
{
    std::lock_guard<std::mutex> lock(gDataPointCloudMutex);
    gDataPointCloud.frame = pPointCloud->frame;
    gDataPointCloud.pointCloudDataSize = pPointCloud->pointCloudDataSize;
    gDataPointCloud.pointStep = pPointCloud->pointStep;
    memcpy(&gDataPointCloud.pointCloudData, &pPointCloud->pointCloudData,
           pPointCloud->pointCloudDataSize);
}

int main(int argc, char* argv[])
{
    // 注册回调,同时传入 IP、数据端口和信息端口
    SimOneAPI::SetStreamingPointCloudUpdateCB(
        gIP.c_str(), gPort, gInfoPort, dataPointCloudCallback);

    // PCL 可视化(将点云中 XYZI 格式按强度着色后渲染)
    int lastFrame = 0;
    while (true) {
        std::lock_guard<std::mutex> lock(gDataPointCloudMutex);
        if (gDataPointCloud.frame != lastFrame &&
            gDataPointCloud.pointStep == sizeof(SimOne_Streaming_Point_XYZI))
        {
            int pointCount = gDataPointCloud.pointCloudDataSize / gDataPointCloud.pointStep;
            SimOne_Streaming_Point_XYZI* pPoint =
                (SimOne_Streaming_Point_XYZI*)gDataPointCloud.pointCloudData;
            // 遍历点云:pPoint->x, pPoint->y, pPoint->z, pPoint->intensity
            for (int i = 0; i < pointCount; i++, pPoint++) {
                // 按强度映射颜色后写入可视化点云 ...
            }
            lastFrame = gDataPointCloud.frame;
        }
    }
    return 0;
}

编译环境

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

使用流程

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


3. LidarROS 激光雷达 ROS 格式

注意

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

用法简述

物理级激光雷达数据传输至 ROS 演示代码,您可以参考此代码来实时发送激光雷达仿真点云数据至您的 ROS 系统。

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

编译环境

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

使用流程

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