基于PCL抓取Velodyne激光雷达数据包可视化

news2024/11/18 1:39:00

Velodyne 高清激光雷达 (HDL) 采集器

Velodyne HDL 是一种基于网络的 3D LiDAR 系统,每秒生成包含超过 700,000 个点的 360 度点云。

PCL 中提供的 HDL Grabber 模仿其他 Grabbers,使其几乎可以即插即用。 然而,由于 HDL 设备是基于网络的,因此在某些平台上存在一些问题。

HDL Grabber 支持原始的 HDL-64e 以及 HDL-32e。 有关这些传感器的更多信息,请访问 Velodyne 网站Velodyne’s Web Site

基本网络设置

Velodyne HDL 使用网络数据包为设备中的每个激光器提供范围和强度数据。 HDL-64e 由 64 个激光器组成,而 HDL-32e 由 32 个激光器组成。

默认情况下,HDL-64e 和 HDL-32e 在 192.168.3 子网上生成 UDP 网络数据包。 从 HDL-32e(固件版本 2)开始,用户可以自定义此网络子网。

HDL 可以直接连接到您的计算机,也可以连接到网络交换机(包括带有内置无线接入点的网络交换机)。 无论如何,您的计算机的一个网络接口卡 (NIC) [无论是有线 RJ-45 连接还是无线连接] 都需要配置为在此 192.168.3 子网上。 请查阅您的操作系统文档以了解如何执行此操作。

除了 NIC 设置之外,您可能还需要更改操作系统的防火墙规则。 HDL 在端口 2368(默认情况下)上生成数据包。 固件版本 2 的 HDL-32e 可以设置为使用不同的端口。 请查阅您的防火墙文档以在您的防火墙中打开此端口。

最后,现代 Linux 内核具有超越基本防火墙规则的高级网络攻击防护。 HDL-32e 生成的 UDP 数据包可能会被操作系统使用这些攻击防护之一过滤。 您需要为相应的 NIC 禁用 rp_filter 防护。 有关如何禁用此过滤器的更多信息,请参阅下面标题为禁用反向路径过滤器的部分Disabling Reverse Path Filter

PCAP文件 

Wireshark是一种流行的网络数据包分析程序,适用于大多数平台,包括 Linux、MacOS 和 Windows。 该工具使用称为 PCAP的事实上的标准网络数据包捕获文件格式。 许多公开可用的 Velodyne HDL 数据包捕获使用此 PCAP 文件格式作为记录和回放的方式。 如果 PCL 编译时支持 PCAP,则这些 PCAP 文件可与 HDL Grabber 一起使用。

Velodyne 在其网站website上提供示例 PCAP 文件

编译支持 PCAP 的 HDL Grabber

在 Linux 上,这涉及安装 libpcap-dev (Ubuntu) 或 libpcap-devel (Fedora)。 CMake 应该找到 pcap 库,并自动配置 PCL 来使用它们。

在 Windows 上,这涉及安装 WinPCAP installer 和 WinPCAP developer’s pack。 您还需要将环境变量 PCAPDIR 设置为解压缩开发人员包的目录。 完成后,您应该能够再次运行 CMake,它应该会找到相应的文件。

注意 - 您不需要编译支持 PCAP 的 HDL Grabber。 仅当您将通过抓取器重放 PCAP 文件时才需要。

示例程序

SimpleHDLViewer.h


#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/hdl_grabber.h>
#include <pcl/visualization/point_cloud_color_handlers.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/console/parse.h>

using namespace std::chrono_literals;
using namespace pcl::console;
using namespace pcl::visualization;

class SimpleHDLViewer
{
    typedef pcl::PointCloud<pcl::PointXYZI> Cloud;
    typedef Cloud::ConstPtr CloudConstPtr;

public:

    SimpleHDLViewer(pcl::Grabber &grabber, PointCloudColorHandler<pcl::PointXYZI> &handler);

    void cloud_callback(const CloudConstPtr& cloud);

    void run();

private:

    PCLVisualizer::Ptr cloud_viewer_;

    pcl::Grabber &grabber_;
    std::mutex cloud_mutex_;

    CloudConstPtr cloud_;
    PointCloudColorHandler<pcl::PointXYZI> &handler_;
};

SimpleHDLViewer.cpp

#include "SimpleHDLViewer.h"

SimpleHDLViewer::SimpleHDLViewer(pcl::Grabber &grabber,
                  PointCloudColorHandler<pcl::PointXYZI> &handler) :
                  cloud_viewer_(new PCLVisualizer("PCL HDL Cloud")),
                  grabber_(grabber),
                  handler_(handler)
{
}

void SimpleHDLViewer::cloud_callback(const CloudConstPtr &cloud)
{
    std::lock_guard<std::mutex> lock(cloud_mutex_);
    cloud_ = cloud;
}

void SimpleHDLViewer::run()
{
    cloud_viewer_->addCoordinateSystem(3.0);
    cloud_viewer_->setBackgroundColor(0, 0, 0);
    cloud_viewer_->initCameraParameters();
    cloud_viewer_->setCameraPosition(0.0, 0.0, 30.0, 0.0, 1.0, 0.0, 0);
    cloud_viewer_->setCameraClipDistances(0.0, 50.0);

    std::function<void (const CloudConstPtr&)> cloud_cb =
        [this] (const CloudConstPtr &cloud) {cloud_callback(cloud);};
    boost::signals2::connection cloud_connection = grabber_.registerCallback(cloud_cb);

    grabber_.start();
    
    while (!cloud_viewer_->wasStopped())
    {
        CloudConstPtr cloud;

        // See if we can get a cloud
        if (cloud_mutex_.try_lock())
        {
            cloud_.swap(cloud);
            cloud_mutex_.unlock();
        }

        if (cloud)
        {
            handler_.setInputCloud(cloud);
            if (!cloud_viewer_->updatePointCloud(cloud, handler_, "HDL"))
                cloud_viewer_->addPointCloud(cloud, handler_, "HDL");

            cloud_viewer_->spinOnce();
        }

        if (!grabber_.isRunning())
            cloud_viewer_->spin();

        std::this_thread::sleep_for(100us);
    }

    grabber_.stop();

    cloud_connection.disconnect();
}

hdl_viewer_simple.cpp


#include "SimpleHDLViewer.h"
#include <pcl/io/vlp_grabber.h>


int main(int argc, char ** argv)
{
  std::string hdlCalibration, pcapFile;

  parse_argument(argc, argv, "-calibrationFile", hdlCalibration);
  parse_argument(argc, argv, "-pcapFile", pcapFile);

  // pcapFile = "HDL32-V2_Monterey Highway.pcap";
  pcl::HDLGrabber grabber(hdlCalibration, pcapFile);
  // pcl::VLPGrabber g(pcapFile);
  PointCloudColorHandlerGenericField<pcl::PointXYZI> color_handler("intensity");

  SimpleHDLViewer v(grabber, color_handler);
  v.run();
  return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
 
project(pcl_hdl_viewer_simple)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG -O0 -Wall -g2 -ggdb")
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

find_package(PCL 1.10 REQUIRED COMPONENTS)
 
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
#LINK_LIBRARIES(${PCL_LIBRARIES})

aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} CPP_SOURCE)
#add_executable(pcl_hdl_viewer_simple hdl_viewer_simple.cpp)
add_executable(pcl_hdl_viewer_simple ${CPP_SOURCE})

target_link_libraries(pcl_hdl_viewer_simple ${PCL_LIBRARIES} pthread)

build.sh

#!/bin/bash

CURRENT_DIR=$(cd $(dirname $0); pwd)
FILE=${CURRENT_DIR}/build

if [ ! -d "$FILE" ]; then
    echo "$FILE not exist"
    mkdir ${FILE}
fi

cd build

cmake ..

make

直接运行build.sh编译

 

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

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

相关文章

线性表总结

线性表 目录&#xff1a; 文章目录 线性表概念一、线性表的定义二、线性表的基本操作三、线性表的实现方式四、线性表的应用总结 概念 线性表是一种基本的数据结构&#xff0c;由一系列具有相同类型的数据元素构成&#xff0c;这些元素之间具有线性的顺序关系&#xff0c;每个…

python+vue+django旅游景点酒店线路套餐管理系统

1.查询旅游信息:主要查询景点和酒店的信息&#xff0c;可以进行分类查询也可以用关键在字来查询用户需要的信息。 2.留言功能:用户可以查看别人以前的留言&#xff0c;也可以发表新的留言。. 3.酒店预定:当用户查询到相关酒店&#xff0c;并且可以能够申请相关酒店预定。 4.信息…

【人工智能】— 一阶逻辑、量词的推理规则、一般化分离规则、合一、前向/反向链接算法、归结算法

这里写自定义目录标题 量词的推理规则全称量词实例化存在量词实例化 简化到命题逻辑推理Generalized Modus Ponens&#xff08;一般化分离规则&#xff09;举例 合一Forward chaining 前向链接算法示例 Backward chaining algorithm 反向链接算法一般FOL的FC/BC的完整性 归结算…

系统分析师选择题笔记

目录 1、知识产权与标准化 1.1 保护范围与对象(★★★★) 1.2 保护期限(★) 1.3 知识产权人确定(★★★) 1.4 侵权判断(★★★) 1.5 标准的分类(★) 1.6 标准代号的识别(★) 2、系统配置与性能评价 2.1 系统性能概述 2.2 系统性能&#xff08;性能指标&#xff09;(★…

8款数据迁移工具选型,主流且实用

前言&#xff1a;ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。今天特地给大家汇总了一些目前市面上比较常用的ETL数据迁移工具&#xff0c;希望对…

什么是B/S架构?

目录 一.什么是B/S架构&#xff1f; 二.B/S架构与C/S架构有什么区别&#xff1f; 三.B/S架构的优缺点 四.B/S架构的几种形式 1&#xff1a;客户端-服务器-数据库 2&#xff1a;客户端&#xff0d;web服务器&#xff0d;应用服务器&#xff0d;数据库 3&#xff1a;客户端…

4个方法助你从戴尔笔记本电脑D盘中恢复丢失的文件

用户案例&#xff1a; 案例1&#xff1a;我有一台戴尔笔记本电脑&#xff0c;D盘上存储了很多个人照片和视频&#xff0c;但最近不知道什么原因&#xff0c;这些数据突然全部消失了。因为这些数据是我珍贵的回忆。所以想问问大家戴尔电脑丢失d盘文件怎么恢复&#xff1f; 案例2…

网络中的网关和物联网的网关区别 局域网 路由器 交换机 服务器

网关&#xff1a;是个概念。连接两种不同的网络。例如局域网要与外部通信&#xff0c;需要经过网关。 设备和设备之间的通信&#xff0c;转换协议需要网关 路由器里有功能是对网关这个概念的实现。 所以网关它可以是路由器&#xff0c;交换机或者是PC。 路由器有网关功能&a…

Flink-Scala版学习——转换算子

目录 一、基本转换算子 1.map 2.filter 3.flatMap 3.聚合算子Aggregation (1)keyBy (2)简单聚合&#xff1a;sum、min、minBy、max、maxBy (3)归约聚合&#xff1a;reduce 二、UDF 三、富函数类 四、物理分区 1.随机分区(shuffle) 2. 轮询分区&#xff08;Round-R…

4月20日第壹简报,星期四,农历三月初一,谷雨

4月20日第壹简报&#xff0c;星期四&#xff0c;农历三月初一&#xff0c;谷雨坚持阅读&#xff0c;静待花开1. 已致29人死亡&#xff0c;26人为患者&#xff01;北京长峰医院火灾事故因院内施工作业火花引发&#xff0c;院长王某玲等12人被刑拘。2. 海南发布旅游产品参考价格&…

第二十三章 案例TodoList之数据更新

本小节&#xff0c;我们要实现点击复选框&#xff0c;修改任务项的实时状态&#xff0c;但是Item组件和App组件是祖孙关系&#xff0c;不是父子关系&#xff0c;我们还能使用props进行通信吗&#xff1f;答案是可以的。 在App组件定义一个更新的函数并传递给Item组件 1、定义…

车载网络 - Autosar网络管理 - 网络管理报文

三、网络管理报文 NM报文的ID一般定义为&#xff1a;基础ID源地址&#xff0c;每个节点应分配一个唯一的标识符&#xff08;ECU地址&#xff09;Node_ID&#xff0c;网络管理报文一般会统一一个基地址&#xff0c;这个是根据主机厂不同而不同&#xff0c;有些是用0x400 - 0x4FF…

多通道振弦传感器无线采集仪如何外接数字传感器

多通道振弦传感器无线采集仪如何外接数字传感器 数字传感器的数据接入逻辑 VS 设备支持在 RS485 接口外接数字传感器&#xff0c; 可进行单类型、多类型数字传感器接入。 单类型数字传感器&#xff1a;使用寄存器 DS_SENSOR(282)来设置单类型数字传感器的类型和数量&#xff08…

用Flutter开发一款企业级App(开眼Flutter-OpenEye)

先贴项目地址&#xff1a;WinWang/open_eye: Flutter 开眼APP&#xff1a;整体项目架构基于Getx搭建&#xff0c;完成路由&#xff0c;依赖注入&#xff1b;网络请求框架基于RetrofitDio实现&#xff0c;配合官方JsonSerialize实现解析&#xff1b;封装项目页面多状态&#xff…

新媒体运营团队如何协同工作?

随着媒体形式的不断丰富和演变&#xff0c;社交、短视频等软件的盛行&#xff0c;新媒体运营成为近几年新兴的行业。 在新媒体团队工作过程中可能会遇到以下问题&#xff1a; 1&#xff09;热点不断更迭&#xff0c;文档资料需要快速流通&#xff1b; 2&#xff09;通过传统的…

US-DAPQ比例放大器指令接线

序号 端子名称 功能 1 CMD_P 压力阀指令 2 CMD_P- 压力阀指令- 3 CMD_Q 流量阀指令 4 CMD_Q- 流量阀指令- 5/6 N.C. 不接 7 VREF_5V 参考电压5V 8 VREF_0V 参考电压0V 9 SOL_P 压力阀线圈 10 SOL_P- 压力阀线圈 11 PWR 电源 12 PWR- 电源- 13 SOL_Q- 流量阀线圈 1…

mysql知识

1.执行步骤 2.Write-Ahead Logging 技术 这两种日志有以下三点不同。 ①redo log 是 InnoDB 引擎特有的&#xff1b;binlog 是 MySQL 的 Server 层实现的&#xff0c;所有引擎都可以使用。 ②redo log 是物理日志&#xff0c;记录的是“在某个数据页上做了什么修改”&#x…

【Linux】项目自动化构建工具 —— make/Makefile

前言&#xff1a; 在上一期的博文中&#xff0c;我们对 Linux 下的编译器 - gcc/g的使用进行了详细的讲解&#xff0c;今天我将给大家讲解的是关于 【Linux】项目自动化构建工具 —— make/Makefile 的详细使用教程&#xff01;&#xff01; 本文目录 &#xff08;一&#x…

ai智能文章生成器-ai论文写作

在数字时代&#xff0c;营销推广策略已经向数字化方向发展。今天我们要介绍的是一款名为“智能ai写作免费”的软件&#xff0c;它可以让营销人员轻松地创作新的内容&#xff0c;并且其中不需要过多的技术知识或文学背景。这款软件可以为许多企业和机构带来创造性的帮助。 智能A…

婴幼儿口水巾围兜出口美国CPC认证

婴幼儿口水巾、围兜在美国销售需要办理CPC认证&#xff0c;即儿童安全产品证书。 什么是CPC认证&#xff1f;美国亚马逊儿童玩具和儿童用品CPC认证是指颁发书面儿童产品证书&#xff08;CPC、&#xff0c;其中制造商或进口商证明其儿童产品符合所有适用的儿童产品安全规则。儿童…