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,文档对标定过程描述比较清晰,下面是对文档中没说明的做一些补充。

  1. 对相机内参标定时,要根据自己使用的标定A4纸修改cameraCalib.launch中的row_number、col_number,number不是格子的个数而是交点的个数(下图是横六数九)。width和height是格子的大小,单位是mm,但是感觉没什么用。
  2. 在获得标定板(泡棉板)的四个角点时,跳出的窗口并没有显示像素值,我将每副去畸变的照片都save下来,用windows的画图软件找的角点的像素值。
    只需在corner_photo.cpp:101行增加 cv::imwrite(photo_path+".bak.bmp",src_img); 即可。
    注意不要在原照片上直接采集角点,一定要先运行这个cpp对应的launch,得到去畸变后的照片,再在新的照片上获得像素值,再次运行这个launch执行后续操作。

  3. 修改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

  4. 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实时生成彩色点云相关推荐

  1. Livox Lidar+海康Camera 基于loam的实时三维重建生成RGB彩色点云

    Livox Lidar  + HIKROBOT Camera系列 最近在开发相机和激光雷达融合的slam算法,主要用于三维重建,想实时的得到彩色点云地图,传感器选择了海康威视的工业相机和大疆的固态激光 ...

  2. 海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++)

    Livox Lidar  + HIKROBOT Camera系列 最近在开发相机和激光雷达融合的slam算法,主要用于三维重建,想实时的得到彩色点云地图,传感器选择了海康威视的工业相机和大疆的固态激光 ...

  3. 浏览器显示海康摄像头实时预览画面纯前端解决方案

    浏览器显示海康摄像头实时预览画面纯前端解决方案 将海康设备的 rtsp 协议视频流通过 ffmpeg 转码为 flv 实时视频流,并将实时视频流通过 express 服务生成 http 长链接或 ws ...

  4. 调用海康摄像头实时识别数字牌数字

    项目场景: 调用海康摄像头实时识别数字牌数字 前言 项目所需,调用网络摄像头来完成对一个数字牌的识别,用模板匹配的方法分离出数字 用VS2015+OPENCV3.4.3完成 一.调用摄像头 首先在VS ...

  5. 海康摄像头实时显示与字符叠加详解

    1.说明 文章详细叙述了海康摄像头的两种实时显示方法--基于SDK 解码显示和基于数据流回调显示,并且讲述了这在两种显示方法下如何往画面添加字符和图像,最后比较了这两种方法的优劣.文章全程给以详细的程 ...

  6. vue webRTC播放海康摄像头实时画面延迟1s内

    最终效果 主要参考地址,:https://blog.csdn.net/qq_45777115/article/details/118054927?spm=1001.2014.3001.5502 htt ...

  7. ffmpeg编译gb28181_RTSP/GB28181协议/海康SDK/Ehome协议视频上云网关EasyCVR视频平台在linux环境下ffmpeg源码单步调试环境搭建...

    目前TSINGSEE青犀视频研发的视频上云服务平台EasyCVR已经可集成海康EHome私有协议,并且在前文中我也跟大家讲过EHome协议的配置和调用流程,有兴趣的可以阅读一下:配置及协议介绍.Eho ...

  8. 前端如何显示服务器摄像头,浏览器显示海康摄像头实时预览画面纯前端解决方案...

    php 实时输出内容到浏览器 php 实时输出内容到浏览器 当你在处理一个过程需要耗时很长,但你又需要适时的知道程序当前的处理状况的时候,该怎么办呢?下面就分享一下如何使用php及时的输出当前结果到浏 ...

  9. python摄像头推流_海康视频实时推流学习笔记

    学习目的是在Python里调取网络摄像头实时显示视频流,方便日后处理. 我最开始的想法是用萤石开发平台下载的sdk自带的demo,在Python里调用C++的程序,但是在运行的过程中返回错误,NET- ...

最新文章

  1. Python工程师学习笔记
  2. 2、内核的配置和移植
  3. LiveData学习
  4. 分级显示HTML,SSM框架下,以tree结构分级显示数据
  5. vmware-安装vmware tools教程190915
  6. ROS1节点,消息,话题,服务的介绍
  7. c 按输入的字母来输出对应效果
  8. 一次新业务接入联调及上线支持的出差经验小结
  9. winhex万能恢复磁盘数据
  10. 软件测试面试两分钟自我介绍
  11. [dataTables使用的坑]requested unknown parameter 'XXX' for row xx, column xx
  12. acm竞赛java很少,Java多线程在ACM竞赛中的应用
  13. 使用python获取win10锁屏照片
  14. php.c drcom,Drcom (简体中文)
  15. 微信支付出现的错误提示及解决方法
  16. 使用AVplayer播放在线音频遇到的问题
  17. C语言中,1U<<29的意思
  18. mysql match against_mysql全文模糊搜索MATCH AGAINST方法
  19. 小米10000MAH充电宝四个灯同时闪烁故障维修
  20. c语言for循环中i,C语言for循环语句中a[i][j]和a[j][i]有什么区别

热门文章

  1. 上期所API头文件二、ThostFtdcUserApiDataType.h---API常量及类型的定义(源代码6.3.19版)
  2. 自己动手写DSDT系列教程1-ASL(ACPI Source Language)基础篇
  3. 解决IDM试用到期还不想使用破解版的方法
  4. 洞悉数据分析之驾驶领导舱
  5. Predicting Malicious Behavior: Tools and Techniques for Ensuring Global Security
  6. php 搜索附近人及SQL语句的写法
  7. sql中去除重复的数据
  8. Zbrush 4R7中镜像教程
  9. 认识LoRa以及LoRaWAN
  10. 富土变频器服务器显示,富士变频器维修故障代码总结与原因