使用kalibr_calibration标定相机(realsense)和imu(h7min)

vslam-evaluation/VINS/Installation documentation/4.IMU和相机联合标定kalibr_calibration.md at master · DroidAITech/vslam-evaluation · GitHub

目录

1.kalibr安装

1.1安装依赖项

1.2创建工作空间

1.3下载kalibr并编译

1.4设置环境变量

2.准备标定板

3.配置驱动和打开realsense摄像头

3.1更新系统

3.2注册服务器公钥

3.3添加Intel RealSense仓库

3.4安装realsense SDK

3.5测试RealSense D435/D435i

3.6ROS环境下的配置

3.7启动ROS节点并测试摄像头

3.8查看相机内参等信息通过rostopic echo /camera/color/data_raw

4.用imu_utils标定IMU数据 

注意:

5.录制imu和相机的bag包

6.相机、imu、标定板yaml文件


1.kalibr安装

1.1安装依赖项

sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-kinetic-vision-opencv ros-kinetic-image-transport-plugins ros-kinetic-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-devsudo pip install python-igraph --upgrade

1.2创建工作空间

mkdir -p ~/kalibr_workspace/srccd ~/kalibr_workspacesource /opt/ros/kinetic/setup.bashcatkin initcatkin config --extend /opt/ros/kineticcatkin config --cmake-args -DCMAKE_BUILD_TYPE=Release

1.3下载kalibr并编译

cd ~/kalibr_workspace/srcgit clone https://github.com/ethz-asl/Kalibr.gitcd ~/kalibr_workspacecatkin build -DCMAKE_BUILD_TYPE=Release -j4 

1.4设置环境变量

source ~/kalibr_workspace/devel/setup.bash

2.准备标定板

标定板可以用 kalibr 提供的pdf 下载地址为:https://github.com/ethz-asl/kalibr/wiki/downloads, 由于Aprilgrid能提供序号信息, 能够防止姿态计算时出现跳跃的

情况,所以这里采用Aprilgrid 6x6 0.8x0.8 m (A0 page)进行标定。

我下载了这个pdf, 打印成了A4纸大小,在标定前, 注意测量格子的尺寸信息填入yaml文件, 尺寸信息具体是哪些数据可以看看kalibr的说明,说明的网址为: 

https://github.com/ethz-asl/kalibr/wiki/calibration-targets

3.配置驱动和打开realsense摄像头

3.1更新系统

sudo apt-get update && sudo apt-get upgrade

3.2注册服务器公钥

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE

3.3添加Intel RealSense仓库

sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u

3.4安装realsense SDK

sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils

3.5测试RealSense D435/D435i

realsense-viewer

3.6ROS环境下的配置

sudo apt-get install ros-$ROS_DISTRO-realsense2-camera
sudo apt-get install ros-$ROS_DISTRO-realsense2-description

3.7启动ROS节点并测试摄像头

roslaunch realsense2_camera rs_camera.launch
//see images
rosrun image_view image_view image:=/camera/color/image_raw

3.8查看相机内参等信息通过rostopic echo /camera/color/data_raw

4.用imu_utils标定IMU数据 

双目相机 -- IMU联合标定_双目+imu 如何标定-CSDN博客

使用Kalibr标定相机和IMU(ZED+px4)外参-CSDN博客(我参考了这篇博客的imu)

sudo apt-get install libdw-dev

4.1下载imu_utils和code_utils,并将imu_utils和code_utils放在工作空间下。

code_utils.zip

imu_utils.zip

注意:

1. code_utils 依赖 ceres库, 需要先全局安装ceres库,okvis等内部的ceres不行。

2. 由于imu_utils依赖code_utils,所以先把code_utils放在工作空间的src下面,然后编译。

3. 编译code_utils 报错, fatal error: backward.hpp: No such file or directory

解决办法: 在code_utils下面找到sumpixel_test.cpp,修改#include “backward.hpp” 为

#include “code_utils/backward.hpp” 即可编译成功。

cd catkin_ws
catkin_make

4.2编译成功以后,再把imu_utils放到工作空间的src下面,进行编译。

cd catkin_ws
catkin_make

4.3让IMU静止不动两个小时,录制IMU的bag.

cd MYNT-EYE-D-SDK
source wrappers/ros/devel/setup.bash
roslaunch mynteye_wrapper_d display.launch
rosbag record /mynteye/imu/data_raw -O imu.bag

4.4两个小时以后按Ctrl+C完成录制。

4.5获得这四个参数

Gyr:avg-axis:gyr_n: 3.1820671461855504e-03gyr_w: 3.0693398103399251e-05
Acc:avg-axis:acc_n: 2.6449533258549235e-02acc_w: 7.2111910796954259e-04

5.录制imu和相机的bag包

rosbag record /camera/color/image_raw /mavros/imu/data_raw -O imu_camera.bag

注意:1.录制bag包的时候imu的频率应为200hz左右

2.录制的时候要注意按照官方的说法-充分激励IMU- 绕3个轴旋转和3个方向的平移,这里有个官方视频介绍,打不开的话有人把它搬到B站上了https://www.youtube.com/watch?app=desktop&v=puNXsnrYWTY
3.三个topic按照自己的情况改。另外可以再加两个(非必要): /camera/left/camera_info /camera/right/camera_info

4.录制时间大于30min

6.相机、imu、标定板yaml文件

相机

cam0:cam_overlaps: [] camera_model: "pinhole"  # 相机模型,kalibr也支持鱼眼模型distortion_coeffs: [0.0, 0.0, 0.0, 0.0]  # 相机畸变参数distortion_model: "radtan"  # 畸变模型intrinsics: [603.3211669921875, 602.70361328125, 324.1352844238281, 242.0079803466797]  # 内参resolution: [640, 480]  # 分辨率rostopic: "/camera/color/image_raw"  # ROS话题

imu

rostopic: /mavros/imu/data_raw
update_rate: 195 #Hzaccelerometer_noise_density: 0.1 #VINS默认 0.2
accelerometer_random_walk: 0.03 #0.05
gyroscope_noise_density: 0.02 #0.02
gyroscope_random_walk: 0.00004 #4e-5

target

#example for aprilgridtarget_type: 'aprilgrid' #gridtypetagCols: 6                  #number of apriltagstagRows: 6                  #number of apriltagstagSize: 0.02              #size of apriltag, edge to edge [m]tagSpacing: 0.3             #ratio of space between tags to tagSize a=0.02cm b=0.006cm

7.运行获取结果

rosrun kalibr kalibr_calibrate_imu_camera --imu /home/fhzn/calib/imu.yaml --cam /home/fhzn/calib/camera.yaml --target /home/fhzn/calib/target.yaml --bag /home/fhzn/calib/imu_camera.bag --show-extraction

使用kalibr标定双目相机以及IMU--安装运行标定全过程以及踩坑记录-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Docker#8] 容器配置 | Mysql | Redis | C++ | 资源控制 | 命令对比

目录 一:Mysql 容器化安装 二:Redis 容器化安装 Redis 简介 Redis 容器创建 三:C容器制作 四:容器资源更新 常见问题 一:Mysql 容器化安装 进入 mysql 的镜像网站,查找 mysql 的镜像 mysql docker…

1小时构建Vue3知识体系之vue的生命周期函数

本文转载自:https://fangcaicoding.cn/course/12/63 大家好!我是方才,目前是8人后端研发团队的负责人,拥有6年后端经验&3年团队管理经验。 系统学习践行者!近期在系统化输出前端入门相关技术文章,期望能…

数据结构-集合

一.集合的表示 一个重要的操作是查某个元素属于哪个集合,另一个操作是合并操作 从这个树的节点去找树根也就是从下往上找,要把树并起来只需把两个根并在一起就可以了 不存在已知一个节点去找孩子节点,根重要的是已知一个节点找它的父亲节点,与之前的二…

unity基础,点乘叉乘。

简单记录下点乘叉乘&#xff0c;要不每次用完就忘&#xff0c;忘了又查。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestCrossDot : MonoBehaviour {/// <summary>/// 原点/// </summary>public Transform t…

springboot 之 整合springdoc2.6 (swagger 3)

版本 springboot 3.3.5 jdk 17 springdoc 2.6.0 依赖pom <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.6.0</version> </dependency>注解对比…

数据结构与算法-前缀和数组

前缀和问题 什么是前缀和? 对于一个一般数组 nums,如果我们需要知道 S1 nums[0] nums[1]的结果&#xff0c; S2 nums[0] nums[1] nums[2] … 计算公式相当于: S2 S1 nums[2] … Sn Sn-1 nums[n]; 所谓前缀和&#xff1a;用来记录数组前项和的一个新数组&#xff0c;提…

R语言机器学习与临床预测模型77--机器学习预测常用R语言包

R小盐准备介绍R语言机器学习与预测模型的学习笔记 你想要的R语言学习资料都在这里&#xff0c; 快来收藏关注【科研私家菜】 01 预测模型常用R包 常见回归分析包: rpart 包含有分类回归树的方法; earth 包可以实现多元自适应样条回归; mgev包含广义加性模型回归; Rweka 包中的M…

Elasticsearch可视化工具Elasticvue插件用法

目录 1.打开浏览器扩展程序(示例Edge浏览器) ​2.搜索elasticvue并安装 3.打开elasticvue ​4.连接Es 5.有些浏览器无法下载安装扩展&#xff0c;例如谷歌。可以打包扩展给别的浏览器使用。 5.1打开浏览器扩展&#xff0c;打开开发人员模式&#xff0c;记住扩展程序id 5…

大数据技术之HBase中的HRegion

如果你正在学习大数据&#xff0c;你应该知道HBase是一个列式存储的NoSQL分布式数据库&#xff0c;可以配合Hadoop来使用。今天自己简单做了几页PPT&#xff0c;解释了一下HBase当中HRegion的基本概念&#xff0c;很多初学者在学习的时候对HRegion这个概念一直懵懵懂懂&#xf…

Spring Cloud Contract快速入门Demo

1.什么是Spring Cloud Contract &#xff1f; Spring Cloud Contract 是 Spring 提供的一套工具&#xff0c;用于帮助开发者通过契约&#xff08;Contract&#xff09;驱动的方式进行微服务的测试和集成。它主要解决微服务之间通信时&#xff0c;如何确保服务提供者和消费者之…

GISBox VS ArcGIS:分别适用于大型和小型项目的两款GIS软件

在现代地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;有许多大家耳熟能详的GIS软件。它们各自具有独特的优势&#xff0c;适用于不同的行业需求和使用场景。在众多企业和开发者面前&#xff0c;如何选择合适的 GIS 软件成为了一个值得深入思考的问题。今天&#xff…

Linux 进程线程间通信总结

线程 线程共享存储空间主要带来的问题是数据同步和互斥。由于线程在同一进程中运行&#xff0c;它们共享相同的内存空间&#xff0c;任何线程都可以访问共享数据。这样&#xff0c;多个线程并发执行时&#xff0c;可能会导致以下两种主要问题&#xff1a; 互斥问题&#xff0…

【再谈设计模式】抽象工厂模式~对象创建的统筹者

一、引言 在软件开发的世界里&#xff0c;高效、灵活且易于维护的代码结构是每个开发者追求的目标。设计模式就像是建筑蓝图中的经典方案&#xff0c;为我们提供了应对各种常见问题的有效策略。其中&#xff0c;抽象工厂模式在对象创建方面扮演着重要的角色&#xff0c;它如同一…

Web安全之SQL注入---基础

文章目录 SQL注入简介SQL注入基础SQL注入分类SQL注入流程 SQL注入简介 什么是SQL注入&#xff1f; SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理…

机器学习——贝叶斯

&#x1f33a;历史文章列表&#x1f33a; 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…

gdb编译教程(支持linux下X86和ARM架构)

1、下载源码 http://ftp.gnu.org/gnu/gdb/ 我下载的8.2版本。 2、下载完后拷贝到linux的x86系统。 3、解压&#xff0c;然后进入到目录下&#xff0c;打开当前目录的命令行窗口。 4、创建一个生成目录。 5、我们先开始x86版本&#xff0c;这个比较简单&#xff0c;不需要配置…

10款翻译工具实践体验感受与解析!!!!!

在现今的数字化时代&#xff0c;翻译工具如同语言的桥梁&#xff0c;为我们打开了通向世界的大门。今天咱们不聊别的&#xff0c;就聊聊那些让我又爱不释手的翻译工具们。因为我的职业因素&#xff0c;作为一个经常需要跟各种语言打交道的“文字搬运工”&#xff0c;这些工具可…

【日志】392.判断子序列

2024.11.8 【力扣刷题】 392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 整个题从一开始就是打算从双指针的思想往下走的。但是&#xff0c;我设置了四个变量sLeft…

C++20 中最优雅的那个小特性 - Ranges

C20 中最优雅的那个小特性 - Ranges 大家好&#xff0c;今天我们来聊聊 C20 的一项非常重要的新特性——Ranges&#xff0c;可以让你的代码更优雅、更高效、更炫酷&#xff0c;如果你是一个对代码有所追求的小伙伴&#xff0c;那么这个特性你绝对值得拥有&#xff01; 啥是 …

Python多进程间通讯(包含共享内存方式)

文章目录 1 通过非共享内存配合队列方式2 通过共享内存配合队列方式 注&#xff1a;本博文测试环境为Linux系统。 1 通过非共享内存配合队列方式 下面是一个常见的生产者与消费者的模式示例&#xff0c;这里分别启动了两个子进程&#xff0c;一个为生产者&#xff08;producer…