kalibr标定单相机,自用指南,防忘记
1. 标定环境
1.1 从源码编译(linux环境,建议ubuntu 18或20)
步骤见 kalibr wiki
1.2 Docker
- 如果实体机为Ubuntu,则见official docker
- 如果实体机为windows环境,则在docker hub中找使用量最高的那个,我找的是stereolabs/kalibr,虽然有好几年没有更新了
2. 使用方法
2.1 修改aprilgrid.yaml,测量标定纸得出具体数据
target_type: 'aprilgrid' #gridtype 标定纸类型
tagCols: 8 #number of apriltags 列数
tagRows: 6 #number of apriltags 行数
tagSize: 0.05 #size of apriltag, edge to edge [m] 每个色块大小,单位为m,似乎是从这个色块起点到下个色块的起点
tagSpacing: 0.30 #ratio of space between tags to tagSize 两个色块中间的空隙占整个色块的比例
2.2 截图方法
def save_img():
cam_url = 'rtsp://admin:admin@192.168.1.11/cam/realmonitor?channel=1&subtype=0' # 相机的rtsp地址
vc = cv2.VideoCapture(cam_url) # 读入视频文件
rval = vc.isOpened()
pic_path = 'prefix/cam/cam0/' # prefix可自定义,但是cam/cam0似乎不能改
if not os.path.exists(pic_path):
os.makedirs(pic_path)
while rval: # 循环读取视频帧
try:
rval, frame = vc.read()
if rval:
tns = str(time.time_ns())
# 存储为图像,保存名为 当前时间的纳秒数.jpg
cv2.imwrite(pic_path + tns + '.png', frame)
print(tns)
cv2.waitKey(20)
else:
cv2.waitKey(20)
except StandardError:
cv2.waitKey(20)
print("occure an error\n")
continue
vc.release()
2.3 标定命令
当前所在文件夹为 截图代码中的prefix文件夹,里面只有cam文件夹
kalibr_bagcreater --folder ./cam/ --output-bag awsome.bag # 将cam文件夹打包为awsome.bag,并保存到当前目录下,
# 等待命令执行完,需要一段时间
kalibr_calibrate_cameras --target ../../aprilgrid.yaml --bag ./awsome.bag --models pinhole-radtan --topics /cam0/image_raw # 记得替换 aprilgrid.yaml 和 awsome.bag 的路径,建议使用相对路径,便于复用
2.4 标定结果
- 如果为物理机标定
- camchain-awsome.yaml
- results-cam-awsome.txt
- report-cam-awsome.pdf
- 如果为docker标定
- camchain-awsome.yaml
- results-cam-awsome.txt
- docker标定没有report-cam-awsome.pdf文件
3. 注意事项和问题
- 标定时,如果挥舞标定板,则不要穿黑白格子衫,穿了会死活标定不出来
- 如果出现问题
Cameras are not connected through mutual observations, please check the data,参照Kalibr单目相机标定:Cameras are not connected through mutual observations, please check the data,物理机标定直接找源代码改,docker的话在/kalibr-workspace里 - docker无法显示,所以生成不了 report-cam-awsome.pdf,这个文件就是 results-cam-awsome.txt 的pdf版,然后多了些图片,我没有搞明白图片作用
- docker标定如果报错,请关注下错误,因为docker没有显示环境,标定最后会提示类似
NO $DISPLAY的提示,指的应该是docker没有DISPLAY这个环境变量,不影响标定结果。如果没有针对该问题做配置,则忽略。 - 标定极吃内存。如果是物理机,建议32G内存起步,图片数量不要超过2300张。如果是docker,则不要超过1400张。物理机内存吃满会死机,只能强制关机(Ubuntu20.04),docker会直接报错,类似于多线程通信被关闭的异常。
- docker 进入容器的bash命令
docker attach [容器id] - 根据机器性能和图片数量不同,打 awsome.bag 包的时间约为10分钟,计算相机参数的时间为30分钟或更长,慢慢等着报错或者成功
kalibr标定单相机,自用指南,防忘记的更多相关文章
- 相机标定:kalibr标定工具箱使用总结
1 多相机标定 1.1采集图像和IMU 1.2制作Bag包 1)组织文件结构 ~/kalibr_workspace/test/stereo_calib bagsrc cam0 (1+time(0))* ...
- 手眼标定之相机随动eye-in-hand 示例:handeye_movingcam_calibration
* * This example explains how to use the hand eye calibration for the case where* the camera is atta ...
- ROS标定IDS相机
参考 ROS 相机标定http://blog.csdn.net/ArtistA/article/details/51125560 ROS里的标定程序只要使用了OPNCV的标定程序: opencv 相机 ...
- 恒天云单节点部署指南--OpenStack H版本虚拟机单节点部署解决方案
本帖是openstack单节点在虚拟机上部署的实践.想要玩玩和学习openstack的小伙伴都看过来,尤其是那些部署openstack失败的小伙伴.本帖可以让你先领略一下openstack的魅力.本I ...
- PHP表单安全过滤和防注入 htmlspecialchars() 和test_input()
什么是 htmlspecialchars() 函数? htmlspecialchars() 函数把特殊字符转换为 HTML 实体.这意味着 < 和 > 之类的 HTML 字符会被替换为 & ...
- react 引用 layer (防忘记)
1.先到 百度静态资源公共库 (http://cdn.code.baidu.com/)找到jquery和layer地址 2.找到./public/index.html 引入jquery和layer 3 ...
- 记录几个字符串转html的帮助类,已防忘记
html的帮助类 /// <summary> /// Represents a HTML helper /// </summary> public partial class ...
- JavaScript面向对象--记录防忘记(一)
1.理解对象: 创建自定义对象最简单的方式就是创建一个object实例,再给他添加属性和方法. let person = new Object(); person.name = 'zhangsan'; ...
- URLSearchParams和axios的post请求(防忘记)
import axios from 'axios' Vue.prototype.axios = axios mounted () { let params = new URLSearchParams( ...
- 相机标定:PNP基于单应面解决多点透视问题
利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文: ...
随机推荐
- 简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor Scrutor 是一个开源库,旨在简化 ASP.NET Core 应用程序中依赖注入(DI)的注册过程.通过自动扫描程序集中的类型 ...
- 《JavaScript 模式》读书笔记(7)— 设计模式1
这些模式已经出现了相当长的一段时间,并被证明在许多情况下都非常有用.这也是为什么需要自己熟悉并谈论这些模式的原因. 虽然这些设计模式是与语言和实现方式无关的,并且人们已经对此研究了多年,但都主要是从强 ...
- Dapper.SimpleCRUD:Dapper的CRUD助手
我们在项目开发中,面对一些高并发.大数据量等业务场景,往往对SQL语句的性能要求比较高,这个时候为了方便灵活控制,我们一般就会编写原生的SQL. Dapper就是一个非常高性能的轻量级ORM框架,Da ...
- VMpwn总结
前言: 好久没有更新博客了,关于vm的学习也是断断续续的,只见识了几道题目,但是还是想总结一下,所谓vmpwn就是把出栈,进栈,寄存器,bss段等单独申请一块空闲实现相关的功能,也就是说一些汇编命令通 ...
- CI/CD集成规范
集成方式说明 a.用户向Gitlab提交代码,代码中包含 Dockerfile, JenkinsFile文件. b.Jenkins监听Gitlab代码库的推送和变更事件 c.Jenkins调用mave ...
- docker-compose固定网段设置
docker-compose在使用的时候,经常是多个docker组了个内网.而如果不指定内网地址的话,很容易和线下的网段冲突,会造成虽说外部IP和端口都映射好了,但是就是公网无法访问的情况. 解决方案 ...
- 【YashanDB知识库】Oracle pipelined函数在YashanDB中的改写
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802940.html?templateId=1718516 [问题分类]功能使用 ...
- Qt开发经验小技巧91-100
数据库处理一般建议在主线程,如果非要在其他线程,务必记得打开数据库也要在那个线程,即在那个线程使用数据库就在那个线程打开,不能打开数据库在主线程,执行sql在子线程,很可能出问题. 新版的QTcpSe ...
- 【OpenGL ES】GLSL基础语法
1 前言 本文将介绍 GLSL 中数据类型.数组.结构体.宏.运算符.向量运算.矩阵运算.函数.流程控制.精度限定符.变量限定符(in.out.inout).函数参数限定符等内容,另外提供了一个 ...
- 即时通讯技术文集(第7期):长连接网关、P2P等 [共10篇]
为了更好地分类阅读52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第7 期. [- 1 -] 长连接网关技术专题(二):知乎千万级并发的高性能长连接网关技术实践 [ ...