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

雷达标定与解析

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

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

相关文章:

雷达标定与解析

融合雷达与解析雷达数据的相关代码。感谢开源社区的贡献。以下代码继承了很多人的工作。 如果是单雷达&#xff1a; 直接进行标定&#xff0c;所以就是接收相关的话题然后发布。 lidar_calibration_params.yaml&#xff1a; calibration:在这个接口里面x_offset: 0.0y_offset:…...

养殖自动化温控系统:现代养殖场的智能守护神

现代农业养殖业中&#xff0c;养殖自动化温控系统已经成为提高生产效率和保障动物福利的关键技术之一。本篇文章将深入介绍养殖自动化温控系统的原理、组成、优势及其在不同类型养殖场中的应用实例&#xff0c;并展望该技术的未来发展。 一、养殖自动化温控系统概述 养殖自动…...

用python打印——九九乘法表2

for i in range(1, 10):for j in range(1, i 1):print(f"{j} * {i} {j * i}\t", end)j 1print()外层的 for 循环从 1 到 9 遍历 i。对于每个 i&#xff0c;内层的 for 循环从 1 到 i 遍历 j。在每次循环中&#xff0c;打印出 j 乘以 i 的结果&#xff0c;并以制表…...

如何系统学习机器学习?

我不是计算机专业&#xff0c;第一次接触机器学习还是在研一的时候&#xff0c;当时是看到机器学习可以做号码识别&#xff0c;就觉得好厉害&#xff0c;想学这个。 首次了解到Python这门语言&#xff0c;知道了机器学习可以做什么后&#xff0c;就感觉打开了新世界一样。再后来…...

Qt:1.杂谈

1.前端开发和Qt&#xff1a; 前端开发可以分为网页开发、移动端开发、桌面应用开发。Qt这个技术&#xff0c;是来开发电脑桌面应用程序的&#xff0c;也就是客户端程序的开发。属于比较经典的前端开发体系下。客户端开发的任务&#xff1a;编写和用户交互的界面或者应用程序。大…...

AI视频模型Sora核心功能以及应用场景

随着人工智能技术的飞速发展&#xff0c;AI在视频处理和生成领域的应用正变得越来越广泛。Sora&#xff0c;作为新一代AI视频模型&#xff0c;展示了前所未有的潜力和创新能力。本文将深入探讨Sora的功能、应用场景以及它所带来的革命性变化。 一、Sora的核心功能 1.1 视频生…...

面试-细聊synchronized

1.线程安全问题的主要诱因&#xff1a; 存在多条共享数据(临界资源) 存在多条线程共同操作这些共享数据 解决问题的根本方法&#xff1a; 同一时刻有且仅有一个线程在操作共享数据&#xff0c;其他线程必须等到该线程处理完数据后在对共享数据进行操作。 2.synchroized锁 分…...

AI降重新突破:chatgpt降重工具在学术论文中的应用与效果

论文降重一直是困扰各界毕业生的“拦路虎”&#xff0c;还不容易熬过修改的苦&#xff0c;又要迎来降重的痛。 其实想要给论文降重达标&#xff0c;我有一些独家秘诀。话不多说直接上干货&#xff01; 1、同义词改写&#xff08;针对整段整句重复&#xff09; 这是最靠谱也是…...

Spring学习02-[Spring容器核心技术IOC学习]

Spring容器核心技术IOC学习 什么是bean?如何配置bean?Component方式bean配合配置类的方式import导入方式 什么是bean? 被Spring管理的对象就是bean,和普通对象的区别就是里面bean对象里面的属性也被注入了。 如何配置bean? Component方式、bean配合配置类的方式、import…...

2024上海CDIE 参展预告 | 一站式云原生数字化平台已成趋势

为什么企业需要进行数字化转型&#xff1f;大家都在讨论的数字化转型面临哪些困境&#xff1f;2024.6.25-26 CDIE数字化创新博览会现场&#xff0c;展位【A18】&#xff0c;期待与您相遇&#xff0c;共同探讨企业如何利用数字化技术驱动业务增长。 一、展会介绍——CDIE数字化…...

高考专业组 07组 08组 武汉大学

武汉大学的招生都什么废物点心&#xff0c;搜个专业组都没官方解释&#xff01; 07组&#xff1a;理学&#xff0c;详见下表专业代码07xxxx&#xff0c;例如数学、物理、化学 08组&#xff1a;工学&#xff0c;详见下表专业代码08xxxx&#xff0c;例如机械、电子信息、自动化、…...

解析JavaScript中逻辑运算符和||的返回值机制

本文主要内容&#xff1a;了解逻辑运算符 &&&#xff08;逻辑与&#xff09;和 ||&#xff08;逻辑或&#xff09;的返回值。 在JavaScript中&#xff0c;逻辑运算符 &&&#xff08;逻辑与&#xff09;和 ||&#xff08;逻辑或&#xff09;的返回值可能并不总…...

Java中的数据结构与算法探秘

Java中的数据结构与算法探秘 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 数据结构与算法是计算机科学的基础&#xff0c;对于Java程序员来说&#x…...

AST反混淆实战|嵌套的赋值语句通用还原处理

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请联系作者立即删除&#xff01; 1.混淆代码 下面的这段代码是来自px3验证码核心混淆代码: function _u…...

Unity的ScrollView滚动视图复用

发现问题 在游戏开发中有一个常见的需求&#xff0c;就是需要在屏幕显示多个&#xff08;多达上百&#xff09;显示item&#xff0c;然后用户用手指滚动视图可以选择需要查看的item。 现在的情况是在100个data的时候&#xff0c;Unity引擎是直接创建出对应的100个显示item。 …...

详解Spring AOP(二)

目录 1.切点表达式 1.1execution表达式 1.2 annotation 1.2.1自定义注解MyAspect 1.2.3添加自定义注解 2.Sping AOP原理 2.1代理模式 2.1.1静态代理 2.1.2动态代理 2.1.3JDK动态代理 2.1.4CGLIB动态代理 3.总结 承接上文&#xff1a;详解Spring AOP&#xff08;一&…...

sql-analysis

文章目录 痛点&#xff1a; 1、无法提前发现慢sql&#xff0c;可能恶化为慢sql的语句 2、线上出现慢sql后&#xff0c;无法快速止损 后果&#xff1a;一般是以响应时间来发现慢sql&#xff0c;这时候已经对业务产生了一定影响&#xff0c;这时候就要改代码重新发布上线或者改数…...

后台管理台字典localStorage缓存删除

localStorage里存放了如以下dictItems_开头的字典数据&#xff0c;localStorage缓存是没有过期时间的&#xff0c;需要手动删除。同时localStorage里还存有其他不需要删除的数据。 这里的方案是遍历localStorage&#xff0c;利用正则和所有key进行匹配&#xff0c;匹配到dict…...

计算机毕业设计PySpark+Hadoop招聘推荐系统 招聘大数据 招聘数据分析 招聘可视化 大数据毕业设计 大数据毕设

1. 管理端&#xff1a; 带有职位的增删改查功能&#xff0c;评论功能是针对新闻模块的&#xff0c;类似新闻大数据的实现 2. 网站端&#xff1a; python / java 协同过滤推荐算法 / 下载职位数据表收费1元每条 / 账户充值 / 短信验证码修改密码 / 身份证识别 / 多条件搜索 3.…...

.Net预定义的泛型委托

我们每次要使用一个委托前&#xff0c;都需要自定义这个委托类型&#xff0c;声明其参数和返回值&#xff0c;然后才能实例化委托类型的对象、最后调用委托对象。 为了简化这个过程&#xff0c;.Net预定义了Func<T>委托、Action<T>委托类型和Predicate<T>&a…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...