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

  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分钟或更长,慢慢等着报错或者成功

__EOF__

本文作者echo_lovely
本文链接https://www.cnblogs.com/echo-lovely/p/18671181.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   echo_lovely  阅读(131)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示