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

使用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.mfbz.cn/a/744518.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

fork 是一个创建新进程的系统调用

在计算机科学中,fork 是一个创建新进程的系统调用。具体来说,fork 调用会创建一个与当前进程几乎完全相同的副本,包括父进程的内存布局、环境变量、打开的文件描述符等。这个新的进程被称为子进程,而原始进程被称为父进程。 以下…

Spring+Vue项目部署

目录 一、需要的资源 二、步骤 1.首先要拥有一个服务器 2.项目准备 vue: 打包: 3.服务器装环境 文件上传 设置application.yml覆盖 添加启动和停止脚本 ​编辑 安装jdk1.8 安装nginx 安装mysql 报错:「ERR」1273-Unknown collation: utf8m…

springboot网上商城系统的设计与实现-计算机毕业设计源码08789

摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设网上商城系统。 本设…

客户有哪些封装案例,一句克服使用让PCBA工厂泪流满面

作者 | 高速先生成员--王辉东 天空下着雨,萧萧从窗前经过,看窗里。 翠萍那娇艳欲滴的脸上挂着两串泪滴。 萧萧一进去,问啥情况。 翠萍往电脑屏幕一指。 当萧萧看向屏幕一瞬间。 那些曾经以为早已遗忘的伤痛,会在某些时刻如潮…

Gradle学习-2 Groovy

1、Groovy基础语法 1.1、基本数据类型 Groovy支持数据类型:byte, short, int, long, float, double, char (1)创建一个Android Studio项目 (2)在根目录新建一个 leon.gradle,输入以下内容 leon.gradle…

突破Web3红海,DePIN如何构建创新生态系统?

撰文:TinTinLand 本文来源香港Web3媒体Techub News专栏作者TinTinLand 2023 年 DePIN 赛道的火热成为 Web3 行业的重点关注方向,当前如何以可扩展、去中心化、安全方式推动 DePIN 赛道赋能下的 AI 版图建设,寻找更多 Web3 行业创新机遇成为…

【已解决】Python报错:NameError: name ‘Image‘ is not defined

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun 🎈 本文专栏:本文收录于《AI实战中的各种bug…

QT拖放事件之七:子类化QMimeData,实现对多个自定义类型进行数据

1、前提说明 /*自定义的MIME类型数据存储在QMimeData对象中, 存在两种方法:1. setData(...)可以把自定义类型的数据以QByteArray的形式直接存储在QMimeData中,但是使用此方法一次只能对一个MIME类型进行处理(可参考 QT拖放事件六:自定义MIME类型的存储及读取demo ) 一文。…

udp Socket组播 服务器

什么是组播 组播也可以称之为多播这也是 UDP 的特性之一。组播是主机间一对多的通讯模式,是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将一份报文发送到特定的组播地址,组播地址不同于单播地址,它并不属于特定某个主机…

240621_Git初始配置及常用命令

Git初始配置及常用命令 初始配置 在安装Git后,我们应该首先设置修改、查看用户名及邮箱 运行Git Bash,使用以下命令设置本地Git工具的用户名及邮箱(比如你的用户名是zhangsan,邮箱是zhangsan1123163.com)&#xff1…

GPOPS-II教程(2): 可复用火箭再入大气层最优轨迹规划问题

问题描述 考虑一类可复用火箭再入大气层最优轨迹规划问题,其动力学方程为 { r ˙ v sin ⁡ γ , θ ˙ v cos ⁡ γ sin ⁡ ψ r cos ⁡ ϕ , ϕ ˙ v cos ⁡ γ cos ⁡ ψ r , v ˙ − F d m − F g sin ⁡ γ , γ ˙ F l cos ⁡ σ m v − ( F g v − v r …

解决chrome浏览器总是将对站点的http访问改为https的问题

问题:vue项目本地运行出来的地址是http开头的,但在chrome浏览器中无法访问,在Edge浏览器就可以,发现是chrome总是自动将http协议升级为https。 已试过的有效的方法: 一、无痕模式下访问 无痕模式下访问不会将http自…

推送电子邮箱与其他营销手段如何有效结合?

推送电子邮箱的效果如何?怎么优化邮件推送的策略? 将推送电子邮箱与其他营销手段有效结合,可以显著提升营销效果和用户体验。AokSend将探讨如何将推送电子邮箱与社交媒体营销、内容营销、搜索引擎优化(SEO)等手段相结…

Python 实现Excel转TXT,或TXT文本导入Excel

Excel是一种具有强大的数据处理和图表制作功能的电子表格文件,而TXT则是一种简单通用、易于编辑的纯文本文件。将Excel转换为TXT可以帮助我们将复杂的数据表格以文本的形式保存,方便其他程序读取和处理。而将TXT转换为Excel则可以将文本文件中的数据导入…

鸿蒙应用开发 - 软件安装 - DevEco

第一步 前往下载点下载安装包下载中心 | 华为开发者联盟-HarmonyOS开发者官网,共建鸿蒙生态https://developer.huawei.com/consumer/cn/download/ 根据自身需求下载对应安装包 第二步 点击打开安装包,配置安装路径 我个人选择放E盘,避免占用c盘空间 第三步 …

Linux集群自动化维护-Ansible

1.1Ansible概述 自动化运维:批量管理,批量分发,批量执行,维护。。是python写的 批量管理工具: Ansible(无客户端):无客户端,基于ssh进行管理与维护 Saltstack &#…

RabbitMQ中lazyqueue队列

lazyqueue队列非常强悍 springboot注解方式开启 // 使用注解的方式lazy.queue队列模式 非常GoodRabbitListener(queuesToDeclare Queue(name "lazy.queue",durable "true",arguments Argument(name "x-queue-mode",value "lazy&…

RocketMQ源码学习笔记:Broker启动流程

这是本人学习的总结,主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Broker启动流程2、一些重要的类2.1、MappedFile2.2、MessgeStore2.3、MessageStore的加载启动流程 3、技术亮点3.1、 内存映射3.1.1、简介3.1.2、源码 1、Broker启动流程 Broker启动流程…

upload-labs第14关

upload-labs第14关 第十四关一、源代码分析代码审计 二、绕过分析a. 制作图片码首先需要一个照片,然后其次需要一个eval.php。 b.上传图片码上传成功 c.结合文件包含漏洞进行访问访问:http://192.168.1.110/upload-labs-master/include.php?filehttp://…

【Spine学习16】之 人物面部绑定

1、创建头部骨骼 一根头骨 以头骨为父结点创建一个面部控制器face-holder 2、创建头发和face面部控制结点的变换约束 左右头发的约束指向为face结点 3、设定后发的变换约束,约束指向为face结点,反方向移动 设置参数为-100 同理,耳朵也依…