激光雷达-相机标定工具:支持普通相机和鱼眼相机的交互式标定

激光雷达-相机标定工具:支持普通相机和鱼眼相机的交互式标定

在这里插入图片描述

前言

在自动驾驶、机器人导航等领域,激光雷达和相机的标定是一个基础而重要的问题。准确的标定结果直接影响后续的感知算法性能。本文将介绍一个开源的激光雷达-相机标定工具,支持普通针孔相机和鱼眼相机,并提供交互式GUI界面进行实时参数调整。

项目介绍

功能特性

  • ✅ 支持普通针孔相机标定
  • ✅ 支持鱼眼相机标定
  • ✅ 实时可视化激光雷达点云投影
  • ✅ 交互式参数调整
  • ✅ 支持距离和强度两种显示模式
  • ✅ 重叠点过滤功能
  • ✅ 自动保存标定结果

技术栈

  • OpenCV 4.x: 图像处理和相机校正
  • PCL: 点云处理
  • Pangolin: GUI界面
  • Eigen3: 矩阵运算
  • CMake: 构建系统

安装和使用

1. 环境准备

首先确保系统已安装必要的依赖:

# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install libopencv-dev libpcl-dev libeigen3-dev libpangolin-dev cmake build-essential

2. 克隆项目

git clone https://github.com/Guoc0529/ZJU_lidar_camera_calib.git
cd ZJU_lidar_camera_calib

3. 编译项目

mkdir -p build && cd build
cmake .. && make

4. 运行标定

方法一:使用便捷脚本(推荐)
# 使用默认参数(普通相机)
./run_calib.sh# 指定相机类型
./run_calib.sh normal
./run_calib.sh fisheye# 指定所有参数
./run_calib.sh normal /path/to/image.jpg /path/to/cloud.pcd /path/to/intrinsic.json /path/to/extrinsic.json
方法二:直接运行程序
./bin/run_lidar2camera <图像路径> <点云路径> <内参JSON> <外参JSON> <相机类型>

数据格式要求

图像文件

支持常见的图像格式:.jpg, .png, .bmp

点云文件

支持PCL库支持的格式:.pcd, .ply

内参JSON文件格式

{"camera_name": {"param": {"cam_K": {"data": [[fx, 0, cx], [0, fy, cy], [0, 0, 1]]},"cam_dist": {"data": [[k1, k2, p1, p2]],"cols": 4}}}
}

外参JSON文件格式

{"sensor_name": {"param": {"sensor_calib": {"data": [[r11, r12, r13, tx], [r21, r22, r23, ty], [r31, r32, r33, tz], [0, 0, 0, 1]]}}}
}

交互式标定界面

程序启动后会显示一个GUI界面,包含以下控制选项:

显示控制

  • Intensity Color: 切换距离/强度显示模式
  • Overlap Filter: 启用/禁用重叠点过滤
  • Point Size: 调整点云显示大小

标定参数调整

  • deg step: 角度调整步长
  • t step(cm): 平移调整步长
  • fxfy scale: 焦距调整比例

外参调整按钮

  • +/- x degree: 调整X轴旋转
  • +/- y degree: 调整Y轴旋转
  • +/- z degree: 调整Z轴旋转
  • +/- x trans: 调整X轴平移
  • +/- y trans: 调整Y轴平移
  • +/- z trans: 调整Z轴平移

内参调整按钮

  • +/- fx: 调整焦距fx
  • +/- fy: 调整焦距fy

其他功能

  • Reset: 重置所有参数到初始值
  • Save Image: 保存当前标定结果

键盘快捷键

  • q: 退出程序
  • w/s: 调整Y轴平移
  • a/d: 调整X轴平移
  • z/c: 调整Z轴平移
  • r/f: 调整X轴旋转
  • t/g: 调整Y轴旋转
  • y/h: 调整Z轴旋转

相机类型选择

普通相机 (normal)

  • 使用 cv::initUndistortRectifyMap() 进行校正
  • 适用于针孔相机模型
  • 畸变参数:k1, k2, p1, p2

鱼眼相机 (fisheye)

  • 使用 cv::fisheye::initUndistortRectifyMap() 进行校正
  • 适用于鱼眼相机模型
  • 畸变参数:k1, k2, k3, k4

标定结果

程序会生成 calibration_X.txt 文件,包含:

外参矩阵

R: 旋转矩阵 (3x3)
t: 平移向量 (3x1)

内参矩阵

K: 相机内参矩阵 (3x3)

JSON格式

Extrinsic: [R11,R12,R13,tx],[R21,R22,R23,ty],[R31,R32,R33,tz],[0,0,0,1]
Intrinsic: [fx,0,cx],[0,fy,cy],[0,0,1]
Distortion: [k1,k2,p1,p2]

使用示例

示例1:普通相机标定

# 使用项目提供的示例数据
./run_calib.sh normal# 使用自定义数据
./run_calib.sh normal /path/to/image.jpg /path/to/cloud.pcd /path/to/intrinsic.json /path/to/extrinsic.json

示例2:鱼眼相机标定

# 使用鱼眼相机模式
./run_calib.sh fisheye /path/to/image.jpg /path/to/cloud.pcd /path/to/intrinsic.json /path/to/extrinsic.json

标定技巧

1. 数据准备

  • 确保图像和点云是同步采集的
  • 选择特征丰富的场景(如建筑物、道路标线等)
  • 避免纯色或纹理单一的区域

2. 初始参数设置

  • 提供合理的初始外参可以提高标定效率
  • 可以通过CAD图纸或粗略测量获得初始值
  • 内参通常可以从相机标定工具获得

3. 标定过程

  • 先调整大致的旋转和平移
  • 再微调内参(如果需要)
  • 最后进行精细调整
  • 保存多个版本的结果进行对比

4. 验证标定结果

  • 检查点云投影是否与图像特征对齐
  • 在不同距离和角度验证标定精度
  • 使用标定板进行定量评估

常见问题

Q1: 编译时出现依赖库错误

A: 确保安装了所有必要的依赖库:

sudo apt-get install libopencv-dev libpcl-dev libeigen3-dev libpangolin-dev

Q2: 运行时点云不显示

A: 检查以下几点:

  • 外参是否合理
  • 点云是否在相机视野范围内
  • ROI设置是否合适

Q3: 标定精度不够

A: 尝试以下方法:

  • 使用更多角度的数据
  • 调整初始参数
  • 选择特征更丰富的场景

Q4: 鱼眼相机校正效果不好

A: 确保:

  • 选择了正确的相机类型(fisheye)
  • 畸变参数格式正确
  • 畸变参数数量匹配

项目结构

ZJU_lidar_camera_calib/
├── src/                    # 源代码
│   └── run_lidar2camera.cpp
├── include/                # 头文件
│   ├── projector_lidar.hpp
│   ├── intrinsic_param.hpp
│   └── extrinsic_param.hpp
├── data/                   # 示例数据
├── example_data/           # 示例数据
├── CMakeLists.txt         # CMake配置
├── run_calib.sh           # 便捷运行脚本
├── test_fisheye_calib.sh  # 测试脚本
└── README.md              # 项目文档

技术原理

1. 相机模型

  • 针孔相机模型: 适用于普通相机,使用径向和切向畸变模型
  • 鱼眼相机模型: 适用于广角相机,使用鱼眼畸变模型

2. 点云投影

  1. 应用外参变换:P_camera = R * P_lidar + t
  2. 投影到图像平面:p_image = K * P_camera
  3. 应用去畸变校正
  4. 根据距离或强度进行颜色编码

3. 标定优化

  • 使用交互式界面进行手动调整
  • 实时可视化投影结果
  • 支持多种显示模式便于判断

总结

这个激光雷达-相机标定工具提供了完整的标定解决方案,支持普通相机和鱼眼相机,具有以下优势:

  1. 易用性: 提供便捷的运行脚本和详细的文档
  2. 灵活性: 支持多种相机类型和数据格式
  3. 可视化: 实时显示标定结果,便于判断
  4. 交互性: 提供丰富的控制选项和快捷键
  5. 开源: 代码完全开源,可自由修改和扩展

无论是学术研究还是工程应用,这个工具都能提供有效的支持。希望这个工具能够帮助到有激光雷达-相机标定需求的研究者和工程师。

相关链接

  • 项目地址: https://github.com/Guoc0529/ZJU_lidar_camera_calib.git
  • 问题反馈: 欢迎在GitHub上提交Issue
  • 贡献代码: 欢迎提交Pull Request
  • 在浙大标定工具的基础上改的,原始标定github地址

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

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

相关文章

linux shell从入门到精通(二)——变量操作

1.什么是变量变量在许多程序设计语言中都有定义&#xff0c;与变量相伴地有使用范围地定义。Linux Shell也不例外。变量&#xff0c;本质上就是一个键值对。例如&#xff1a;str“hello”就是将字符串值“hello”赋予键str。在str地使用范围内&#xff0c;我们都可以用str来引用…

[Linux入门] 初学者入门:Linux DNS 域名解析服务详解

目录 一、域名服务基础&#xff1a;从 “名字” 到 “地址” 的转换 1️⃣什么是域名&#xff1f; 2️⃣什么是 DNS&#xff1f; 3️⃣DNS 用 TCP 还是 UDP&#xff1f; 二、DNS 服务器&#xff1a;各司其职的 “导航站” 1️⃣根域名服务器 2️⃣顶级域名服务器 3️⃣权…

iview表单验证一直提示为空的几个原因?

1.Form上的rules是否配置正确&#xff1b; 2.Form-item的prop是否配置正确&#xff1b; 3.规则的名称和input的v-model是否对应&#xff1b; 4.验证的字段是否响应&#xff0c;新增字段使用this. $set. © 著作权归作者所有,转载或内容合作请联系作者 平台声明&#xff1…

SpringBoot3(若依框架)集成Mybatis-Plus和单元测试功能,以及问题解决

一、Mybatis-Plus集成 新增依赖到父级pom.xml&#xff0c;原先的mybatis依赖可以不动需要注意 mybatis-plus与mybatis版本之间的冲突&#xff0c;不要轻易改动依赖&#xff0c;不然分页也容易出现问题分类顶级pom.xml下面&#xff0c;如果没有引入还是出现报错&#xff0c;在co…

删除远程分支上非本分支的提交记录

要删除远程分支上非本分支的提交记录&#xff08;即主分支的提交历史&#xff09;&#xff0c;需要使用 Git 的重写历史功能。以下是完整解决方案&#xff1a; 解决方案步骤&#xff1a; 创建干净的新分支&#xff08;基于主分支最新提交&#xff09; # 切换到主分支并更新 git…

Flask input 和datalist结合

<input list"categories" name"category" id"category" class"form-control" placeholder"任务分类" required> 这段代码是一个 HTML 输入控件&#xff0c;结合了 <input> 和 <datalist>&#xff0c;用来…

嵌入式分享#27:原来GT911有两个I2C地址(全志T527)

最近在调试全志T527的触摸功能时&#xff0c;发现GT911触摸芯片的I2C地址有时是0x5d&#xff0c;有时又识别成0x14&#xff0c;不知道大家有没有遇到过类似这个情况。虽然最后使用0x5d地址调通了触摸功能&#xff0c;但是一直还是很困惑&#xff0c;为什么会出现0x14和0x5d两个…

Linux运维新人自用笔记(Rsync远程传输备份,服务端、邮箱和客户端配置、脚本)

内容全为个人理解和自查资料梳理&#xff0c;欢迎各位大神指点&#xff01;每天学习较为零散。day24一、Rsync传输文件#安装rsync#-a递归同步&#xff08;包含子目录&#xff09;保留文件权限、所有者、组、时间戳等元数据 #​​-z传输时压缩数据 #​​-v显示详细同步过程 #​​…

以 “有机” 重构增长:云集从电商平台到健康生活社区的跃迁

当电商行业陷入流量争夺的红海&#xff0c;同质化运营模式难以突破增长瓶颈时&#xff0c;云集以从精选电商到有机生活平台的战略转型&#xff0c;开辟出差异化发展路径。其转型并非凭经验决断的孤例&#xff0c;而是建立在对市场趋势的精准研判、用户需求的深度解码&#xff0…

【2025最新版】midjourney小白零基础入门到精通教程!人工智能绘图+AI绘图+AI画图,一键出图教程 (持续更新)

前言 现在市面上相关的AI绘画工具非常多&#xff0c;有6pen.art、Stable Diffusion、DALL.E、Midjourney等。 而MJ就目前而言&#xff0c;它是一款强大的人工智能工具&#xff0c;旨在帮助设计师和创意人员完成各种设计任务。 非常适合我们图像工作者&#xff0c;从 UI 设计到…

2025年渗透测试面试题总结-2025年HW(护网面试) 70(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年HW(护网面试) 70 一、自我介绍 二、同源策略 & 三大漏洞对比解析 1. 同源策略&#xff08;SOP&…

加权卡尔曼滤波

加权卡尔曼滤波融合&#xff0c;它通过给不同传感器或估计结果分配不同的权重&#xff0c;来提高状态估计的精度和可靠性。一、卡尔曼滤波1.状态方程2.观测方程其中&#xff1a;基本方程①状态一步预测②状态估计③滤波增益④一步预测均方差⑤估计均方误差二、加权卡尔曼滤波对…

【世纪龙科技】新能源汽车维护与故障诊断-汽车专业数字课程资源

在职业院校汽车专业教学中&#xff0c;理论与实践脱节、设备投入不足、学生实操能力薄弱等问题长期存在。如何让学生在有限的教学资源下掌握新能源汽车核心技术&#xff1f;如何让教师更高效地开展理实一体化教学&#xff1f;《新能源汽车维护与故障诊断》数字课程资源&#xf…

Windows Server系统安装JDK,一直卡在“应用程序正在为首次使用作准备,请稍候”

一、背景 第二次遇到这个问题了&#xff0c;但是居然没想起来之前遇到过&#xff0c;又问元宝给的答案不对&#xff0c;还没想起来之前收藏过解决方案&#xff0c;这里特别记录一下。 二、问题描述 操作系统是Windows Sever2019&#xff0c;安装JDK时卡住一直过不去&#xff0…

机器学习入门:线性回归详解与实战

线性回归&#xff08;Linear Regression&#xff09;是机器学习中最基础也最常用的算法之一&#xff0c;无论是初学者入门还是实际业务场景&#xff0c;都能看到它的身影。本文将从概念、原理到代码实现&#xff0c;带你全方位了解线性回归。一、什么是线性回归&#xff1f;简单…

第3篇:软链接 mklink /D 教程:轻量缓存目录迁移利器

我们通过诸多实践后将三种链接方案分别独立成篇&#xff0c;可以让不同需求场景的读者精准获取所需内容。下面是回顾我们文章系列策划的三篇博客标题、定位和详细大纲&#xff0c;每篇都围绕一个核心方案展开&#xff0c;具备教学性、实用性和实操性&#xff1a; &#x1f4d8;…

力扣 hot100 Day52

124. 二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉…

数据存储:OLAP vs OLTP

下面系统性地进行介绍,包括OLAP数据库的基本概念、特点、常见产品,以及它们在实际工作中的典型应用场景,最后对比与关系型数据库(OLTP)的区别。 一、OLAP数据库是什么? OLAP(Online Analytical Processing,联机分析处理)数据库,主要用于大数据量、多维度、复杂查询与…

云原生网络策略自动化在微服务架构 API 安全防护与流量管理中的应用

云原生网络策略自动化在微服务架构中的核心价值随着微服务架构在金融、电商等领域的广泛应用&#xff0c;API安全防护与流量管理已成为企业数字化转型的关键挑战。Gartner 2023年报告显示&#xff0c;83%的分布式系统因网络策略缺失导致安全事件&#xff0c;而传统静态策略配置…

无需云服务器的内网穿透方案 -- cloudflare tunnel

内网穿透 原文地址 https://docs.caolib.dpdns.org/network/cloudflare tunnel.html Cloudflare Tunnel 内网穿透工具 1.简介 1.1 介绍 官方介绍&#xff1a;Cloudflare Tunnel 为您提供了一种安全的方式&#xff0c;无需公开路由的 IP 地址即可将资源连接到 Cloudflare。使用…