雷达标定与解析

融合雷达与解析雷达数据的相关代码。感谢开源社区的贡献。以下代码继承了很多人的工作。
如果是单雷达:
直接进行标定,所以就是接收相关的话题然后发布。
lidar_calibration_params.yaml:

calibration:在这个接口里面x_offset: 0.0y_offset: 0.0z_offset: 0.4roll_offset: -0.074pitch_offset: 0yaw_offset: -1.57input_topic: "/lslidar_point_cloud"
output_topic: "/fusion_points"

lidar_calibration_node.cpp

#include <ros/ros.h>
#include <sensor_msgs/PointCloud2.h>
#include <tf2/LinearMath/Quaternion.h>
#include <tf2/LinearMath/Matrix3x3.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl_ros/transforms.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <Eigen/Geometry>
#include <iostream>// 标定参数结构体
struct CalibrationParams
{double x_offset;double y_offset;double z_offset;double roll_offset;double pitch_offset;double yaw_offset;
};ros::Publisher calibrated_pub;
CalibrationParams calibration_params;void loadCalibrationParams(const ros::NodeHandle& nh)
{nh.getParam("calibration/x_offset", calibration_params.x_offset);nh.getParam("calibration/y_offset", calibration_params.y_offset);nh.getParam("calibration/z_offset", calibration_params.z_offset);nh.getParam("calibration/roll_offset", calibration_params.roll_offset);nh.getParam("calibration/pitch_offset", calibration_params.pitch_offset);nh.getParam("calibration/yaw_offset", calibration_params.yaw_offset);// 打印加载的参数以确认ROS_INFO("Loaded calibration parameters:");ROS_INFO("x_offset: %f", calibration_params.x_offset);ROS_INFO("y_offset: %f", calibration_params.y_offset);ROS_INFO("z_offset: %f", calibration_params.z_offset);ROS_INFO("roll_offset: %f", calibration_params.roll_offset);ROS_INFO("pitch_offset: %f", calibration_params.pitch_offset);ROS_INFO("yaw_offset: %f", calibration_params.yaw_offset);
}void laserCallback(const sensor_msgs::PointCloud2ConstPtr& cloud_msg)
{// Create transformation matrixEigen::Affine3f transform = Eigen::Affine3f::Identity();transform.translation() << calibration_params.x_offset, calibration_params.y_offset, calibration_params.z_offset;Eigen::AngleAxisf rollAngle(calibration_params.roll_offset, Eigen::Vector3f::UnitX());Eigen::AngleAxisf pitchAngle(calibration_params.pitch_offset, Eigen::Vector3f::UnitY());Eigen::AngleAxisf yawAngle(calibration_params.yaw_offset, Eigen::Vector3f::UnitZ());transform.rotate(yawAngle * pitchAngle * rollAngle);// 打印转换矩阵以确认std::cout << "Transformation Matrix:" << std::endl;std::cout << transform.matrix() << std::endl;// Transform the point cloudsensor_msgs::PointCloud2 calibrated_cloud_msg;pcl_ros::transformPointCloud(transform.matrix(), *cloud_msg, calibrated_cloud_msg);// Publish the calibrated point cloudcalibrated_cloud_msg.header = cloud_msg->header;calibrated_pub.publish(calibrated_cloud_msg);
}int main(int argc, char** argv)
{ros::init(argc, argv, "lidar_calibration_node");ros::NodeHandle nh;// 获取参数服务器中的参数std::string input_topic;std::string output_topic;int queue_size;nh.param<std::string>("input_topic", input_topic, "/lslidar_point_cloud");nh.param<std::string>("output_topic", output_topic, "/calibrated_point_cloud");nh.param<int>("queue_size", queue_size, 10);// 加载标定参数loadCalibrationParams(nh);// std::cout<<input_topic<<std::endl;// std::cout<<output_topic<<std::endl;// 订阅输入点云话题ros::Subscriber laser_sub = nh.subscribe(input_topic, queue_size, laserCallback);// 发布标定后的点云话题calibrated_pub = nh.advertise<sensor_msgs::PointCloud2>(output_topic, queue_size);ros::spin();return 0;
}

启动launch:

<launch><rosparam file="$(find lidar_calibration)/config/lidar_calibration_params.yaml" command="load"/><node pkg="lidar_calibration" type="lidar_calibration_node" name="lidar_calibration_node" output="screen"></node></launch>

以上是单个雷达的标定的,接下来是融合点云的数据标定:
来源于一个开源项目:git clone https://github.com/Hliu0313/fusion_pointclouds
也是直接修改接口就行了:

#参数加载对应 loadparams.h/loadparams.cpp,若修改params.yaml对应修改加载函数即可
fusion_lidar_num: 3                                                      #融合 lidar 点云数量 2/3/4
topics:                                                                                 #订阅 lidar 点云话题
#   parent_pc_topic: "/livox/lidar"
#   child_pc_topic1: "/right/rslidar_points"
#   child_pc_topic2: "/left/rslidar_points"
#   child_pc_topic3: "/livox/lidar"parent_pc_topic: "/livox/lidar"child_pc_topic1: "/right/rslidar_points"child_pc_topic2: "/left/rslidar_points"child_pc_topic3: "/livox/lidar"fusion_pc_topic: "/fusion_points"                       #融合后发布点云话题名称fusion_pc_frame_id: "rslidar"                 #融合后发布点云话题名称#注意
#1.点云话题少于4个时,为了时间同步回调函数适应不同数量雷达,空位child_pc_topic可以填入parent_pc_topic
#例如 需要融合"/front/rslidar_points" 与"/left/rslidar_points"点云数据
#
#fusion_lidar_num: 2
#parent_pc_topic: "/front/rslidar_points"
#child_pc_topic1: "/left/rslidar_points"
#child_pc_topic2: "/front/rslidar_points" "
#child_pc_topic3: "/front/rslidar_points" #---->   如果只是融合点云数据,下方参数填 false 即可    <------- 
set_params_tf:  true                                                     #是否对点云进行坐标变换 
set_params_internal_bounds: true                       #是否对点云内边界 XYZ 滤除
set_params_external_bounds: true                       #是否对点外内边界 XYZ 滤除
set_dynamic_params: true                                        #是否开启动态调整,配合 rqt_reconfigure 动态调整坐标变化参数 ---> 解决标定参数不准确,实时微调# cpc1_to_ppc:                                                                   #child_pc1_to_parent_pc,坐标变化信息传入节点,按需填写即可
#    x: -0.75
#    y: -0.8
#    z: 0.58
#    roll: 0.05
#    pitch: 0.01
#    yaw: 0.06
# cpc2_to_ppc:
#    x: -0.75
#    y: 0.72
#    z: 0.58
#    roll: 0.0
#    pitch: 0.0
#    yaw: -0.1
# cpc3_to_ppc:
#    x: 0.0
#    y: 0.0
#    z: 0.0
#    roll: 0.0
#    pitch: 0.0
#    yaw: 0.0cpc1_to_ppc:                                                                   #child_pc1_to_parent_pc,坐标变化信息传入节点,按需填写即可x: -0.8y: -0.5z: 1.06roll: 0.04pitch: 0.0yaw: 0.0cpc2_to_ppc:x: -0.75y: 0.75z: 1.06roll: -0.018pitch: 0.018yaw: -0.168# cpc2_to_ppc:
#    x: -0.
#    y: 0.
#    z: 0.0
#    roll: -0.0
#    pitch: -0.0
#    yaw: -0.0cpc3_to_ppc:x: 0.0y: 0.0z: 0.0roll: 0.0pitch: 0.0yaw: 0# Dynamic rqt_reconfigure default bounds
internal_bounds :  #内边界x_min: 0.0x_max: 0.0y_min: 0.0y_max: 0.0z_min: 0.0z_max: 0.0external_bounds :  #外边界x_min: -100x_max: 100y_min: -100y_max: 100z_min: -5z_max: 5

最后是聚类,也是来源于一个开源项目:
https://blog.csdn.net/weixin_42905141/article/details/122977315?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171888729016777224495812%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=171888729016777224495812&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-122977315-null-null.142v100control&utm_term=%E4%B8%9A%E4%BD%99%E5%86%99%E7%9A%84%E4%B8%80%E4%B8%AA%E7%B2%97%E7%89%88demo%EF%BC%8C%E6%9C%89%E5%BE%88%E5%A4%9A%E5%9C%B0%E6%96%B9%E6%98%AF%E5%8F%AF%E4%BB%A5%E6%94%B9%E8%BF%9B%E7%9A%84%EF%BC%8C%E5%A4%A7%E5%AE%B6%E8%87%AA%E8%A1%8C%E4%BF%AE%E6%94%B9%E5%90%A7&spm=1018.2226.3001.4187
非常感谢他的工作,接下来要做的就是把障碍物的信息用我们需要的方式重新就行发布就行了。我这里直接借鉴一下之前的比赛所遇到的障碍物的接口,我很喜欢他的这一系列的定义。
请添加图片描述
在这个接口里面主要是用上述msg来定义雷达给出的数据。
上述单雷达标定,多雷达融合,以及雷达的聚类都放到这里面了:

https://github.com/chan-yuu/lidar_ws

后续会继续做雷达处理的相关的工作

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

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

相关文章

u盘sd卡格式化怎么恢复,3种恢复方法教学

u盘sd卡格式化怎么恢复&#xff0c;这是许多人在误操作后最关心的问题。我们会详细介绍五种有效的恢复方法&#xff0c;并且提供恢复原理的教学视频&#xff0c;帮助您轻松找回U盘和SD卡上被格式化的数据。 一. 数据存储与恢复的原理 1. U盘、移动硬盘、硬盘以及固态盘存储数据…

自然语言处理:第三十八章: 开箱即用的SOTA时间序列大模型 -Timsfm

自然语言处理:第三十八章: 开箱即用的SOTA时间序列大模型 -Timsfm 文章链接:[2310.10688] A decoder-only foundation model for time-series forecasting (arxiv.org) 项目链接: google-research/timesfm: TimesFM (Time Series Foundation Model) is a pretrained time-ser…

IPD推行成功的核心要素(十二)CDP确保产品开发的正确方向

IPD体系是一种全新的产品研发管理模式&#xff0c;它将研发合格产品整个过程分为确保开发做正确的事和如何正确地做事两个阶段。确保开发做正确的事是指在产品进入研发之初就清晰地定义出有竞争力的产品&#xff0c;核心是确保产品能够对准客户需求&#xff0c;能够给客户带来商…

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化&#xff08;一&#xff09;通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解 码客 卢益贵 ygluu 关键词&#xff1a;游戏策划 可配置化 模块化配置 数据引擎 条件系统 红点系统 一、前言 在插件式模块化软件开发当中&#xff0c;既要模块高度独…

封装一个上拉加载的组件(无限滚动)

一、封装 1.这个是在vue3环境下的封装 2.整体思路&#xff1a; 2.1传入一个elRef&#xff0c;其实就是一个使用页面的ref。 2.2也可以不传elRef&#xff0c;则默认滚动的是window。 import { onMounted, onUnmounted, ref } from vue; import { throttle } from underscore;ex…

ros 创建新的工作空间

创建工作空间 # catkin_ws是自己创建工作空间的名字 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace编译工作空间 cd ~/catkin_ws/src catkin_make打开并编辑 .bashrc 文件&#xff1a; nano ~/.bashrc在 .bashrc 文件末尾添加以下内容…

解决Windows下移动硬盘无法弹出的问题:\$Extend\$RmMetadata\$TxfLog\$TxfLog.blf

想弹出移动硬盘时&#xff0c;Windows告诉我设备正在使用 然后我使用LockHunter查看到底是哪个应用在使用我的移动硬盘&#xff0c;发现是 System(PID 4) E x t e n d Extend ExtendRmMetadata T x f L o g TxfLog TxfLogTxfLog.blf这个文件正在使用 这是一个索引文件 解决 …

数据清洗!即插即用!异常值、缺失值、离群值处理、残差分析和孤立森林异常检测,确保数据清洗的全面性和准确性,MATLAB程序!

适用平台&#xff1a;Matlab2021版及以上 数据清洗是数据处理和分析中的一个关键步骤&#xff0c;特别是对于像风电场这样的大型、复杂数据集。清洗数据的目的是为了确保数据的准确性、一致性和完整性&#xff0c;从而提高数据分析的质量和可信度&#xff0c;是深度学习训练和…

PTA基础题考点汇总

一&#xff1a;字符串&#xff08;数组&#xff09;的逆序&#xff0c;栈的方法 **字符串数组的逆序 : ** 标准容器库的知识&#xff1a;定义stack容器于字符串&#xff1a;stackv; string s&#xff1b; //这里用到了c中stl&#xff08;标准容器库的知识&#xff09;stack&…

一二三应用开发平台应用开发示例(4)——视图类型介绍以及新增、修改、查看视图配置

调整上级属性类型 前面为了快速展示平台的低代码配置功能&#xff0c;将实体文件夹的数据模型上级属性的数据类型暂时配置为文本类型&#xff0c;现在我们调整下&#xff0c;将其数据类型调整为实体&#xff0c;如下图所示&#xff1a; 数据类型需要选择实体&#xff0c;并在实…

STM32单片机系统

1.STM32最小系统 微型计算机&#xff08;面&#xff09; 单片机最小系统是指能够将单片机芯片运行所必需的最少的硬件电路集成在一起的系统。 它是一种基本的单片机应用系统&#xff0c;通常由主芯片&#xff0c;时钟电路&#xff0c;复位电路&#xff0c;电源电路&#xff0c…

Ubuntu/Linux SSH 端口转发

文章目录 Ubuntu/Linux SSH 端口转发概述本地端口转发场景一场景二 参考资料 Ubuntu/Linux SSH 端口转发 概述 SSH, Secure Shell 是一种在网络上用于安全远程登录到另一台机器的工具。除了远程登录以外&#xff0c;ssh 的端口转发是它的另一项强大功能。通过 ssh 端口转发功…

计算机网络知识点整理1

目录 激励的话 一、计算机发展的三个阶段 二、互联网标准化工作 三、互联网的组成 边缘部分 核心部分 电路交换的主要特点 分组交换的主要特点 四、三大交换方式的主要特点 总结 激励的话 没关系的&#xff0c;有三分钟热度&#xff0c;就有三分钟收获 一、计算机…

RabbitMQ实践——使用WebFlux响应式方式实时返回队列中消息

大纲 Pom.xml监听队列实时返回消息测试完整代码工程代码 在之前的案例中&#xff0c;我们在管理后台收发消息都是通过短连接的形式。本文我们将探索对队列中消息的实时读取&#xff0c;并通过流式数据返回给客户端。 webflux是反应式Web框架&#xff0c;客户端可以通过一个长连…

捷云等保一体机 产品服务一站式等保合规交付解决方案

等保2.0的变化 2019 年 5 月 13 日&#xff0c;网络安全等级保护制度 2.0 国家标准&#xff08;简称“等保 2.0”&#xff09;正式发布&#xff0c;将等保 2.0 基本要求、测评要求、安全设计技术要求框架统一为安全管理中心支持下的三重防护结构框架。定级对象在按照等保 2.0 …

Python爬虫-贝壳新房

前言 本文是该专栏的第32篇,后面会持续分享python爬虫干货知识,记得关注。 本文以某房网为例,如下图所示,采集对应城市的新房房源数据。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地…

TensorFlow高阶API使用与PyTorch的安装

欢迎来到 Papicatch的博客 文章目录 &#x1f349;TensorFlow高阶API使用 &#x1f348;示例1&#xff1a;使用tf.keras构建模型 &#x1f34d;通过“序贯式”方法构建模型 &#x1f34d;通过“函数式”方法构建模型 &#x1f348;示例2&#xff1a;编译模型关键代码 &am…

ArkTS开发系列之导航 (2.6 图形)

上篇回顾&#xff1a;ArkTS开发系列之导航 (2.5.2 页面组件导航&#xff09; 本篇内容&#xff1a; 显示图片、自定义图形和画布自定义图形的学习使用 一、知识储备 1. 图片组件&#xff08;Image&#xff09; 可以展示jpg 、png 、svg 、gif等各格式的网络和本地资源文件图…

AI 开发平台(Coze)搭建小游戏《挑战花光10亿》

前言 本文讲解如何从零开始&#xff0c;使用扣子平台去搭建一个小游戏 这是成品链接&#xff1a;挑战花光10亿 - 扣子 AI Bot (coze.cn) 欢迎大家去体验一下 效果 正文 什么是coze平台&#xff1f; 扣子&#xff08;Coze&#xff09;是字节跳动推出的一站式 AI 开发平台&am…

周末设计高端企业_集团官网主题Discuz模板

风格名称: 周末设计_高端企业_集团官网 适用版本: Discuz! X3.0、X3.1、X3.2、X3.3、F1.0 风格编码: 使用语言包结构&#xff0c;适合全部编码 周末设计高端企业_集团官网主题Discuz模板