日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Livox Lidar+海康Camera实时生成彩色点云

發布時間:2023/12/20 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Livox Lidar+海康Camera实时生成彩色点云 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Livox Lidar? + HIKROBOT Camera系列

最近在開發相機和激光雷達融合的slam算法,主要用于三維重建,想實時的得到彩色點云地圖,傳感器選擇了海康威視的工業相機和大疆的固態激光雷達。

海康Camera MVS Linux SDK二次開發封裝ROS packge過程記錄(c++)

Livox Lidar+海康Camera實時生成彩色點云

Livox Lidar+海康Camera實時三維重建生成RGB彩色點云地圖


前言

大部分基于點云的三維重建算法,輸出的mesh或點云都是不帶rgb信息,我希望重建后的地圖是帶rgb信息的,因為不論是為了在重建的地圖上做分割(引入紋理信息)還是人的直接觀測(直觀比對),rgb信息都很重要。

已封裝為Ros package,地址:https://github.com/luckyluckydadada/LIVOX_COLOR

硬件環境

  • 一個livox的激光雷達
  • 一個hikrobot的工業相機
  • 一臺linux系統的電腦

軟件環境

我的測試環境是:

  • Ubuntu18.04
  • ros(melodic)
  • livox sdk(https://github.com/Livox-SDK/Livox-SDK)
  • livox ros driver(https://github.com/Livox-SDK/livox_ros_driver)
  • hikrobot camera sdk (mvs sdk 安裝參考海康Camera MVS Linux SDK二次開發ROS packge過程記錄(c++))??
  • hikrobot camera ros driver?(camera ros driver是我自己開發的,安裝參考海康Camera MVS Linux SDK二次開發ROS packge過程記錄(c++))??

聯合標定

我們要得到兩個傳感器的坐標系的變換關系,以及相機的內參,才可以將相機的彩色信息賦值給點云。

標定過程參考livox的官方文檔:https://github.com/Livox-SDK/livox_camera_lidar_calibration,文檔對標定過程描述比較清晰,下面是對文檔中沒說明的做一些補充。

  • 對相機內參標定時,要根據自己使用的標定A4紙修改cameraCalib.launch中的row_number、col_number,number不是格子的個數而是交點的個數(下圖是橫六數九)。width和height是格子的大小,單位是mm,但是感覺沒什么用。
  • 在獲得標定板(泡棉板)的四個角點時,跳出的窗口并沒有顯示像素值,我將每副去畸變的照片都save下來,用windows的畫圖軟件找的角點的像素值。
    只需在corner_photo.cpp:101行增加 cv::imwrite(photo_path+".bak.bmp",src_img); 即可。
    注意不要在原照片上直接采集角點,一定要先運行這個cpp對應的launch,得到去畸變后的照片,再在新的照片上獲得像素值,再次運行這個launch執行后續操作。

  • 修改cornerPhoto.launch文件(可選操作):

    <?xml version="1.0" encoding="UTF-8"?> <launch><arg name="arg1" default="$(find camera_lidar_calibration)/../../data/photo/0.bmp"/><param name="intrinsic_path" value="$(find camera_lidar_calibration)/../../data/parameters/intrinsic.txt" /> <!-- intrinsic file --><param name="input_photo_path" value="$(arg arg1)" /> <!-- photo to find the corner --><param name="ouput_path" value="$(find camera_lidar_calibration)/../../data/corner_photo.txt" /> <!-- file to save the photo corner --><node pkg="camera_lidar_calibration" name="cornerPhoto" type="cornerPhoto" output="screen"></node></launch>

    修改后可以直接在命令行指定文件:roslaunch camera_lidar_calibration cornerPhoto.launch arg1:=/home/yijiankeji/data/photo/0.bmp?

  • pcdTransfer.launch中只有一個參數要修改:data_num,修改為你錄制的bag包的數量。

  • 生成彩色點云

    進過標定得到intrinsic.txt和extrinsic.txt文件后就可以使用我的ros包進行彩色點云的生成了。

    安裝過程參看:https://github.com/luckyluckydadada/LIVOX_COLOR

    需要注意的是catkin_make 執行前需要修改main.cpp中的void CalibrationData(void)函數,將你的標定結果寫入對應的位置。

    例如:

    // extrinsic// 0.0451423 -0.998715 0.0230348 0.00925535// 0.0558064 -0.0205011 -0.998231 0.0499455// 0.997421 0.046348 0.0548092 0.42788// 0 0 0 1extrinsicMat_RT.at<double>(0, 0) = 0.0451423;extrinsicMat_RT.at<double>(0, 1) = -0.998715;extrinsicMat_RT.at<double>(0, 2) = 0.0230348;extrinsicMat_RT.at<double>(0, 3) = 0.00925535;extrinsicMat_RT.at<double>(1, 0) = 0.0558064;extrinsicMat_RT.at<double>(1, 1) = -0.0205011;extrinsicMat_RT.at<double>(1, 2) = -0.998231;extrinsicMat_RT.at<double>(1, 3) = 0.0499455;extrinsicMat_RT.at<double>(2, 0) = 0.997421;extrinsicMat_RT.at<double>(2, 1) = 0.046348;extrinsicMat_RT.at<double>(2, 2) = 0.0548092;extrinsicMat_RT.at<double>(2, 3) = 0.42788;extrinsicMat_RT.at<double>(3, 0) = 0.0;extrinsicMat_RT.at<double>(3, 1) = 0.0;extrinsicMat_RT.at<double>(3, 2) = 0.0;extrinsicMat_RT.at<double>(3, 3) = 1.0;// intrinsic// 2875.097131590431 0 1369.668059923329;// 0 2896.420251825658 1114.244269170673;// 0 0 1// ditortion// -0.008326874784366894 -0.06967846599874981 0.006185220615585947 -0.01133018681519818 0.5462976722456516intrisicMat.at<double>(0, 0) = intrisic.at<double>(0, 0) = 2875.097131590431;intrisicMat.at<double>(0, 1) = 0.000000e+00;intrisicMat.at<double>(0, 2) = intrisic.at<double>(0, 2) = 1369.668059923329;intrisicMat.at<double>(0, 3) = 0.000000e+00;intrisicMat.at<double>(1, 0) = 0.000000e+00;intrisicMat.at<double>(1, 1) = intrisic.at<double>(1, 1) = 2896.420251825658;intrisicMat.at<double>(1, 2) = intrisic.at<double>(1, 2) = 1114.244269170673;intrisicMat.at<double>(1, 3) = 0.000000e+00;intrisicMat.at<double>(2, 0) = 0.000000e+00;intrisicMat.at<double>(2, 1) = 0.000000e+00;intrisicMat.at<double>(2, 2) = 1.000000e+00;intrisicMat.at<double>(2, 3) = 0.000000e+00;distCoeffs.at<double>(0) = -0.008326874784366894;distCoeffs.at<double>(1) = -0.06967846599874981;distCoeffs.at<double>(2) = 0.006185220615585947;distCoeffs.at<double>(3) = -0.01133018681519818;distCoeffs.at<double>(4) = 0.5462976722456516;

    彩色點云對比原始livox點云

    原始livox:

    color livox:

    總結

    以上是生活随笔為你收集整理的Livox Lidar+海康Camera实时生成彩色点云的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。