【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…...
SEO网点优化与网站内容优化有何关系
SEO网点优化与网站内容优化有何关系 在当今数字化时代,网站的成功很大程度上依赖于搜索引擎优化(SEO)和网站内容优化。SEO网点优化与网站内容优化是两个密不可分的重要环节,它们共同决定了一个网站的排名和用户体验。本文将探讨这…...
Qwen3-14B集成IDEA开发环境:Java大模型应用快速构建指南
Qwen3-14B集成IDEA开发环境:Java大模型应用快速构建指南 1. 为什么要在IDEA中集成Qwen3-14B? 作为一名Java开发者,你可能已经习惯了在IntelliJ IDEA中完成各种开发任务。现在,通过将Qwen3-14B大模型集成到你的开发环境中&#x…...
从零到一:手把手搭建Frida动态分析环境
1. 为什么你需要Frida动态分析环境 第一次听说Frida时,我也觉得这玩意儿太专业了,肯定很难搞。但真正用起来才发现,它就像给手机应用装了个"X光机",能实时查看应用内部的运行状态。举个例子,去年我分析某款…...
Pixel Aurora Engine 赋能Web应用:Node.js全栈项目集成AI绘图功能
Pixel Aurora Engine 赋能Web应用:Node.js全栈项目集成AI绘图功能 1. 项目背景与价值 想象一下,你正在开发一个创意设计平台,用户需要快速将想法转化为视觉作品。传统方案要么依赖专业设计师,要么使用复杂的图形工具,…...
Superset报表与告警的深度配置与自适应截图二次开发
1. Superset报表与告警的核心配置解析 第一次接触Superset的报表和告警功能时,我被它的自动化能力惊艳到了。想象一下,每天早上咖啡还没喝完,关键业务指标的日报就已经整整齐齐地躺在邮箱里;当数据异常时,Slack消息比运…...
别再死记硬背Verilog语法了!用这5个实战小例子,帮你快速理解模块、wire和reg
别再死记硬背Verilog语法了!用这5个实战小例子,帮你快速理解模块、wire和reg 学习Verilog最痛苦的事情莫过于面对一堆枯燥的语法规则却不知道它们在实际电路设计中有什么用。很多初学者会陷入死记硬背的泥潭,记住了"wire是连线…...
技术解析 || 语义分割里程碑 —— DeepLabV2 核心机制与实战演进
1. DeepLabV2为何成为语义分割里程碑 第一次看到DeepLabV2论文时,最让我惊讶的是它在PASCAL VOC 2012测试集上72.6%的mIOU成绩。要知道在当时,这个成绩比前一年最好的模型提升了近10个百分点。这种飞跃式的进步,源于三个关键技术创新形成的&q…...
FPointer:嵌入式C语言轻量级带参回调机制
1. FPointer:面向嵌入式系统的轻量级泛型回调机制设计与实现1.1 设计动因与工程定位在裸机(Bare-Metal)或实时操作系统(如FreeRTOS、Zephyr)环境下,回调函数(Callback Function)是解…...
LabWindows/CVI实战入门:LED与按键交互设计详解
1. LabWindows/CVI开发环境搭建 第一次接触LabWindows/CVI的朋友可能会被这个强大的测试测量开发环境吸引,但也会被它复杂的界面吓到。别担心,我会带你从零开始搭建开发环境。安装过程其实很简单,就像装普通软件一样一路"下一步"就…...
如何利用地理位置信息优化网站的本地SEO效果
如何利用地理位置信息优化网站的本地SEO效果 在当今数字化时代,网站的本地SEO(搜索引擎优化)效果直接影响着网站的流量和用户转化率。利用地理位置信息进行本地SEO优化,不仅能够提升网站在本地用户中的可见性,还能有效…...
