相机、雷达标定工具,以及雷达自动标定的思路_相机雷达标定
本篇我们来看一下自动驾驶传感器配置一个非常重要的模块,也就是传感器的标定。这里主要是对我之前修改的功能包的使用进行一个介绍.
对应的资源也已经上传了,0积分下载
安装
首先整个项目是使用ros1来进行启动的,但是要想正常编译,需要先安装三个对应的库.为了便于安装,我已经将安装功能封装成了对应的脚本.中间那个install_noetic.sh不是,其余两个是.
同时这里也提供对应库的源项目,分别是jsoncpp,pybind11,和Pangolin.接下来看一下对应的脚本怎么进行的:
由于项目源文件已经有了,所以不需要git clone了,我们在运行这两个脚本之前,需要先将源文件中的build给删除(这是上一次安装生成的文件,所以最好是删除掉防止干扰),否则安装可能会失败.
正常安装完三个依赖项之后,就能正常进行编译了:
在对应的工作空间下执行catkin_make
雷达标定
对于雷达与雷达的标定,我们运行:
source devel/setup.bashroslaunch lidar2lidar run_lidar2lidar.launch
调整右侧的参数,直到主点云和标定点云重合在一起.
可以看一下如何去启动的luanch:
需要配置的三个参数就比较明显了,分别就是主雷达,需要标定的雷达,以及初始的旋转平移矩阵,这是一个json文件,并且是将旋转平移矩阵完全展开了,是一个4×4的矩阵形式.比如这里是把p64标定到qt点云中
当然点云的pcd需要自己去转一下,使用pcl_ros 的工具即可转换话题为一个pcd,/your_pointcloud_topic改为对应的话题,当然,采集时是需要禁止的,点云不能运动:
rosrun pcl_ros pointcloud_to_pcd input:=/your_pointcloud_topic
如果没有的话需要先安装一下
sudo apt-get install ros-$ROS_DISTRO-pcl-ros
这样就能完成两帧点云的标定了.
自动标定思路
自动标定利用的其实就是两帧点云的匹配关系,也就是我们定位中使用的ndt算法,只要给一个大致的初始点云位姿,就能比较快速的收敛,也就完成了激光雷达点云的半自动标定过程.
至于这里的ndt的标定的过程,这里就不赘述了,是不需要使用原始的ndt定位的,ndt的实现中,是有直接对于两帧点云的处理的,然后可以只对那部分进行编写,当然,为了能够快速收敛,还是需要有初始位姿的,如果初始位姿比较奇怪,人当然也是很难给出这个初始位姿的大致的值的.除了雷达之间的关系并不大,不难也比较麻烦.所以这里先只需要停留在这个思路上.
雷达与相机的标定
这个外参的标定就是需要将图片与点云进行一个对应,所以在标定之前,最好是要让图片中的特征和点云的特征明显一点
启动方式
source devel/setup.bashroslaunch lidar2camera run_lidar2camera.launch
此时这里的launch就表示为
这里有四个东西作为输入,一个是图片png,一个是雷达点云pcd,一个是相机的内参center_camera-intrinsic.json,以及雷达和相机的外参(也是初始参数,修改的时候变的就是这个)
{ \"center_camera-intrinsic\": { \"sensor_name\": \"center_camera\", \"target_sensor_name\": \"center_camera\", \"device_type\": \"camera\", \"param_type\": \"intrinsic\", \"param\": { \"img_dist_w\": 1920, \"img_dist_h\": 1080, \"cam_K\": { \"rows\": 3, \"cols\": 3, \"type\": 6, \"continuous\": true, \"data\": [ [ 2109.75, 0, 949.828 ], [ 0, 2071.72, 576.237 ], [ 0, 0, 1 ] ] }, \"cam_dist\": { \"rows\": 1, \"cols\": 4, \"type\": 6, \"continuous\": true, \"data\": [ [ -0.10814499855041504, 0.1386680006980896, -0.0037975700106471777, -0.004841269925236702 ] ] } } }}
{ \"top_center_lidar-to-center_camera-extrinsic\": { \"sensor_name\": \"top_center_lidar\", \"target_sensor_name\": \"center_camera\", \"device_type\": \"relational\", \"param_type\": \"extrinsic\", \"param\": { \"time_lag\": 0, \"sensor_calib\": { \"rows\": 4, \"cols\": 4, \"type\": 6, \"continuous\": true, \"data\": [ [ 0.0125908, -0.999895, -0.00713773, -0.0322306 ], [ 0.0119283, 0.00728786, -0.999902, -0.352079 ], [ 0.99985, 0.0125045, 0.0120187, -0.574468 ], [ 0, 0, 0, 1 ] ] } } }}
同样的也是调整可视化界面中的参数的值,让特征能够对应上即可.