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

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

相机与激光雷达外参标定

什么是相机与激光雷达外参标定?
就是相机坐标系和激光雷达坐标系的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中,包括重投影误差,内参矩阵和畸变纠正参数。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
2月前
|
机器人 C++ Python
ROS2教程 02 功能包
本文是关于ROS2(机器人操作系统2)中功能包(package)管理的教程,介绍了如何检查功能包的依赖、创建新功能包、列出可执行文件、列出所有功能包、查询功能包的位置和描述信息,以及为C++和Python功能包配置必要的文件。
63 0
|
2月前
|
传感器 机器人 测试技术
ROS相机内参标定详细步骤指南
本文是关于ROS相机内参标定的详细步骤指南,包括了标定的目的、原理、所需材料、具体操作流程以及标定结果的分析。文章以Ubuntu20.04和ROS1 Noetic为测试环境,适用于单目RGB相机的内参标定,使用ros-noetic-camera-calibration工具包进行操作,并提供了标定过程中的注意事项和建议。
100 1
ROS相机内参标定详细步骤指南
|
2月前
|
存储 Ubuntu 计算机视觉
使用ros标定相机的内参和外参
使用ros标定相机的内参和外参
36 2
|
2月前
|
Ubuntu Shell C++
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
53 1
|
2月前
|
Ubuntu 机器人 测试技术
奥比中光 Femto Bolt相机ROS配置
这篇文章介绍了奥比中光Femto Bolt相机在ROS1 Noetic和ROS2 Humble环境下的配置过程,包括自动脚本和手动配置方法,适用于Ubuntu 20.04/22.04系统和Jetson Orin平台。
66 0
奥比中光 Femto Bolt相机ROS配置
|
2月前
|
机器人 Shell 开发者
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
这篇文章是关于ROS2(Robot Operating System 2)中功能包、依赖管理、工作空间配置和编译的教程,涵盖了ROS2工作空间的概念、如何获取和安装功能包的依赖、构建工作空间的步骤,以及如何创建和管理ROS2功能包,包括使用命令行工具对功能包进行操作的方法。
158 0
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
|
2月前
|
存储 缓存
02 ROS创建工作空间和功能包
如何在ROS中创建工作空间和功能包,包括初始化工作空间、编译、设置环境变量以及使用`catkin_create_pkg`创建新功能包的步骤。
34 1
|
Ubuntu Linux
ROS利用ros-kinetic-serial包与下位机串口通信
ROS利用ros-kinetic-serial包与下位机串口通信
200 0
|
5月前
|
传感器 人工智能 算法
ROS机器人操作系统
ROS机器人操作系统
152 1
|
4月前
|
机器学习/深度学习 传感器 算法
强化学习(RL)在机器人领域的应用,尤其是结合ROS(Robot Operating System)和Gazebo(机器人仿真环境)
强化学习(RL)在机器人领域的应用,尤其是结合ROS(Robot Operating System)和Gazebo(机器人仿真环境)
165 2

推荐镜像

更多