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

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/src
cd 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_SDK
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install

# 安装livox_ros_driver
cd  Livox-SDK  # 进入Livox-SDK目录
git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/src
cd ws_livox   # 进入工作空间
catkin_make

3 相机雷达联合标定

3.1 环境配置

3.1.1 安装依赖——PCL 安装

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

step1:安装依赖

sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libflann1.8 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo 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
mkdir build
cd build
cmake -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-dev
sudo 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.gz
mkdir ceres-bin && cd ceres-bin
cmake ../ceres-solver-1.14.0
make -j3
make install

至此需要的库安装完毕

3.1.4 下载源码,编译准备

# 进入工作空间
cd ws_livox/src
git clone https://github.com/Livox-SDK/livox_camera_lidar_calibration.git 
cd ..    # 返回上一级目录
catkin_make
source 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米左右),如下图所示。

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

选择指定的保存路径

在这里插入图片描述
抓取图片
在这里插入图片描述

  • 以下数据使用官网下载的数据集:

测试数据下载:data.zip

在这里插入图片描述

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

在这里插入图片描述
输入指令开始标定

#进入工作空间
cd ws_livox/
source devel/setup.bash
roslaunch 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_newCMakeLists.txt 文件:

...
if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8")
# Debian Buster
find_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.bash
roslaunch camera_lidar_calibration cameraCalib.launch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/105080.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法之矩阵: Leetcode 134. 螺旋矩阵 (Typescript版)

螺旋矩阵 https://leetcode.cn/problems/spiral-matrix/ 描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示…

RT-Thread 8. RT-Thread Studio arm-gcc使用10.2.1编译

1. gcc编译器下载 E:\RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\ARM\GNU_Tools_for_ARM_Embedded_Processors2. 把5.4.1 改为5.4.11 再“全部构建”,提示错误 3. 把工具链版本改为10.2.1,再“全部构建”

华为eNSP配置专题-路由策略的配置

文章目录 华为eNSP配置专题-路由策略的配置0、概要介绍1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、终端构成和连接2.2、终端的基本配置 3、配置路由策略3.1、目标3.2、配置路由策略 华为eNSP配置专题-路由策略的配置 0、概要介绍 路由策略就是通过一系列工具…

测试中Android与IOS分别关注的点

主要从本身系统的不同点、系统造成的不同点、和注意的测试点做总结 1、自身不同点 研发商:Adroid是google公司做的手机系统,IOS是苹果公司做的手机系统开源程度:Android是开源的,IOS是半开源的。所以IOS系统相对于Android来说是…

C++ 模板和泛型编程详解

C中的模板和泛型编程是非常重要的概念。模板是一种将数据类型作为参数的通用程序设计方法。它们允许开发人员编写可以处理各种数据类型的代码,而无需为每种数据类型编写不同的代码。下面介绍了一些关于C中模板和泛型编程的重要知识点 模板的定义 模板是一种通用程序…

php使用lunar实现农历、阳历、节日等功能

lunar是一个支持阳历、阴历、佛历和道历的日历工具库,它开源免费,有多种开发语言的版本,不依赖第三方,支持阳历、阴历、佛历、道历、儒略日的相互转换,还支持星座、干支、生肖等。仅供参考,切勿迷信。 官…

Qt扫盲-QPen 理论使用总结

QPen 理论使用总结 一、概述二、Pen Style 画笔风格三、Cap Style 帽风格四、Join Style 连接处样式 一、概述 QPen 是Qt绘图控件里面的一个重要的组件,和QColor 一样也是类似的一个属性类。这个类就是描述一个画笔具有的属性。 一个画笔 Pen 有style()&#xff0…

encodeURIComponent对url参数进行编码

在开发需求过程中,经常会遇到点击链接进入详情页的情况,一般的做法如下: window.open("/xxx/xxx/xxxDetail?a" item.a &b item.b); 我们也经常需要在详情页中获取url上面的参数进行一些逻辑的处理,一般的做法…

FL Studio 21 for Mac中文破解版百度网盘免费下载安装激活

FL Studio 21 for Mac中文破解版是Mac系统中的一款水果音乐编辑软件,提供多种插件,包括采样器、合成器和效果器,可编辑不同风格的音乐作品,Pattern/Song双模式,可兼容第三方插件和音效包,为您的创意插上翅膀…

P-MOS管开关机控制电路(手动按键控制和自动采样信号触发控制)

1. 手动(按键)控制 这种控制适合与消费电子,家庭消费电子领域,用户人为地手动按动机械按键控制P-MOS管导通与断开。例如:电动牙刷、儿童玩具等等,很多都会用到一个按钮控制产品的开关机,调档等等。 1.1 RH6030_JX触摸…

Ubuntu deadsnakes 源安装新版 python

前言 适用于 Ubuntu 安装 python3.11 等新版本。 因为比较常用并且不想重新编译就记录一下,方便以后面向CV安装。 安装 添加 deadsnakes ppa 源 sudo add-apt-repository ppa:deadsnakes/ppa更新 apt sudo apt update安装 python3.11 sudo apt install python…

【java爬虫】使用selenium获取某交易所公司半年报数据

引言 上市公司的财报数据一般都会进行公开,我们可以在某交易所的官方网站上查看这些数据,由于数据很多,如果只是手动收集的话可能会比较耗时耗力,我们可以采用爬虫的方法进行数据的获取。 本文就介绍采用selenium框架进行公司财…

【网络】对于我前面UDP博客的补充

UDP 前言正式开始UDP报文UDP报文如何将UDP报文和报头进行分离和封装UDP如何将有效载荷交付给上层如何提取出完整报文报头是啥报头中的检验和 UDP的特点IO接口乱序问题UDP是全双工的注意事项基于UDP的应用层协议 再次谈论端口五元组端口号范围划分netstatxargs 前言 本篇比较偏…

【Qt之QtConcurrent】描述及使用

描述 QtConcurrent是一个Qt库中的模块&#xff0c;用于实现多线程并发编程。它提供了一些高级API&#xff0c;使得在多核处理器上并行执行代码变得更加容易。 示例&#xff1a; 使用的话&#xff0c; 需要在pro文件中添加&#xff1a;QT concurrent模块。 #include <QC…

山东大学开发可解释深度学习算法 RetroExplainer,4 步识别有机物的逆合成路线

逆合成旨在找到一系列合适的反应物&#xff0c;以高效合成目标产物。这是解决有机合成路线的重要方法&#xff0c;也是有机合成路线设计的最简单、最基本的方法。 早期的逆合成研究多依赖编程&#xff0c;随后这一工作被 AI 接替。然而&#xff0c;现有的逆合成方法多关注单步逆…

手机桌面待办事项APP推荐

每天&#xff0c;我们每个人都面临着繁琐的事务和任务&#xff0c;而手机成了我们日常生活中不可或缺的伙伴。手机上的待办事项工具像一个可靠的助手&#xff0c;可以帮助我们更好地记录、管理和完成任务。在手机桌面上使用的待办事项APP推荐用哪一个呢&#xff1f; 手机是我们…

微信h5支付配置,商家存在未配置的参数,请联系商家解决

对于PC端来说&#xff0c;只需要开通 native支付 就可以了 但手机端h5还需要配置支付域名&#xff0c;并且域名只需要配置一级就可以了&#xff0c;比如&#xff1a;a.test.com, b.test.com, 只需要配置 test.com 就能满足所有的二级域名了, 而不需要配置a.test.com或者b.te…

网工内推 | 国企,解决方案工程师,最高30k,有软考证书优先

01 中电信数智科技有限公司海南分公司 招聘岗位&#xff1a;解决方案经理&#xff08;ICT&#xff09; 职责描述&#xff1a; 1、负责调动前后端资源做好全省ICT业务的售前支撑服务工作。 2、根据实际项目需求&#xff0c;主动协同客户渠道开展ICT项目商机挖掘&#xff0c;促进…

c++视觉检测------Shi-Tomasi 角点检测

Shi-Tomasi 角点检测 &#xff1a;goodFeaturesToTrack() goodFeaturesToTrack() 函数是 OpenCV 中用于角点检测的功能函数。它的主要作用是检测图像中的良好特征点&#xff0c;通常用于计算机视觉任务中的光流估算、目标跟踪等。 函数签名&#xff1a; void goodFeaturesTo…

华为ERP,包含哪些内容?技术的先进性体现在哪里?

华为作为全球领先的信息和通信技术&#xff08;ICT&#xff09;解决方案提供商&#xff0c;其企业资源规划&#xff08;ERP&#xff09;系统是一个高度复杂且集成的管理软件平台&#xff0c;用于优化公司内部的业务流程和资源分配。华为ERP系统包括一系列模块和功能&#xff0c…