利用Intel Realsense D455 进行 2d Laser Camera标定总结

所有连接请右键在新建标签页中打开,直接点击会跳到别人的页面,不知道CSDN抽什么风
原文地址
原Github地址

注意如果你使用的是Hokuyo雷达 ,Hokuyo雷达配置
可以直接按照原文进行配置,不会出现下面我遇到的各种问题

修改源码后的Github地址

Intel RealSense SDK 安装

Register the server’s public key:

sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE

Add the server to the list of repositories:

sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u

Install the libraries (see section below if upgrading packages):

sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils

run:

realsense-viewer

RealSense ROS 包

Github地址
请自行下载,新建ROS工作空间或者利用现有的工作空间,下载的源码移入/src,然后编译

或者

sudo apt-get install ros-$ROS_DISTRO-realsense2-camera

启动相机的命令
运行

roslaunch realsense2_camera rs_camera.launch

激光雷达

请根据自己使用的雷达型号使用对应的ROS包,并将激光雷达的正方向朝向标定板安置

我使用的是思岚A2 雷达,启动雷达的命令
运行

roslaunch rplidar_ros rplidar.launch

前期准备

1.制作标定板

可以选择多 apriltag 的标定板 ( kalibr_tag.pdf ) 或者自己打印一个 apriltag 做标定板(apriltag.pdf)。

原作者采用的是多apriltag 的标定板,尺寸应该是A0纸,因为kalibr_tag.pdf的实际尺寸是80cm x 80cm的

2.修改Config文件

请注意:确定你所使用的相机的模型是哪一种,常用的有针孔相机(Pinhole)和鱼眼相机(Kannala-brandt)。

如果你所使用的相机模型为针孔相机(Pinhole),请将config/calibra_config_pinhole.yaml中的内容覆盖到config/calibra_config.yaml中,并修改config/calibra_config.yaml中的以下参数

1)savePath::后面标定结果的保存位置
2)bag_path:录制的bag数据包的保存位置,默认在/home/用户名/路径下
3)scan_topic_name:修改为 /scan
4)img_topic_name:修改为 /camera/color/image_raw
5)tag_type:1:多 apriltag 的标定板 
		     2:单 apriltag 的标定板 
6)tag_size:apriltag 的边长
7)tag_spacing:apriltag之间的间距/apriltag 的边长
8)black_border:1:单apriltag 的标定板
				 2:多apriltag 的标定板

在这里插入图片描述

9)model_type:PINHOLE
10)camera_name: cam0
11)image_width: 1280
12)image_height: 720
13)distortion_parameters:
			k1:
			k2:
			k3:
			k4:
14)projection_parameters:
			fx:为相机内参K中的fx参数
			fy:为相机内参K中的fy参数
			cx:为相机内参K中的cx参数
			cy:为相机内参K中的cy参数

realsense相机参数官方已经标定好了,可以通过订阅一个ROS节点来获得,运行

rostopic echo /camera/color/camera_info

就可以获得相机参数K 和 D 以及其他的参数

内参K :
在这里插入图片描述

3.录制bag数据

启动rviz,根据话题添加可视化,选择/camera/color/image_raw 中的Image 和 /scan 中的 LaserScan
在这里插入图片描述
根据 rviz 中显示的相机画面,调整标定板在相机中的位置。

录制数据时不应只平移标定板,还应该进行角度旋转,包括水平轴和竖直轴
确保标定板被相机完全捕捉到,并且同时确保雷达激光点能够扫描到标定板的下半部。

但在实际录制过程中,无法保证能够有效控制距离,所以如果后续程序运行出现异常,请根据异常结果和代码寻找可能的原因,并重新录制数据

大致位置请参考下图,注意该图片并不是此步骤得到的

在这里插入图片描述

然后输入以下代码 ,记录雷达和相机数据

rosbag record /scan /camera/color/image_raw

根据rosbag录制的数据名称,修改calibra_config.yaml中的bagPath参数

标定开始

位姿计算

运行

roslaunch lasercamera_ros kalibra_apriltag.launch

之后会出现如上图所示的窗口,注意XYZ轴的显示是否正常,如果不正常,可能你的参数文件中相机内参没有配置正确。

标定板位置检测 以及 变换矩阵计算

运行

roslaunch lasercamera_ros calibra_offline.launch

如果没有什么问题的话,会出现下图所示的效果

在这里插入图片描述
但是,大概率不会显示上图中的红线,也就是标定板的位置。或者标定板确实被标红了,但是其他地方的激光点也被误标记为红色。

这里讲一下检测步骤:
1):将所有激光数据经过简单变换为平面坐标,并在窗口中以蓝色点显示
2):检测坐标满足一定条件(包括两点之间的距离,点到原点也就是激光雷达的位置,具体请查阅代码。代码位置在calibr_offline.cpp中 的 AutoGetLinePts 函数中)的连续点段,并对点段进行扩充,然后以绿色点显示
3):从上面的点段中,找到最长的点段作为最优的直线段,并以红色点显示

为了准确找到标定板上的激光点,需要修改代码,可以简单粗暴的将标定板上的点全部作为最优直线段输出。或者对原有的判断条件进行修改,使代码适应录制的数据。

变换矩阵验证

运行

roslaunch lasercamcal_ros debug.launch 

如果变换矩阵计算正确的话,理想情况应该如下图所示:

在这里插入图片描述

但是,我们在标定的过程中却发现,图片中会出现相机视野中不应该存在的点,如下图

在这里插入图片描述
可以看到,有两条线,在debug过程中发现,验证代码应该是将相机视野背面的点也显示在了图片中,究其原因,大概是原作者采用的激光雷达数据仅包含相机相机前方的激光点,所以我们对验证代码进行了修改,只保留相机前方的点。验证结果如下:

在这里插入图片描述

重新录制了数据
结果如下
在这里插入图片描述

并将时间戳差值(calibr_offline.cpp中的min_dt值)从20ms修改为50ms ,结果如下图
在这里插入图片描述
时间戳差值修改为100ms,结果如下,接近完美
在这里插入图片描述

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值