使用Autoware标定工具包进行相机和激光雷达的联合标定

前提摘要:我用的雷达和相机分别是镭神C16型激光雷达和免驱动摄像头

一、编译标定程序
1.创建工作空间

mkdir -p ~/CL_calibration_ws/src

2.下载安装包

cd ~/CL_calibration_ws/src
git clone https://github.com/XidianLemon/calibration_camera_lidar.git

3.编译

cd ~/CL_calibration_ws
catkin_make
source devel/setup.bash

4.启动标定工具包
新开一个终端

roscore

用原来的终端窗口,执行

rosrun calibration_camera_lidar calibration_toolkit

如果安装成功,则弹出窗口如下所示:
在这里插入图片描述
发现出不来这个界面,原因可能是Cmakelist有问题了
在这里插入图片描述
这是cmakelist里面的配置文件有问题,把ros版本改成melodic
再次编译就没问题

二、ros驱动雷达
1.配置网络IP和端口号
(1)连接雷达并抓包
在这里插入图片描述
发现雷达设备端ip是192.168.4.201,电脑端是192.168.4.200
(2)需要改电脑端的ip
在这里插入图片描述
(3)打开镭神官方上位机软件
在这里插入图片描述
2.用ros驱动
(1)新开一个终端,启动雷达

source ~/leishen_ws /devel/setup.bash
roslaunch lslidar_c32_decoder lslidar_c32.launch --screen

(2)修改launch文件中的ip为192.168.4.201
(3)显示
在这里插入图片描述
在这里插入图片描述

三、ros驱动相机
使用的是usb免驱动的摄像头,安装usb_cam这个package之后就可以被ROS调用。
另开终端,操作命令如下:

   mkdir -p ~/camera_ws/src
   cd ~/camera_ws/src  
   git clone https://github.com/bosch-ros-pkg/usb_cam.git  
   cd ~/camera_ws  
   catkin_make  
   source devel/setup.bash

修改usb_cam包的启动文件usb_cam.launch:

    <param name="video_device" value="/dev/video0" />

我用的是笔记本,video0是笔记本自带的摄像头,video1是我的另一个usb外设,我改成video2就可以了
启动摄像头:

roslaunch usb_cam usb_cam-test.launch

在这里插入图片描述
四、联合标定-----录制视频
可以用以下命令查看节点流:

rosrun rqt-graph rqt_graph

在这里插入图片描述
可以看到激光雷达和相机的话题分别为/lslidar_point_cloud 和 /image_view 。
下面录制包,录制的前提必须把相机和雷达ros驱动起来

rosbag record -a 

录制的时候,可以打开rviz看一下,需要在displays中Add相机话题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
录制的时候尽量录得长一点,这样的话后续可以有足够的时间调试。

参考别人的说法,录制的时候要手拿标定板,经过六个位置:

近处左、近处中、近处右

远处左、远处中、远处右

经过每个位置的时候,应该有五个动作:

平拿、左倾、右倾、上倾、下倾

我们使用的是12×9,每个方格2CM的标定板

五、录制的视频回放、标定
1.首先打开标定工具箱:

cd ~/CL_calibration_ws
source /CL_calibration_ws/devel/setup.bash
rosrun calibration_camera_lidar calibration_toolkit 

弹出对话框中点击下拉框,选择相机图像节点,根据我们上面查阅的节点流,我们可以知道是/usb_cam/image_view
在这里插入图片描述
然后选择 Camera–> Velodyne
在这里插入图片描述
点击ok进入下面界面:
在这里插入图片描述
在这里插入图片描述
0.02是棋盘格每个方框的边长(单位为米),我的棋盘格是9行12列,所以另两个数是8和11。

然后我们先回放一下:
这里要注意,autoware 标定工具箱可以自定义相机话题,但是点云节点是默认的,即 /points_raw , 所以我们回放的时候要把雷达点云重映射一下
刚刚录制的视频在/home目录下,应该是以时间命名的文件

rosbag play 你的录制视频名.bag /lslidar_point_cloud:=/points_raw

在这里插入图片描述
在这里插入图片描述
单击右边红框内的激光雷达界面,然后按键盘b键,设置背景为白色
在这里插入图片描述
这个时候还是看不到点云,此时应该使用键盘调整点云位置,键盘主要操作为:
左右上下键调整点云的上下左右,
q w e a s d可以使点云旋转、缩小和放大,其中缩小或放大的速度可以由鼠标滚轮控制,
小键盘7是恢复鸟瞰图,
p是加深点云,o是使点云变淡。
在这里插入图片描述
在播放时找到合适的场景时,点击右上角Grab即可抓取一帧,如果没有反应,可能是没有捕捉到棋盘格,可以再抓取别的时刻。每一帧点云通过单击鼠标左键进行抓取平面。
在这里插入图片描述
在这里插入图片描述
抓取足够多的帧后(一般是20帧),我一共抓取了20帧,然后需要用鼠标电机右边框里面的点云,直到出现点云矩阵
在这里插入图片描述

抓完点完点云之后,一定要把没有点到的点云图、图片和矩阵参数全部删掉,只剩下能用的参数,之后在计算。这步骤无敌重要,不做就完蛋。

最后等到录制视频播放完之后就点击右上角的calibration,进行计算
在这里插入图片描述
其中左下角红框是重投影误差,越小越好。

也可以点击project进行验证,如下图所示,红点均匀分布在标定版上,说明结果合理。
在这里插入图片描述
点击左上角save,
上面的reprojection error是重投影误差,是指当我们得到一组雷达与相机的标定结果,我们可以将雷达坐标系中的一点通过标定结果投影到相机坐标系下,比较相机坐标系下的投影点与真实点的像素差,就是重投影误差。重投影误差越小,说明联合标定越好。

以下两个都选否:👇
在这里插入图片描述
在这里插入图片描述
最后得到雷达相机转换矩阵,相机内参。

六、在autoware.ai里面显示融合效果图
1.保存的文件名要以.yaml结尾
将我们标定的结果用上,将三维点云数据投影到图像上,此处借助Autoware自带的Calibration Publisher和Points Image节点能进行融合。因此要单独启动Autoware软件。在Autoware/Sensing/中打开Calibration Publisher,并将保存好的内外参文件读取进来。
在这里插入图片描述
打开Autoware/Sensing下的Point Image节点,一般不用修改,默认就ok
在这里插入图片描述
2.事先运行录制好的rosbag包,开始播放后按空格暂停,播放指令和之前一样:

rosbag play bagName.bag /velodyne_points:=/points_raw

一定一定一定要等bag包播放完。
3.然后重选yaml和USB_CAM文件,一定要重选,重选不行多选几遍。
4.最后显示融合效果:
在这里插入图片描述

  • 5
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值