自己使用标定板对深度相机进行标定。
参考:http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration
在下面的网站中可下载棋盘格标定板,可用A4纸打印下来。
http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration?action=AttachFile&do=view&target=check-108.pdf
roscore
roslaunch realsense2_camera demo_pointcloud.launch
$ rosdep install camera_calibration
rostopic list
RGB图像的话题:
/camera/color/camera_info
/camera/color/image_raw
Depth图像的话题:
/camera/depth/camera_info
/camera/depth/image_rect_raw
注意:我的depth的为_rect_raw,在修改标定代码中的路径时要注意。
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.243 image:=/camera/color/image_raw camera:=/camera/color
说明:
若是上面的代码报错:
“ Waiting for service /camera/color/set_camera_info …
Service not found “
则在上述代码后面加上”–no-service-check“:
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.0243 image:=/camera/color/image_raw camera:=/camera/color --no-service-check
即可进入标定界面:

上下左右移动标定板,当“CALIBRATE”变为绿色的时候,就可以了。
点击“CALIBRATE”后,稍作等待,即可在终端看到标定的参数:

注意此处的图像路径为“/camera/depth/image_rect_raw”。
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.0243 image:=/camera/depth/image_rect_raw camera:=/camera/depth --no-service-check
目前还没有解决的问题:
深度相机标定depth要将红外发射器用不透光的材质的东西遮住,并且在黑暗环境下,用红外光照射
这里有两个红外摄像头,是否是要进行双目相机的标定?
双目相机标定官方文档:http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration
我的标定界面一片漆黑
我在网上见到的对深度图进行标定的相机都是kinect相机,而kinect有些型号的相机是基于TOF的,realsense d435是基于结构光的,有可能这是我进行深度图标定失败的原因。
改天试一试kinect。
ROS中的camera_calibration包,其代码实现主要使用了OpenCV中的calibration模块 。
得到的标定结果如下:
= [0.23244826907781227, -0.08573299096457011, 0.05008213017343726, -0.08067275070179597, 0.0]
K = [1135.1350732747046, 0.0, 41.11323684505894, 0.0, 1067.9415171380786, 509.1845758553174, 0.0, 0.0, 1.0]
R = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P = [1086.77734375, 0.0, 18.500314902303217, 0.0, 0.0, 1084.970458984375, 527.9177954151601, 0.0, 0.0, 0.0, 1.0, 0.0]
None
# oST version 5.0 parameters
[image]
width
640
height
480
[narrow_stereo]
camera matrix
1135.135073 0.000000 41.113237
0.000000 1067.941517 509.184576
0.000000 0.000000 1.000000
distortion
0.232448 -0.085733 0.050082 -0.080673 0.000000
rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
projection
1086.777344 0.000000 18.500315 0.000000
0.000000 1084.970459 527.917795 0.000000
0.000000 0.000000 1.000000 0.000000
各标定参数的意义:
image_width、image_height代表图片的长宽
camera_name为摄像头名
camera_matrix规定了摄像头的内部参数矩阵
distortion_model指定了畸变模型
distortion_coefficients指定畸变模型的系数
rectification_matrix为矫正矩阵,一般为单位阵
projection_matrix为外部世界坐标到像平面的投影矩阵
点击SAVE,保存校准参数和校准中使用的图像。一切都将在压缩文件夹/tmp/calibrationdata.tar.gz中提供。
点击save,终端会出现:
在此路径下会出现保存的文件:

里面存放的是标定的图片和求得参数的txt文件和yaml文件:

Camera Calibration Parser帮助您创建一个 yml 文件,您可以使用camera_info_url参数加载几乎所有 ros 相机驱动程序。
简单地加载校准文件并不能纠正图像。要进行整改,请使用image_proc 包。
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年
我有一个像这样的ruby类:require'logger'classTdefdo_somethinglog=Logger.new(STDERR)log.info("Hereisaninfomessage")endend测试脚本行如下:#!/usr/bin/envrubygem"minitest"require'minitest/autorun'require_relative't'classTestMailProcessorClasses当我运行这个测试时,out和err都是空字符串。我看到消息打印在stderr上(在终端上)。有没有办法让Logger和capture_io一起玩得