首页 > 其他分享 >ROS单目相机标定 ------ 亲测

ROS单目相机标定 ------ 亲测

时间:2023-05-22 15:37:24浏览次数:38  
标签:usb image 相机 raw 单目 cam ------ ROS



ROS单目相机标定 ------ 亲测_ide




camera_calibration/Tutorials/MonocularCalibration - ROS Wiki

说明:本教程介绍使用camera_calibration的cameracalibrator.py节点在 ROS 上使用原始图像校准单目相机。 

1. 在开始之前

确保您具备以下条件:

  • 具有已知尺寸的大型棋盘。本教程使用 108 毫米正方形的 6*4棋盘。校准使用棋盘的内部顶点,因此“9x7”棋盘使用内部顶点参数“8x6”,如下例所示。
  • 一个光线充足的 5m x 5m 区域,没有障碍物并检查板图案
  • 通过 ROS 发布图像的单目相机

USB相机驱动

安装usbcam

如果你的ros版本是 melodic
sudo apt-get install ros-melodic-usb-cam
如果你的ros版本是 noetic
sudo apt-get install ros-noetic-usb-cam

查看接入的USB摄像头的设备号

ls /dev/video*
查看相机参数
v4l2-ctl -d /dev/video0 --all
找到关键信息
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
	Width/Height      : 1280/720
	Pixel Format      : 'MJPG'
	Field             : None
	Bytes per Line    : 0
	Size Image        : 1843200
	Colorspace        : sRGB
	Transfer Function : Default (maps to sRGB)
	YCbCr/HSV Encoding: Default (maps to ITU-R 601)
	Quantization      : Default (maps to Full Range)

修改launch文件,设置USB摄像头的编号

roscd usb_cam
cd launch
sudo gedit usb_cam-test.launch
修改的参数
<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video0" />
    <param name="image_width" value="1280" />
    <param name="image_height" value="720" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

启动摄像头

roslaunch usb_cam usb_cam-test.launch
2.相机内参标定
首先获取依赖项并编译驱动程序。
rosdep install camera_calibration
确保您的单目相机通过 ROS 发布图像。让我们列出主题以检查图像是否已发布:
rostopic list

这将显示所有已发布的主题,检查是否有image_raw主题。大多数 ROS 相机驱动程序提供的默认主题是:

/rosout
/rosout_agg
/usb_cam/camera_info
/usb_cam/image_raw
/usb_cam/image_raw/compressed
/usb_cam/image_raw/compressed/parameter_descriptions
/usb_cam/image_raw/compressed/parameter_updates
/usb_cam/image_raw/compressedDepth
/usb_cam/image_raw/compressedDepth/parameter_descriptions
/usb_cam/image_raw/compressedDepth/parameter_updates
/usb_cam/image_raw/theora
/usb_cam/image_raw/theora/parameter_descriptions
/usb_cam/image_raw/theora/parameter_updates
第三步:运行标定程序

注意下面这句话,不要生搬硬套,要根据实际调整!!!

rosrun camera_calibration cameracalibrator.py --size 6x4 --square 0.033 image:=/usb_cam/image_raw camera:=/usb_cam
拿着标定板移动,它会自动识别然后标定出64个点,这就是刚刚为什么是64的原因了
大概标定出几十个后,左侧第一个CALIBRATE按钮会亮起来点击CALIBRATE按钮,此时会变灰色图像,耐心等待,不是死机

点击SAVE,COMMIT按钮


标签:usb,image,相机,raw,单目,cam,------,ROS
From: https://blog.51cto.com/u_15202985/6324648

相关文章

  • 看懂IPv6+,这篇就够了
    5G网络的不断建设和普及,加速了我们迈入万物互联时代的步伐。我们的整个互联网络,正在发生翻天覆地的变化。急剧增加的网络连接数和流量,对网络的承载和传送能力,提出了前所未有的挑战。除了速率和带宽之外,5G在垂直行业的落地,也要求网络能够提供灵活的差异化定制服务能力。也就是说,面对......
  • 55 | 理解Disruptor(下):不需要换挡和踩刹车的CPU,有多快?
    上一讲,我们学习了一个精妙的想法,Disruptor通过缓存行填充,来利用好CPU的高速缓存。不知道你做完课后思考题之后,有没有体会到高速缓存在实践中带来的速度提升呢?不过,利用CPU高速缓存,只是Disruptor“快”的一个因素,那今天我们就来看一看Disruptor快的另一个因素,也就是......
  • 人的顶级能量从哪里获取?
    人的能量也分为三种,分别是初级能量,高级能量,和顶级能量这三种能量该怎么获取1:初级能量,从食物中获取人类的初级能量,靠吃饭喝水解决,饮食是人类赖以生存的基础在过去缺衣少食的阶段,人活着就是为了获取这些基本的能量。当然我们早就过了这个阶段了,现在很少人还处在三餐不饱/食不果腹的阶......
  • Flutter一天一控件之ListTile
    ListTile简介Flutter中的ListTile控件是一种常用的列表项控件,它可以用于显示列表中的每一个项,通常包含标题、副标题、图标等内容。ListTile控件的外观和行为类似于Android中的ListView中的列表项。一个简单的ListTile示例:ListTile(leading:Icon(Icons.person),//左侧图标......
  • LIMS实验室信息管理系统新增合同委托单
    LIMS系统如何快速新增委托单。委托单基本含有三个部分的内容:1.委托单基础内容如:委托单位信息,样品信息等2.付款单位信息。3.委托单测试项目。委托单基础内容可以通过委托模板自动填写委托单位信息和样品信息。委托单位信息能自定义字段:可以根据业务要求自定义委托单位的具体内容,填......
  • 51 | 分布式计算:如果所有人的大脑都联网会怎样?
    今天是原理篇的最后一篇。过去50讲,我们一起看了抽象概念上的计算机指令,看了这些指令怎么拆解成一个个简单的电路,以及CPU是怎么通过一个一个的电路组成的。我们还一起看了高速缓存、内存、SSD硬盘和机械硬盘,以及这些组件又是怎么通过总线和CPU连在一起相互通信的。......
  • 为什么古老的华夏文明在近现代会落后于欧洲文明?
    linkASML(生产光刻机卡我们脖子那个公司)有一个算法部门,总部在荷兰,我曾经在那研究路径优化问题,当时用到过基因算法,这种算法的原理很简单,就是模仿基因的遗传、突变和交互不断迭代去寻找近似最优解。但也不是完全没有难度,其中的一个难度就在于需要调整突变颗粒度,颗粒度太大会经常错过最......
  • 44 | 理解IO_WAIT:I/O性能到底是怎么回事儿?
    在专栏一开始的时候,我和你说过,在计算机组成原理这门课里面,很多设计的核心思路,都来源于性能。在前面讲解CPU的时候,相信你已经有了切身的感受了。第36讲讲解局部性原理的时候,我们一起看了通过把内存当作是缓存,来提升系统的整体性能。在第37讲然而,我们知道,并不......
  • 43 | 输入输出设备:我们并不是只能用灯泡显示“0”和“1”
    我们在前面的章节搭建了最简单的电路,在这里面,计算机的输入设备就是一个一个开关,输出设备呢,是一个一个灯泡。的确,早期发展的时候,计算机的核心是做“计算”。我们从“计算机”这个名字上也能看出这一点。不管是中文名字“计算机”,还是英文名字“Computer”,核心都是在”计算“这两......
  • 42 | 总线:计算机内部的高速公路
    专栏讲到现在,如果我再问你,计算机五大组成部分是什么,应该没有人不知道了吧?我们这一节要讲的内容,依然要围绕这五大部分,控制器、运算器、存储器、输入设备和输出设备。CPU所代表的控制器和运算器,要和存储器,也就是我们的主内存,以及输入和输出设备进行通信。那问题来了,CPU从......