当前位置: 首页 > news >正文

【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 程序节点概括

此项目包括如下节点:

  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

相关文章:

【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,前端相关工作可以更加高效地构建、打包、部署和运行应用程序。此系列将从前端的视角出发&#xf…...

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使用

对于网页的节点来说&#xff0c;它可以定义 id、class 或其他属性。而且节点之间还有层次关系&#xff0c;在网页中可以通过 XPath 或 CSS 选择器来定位一个或多个节点。在页面解析时&#xff0c;利用 XPath 或 CSS 选择器来提取某个节点&#xff0c;然后再调用相应方法获取它的…...

【广州华锐互动】VR消防员模拟灭火:身临其境的火场救援

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为我们带来了前所未有的沉浸式体验。在这其中&#xff0c;VR模拟消防员灭火体验无疑是一种极具创新性和实用性的应用。通过这项技术&#xff0c;人们可以亲身体验到消…...

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&#xff0c;需要遵循以下步骤&#xff1a; 1.添加依赖 在项目的pom.xml文件中添加RabbitMQ的Java客户端依赖&#xff1a; <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><versio…...

Ingress典型配置

Ingress 是 Kubernetes 中用于管理 HTTP 和 HTTPS 路由的资源。以下是一个典型的 Ingress 配置示例&#xff0c;用于将流量引导到两个不同的服务&#xff1a; apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: example-ingress spec:rules:- host: example.com…...

webpack中常见的Loader解决了什么问题?

一、是什么 loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分析出各种模块的依赖关系&#xff0c;然后形成资源列表&#xff0c;最终打包生成到指定的文件中。如下图所示&#…...

阿里7年经验之谈 —— 如何实现前端项目的自动化测试?

这其实就是我们常说的“UI自动化测试”&#xff0c;针对这个问题&#xff0c;我先告知答题思路如下&#xff1a; 1、什么是UI自动化&#xff1f;有什么优势&#xff1f; 2、UI自动化实践中会遇到什么难题&#xff1f; 3、如何解决难题&#xff0c;将UI落实到实践中&#xff1f;…...

动态开辟内存空间函数

文章目录 malloc函数calloc函数malloc函数和calloc函数的不同free函数realloc函数 malloc函数 参数是要开辟内存空间的大小 开辟成功则返回值为开辟空间的首地址&#xff0c;若开辟失败则返回一个空指针NULL calloc函数 第一个参数为开辟空间的元素个数&#xff0c;第二个参数…...

nodejs+vue备忘记账系统-计算机毕业设计

本文首先介绍了备忘记账系统管理技术的发展背景与发展现状&#xff0c;然后遵循软件常规开发流程&#xff0c;首先针对系统选取适用的语言和开发平台&#xff0c;目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章…...

百度Comate代码助手SaaS版本:智慧编程,引领新潮

引言 在当今数字化时代&#xff0c;软件开发已成为企业成功的关键因素之一。为了应对市场需求的不断变化&#xff0c;企业需要更高效、更灵活的开发工具。百度Comate代码助手的SaaS版本的正式上线&#xff0c;为广大企业和开发者提供了一种全新的编码方式&#xff0c;帮助他们…...

数据与视图的完美契合:Vue响应式的交织魅力

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

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…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...