相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 介绍

简介: **什么是相机与激光雷达外参标定?**就是相机坐标系和激光雷达坐标系的TF变化。位置x,y,z 欧拉角 roll,pitch,yaw,6个变量构成一个4*4的旋转变换矩阵标定的就是这个4维的旋转矩阵。标定的方法有:- 基于特征- 基于运动观测- 基于最大化互信息- 基于深度学习基于特征 的方法是根据对应特征点求解PnP问题,需要标定板来获取特征基于运动观测可以看作手眼标定问题,精度决定于相机和雷达的运动估计基于最大化互信息认为图像灰度于反射强度具有相关性基于深度学习需要长时间的训练并且泛化能力不高

@TOC

相机与激光雷达外参标定

什么是相机与激光雷达外参标定?
就是相机坐标系和激光雷达坐标系的TF变化。位置x,y,z 欧拉角 roll,pitch,yaw,6个变量构成一个4*4的旋转变换矩阵
标定的就是这个4维的旋转矩阵。

标定的方法有:

  • 基于特征
  • 基于运动观测
  • 基于最大化互信息
  • 基于深度学习

基于特征 的方法是根据对应特征点求解PnP问题,需要标定板来获取特征
基于运动观测可以看作手眼标定问题,精度决定于相机和雷达的运动估计
基于最大化互信息认为图像灰度于反射强度具有相关性
基于深度学习需要长时间的训练并且泛化能力不高

定方法有两个指标

  • 精度
  • 自动化程度

精度也就是标定的外参有多么精确,一般可以通过投影来定性的来看出来,自动化程度指的是这种方法在标定时需要进行什么操作(比如特定的数据录制要求),以及需要满足什么前提条件(比如特定的标定板)等等。

livox_camera_lidar_calibration 就是基于特征的标定方法
基于特征的方法原理也比较简单,实际上就是构建并求解一个PnP问题。

需要找到n对3d-2d点对,也就是要分别要在点云和图像中提取特征,并确定特征间的对应关系,一般选择的特征是标定板上一些特殊的位置点,比如角点。

功能包介绍

功能包名称:livox_camera_lidar_calibration
功能包使用环境: Ubuntu 64-bit 16.04

功能包功能简介:
本方案提供了一个手动校准Livox雷达和相机之间外参的方法,已经在Mid-40,Horizon和Tele-15上进行了验证。其中包含了计算相机内参,获得标定数据,优化计算外参和雷达相机融合应用相关的代码。本方案中使用了标定板角点作为标定目标物,由于Livox雷达非重复性扫描的特点,点云的密度较大,比较易于找到雷达点云中角点的准确位置。相机雷达的标定和融合也可以得到不错的结果。

环境配置及功能包安装

首先需要安装Ubuntu 16.04的 系统

然后安装 Livox SDK 和 livox_ros_driver
指令如下:

# 安装Livox_SDK
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
sudo ./third_party/apr/apr_build.sh
cd build && cmake ..
make
sudo make install

# 安装livox_ros_driver
git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/src
cd ws_livox
catkin_make

然后安装相关库的依赖,有PCL,Eigen,Ceres-solver
这三个都是常用的了,安装了可以跳过此步骤
安装方式的链接如下:
PCL 安装
Eigen安装
Ceres-solver安装

最后下载功能包

git clone https://github.com/Livox-SDK/livox_camera_lidar_calibration.git

在这里插入图片描述

放到自己的ROS工作空间下面
编译

catkin_make

在这里插入图片描述
这里在编译完后有个警告:

warning: XXX is deprecated [-Wdeprecated-declarations]

这是一句警告,简单来说就是在你代码中使用的XXX已经被弃用了。具体发生原因暂时不清楚,可能新链接的某个库对XXX,名字进行了替换

但是warning不影响make也不影响结果

有强迫症的话忍不了warning,可以打开CMakeLists.txt

把这个

set(CMAKE_CXX_FLAGS)

换成

 set(CMAKE_CXX_FLAGS "-Wno-error=deprecated-declarations -Wno-deprecated-declarations ")

功能包节点

功能包的功能较多,包含7个节点,每个节点有对应的launch文件,所有可以看launch的文件夹
在这里插入图片描述
下面简单介绍下各节点的功能:

  • cameraCalib - 标定相机内参
  • pcdTransfer - 将雷达点云rosbag转换成PCD文件
  • cornerPhoto - 获得照片角点
  • getExt1 - 计算外参节点1,只优化外参
  • getExt2 - 计算外参节点2,同时优化内参和外参
  • projectCloud - 把雷达点云投影到照片上
  • colorLidar - 雷达点云着色

准备内容

1 livox雷达

2 基于针孔原理的相机

然后需要选择相机的镜头,因为livox的雷达的视场角是不会改变的,例如livox 的avia 的视场角是 70.4° * 77.2° ,那么相机就要选一个镜头,视场角尽量和它保持一致

两者安装好之后位置关系就不要再动了,因外求的就是两者的位置关系嘛

3 黑白棋盘格

在这里插入图片描述
标定相机内参用的

4 标定板

一个矩形的,大点的(比如1m*1.5m)的标定板。
在这里插入图片描述
该功能包使用标定板的四个角点来作为目标物。

5 标定相机内参

相机内参标定的方法有很多
可以基于MATLAB标定
需要安装MATLAB来计算结果
准备20张以上的照片数据,各个角度和位置都要覆盖,拍摄的时候不要距离太近(3米左右)
然后使用
使用MATLAB中的cameraCalibrator工具,经过计算后可以得到如下结果,我们需要第1,2和11个数据
在这里插入图片描述
在功能包中也有一个相机标定的节点可以使用
配置cameraCalib.launch中对应的路径和参数,默认是把照片数据放在data/camera/photos下,然后在data/camera/in.txt中写入所有需要使用的照片名称
输入指令开始标定

roslaunch camera_lidar_calibration cameraCalib.launch

标定结果中会保存在data/camera/result.txt中,包括重投影误差,内参矩阵和畸变纠正参数。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
9月前
|
传感器 Ubuntu 算法
【6. 激光雷达接入ROS】(1)
【6. 激光雷达接入ROS】(1)
146 0
|
数据采集 数据可视化 Ubuntu
相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 使用方法
该功能包提供了一个手动校准Livox雷达和相机之间外参的方法,已经在Mid-40,Horizon和Tele-15上进行了验证。其中包含了计算相机内参,获得标定数据,优化计算外参和雷达相机融合应用相关的代码。本方案中使用了标定板角点作为标定目标物,由于Livox雷达非重复性扫描的特点,点云的密度较大,比较易于找到雷达点云中角点的准确位置。相机雷达的标定和融合也可以得到不错的结果。
相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 使用方法
|
8月前
ROS创建工作空间添加包并编译
ROS创建工作空间添加包并编译
95 0
|
9月前
|
Ubuntu 机器人 C++
【7. ROS 中的 IMU 惯性测量单元消息包】
【7. ROS 中的 IMU 惯性测量单元消息包】
293 0
|
9月前
|
传感器 机器人 C++
【6. 激光雷达接入ROS】(2)
【6. 激光雷达接入ROS】(2)
125 0
ROS学习-编译Package包
ROS学习-编译Package包
88 0
|
Unix
ROS学习-创建一个Package包
ROS学习-创建一个Package包
127 0
ROS——深度图转换伪面阵激光——depthimage_to_laserscan 功能包
ROS——深度图转换伪面阵激光——depthimage_to_laserscan 功能包
ROS——深度图转换伪面阵激光——depthimage_to_laserscan 功能包
在ROS 中 功能包 中将类的函数定义 与 声明 分开 文件写 用main.cpp 调用 如何配置 CmakeList.txt
在ROS 中 功能包 中将类的函数定义 与 声明 分开 文件写 用main.cpp 调用 如何配置 CmakeList.txt
在ROS 中 功能包 中将类的函数定义  与 声明 分开 文件写  用main.cpp 调用  如何配置  CmakeList.txt
|
开发工具 git
ROS 环境下 安装 turtlebot3 功能包及其仿真包 并测试 —— 全流程(报错及解决)
ROS 环境下 安装 turtlebot3 功能包及其仿真包 并测试 —— 全流程(报错及解决)
ROS 环境下 安装 turtlebot3 功能包及其仿真包 并测试   —— 全流程(报错及解决)

推荐镜像

更多