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实时生成彩色点云相关推荐
- Livox Lidar+海康Camera 基于loam的实时三维重建生成RGB彩色点云
Livox Lidar + HIKROBOT Camera系列 最近在开发相机和激光雷达融合的slam算法,主要用于三维重建,想实时的得到彩色点云地图,传感器选择了海康威视的工业相机和大疆的固态激光 ...
- 海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++)
Livox Lidar + HIKROBOT Camera系列 最近在开发相机和激光雷达融合的slam算法,主要用于三维重建,想实时的得到彩色点云地图,传感器选择了海康威视的工业相机和大疆的固态激光 ...
- 浏览器显示海康摄像头实时预览画面纯前端解决方案
浏览器显示海康摄像头实时预览画面纯前端解决方案 将海康设备的 rtsp 协议视频流通过 ffmpeg 转码为 flv 实时视频流,并将实时视频流通过 express 服务生成 http 长链接或 ws ...
- 调用海康摄像头实时识别数字牌数字
项目场景: 调用海康摄像头实时识别数字牌数字 前言 项目所需,调用网络摄像头来完成对一个数字牌的识别,用模板匹配的方法分离出数字 用VS2015+OPENCV3.4.3完成 一.调用摄像头 首先在VS ...
- 海康摄像头实时显示与字符叠加详解
1.说明 文章详细叙述了海康摄像头的两种实时显示方法--基于SDK 解码显示和基于数据流回调显示,并且讲述了这在两种显示方法下如何往画面添加字符和图像,最后比较了这两种方法的优劣.文章全程给以详细的程 ...
- vue webRTC播放海康摄像头实时画面延迟1s内
最终效果 主要参考地址,:https://blog.csdn.net/qq_45777115/article/details/118054927?spm=1001.2014.3001.5502 htt ...
- ffmpeg编译gb28181_RTSP/GB28181协议/海康SDK/Ehome协议视频上云网关EasyCVR视频平台在linux环境下ffmpeg源码单步调试环境搭建...
目前TSINGSEE青犀视频研发的视频上云服务平台EasyCVR已经可集成海康EHome私有协议,并且在前文中我也跟大家讲过EHome协议的配置和调用流程,有兴趣的可以阅读一下:配置及协议介绍.Eho ...
- 前端如何显示服务器摄像头,浏览器显示海康摄像头实时预览画面纯前端解决方案...
php 实时输出内容到浏览器 php 实时输出内容到浏览器 当你在处理一个过程需要耗时很长,但你又需要适时的知道程序当前的处理状况的时候,该怎么办呢?下面就分享一下如何使用php及时的输出当前结果到浏 ...
- python摄像头推流_海康视频实时推流学习笔记
学习目的是在Python里调取网络摄像头实时显示视频流,方便日后处理. 我最开始的想法是用萤石开发平台下载的sdk自带的demo,在Python里调用C++的程序,但是在运行的过程中返回错误,NET- ...
最新文章
- Python工程师学习笔记
- 2、内核的配置和移植
- LiveData学习
- 分级显示HTML,SSM框架下,以tree结构分级显示数据
- vmware-安装vmware tools教程190915
- ROS1节点,消息,话题,服务的介绍
- c 按输入的字母来输出对应效果
- 一次新业务接入联调及上线支持的出差经验小结
- winhex万能恢复磁盘数据
- 软件测试面试两分钟自我介绍
- [dataTables使用的坑]requested unknown parameter 'XXX' for row xx, column xx
- acm竞赛java很少,Java多线程在ACM竞赛中的应用
- 使用python获取win10锁屏照片
- php.c drcom,Drcom (简体中文)
- 微信支付出现的错误提示及解决方法
- 使用AVplayer播放在线音频遇到的问题
- C语言中,1U<<29的意思
- mysql match against_mysql全文模糊搜索MATCH AGAINST方法
- 小米10000MAH充电宝四个灯同时闪烁故障维修
- c语言for循环中i,C语言for循环语句中a[i][j]和a[j][i]有什么区别
热门文章
- 上期所API头文件二、ThostFtdcUserApiDataType.h---API常量及类型的定义(源代码6.3.19版)
- 自己动手写DSDT系列教程1-ASL(ACPI Source Language)基础篇
- 解决IDM试用到期还不想使用破解版的方法
- 洞悉数据分析之驾驶领导舱
- Predicting Malicious Behavior: Tools and Techniques for Ensuring Global Security
- php 搜索附近人及SQL语句的写法
- sql中去除重复的数据
- Zbrush 4R7中镜像教程
- 认识LoRa以及LoRaWAN
- 富土变频器服务器显示,富士变频器维修故障代码总结与原因