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. 下列哪个选项是对 WebSocket 的正确描述?

    A.  一种扩展 HTTP 的协议,通信消息以 XML 格式描述. B.  使用 http或https作为URI连接的前缀,并使用与HTTP和HTTPS相同的端口号进行通信. C.  它是一种双向通信 ...

  2. VTK 视角的旋转、平移、缩放

    在CAD/CAM软件中,都需要旋转.平移和缩放视角,来观察操作图形.由于VTK定义的交互的类型不是很适用,所有通过定义一套自己的交互方式. 在下面代码中,鼠标左键平移,滚轮缩放,右键旋转. 先定义一个 ...

  3. Three.js案例-360全景房看

    在 360° 看房功能中,我们需要在浏览器中创建一个类似虚拟现实的场景,使得用户能够查看环境的每一个角落.这一功能的实现本质上是利用 球体映射技术,即通过将全景图作为纹理贴图映射到一个反向的球体上,用 ...

  4. nanoFramework

    nanoFramework 01: Getting started with nanoFramework! 08: .NET nanoFramework GPIO, I2C, SPI and othe ...

  5. Shell三元表达式

    Shell三元表达式   shell能否实现三元表达式呢?像下面这样: int a = (b == 5) ? c : d; 实现方法: a=$([ "$b" == 5 ] & ...

  6. linux shell移植,sh不支持数组及bash移植

    查看此时系统shell ls -al /bin/sh Linux 操作系统缺省的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bou ...

  7. Qt/C++音视频开发52-采集本地屏幕桌面的终极设计

    一.前言 最开始设计的时候,只考虑了一个屏幕的情况,这种当然是最理想的情况,实际上双屏或者多屏的用户也不在少数,比如我这两个屏幕,屏幕1是1080P,屏幕2是2K分辨率,打印两个屏幕的区域是 QRec ...

  8. Qt数据库应用19-图片转pdf

    一.前言 用户的需求真的是千奇百怪,刚做完不同页面横向纵向排版的需求,又来个需要图片转pdf的需求,提供静态函数直接使用. 经过这么些年的社会的毒打,我的原则是:用户是上帝和大爷,尽量站在用户的角度换 ...

  9. [转]vue-router动态添加路由的方法,addRouter添加路由,提示:Duplicate named routes definition

    问题描述:在做使用vue-router动态添加路由的方法,addRouter添加,使用 console.log(this.$router.options.routes) 打印对象,发现添加成功,但是一 ...

  10. 使用 Visual Studio Code 进行调试

    现在是时候实践你新获得的调试知识了. 我们刚好有一个完美的机会. 在我们的 Tailwind Traders 应用中,我们正在开发一项新功能:允许以多种货币显示产品的价格. 一位同事为这一目的编写了一 ...