【摄像头标定】使用kalibr进行双目摄像头标定(ros1、ros2)

news2024/11/23 12:25:37

使用kalibr进行双目摄像头标定

    • 前言
    • 标定板
    • 标定
      • ①板端准备和录制
      • ②上位机准备和标定

前言

本文不是纯用ros1进行标定,需要ros1和ros2通信。给使用ros2进行开发,但又想用kalibr标定双目摄像头的小伙伴一个教程。本文双目摄像头的数据发布使用ros2,所以需要用到ros1_bridge功能包将ros2和ros1的话题进行适配,使得ros1环境中可以接收ros2的话题,然后使用rosbag录制话题数据,完成后将bag包放到虚拟机的ubuntu中,使用kalibr进行标定。
前提是自己已经写好了双目相机图像的发布节点。

标定板

标定板使用6×6的Aprilgrid,目前网上没找到这个标定板的pdf,可以参考下面这个博客自己制作:
https://blog.csdn.net/h1527820835/article/details/123397154
在这里插入图片描述

标定

①板端准备和录制

准备:
如果是使用ros1进行开发的不用看此教程。板端使用ros2进行开发的往下看,在板端再安装对应版本的ros1,一般就是noetic,可以之间使用鱼香ros的一键安装指令:wget http://fishros.com/install -O fishros && . fishros
新开一个终端,source ros2的环境变量,在ros2的环境下安装ros1_bridge:

source /opt/ros/foxy/setup.bash
sudo apt install ros-foxy-ros1-bridge

安装完成即可。

录制:
一共需要开启四个终端,分别是ros1环境下的roscore、ros1环境下的rosbag、ros1,ros2环境下的ros1_bridge、ros2环境下的发布图像节点。下面以小标号的形式展示,每个代表一个终端:

source /opt/ros/noetic/setup.bash
roscore

source /opt/ros/foxy/setup.bash
source /opt/ros/noetic/setup.bash
ros2 run ros1_bridge dynamic_bridge --bridge-all-topics

source /opt/ros/foxy/setup.bash
ros2 launch hobot_t1_cam mipi_cam.launch.py mipi_out_format:=bgr8 mipi_io_method:=ros mipi_framerate:=4             //这个是我的图像发布节点,发布图像数据话题:/image_raw_left,/image_raw_right

source /opt/ros/noetic/setup.bash
 rosbag record /image_raw_right /image_raw_left -O stereo_4hz.bag                                //两个话题分别对应自己发布双目相机图像数据话题

录制时固定相机,手持标定板移动,最好每个角落都要有图像,录个几十秒即可。这样板端就完成了,之后的操作都在虚拟机的ubuntu里。

②上位机准备和标定

准备:
这里上位机使用vmware安装ubuntu20.04,有条件的也可以双系统,比起虚拟机运行,性能会更好。ubuntu安装完成后,同样使用鱼香ros一键安装ros1-noetic:wget http://fishros.com/install -O fishros && . fishros,安装完ros1之后,顺便再使用这个命令安装一下rosdep。

依赖安装:

sudo apt-get install -y \
    git wget autoconf automake nano \
    libeigen3-dev libboost-all-dev libsuitesparse-dev \
    doxygen libopencv-dev \
    libpoco-dev libtbb-dev libblas-dev liblapack-dev libv4l-dev

标定:
⚪工作空间src中,下载Kalibr源码,编译:

mkdir -p ~/my_ws/src
cd ~/my_ws/src
git clone https://github.com/ethz-asl/kalibr.git
cd ..
source /opt/ros/noetic/setup.bash
catkin_make
source devel/setup.bash

⚪将录制得到的bag文件拷贝到/src/kalibr文件夹里,新建april_6_6.yaml也放在这个目录,yaml代码如下:

target_type: 'aprilgrid' #gridtype
tagCols: 6               #number of apriltags
tagRows: 6               #number of apriltags
tagSize: 0.021           #size of apriltag, edge to edge [m]
tagSpacing: 0.28          #ratio of space between tags to tagSize
codeOffset: 0            #code offset for the first tag in the aprilboard
6,6表示标定板是六行六列,0.021表示每个方块21mm,tagSpacing表示小黑方块长度除以大黑方块长度的值

⚪终端运行双目标定功能包:

rosrun kalibr kalibr_calibrate_cameras --bag src/kalibr/stereo_4hz.bag --topics /image_raw_right /image_raw_right --models pinhole-radtan pinhole-radtan --target src/kalibr/april_6_6.yaml --show-extraction

bag:录制的双目视频;topic:要和板端运行录制代码中话题的顺序一样;models:相机模型,我的是带畸变的针孔,所以是pinhole-radtan;target:标定板的配置文件,上面自己新建了;需要注意的是–models pinhole-radtan pinhole-radtan,表示的是摄像头的模型,我这里两个都是针孔摄像头,具体自己的型号需要问厂家.加上 --show-extraction即可可视化角点图

⚪运行可能会报错:“ImportError: No module named igraph”,安装以下即可:

1、sudo apt-get install -y libigraph0-dev
2、pip install python-igraph==0.7.1.post6
python2.7只支持0.8X以前的版本

安装完之后再次运行双目标定功能包,标定结束后在kalibr文件中会生成三个文件:

  • .yaml:保存着左右相机的内参,以及左相机到右相机的变换矩阵
  • .pdf:保存着各种图,比如重投影误差图
  • .txt:含有相机内参以及重投影误差

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL中的Bin-log是什么?有什么作用?

Bin-log日志也被称之为二进制日志,作用与Redo-log类似,主要是记录所有对数据库表结构变更和表数据修改的操作,对于select、show这类读操作并不会记录。bin-log是MySQL-Server级别的日志,所有引擎都能用的日志,而redo-l…

LKD-Net: Large Kernel Convolution Network for Single Image Dehazing

LKD-Net:用于单幅图像去噪的大型核卷积网络 摘要 基于深度卷积神经网络(CNN)的单幅图像去噪方法已经取得了很大的成功。以往的方法致力于通过增加网络的深度和宽度来提高网络的性能。目前的方法侧重于增加卷积核的大小,以受益于更大的接受野来增强其性能…

【自然语言处理系列】探索NLP:使用Spacy进行分词、分句、词性标注和命名实体识别,并以《傲慢与偏见》与全球恐怖活动两个实例文本进行分析

本文深入探讨了scaPy库在文本分析和数据可视化方面的应用。首先,我们通过简单的文本处理任务,如分词和分句,来展示scaPy的基本功能。接着,我们利用scaPy的命名实体识别和词性标注功能,分析了Jane Austen的经典小说《傲…

LabVIEW技术交流-控件的禁用属性与Mouse Up事件的一个坑

问题来源 我们平时对控件Mouse Up事件触发使用场景不多,可能在按钮控件上会偶尔用到。在一些场景中,我们用按钮的Mouse Up触发事件,但是又希望在某些限制条件下,按钮会被禁用而不能触发事件。 可是当我们禁用按钮时,它…

网页设计的意义何在?最后一个你绝对没想到!

在当今时代,网页已经成为我们日常生活中不可或缺的一部分。网页的支持对于搜索信息、购物、社交娱乐、在线学习和工作至关重要。网页设计作为网页的重要组成部分之一,在实现网页的各种功能和目的方面发挥着至关重要的作用。那么,网页设计的目…

力扣算法-9.回文数

9.回文数 个人思考 首先从示例2可以看出符号也算在整数这个整体内,可以先判断整数若为负数则返回false其次很容易就会想到遍历两次,从头以及从尾,遍历得到的结果相比较,相同则为回文数 public class Alee9 {public static void …

天花板国际幼儿园是怎样的?一起来听听天津惠灵顿幼儿园园长分享

上周,天津惠灵顿幼儿园举行了精彩的毕业典礼。一如往常,这是一个回顾过去、展望未来的机会。这届毕业班有一些孩子是四年前园长加入惠灵顿学校的时入园的。他们从小小班启航,在这所天津国际幼儿园开始了他们的惠灵顿之旅。四年来,…

Web APIs-DOM-事件相关整理(完成网页交互)

目录 1.事件监听 2.事件监听绑定 3.事件类型 4.实例注意 5.事件对象 6.环境对象 7.回调函数 1.事件监听 (绑定事件/注册事件): 程序检测有没有事件产生(事件:比如单机一个按钮(编程时系统发生的动作或者事情&a…

(七)React:useEffect的理解和使用

1. useEffect的概念理解 useEffect是一个React Hook函数,用于React组件中创建不是由事件引起而是由渲染本身引起的操作,比如发送AJAX请求,更改DOM等等 说明:上面的组件中没有发生任何的用户事件,组件渲染完毕之后就需…

Android使用DevRing框架搭建数据库实体类以及使用

一、引用DevRing依赖 //导入DevRing依赖implementation com.ljy.ring:devring:1.1.8创建数据库表的依赖implementation org.greenrobot:greendao:3.2.2 // add libraryimplementation org.greenrobot:greendao-generator:3.0.0 二、修改工程目录下的.idea->gradle.xml文件&…

游戏服务器研究二:大世界的 scale 问题

这是一个非常陈旧的话题了,没什么新鲜的,但本人对 scale 比较感兴趣,所以研究得比较多。 本文不会探讨 MMO 类的网游提升单服承载人数有没有意义,只单纯讨论技术上如何实现。 像 moba、fps、棋牌、体育竞技等 “开房间类型的游戏…

《mysql篇》--mysql常用命令

数据库操作 显示当前数据库 show databases;(database 后面要加s) 这行命令用来显示当前有多少个数据库 //mysql中有自带的四个库 创建数据库 create database 数据库名(name); 创建一个数据库 create dabase if not exists <数据库名(name)>; //如果系统有与当前创建…

13017.win10安装WSL2及CUDA开发环境

文章目录 1 win10版本1.1 关键项不能忽略 2 安装WSL2 ubuntu20.042.1 打开控制面板&#xff0c;开启虚拟子系统功能2.2 离线安装ubuntu2.2 WSL2 启动 ubuntu2.3 修改默认启动用户 3 ubuntu中安装vscode-server3.1 win10 中安装vscode3.2 ubuntu中安装vscode-server3.3 启动WSL2…

思科交换机基本配置命令

01进入特权模式enable switch>enable switch# 02进入全局配置模式configure terminal switch>enable switch#configure terminal switch(conf)# 03交换机命名hostname aptech2950以aptech2950为例 switch>enable switch#configure terminal switch(conf)#hostname apt…

如何挑选洗地机?盘点口碑最好的四大洗地机

在购买洗地机这种智能家电时&#xff0c;大家都应该格外谨慎。毕竟&#xff0c;洗地机价格不菲&#xff0c;精打细算&#xff0c;确保物尽其用才是最重要的。谁都不想花了高价买回来却让它闲置在墙角落灰尘。买之前我们还是需要对自己的需求做一个清晰的判断&#xff0c;实用性…

Webpack: 如何借助预处理器、PostCSS 等构建现代 CSS 工程环境

概述 在开发 Web 应用时&#xff0c;我们通常需要编写大量 JavaScript 代码 —— 用于控制页面逻辑&#xff1b;编写大量 CSS 代码 —— 用于调整页面呈现形式。问题在于&#xff0c;CSS 语言在过去若干年中一直在追求样式表现力方面的提升&#xff0c;工程化能力薄弱&#xff…

代码随想录算法训练营第三十四天|56. 合并区间、738.单调递增的数字、968.监控二叉树

56. 合并区间 题目链接&#xff1a;56. 合并区间 文档讲解&#xff1a;代码随想录 状态&#xff1a;无语&#xff0c;这题从右边界排序做不了&#xff01; 思路&#xff1a; 排序&#xff1a;按照区间的起始位置进行排序&#xff0c;这样后面处理时可以顺序合并重叠区间。合并…

【zabbix】zabbix 自动发现与自动注册、proxy代理

1、配置zabbix自动发现&#xff0c;要求发现的主机不低于2台 zabbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09; zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多&#xff0c;zabbi…

YOLOv8改进 | 主干网络| 可变形卷积网络C2f_DCN【CVPR2017】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、B…

基于 ESP8266 和 MQ 气体传感器的微信告警系统设计与实现

接线: ESP8266MQ3vVCCGND GND A0 A0微信通知截图: 摘要:本文主要探讨了一种利用 ESP8266 微控制器与 MQ 气体传感器构建的气体检测微信告警系统。详细阐述了系统的硬件组成、软件设计以及与微信平台的交互机制。通过该系统,能够实时监测环境中的气…