小工具知识网

当前位置: 首页 > 行业知识 > 【Ubuntu18.04】激光雷达与相机联合标定(Livox+HIKROBOT)(一)相机内参标定

行业知识

【Ubuntu18.04】激光雷达与相机联合标定(Livox+HIKROBOT)(一)相机内参标定

2026-10-20 12:51:31 来源:互联网转载

Livox+HIKROBOT联合标定——相机内参标定

  • 引言
  • 1 海康机器人HIKROBOT SDK二次开发并封装ROS
    • 1.1 介绍
    • 1.2 安装MVS SDK
    • 1.3 封装ROS packge
    • 2 览沃Livox SDK二次开发并封装ROS
    • 3 相机雷达联合标定——相机内参标定
      • 3.1 环境配置
        • 3.1.1 安装依赖——PCL 安装
        • 3.1.2 安装依赖——Eigen 安装
        • 3.1.3 安装依赖——Ceres-solver 安装
        • 3.1.4 下载源码,编译准备
        • 3.1.5 程序节点概括
        • 3.2 相机内参标定
          • 3.2.1 前期准备
          • 3.2.2 cameraCalib标定
            • **`���错`** (若无报错则跳过此步骤)

              引言

              Livox Lidar + HIKROBOT Camera 联合标定

              参考链接:相机雷达标定文档

              安装ROS环境,参考笔者的博客:【ROS】Ubuntu18.04安装Ros

              1 海康机器人HIKROBOT SDK二次开发并封装ROS

              1.1 介绍

              参考链接:海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++)

              海康的相机没有ros驱动,且对linux开发不太友好(但支持windows),因此需要重写了sdk接口,并创建了ros节点封装成ros包,方便linux环境下ros的调用

              完整版ros驱动:https://github.com/luckyluckydadada/HIKROBOT-MVS-ROS-package

              • 即使海康的相机是usb传输数据,但是不同于其他usb设备的调用,海康的相机并不会在/dev/目录下映射ttyUSB或video1这样的设备,所以不能用open/read/write这样的system call的方式打开设备,所以https://github.com/ros-drivers/usb_cam这样的usb ros驱动无法支持。因此只能自己开发ros驱动包。
              • 海康的打开设备的方式在MvUsb3VDevice.h和MvGigEDevice.h中实现(分别对应usb3.0相机和以太网相机),具体过程并没有开源,只提供了相应的so文件,海康提供了统一的接口MV_CC_EnumDevices实现对两种设备(usb3.0接口和以太网接口)的调用,因此开发一个ros驱动包是两种相机都适用的。海康的相机sdk虽然不开源,但是提供了armhf和aarch64架构编译的so文件。

                1.2 安装MVS SDK

                参考笔者的博客:

                【HIKROBOT】海康机器人:工业相机SDK二次开发

                1.3 封装ROS packge

                海康威视工业相机sdk的ros驱动包的安装步骤:

                step1:安装

                # 创建catkin工作空间mkdir ws_hk_mvs_ros  # 克隆源码到工作空间(海康机器人的ROS软件包)git clone https://github.com/luckyluckydadada/HIKROBOT-MVS-ROS-package.git ws_hk_mvs_ros/srccd ws_hk_mvs_ros# 编译Catkin工作空间中的ROS包catkin_make

                step2:直接运行node

                需要先启动roscore

                source ./devel/setup.bash rosrun hk_camera hk_camera_node

                step3:launch启动node

                source ./devel/setup.bash roslaunch hk_camera hk_camera.launch

                step4:launch启动node和rviz node

                用 rviz 订阅 /hk_camera_node/image_raw 查看照片

                source ./devel/setup.bash roslaunch hk_camera hk_camera_rviz.launch

                2 览沃Livox SDK二次开发并封装ROS

                参考笔者博客:【Ubuntu18.04】Livox Tele-15使用教程

                安装Livox环境和驱动

                # 安装Livox_SDKgit clone https://github.com/Livox-SDK/Livox-SDK.gitcd Livox-SDKcd build && cmake ..makesudo make install# 安装livox_ros_drivercd  Livox-SDK  # 进入Livox-SDK目录git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/srccd ws_livox   # 进入工作空间catkin_make

                3 相机雷达联合标定——相机内参标定

                3.1 环境配置

                3.1.1 安装依赖——PCL 安装

                参考链接:Ubuntu18.04安装PCL 1.9.1(图文详解,附踩坑和测试)

                step1:安装依赖

                sudo apt-get updatesudo apt-get install git build-essential linux-libc-devsudo apt-get install cmake cmake-guisudo apt-get install libusb-1.0-0-dev libusb-dev libudev-devsudo apt-get install mpi-default-dev openmpi-bin openmpi-commonsudo apt-get install libflann1.8 libflann-devsudo apt-get install libeigen3-devsudo apt-get install libboost-all-devsudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-devsudo apt-get install libqhull* libgtest-devsudo apt-get install freeglut3-dev pkg-configsudo apt-get install libxmu-dev libxi-devsudo apt-get install mono-completesudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre

                step2:下载源码

                建议安装1.9.1

                git clone https://github.com/PointCloudLibrary/pcl.git

                step3:编译源码

                cd pcl-pcl-1.9.1mkdir releasecd releasecmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_GPU=ON-DBUILD_apps=ON -DBUILD_examples=ON \ -DCMAKE_INSTALL_PREFIX=/usr ..
                make

                step4:安装

                sudo make install

                step5:PCLVisualizer(需要可以安装)

                sudo apt-get install libopenni-devsudo apt-get install libopenni2-dev

                3.1.2 安装依赖——Eigen 安装

                简单命令安装

                sudo apt-get install libeigen3-dev

                3.1.3 安装依赖——Ceres-solver 安装

                下载ceres-solver-1.14.0

                git clone https://github.com/ceres-solver/ceres-solver

                依赖安装

                 sudo apt-get install cmake sudo apt-get install libgoogle-glog-dev sudo apt-get install libatlas-base-dev sudo apt-get install libeigen3-dev sudo apt-get install libsuitesparse-dev sudo add-apt-repository ppa:bzindovic/suitesparse-bugfix-1319687 sudo apt-get update sudo apt-get install libsuitesparse-dev

                安装 ceres-solver

                tar zxf ceres-solver-1.14.0.tar.gzmkdir ceres-bin && cd ceres-bincmake ../ceres-solver-1.14.0make -j3make install

                至此需要的库安装完毕

                3.1.4 下载源码,编译准备

                # 进入工作空间cd ws_livox/srcgit clone https://github.com/Livox-SDK/livox_camera_lidar_calibration.git cd ..    # 返回上一级目录catkin_makesource devel/setup.bash
                • 此时工作空间的目录结构为:

                  3.1.5 程序节点概括

                  此项目包括如下节点:

                  1. cameraCalib - 标定相机内参
                  2. pcdTransfer - 将雷达点云rosbag转换成PCD文件
                  3. cornerPhoto -获得照片角点
                  4. getExt1 - 计算外参节点1,只优化外参
                  5. getExt2 - 计算外参节点2,同时优化内参和外参
                  6. projectCloud - 把雷达点云投影到照片上 colorLidar - 雷达点云着色

                  以下程序节点中如果想修改launch文件,需要到src/calibration/launch文件夹中找对应的launch文件。

                  3.2 相机内参标定

                  3.2.1 前期准备

                  • 准备一块有黑白棋盘格的标定板(如下所示,可以打印出来)
                    • 笔者实际用的标定版规格是:

                      3.2.2 cameraCalib标定

                      • 要准备20张以上的照片数据,各个角度和位置都要覆盖,拍摄的时候不要距离太近(3米左右),如下图所示。

                        采集棋盘格图像:

                        方法1:直接使用HIKROBOT的上位机来抓取并保存图片

                        选择指定的保存路径

                        抓取图片

                        方法2:使用 ROS可视化工具rqt_image_view查看并保存图片

                        • 终端1:启动相机的ROS驱动(以HIKROBOT为例)
                          # 进入工作空间source devel/setup.bash  # 加载环境# roslaunch [软件包] 启动文件.launchroslaunch hk_camera hk_camera.launch
                          • 终端2:保存好标定要用的图片
                            # 加载环境source devel/setup.bash# 打开相机画面rqt_image_view
                            • 说明: 笔者以下数据使用官网下载的数据集来测试:

                              测试数据下载:data.zip

                              • 获得照片数据后,配置cameraCalib.launch中对应的路径和参数,默认是把照片数据放在data/camera/photos下,然后在data/camera/in.txt中写入所有需要使用的照片名称,如下图所示

                                输入指令开始标定

                                #进入工作空间cd ws_livox/source devel/setup.bashroslaunch camera_lidar_calibration cameraCalib.launch
                                • 成功运行显示如下:
                                  • 标定结果中会保存在data/camera/result.txt中,包括重投影误差,内参矩阵和畸变纠正参数。

                                    内参结果

                                    • 一个3x3的内参矩阵(IntrinsicMatrix)
                                    • 5个畸变纠正参数 k1, k2, p1, p2, k3
                                      报错 (若无报错则跳过此步骤)

                                      解决方法:

                                      参考链接:

                                      解决 cv_bridge 与 opencv4 版本冲突问题

                                      • 下载 cv_bridge

                                        下载 noetic 版本的 cv_bridge。(noetic 版本的 cv_bridge 在 melodic 下也能使用,不过要做一些修改,后续会说明)

                                        下载地址:https://github.com/ros-perception/vision_opencv/tree/noetic

                                        下载完成后,将 cv_bridge 拷贝到 ros 工作空间的 src 文件夹下。

                                        此时工作空间的目录结构为:

                                        为了不影响原来的包,将该文件夹重命名为 cv_bridge_new,并且将cv_bridge_new文件夹下 CMakeLists.txt 文件中 project 名称修改为 cv_bridge_new:

                                        • 在 CMakeLists.txt 文件中指定我们自己的功能包中所用的 opencv4:

                                        • 并且修改 package.xml 中包的名称:

                                          • 报错1:
                                            • 解决方法:

                                              直接修改 cv_bridge_new的CMakeLists.txt 文件:

                                              ...if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8")# Debian Busterfind_package(Boost REQUIRED python3)...
                                              • 报错2:
                                                • 解决方法:

                                                  修改 cv_bridge_new/src/module.hpp 文件下 void* do_numpy_import()函数为 (注意*要删除)

                                                  static void do_numpy_import( ){    import_array( );}

                                                  再次编译:

                                                  catkin_make

                                                  再次输入指令开始标定

                                                  #进入工作空间cd ws_livox/source devel/setup.bashroslaunch camera_lidar_calibration cameraCalib.launch

上一篇:成都租赁合同怎么在房管局备案

下一篇:为什么笔记本开机不了系统?