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. 注意事项和问题

  1. 标定时,如果挥舞标定板,则不要穿黑白格子衫,穿了会死活标定不出来
  2. 如果出现问题 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里
  3. docker无法显示,所以生成不了 report-cam-awsome.pdf,这个文件就是 results-cam-awsome.txt 的pdf版,然后多了些图片,我没有搞明白图片作用
  4. docker标定如果报错,请关注下错误,因为docker没有显示环境,标定最后会提示类似 NO $DISPLAY的提示,指的应该是docker没有DISPLAY这个环境变量,不影响标定结果。如果没有针对该问题做配置,则忽略。
  5. 标定极吃内存。如果是物理机,建议32G内存起步,图片数量不要超过2300张。如果是docker,则不要超过1400张。物理机内存吃满会死机,只能强制关机(Ubuntu20.04),docker会直接报错,类似于多线程通信被关闭的异常。
  6. docker 进入容器的bash命令docker attach [容器id]
  7. 根据机器性能和图片数量不同,打 awsome.bag 包的时间约为10分钟,计算相机参数的时间为30分钟或更长,慢慢等着报错或者成功

kalibr标定单相机,自用指南,防忘记的更多相关文章

  1. 相机标定:kalibr标定工具箱使用总结

    1 多相机标定 1.1采集图像和IMU 1.2制作Bag包 1)组织文件结构 ~/kalibr_workspace/test/stereo_calib bagsrc cam0 (1+time(0))* ...

  2. 手眼标定之相机随动eye-in-hand 示例:handeye_movingcam_calibration

    * * This example explains how to use the hand eye calibration for the case where* the camera is atta ...

  3. ROS标定IDS相机

    参考 ROS 相机标定http://blog.csdn.net/ArtistA/article/details/51125560 ROS里的标定程序只要使用了OPNCV的标定程序: opencv 相机 ...

  4. 恒天云单节点部署指南--OpenStack H版本虚拟机单节点部署解决方案

    本帖是openstack单节点在虚拟机上部署的实践.想要玩玩和学习openstack的小伙伴都看过来,尤其是那些部署openstack失败的小伙伴.本帖可以让你先领略一下openstack的魅力.本I ...

  5. PHP表单安全过滤和防注入 htmlspecialchars() 和test_input()

    什么是 htmlspecialchars() 函数? htmlspecialchars() 函数把特殊字符转换为 HTML 实体.这意味着 < 和 > 之类的 HTML 字符会被替换为 & ...

  6. react 引用 layer (防忘记)

    1.先到 百度静态资源公共库 (http://cdn.code.baidu.com/)找到jquery和layer地址 2.找到./public/index.html 引入jquery和layer 3 ...

  7. 记录几个字符串转html的帮助类,已防忘记

    html的帮助类 /// <summary> /// Represents a HTML helper /// </summary> public partial class ...

  8. JavaScript面向对象--记录防忘记(一)

    1.理解对象: 创建自定义对象最简单的方式就是创建一个object实例,再给他添加属性和方法. let person = new Object(); person.name = 'zhangsan'; ...

  9. URLSearchParams和axios的post请求(防忘记)

    import axios from 'axios' Vue.prototype.axios = axios mounted () { let params = new URLSearchParams( ...

  10. 相机标定:PNP基于单应面解决多点透视问题

              利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文:  ...

随机推荐

  1. 简化 ASP.NET Core 依赖注入(DI)注册-Scrutor

    简化 ASP.NET Core 依赖注入(DI)注册-Scrutor Scrutor 是一个开源库,旨在简化 ASP.NET Core 应用程序中依赖注入(DI)的注册过程.通过自动扫描程序集中的类型 ...

  2. 《JavaScript 模式》读书笔记(7)— 设计模式1

    这些模式已经出现了相当长的一段时间,并被证明在许多情况下都非常有用.这也是为什么需要自己熟悉并谈论这些模式的原因. 虽然这些设计模式是与语言和实现方式无关的,并且人们已经对此研究了多年,但都主要是从强 ...

  3. Dapper.SimpleCRUD:Dapper的CRUD助手

    我们在项目开发中,面对一些高并发.大数据量等业务场景,往往对SQL语句的性能要求比较高,这个时候为了方便灵活控制,我们一般就会编写原生的SQL. Dapper就是一个非常高性能的轻量级ORM框架,Da ...

  4. VMpwn总结

    前言: 好久没有更新博客了,关于vm的学习也是断断续续的,只见识了几道题目,但是还是想总结一下,所谓vmpwn就是把出栈,进栈,寄存器,bss段等单独申请一块空闲实现相关的功能,也就是说一些汇编命令通 ...

  5. CI/CD集成规范

    集成方式说明 a.用户向Gitlab提交代码,代码中包含 Dockerfile, JenkinsFile文件. b.Jenkins监听Gitlab代码库的推送和变更事件 c.Jenkins调用mave ...

  6. docker-compose固定网段设置

    docker-compose在使用的时候,经常是多个docker组了个内网.而如果不指定内网地址的话,很容易和线下的网段冲突,会造成虽说外部IP和端口都映射好了,但是就是公网无法访问的情况. 解决方案 ...

  7. 【YashanDB知识库】Oracle pipelined函数在YashanDB中的改写

    本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802940.html?templateId=1718516 [问题分类]功能使用 ...

  8. Qt开发经验小技巧91-100

    数据库处理一般建议在主线程,如果非要在其他线程,务必记得打开数据库也要在那个线程,即在那个线程使用数据库就在那个线程打开,不能打开数据库在主线程,执行sql在子线程,很可能出问题. 新版的QTcpSe ...

  9. 【OpenGL ES】GLSL基础语法

    1 前言 ​ 本文将介绍 GLSL 中数据类型.数组.结构体.宏.运算符.向量运算.矩阵运算.函数.流程控制.精度限定符.变量限定符(in.out.inout).函数参数限定符等内容,另外提供了一个 ...

  10. 即时通讯技术文集(第7期):长连接网关、P2P等 [共10篇]

    为了更好地分类阅读52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第7 期. [- 1 -] 长连接网关技术专题(二):知乎千万级并发的高性能长连接网关技术实践 [ ...