最近学习了多传感器融合的 lidar + camera 部分,实现了输出彩色点云图。
一、总结了解
原理:就是简单的求解两个传感器的变换矩阵 R 而已。
步骤:
步骤名称 | 使用包 |
---|---|
1. 可视化 lidar 结果 | 使用 |
2. 可视化 camera 结果 | |
3. 二者标定并进行重投影 |
二、第一步:ubuntu读取mid40并展示
-
前提
- 确保ip正确(用自带的软件试试就好)
- 自己安装必要的环境,这里只是记录一下可视化用的包和命令。
-
首先要安装 livox-SDK 和 livox-driver link;
我的路径是--Livox_related(这个需要你自己建立,随便命名) - Livox-SDK(git 下载下来就是这个文件夹,我们不会显示用到他) - ws_livox(git 下载下来就是这个文件夹,我们主要用这个)
-
进入工作空间并运行
- 进到 ws_livox 里面
里面是这样的-- ws_livox - build - devel - src
- 软件包环境设置。
因为你接下来就要 roslaunch 了,那这个launch文件在哪里呢?所以设置如下source ./devel/setup.sh
- 启动指定的设备。
因为我们要运行 roslaunch livox_ros_driver livox_lidar_rviz.launch 的,所以先打开 launch 文件,设置一下。-
打开 livox_lidar_rviz.launch 文件。它在 ws_livox -> src -> livox_ros_driver -> launch 路径下。
-
设置那个 bd_list 为你的设备编码。
-
回到 ws_livox 路径,直接运行下面就自动弹出窗口并可视化了。
roslaunch livox_ros_driver livox_lidar_rviz.launch
-
- 进到 ws_livox 里面
-
完成后总结
- ws_livox 是一个工作空间,livox_driver_ros 是一个功能包。 当然这个工作空间只有这一个功能包
三、第二步:使用 livox_camera_lidar_calibration 进行lidar-相机标定的准备工作
显然,如果你想要标定,那首先要联通两种设备作为准备。
-
环境配置
配置环境的时候注意要按照官网的来配置,不然文件目录特别容易弄错!!!
最终安装好的目录:ws_calibration(自己建的) - Livox-SDK(第一步) - ws_livox (最好在 Livox-SDK 的目录下创建这个) - src - livox_ros_driver(那个驱动,一定要安装对) - livox_camera_drivaer(我们要用的标定文件) - build - devel - 其他的文件夹
如何查看是否成功呢?运行官网的命令就好。
source ./devel/setup.sh roslaunch camera_lidar_calibration cameraCalib.launch
-
进行相机标定。这里建议使用matlab,自带的试了,必须设置标定板的行和列(自带的代码无法自适应) ,从而获得一个3x3的内参矩阵,和 5个畸变纠正参数 (这里的畸变我都设置为0,因为我在运行他的畸变矫正后,发现:当只有径向畸变的时候,图片的黑边不对称。但应该是对称的。所以还不如设置为0)。
-
连接雷达
检查标定板角点是否在点云中,输入点云可视化的命令查看点云roslaunch livox_ros_driver livox_lidar_rviz.launch(这里仅仅只是看看,后面不用这个的,因为他要求用自己diy的点云格式,但这里是标准点云格式)。
需要录制rosbag时输入另一个命令,自动保存对应的“livox custom msg format”格式。
roslaunch livox_ros_driver livox_lidar_msg.launch(到这里你可以试试,等相机准备好后,还要一起录制)
-
usb 相机可视化 。
其实后来发现:- 这个在标定过程中不是必须的。因为采集流程是:【采集10s的静止激光雷达数据(.bag)和一张照片】* 10次。所以我后来直接用系统自带的拍照功能了。
- 但是在标定好后实际使用的时候是需要的,因为你需要发布img消息。
我参考的连接link。
首先,我们使用的是官方的 usb_cam 的包。这个包大概有两种方法:1.系统安装法:使用 apt-get; 2. 源码安装法。系统安装法是安装到一个固定的路径(可用 roscd usb_cam 找到路径),但问题是后面我们要修改launch文件,但是这个路径不让你随便改。所以就用源码安装法吧!
四、正式开始标定
这里我们才正式开始进行配准。
4.1 获取3d-2d对应点
-
第一步:想办法获取图像上4个以上点的像素坐标并放在 data/corner_photo.txt中,如下图。这里就不多说了,官方标定库好像没有办法直接选点得坐标,这里建议使用 GPT 自己写一段程序。
-
第二步:获取雷达点云中的角点坐标。流程:录制bag->转化为pcd-> 使用pcl_viewer获取三维点。
-
首先,录制的话就进入到 Home\files\Livox_related\ws_calibration\Livox-SDK\ws_livox 下面(这是一个ros工作空间), 先
source devel/setup.bash
,然后用roslaunch livox_ros_driver livox_lidar_msg.launch
然后再输入rosbag record /livox/lidar
就好。注意录制时候别动。source devel/setup.bash 是为了方便补全
roslaunch livox_ros_driver livox_lidar_msg.launch 是发布自定义形式的点云
rosbag record /livox/lidar
是录制 -
然后依据标定库转为PCD文件。你需要修改一下
pcdTransfer.launch
中的内容,如下图,修改输入输出路径和bag的数量就好。 -
使用pcl_viewer打开PCD文件,按住shift+左键点击即可获得对应的点坐标。注意和照片采用相同的角点顺序
pcl_viewer -use_point_picking xx.pcd
。将xyz角点坐标按如下格式保存在data/corner_lidar.txt中,将所有PCD文件中雷达点云的角点坐标保存下来,如下图。
-
-
第三步:依据官方库进行标定就好,一般不需要设置初始外参(用它自带的就好),而且一般不会失败。
五、输出彩色点云
这里我没有用官方标定库给的染色方法,因为我发现好像我最上面的点云被染成了图像中底板的颜色。所以另外找库 LInk。
5.1 准备好融合的代码
进入 /home/yzp/files/code_program/Livox_COLOR
. 然后按照项目的说明进行配置就好。注意要手动修改图片的大小(在 mian.cpp 的宏定义里面的 H 和 W,否则会发现数组越界,而且报错还不明显)。对于usb相机的发布程序,要注意你发布的像素大小。
5.2 启动程序
依次启动激光雷达的点云发布程、usb相机发布程序、融合程序,就可以了!