【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 cmakesudo apt-get install libgoogle-glog-devsudo apt-get install libatlas-base-devsudo apt-get install libeigen3-devsudo apt-get install libsuitesparse-devsudo add-apt-repository ppa:bzindovic/suitesparse-bugfix-1319687sudo apt-get updatesudo 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 程序节点概括
此项目包括如下节点:
- cameraCalib - 标定相机内参
- pcdTransfer - 将雷达点云rosbag转换成PCD文件
- cornerPhoto -获得照片角点
- getExt1 - 计算外参节点1,只优化外参
- getExt2 - 计算外参节点2,同时优化内参和外参
- 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_new的CMakeLists.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
相关文章:
【Ubuntu18.04】激光雷达与相机联合标定(Livox+HIKROBOT)(一)
LivoxHIKROBOT联合标定 引言1 海康机器人HIKROBOT SDK二次开发并封装ROS1.1 介绍1.2 安装MVS SDK1.3 封装ROS packge 2 览沃Livox SDK二次开发并封装ROS3 相机雷达联合标定3.1 环境配置3.1.1 安装依赖——PCL 安装3.1.2 安装依赖——Eigen 安装3.1.3 安装依赖——Ceres-solver …...
hadoop伪分布式安装部署
首先jdk安装完毕 jdk安装文档参考: Linux 环境下安装JDK1.8并配置环境变量_linux安装jdk1.8并配置环境变量_Xi-Yuan的博客-CSDN博客 准备好hadoop的安装包 我的下载地址如下: We Transfer Gratuit. Envoi scuris de gros fichiers. 将hadoop包上传到随…...
前端视角看 Docker : 加速开发和部署的利器
Docker 是一个开源的容器化平台,大大的降低了运维相关的工作。在日常开发中,中小公司很少有专职运维,所以在开发中通过使用 Docker,前端相关工作可以更加高效地构建、打包、部署和运行应用程序。此系列将从前端的视角出发…...
JVM相关的面试题
一、什么是程序计数器 二、简要的介绍一下堆 三、什么是虚拟机栈 四、能不能解释下方法区 五、你听过直接内存吗? 六、什么是类加载器,类加载器有哪些 七、什么是双亲委派模型 八、JVM为什么采用双亲委派机制 九、类装载的执行过程 十、对象什么时候被垃…...
HTML、CSS和jQuery:实现图片折叠展开的效果
在网页设计和开发中,我们经常需要实现一些动态特效来增加页面的吸引力和交互性。其中,图片折叠展开特效是一种常见但又很有趣的技巧。通过这种特效,我们可以让图片在用户的操作下折叠或展开,从而展示更多的内容或细节。以下介绍如…...
php简单后门实现及php连接数据库
php简单后门实现 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>easybackdoor</title>…...
IOS课程笔记[6] 基础控件
UILabel 控件 frame 设置尺寸 [lb setFrame:CGRectMake(5, 0, 400, 40)];Font 字体设置 [lb setFont:[UIFont systemFontOfSize:20.f]] [lb setFont:[UIFont boldSystemFontOfSize:25.f]]; [lb setFont:[UIFont italicSystemFontOfSize:23.f]];背景色 [lb setBackgroundC…...
python爬虫入门(五)XPath使用
对于网页的节点来说,它可以定义 id、class 或其他属性。而且节点之间还有层次关系,在网页中可以通过 XPath 或 CSS 选择器来定位一个或多个节点。在页面解析时,利用 XPath 或 CSS 选择器来提取某个节点,然后再调用相应方法获取它的…...
【广州华锐互动】VR消防员模拟灭火:身临其境的火场救援
随着科技的不断发展,虚拟现实(VR)技术已经逐渐渗透到各个领域,为我们带来了前所未有的沉浸式体验。在这其中,VR模拟消防员灭火体验无疑是一种极具创新性和实用性的应用。通过这项技术,人们可以亲身体验到消…...
NFS性能瓶颈分析
前言 atop – run it with -d option or press d to toggle the disk stats view. iostat – try it with the -xm 2 options for extended statistics, in megabytes, and in two-second intervals. iotop – top-like I/O monitor. Try it with the -oPa options to show the…...
Java中配置RabbitMQ基本步骤
在Java中配置RabbitMQ,需要遵循以下步骤: 1.添加依赖 在项目的pom.xml文件中添加RabbitMQ的Java客户端依赖: <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><versio…...
Ingress典型配置
Ingress 是 Kubernetes 中用于管理 HTTP 和 HTTPS 路由的资源。以下是一个典型的 Ingress 配置示例,用于将流量引导到两个不同的服务: apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: example-ingress spec:rules:- host: example.com…...
webpack中常见的Loader解决了什么问题?
一、是什么 loader 用于对模块的"源代码"进行转换,在 import 或"加载"模块时预处理文件 webpack做的事情,仅仅是分析出各种模块的依赖关系,然后形成资源列表,最终打包生成到指定的文件中。如下图所示&#…...
阿里7年经验之谈 —— 如何实现前端项目的自动化测试?
这其实就是我们常说的“UI自动化测试”,针对这个问题,我先告知答题思路如下: 1、什么是UI自动化?有什么优势? 2、UI自动化实践中会遇到什么难题? 3、如何解决难题,将UI落实到实践中?…...
动态开辟内存空间函数
文章目录 malloc函数calloc函数malloc函数和calloc函数的不同free函数realloc函数 malloc函数 参数是要开辟内存空间的大小 开辟成功则返回值为开辟空间的首地址,若开辟失败则返回一个空指针NULL calloc函数 第一个参数为开辟空间的元素个数,第二个参数…...
nodejs+vue备忘记账系统-计算机毕业设计
本文首先介绍了备忘记账系统管理技术的发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章…...
百度Comate代码助手SaaS版本:智慧编程,引领新潮
引言 在当今数字化时代,软件开发已成为企业成功的关键因素之一。为了应对市场需求的不断变化,企业需要更高效、更灵活的开发工具。百度Comate代码助手的SaaS版本的正式上线,为广大企业和开发者提供了一种全新的编码方式,帮助他们…...
数据与视图的完美契合:Vue响应式的交织魅力
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
Centos8 降低gcc版本至gcc-7.3
1 首先卸载系统中的gcc sudo yum remove gcc 2 重新安装gcc-7.3 sudo dnf group install “Development Tools” 然后再次卸载gcc sudo yum remove gcc 然后发现centos-release-scl-rh已经安装了 sudo yum install centos-release-scl-rh yum -y install devtoolset-7-gcc dev…...
Qt之设置QLineEdit只能输入浮点数
Qt提供了QDoubleValidator来进行浮点数校验,但是它同样存在限定范围无效的问题,详见:Qt之彻底解决QSpinBox限定范围无效的问题 因此我们要子类化QDoubleValidator,并重写其中的validate方法,最后调用QLineEdit的setValidator方法,并将这个子类当做参数传入。 QHDoubleVa…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...
