激光雷達-相機標定工具:支持普通相機和魚眼相機的交互式標定

激光雷達-相機標定工具:支持普通相機和魚眼相機的交互式標定

在這里插入圖片描述

前言

在自動駕駛、機器人導航等領域,激光雷達和相機的標定是一個基礎而重要的問題。準確的標定結果直接影響后續的感知算法性能。本文將介紹一個開源的激光雷達-相機標定工具,支持普通針孔相機和魚眼相機,并提供交互式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
英文地址,請注明出處:http://en.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。使用…