记录1---在ROS下标定网络相机

这篇具有很好参考价值的文章主要介绍了记录1---在ROS下标定网络相机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 准备工作

2. 开始标定操作步骤

2.1 启动摄像头

2.2 启动标定程序

2.3 标定开始

3. 相机参数解释:

4. 参考文章


1. 准备工作

(工作环境Ubuntu18.04,网络摄像机,依赖功能包的安装)

能够成功打开网络相机:

打开方式可参考:

记录---在ROS中打开网络摄像机

安装所需的功能包以及依赖:

以Ubuntu18.04环境为例,ROS版本为melodic

可使用以下命令依次安装单目相机标定功能包camera_calibration及其相关工具:

sudo apt install ros-melodic-camera-calibration
sudo apt install ros-melodic-image-view
sudo apt install ros-melodic-image-proc

2. 开始标定操作步骤

2.1 启动摄像头

使用以下命令启动网络摄像头

roslaunch rocon_rtsp_camera_relay rtsp_camera_relay.launch --screen

正常启动画面如下:

... logging to /home/rose/.ros/log/4a61114a-eed9-11ed-b8da-000c2986565f/roslaunch-rose-virtual-machine-101519.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://rose-virtual-machine:41097/

SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.13
 * /rtsp_camera_relay/video_stream_url: rtsp://admin:fire...

NODES
  /
    rtsp_camera_relay (rocon_rtsp_camera_relay/rocon_rtsp_camera_relay_node)

auto-starting new master
process[master]: started with pid [101536]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 4a61114a-eed9-11ed-b8da-000c2986565f
process[rosout-1]: started with pid [101552]
started core service [/rosout]
process[rtsp_camera_relay-2]: started with pid [101555]
[ INFO] [1683685255.036209540]: Rtsp Camera : Initialising..
[ INFO] [1683685256.561323188]: Rtsp Camera : Initialised

若是出现错误,则原因可能是忘记了添加环境变量。可在自己的工作空间下执行一下命令再打开:

rose@rose-virtual-machine:~/demo02_ws$ source ./devel/setup.bash 
rose@rose-virtual-machine:~/demo02_ws$ roslaunch rocon_rtsp_camera_relay rtsp_camera_relay.launch --screen

也可以直接把变量添加进.bashrc文件中:在主目录中找到.bashrc文件打开,最后一行添加:

source ~/demo02_ws/devel/setup.bash

注意:添加路径是在自己的工作空间下,我的工作空间是demo02_ws。

2.2 启动标定程序

启动之前可以先查看相机话题发布是否正常,新建窗口输入以下命令:

rostopic list

输入结果如下:

/rosout
/rosout_agg
/rtsp_camera_relay/camera_info
/rtsp_camera_relay/image
/rtsp_camera_relay/image/compressed
/rtsp_camera_relay/image/compressed/parameter_descriptions
/rtsp_camera_relay/image/compressed/parameter_updates
/rtsp_camera_relay/image/compressedDepth
/rtsp_camera_relay/image/compressedDepth/parameter_descriptions
/rtsp_camera_relay/image/compressedDepth/parameter_updates
/rtsp_camera_relay/image/theora
/rtsp_camera_relay/image/theora/parameter_descriptions
/rtsp_camera_relay/image/theora/parameter_updates
/rtsp_camera_relay/status

可以看到有以下两个话题节点:/rtsp_camera_relay/camera_info
/rtsp_camera_relay/image

新建窗口使用以下命令启动标定程序:

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.04 image:=/rtsp_camera_relay/image camera:=/rtsp_camera_relay

解释一下几个输入参数:

Size:标定靶的内部角点个数(就是相邻格子连接处),这里使用的棋盘格一共六行,每行有八个内部角点,所以是8x6。
Square:这个参数对应每个棋盘格的边长,单位是米(根据实际情况调整),0.04就是4cm。
Image和camera:要标定的相机话题,及打开摄像头。
可以根据使用的摄像头和标定靶尺寸相应修改以上参数。


若是报错:

Waiting for service /rtsp_camera_relay/image/set_camera_info ...
Service not found

可以把启动程序修改为:

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.04 image:=/rtsp_camera_relay/image camera:=/rtsp_camera_relay --no-service-check

然后标定窗口就会打开,如下图所示:

ros相机标定,数码相机

 下面就是移动棋盘格,进行多角度移动,直到所有X Y size等校准侧边栏全部变绿

为了提高标定的准确性
应该尽量让标定把出现在摄像头视野范围内的各个区域,界面右上角的进度条会提示标定进度

  • X:表示标定板在视野中的左右位置,可使标定靶在摄像头视野中左右移动。
  • Y:表示标定板在视野中的上下位置,可使标定靶在摄像头视野中的上下移动。
  • Size:标定板在占视野的尺寸大小,可使标定靶在摄像头视野中的前后移动。
  • Skew:标定板在视野中的倾斜位置,可使标定靶在摄像头视野中的倾斜转动。

2.3 标定开始

也是当“calibration”按钮亮起时,已经有足够的数据用于校准,可以单击“calibration”查看结果。

校准大约需要一小会时间。窗户可能是灰色的,但等一下,它在工作。
  标定完成后,将在终端中看到校准结果,校准窗口中显示标定图像:
终端输出情况如图:

**** Calibrating ****
mono pinhole calibration...
D = [-0.5420886309378586, 0.16856004773492156, -0.02468167748398798, -0.023186888127802577, 0.0]
K = [1435.6485241191747, 0.0, 748.4086456723728, 0.0, 1489.2646834602426, 629.5585621554937, 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 = [1255.7337646484375, 0.0, 752.0018682244117, 0.0, 0.0, 1388.832275390625, 631.3326564556046, 0.0, 0.0, 0.0, 1.0, 0.0]
None
# oST version 5.0 parameters


[image]

width
1280

height
1024

[narrow_stereo]

camera matrix
1435.648524 0.000000 748.408646
0.000000 1489.264683 629.558562
0.000000 0.000000 1.000000

distortion
-0.542089 0.168560 -0.024682 -0.023187 0.000000

rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000

projection
1255.733765 0.000000 752.001868 0.000000
0.000000 1388.832275 631.332656 0.000000
0.000000 0.000000 1.000000 0.000000

评估标定结果

把标定板重新放到标定窗口,右上角有一个线性误差(也被称为重投影误差)的评估,值越小,标定结果越好。如下:

ros相机标定,数码相机

保存标定结果

点击SAVE按钮就会把数据保存到默认的目录下:

终端会显示以下信息:

('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')

此文件夹tmp在根目录(其他位置,计算机)中显示,双击进入会看到calibrationdata.tar.gz压缩包,打开会发现有图片和文件数据信息:

ros相机标定,数码相机

注意:要及时的把标定结果压缩包从默认路径tep文件夹中移出,要不然隔段时间再次打开可能随时就没有标定的结果了。

点击commit按钮,提交数据并退出程序,可以看到提示写入文件head_camera.yaml。

这一步是将标定结果写入相机的内存中,从而使相机能够根据标定结果对图像进行矫正。也可以自行编写文件来使用标定后的参数,从而不需点击commit按钮。

3. 相机参数解释:

相机标定通常涉及使用已知的物体或模式来测量相机的成像特性和位置关系,从而估计相机的内部参数和外部参数。具体而言,相机内部参数包括焦距、主点坐标、图像畸变等,而相机外部参数包括相机位置和朝向(旋转矩阵和平移矩阵)。

上述结果中,终端最后一段代码给出了相机标定后的结果,其中包含了相机的内部和外部参数:

  • D是相机的畸变参数,包括径向畸变和切向畸变,共有5个参数。
  • K是相机的内部参数矩阵,包括焦距、主点坐标和相机的skew参数,共有9个参数。
  • R是相机的旋转矩阵,描述了相机坐标系和世界坐标系之间的旋转关系,共有9个参数。
  • P是相机的投影矩阵,描述了相机坐标系中的点在图像平面上的投影,共有12个参数。

旋转矩阵这里给出的是3x3的单位矩阵,表示相机坐标系和世界坐标系之间没有旋转关系,也就是相机坐标系和世界坐标系重合。

[narrow_stereo]、camera matrix(对应K)、distortion(对应D)、rectification(矫正矩阵)、projection(对应P)是相机标定中常用的几个概念和参数,具体含义如下:

  • [narrow_stereo]:指定了标定所使用的相机的类型。narrow_stereo是一个窄视场的立体相机模型。
  • camera matrix:相机矩阵,也称为内部参数矩阵,描述了相机在成像时的内部参数,包括焦距、主点坐标、相机的skew参数等信息。一般用3x3的矩阵表示,例如:
K = [f_x  s   c_x         
      0  f_y  c_y       
      0   0    1]

其中,f_x和f_y是焦距,s是相机的skew参数,c_x和c_y是主点的坐标。

  • distortion:畸变参数,描述了相机的镜头对图像中心以外的区域产生的畸变。一般来说,畸变可以分为径向畸变和切向畸变两种。畸变参数通常用5个值来描述,即k1、k2、p1、p2、k3等。例如:
D = [k1 k2 p1 p2 k3]
  • rectification:矫正矩阵,表示图像畸变校正所用的矫正变换矩阵。这里给出的是3x3的单位矩阵如果矫正矩阵rectification为单位矩阵,表示经过标定后的摄像机不需要进行校正,因为它已经在标定过程中被成功地矫正了。一般用3x3的矩阵表示,例如:
R = [r11 r12 r13          
     r21 r22 r23     
     r31 r32 r33]

其中,r11、r12、r13是旋转矩阵R的元素。

  • projection:投影矩阵,描述了相机成像时的外部参数,包括相机在空间中的位置和朝向等信息。它把三维空间中的点映射到相机成像平面上的二维点。一般用3x4的矩阵表示,例如:
P = [f_x' s' c_x' t_x
     0  f_y' c_y' t_y
     0    0    1    0]

其中,f_x'和f_y'是焦距,s'是相机的skew参数,c_x'和c_y'是主点的坐标,t_x、t_y和t_z是从世界坐标系原点到相机坐标系原点的平移向量。"t_z" 代表相机的平移向量中的第三个分量。在单目相机中,它通常是未知的,因为相机只有一个视角,无法确定深度信息。

4. 参考文章

1、摄像头标定--camera_calibration

2、Ubuntu16(ROS_Kinetic)海康威视网络摄像机(单目)内参标定

3、使用ros标定相机的内参和外参

4、ROS 摄像头参数标定------过程简洁完整。

5、ros中相机标定-------------解决运行标定节点出错,可用no-service-check。

6、【ROS】usb_cam相机标定--------给出了最后一步,添加结果到launch文件。文章来源地址https://www.toymoban.com/news/detail-744683.html

到了这里,关于记录1---在ROS下标定网络相机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • micropython 自制数码相机

    像头(CAMERA或WEBCAM)又称为电脑相机、电脑眼、电子眼等,是一种视频输入设备,被广泛的运用于视频 会议,安防系统  、图像采集系统、 环境监控 、工业现场过程控制 等方面。本实验用TPYBoard  v102以 及PTC06 串口摄像头模块DIY一个简易的照相机。 1.所用器材:    TPY

    2024年02月19日
    浏览(50)
  • ROS功能包camera_calibration标定相机内参

    目录 1 安装 2启动相机程序 3启动功能包 4 采集图像进行标定 Ubuntu 20.04 + ROS Noetic 单目相机:basler Ubuntu20.04对应的ROS版本号为 noetic basler相机外部硬触发,转换图像格式并发送到ROS下的topic_basler软件手动硬触发信号 Ubuntu20.04 ROS读取basler相机图像步骤 根据自己标定板尺寸,输入

    2024年02月04日
    浏览(39)
  • 使用Matlab、Opencv、Ros三种方法完成相机标定

    1、相机标定的意义         在机器视觉领域,相机的标定是一个关键的环节,它决定了机器视觉系统能否有效的定位,能否有效的计算目标物。相机标定意义在于将现实世界中的三维物体与相机图像对应的二维物体映射起来,实际上就是透视投影。 2、相机标定原理   

    2024年04月13日
    浏览(61)
  • 如何从数码相机恢复已删除的照片?

    “嗨,我删除了索尼数码相机中的所有照片。有什么办法可以让他们回来吗?” ——刘凯 我们经常从数码相机中删除照片。但是,如果我们误删除了一些重要的照片,则很难将其恢复,因为删除的照片可能会绕过回收站或垃圾箱,并且数码相机存储卡中没有“最近删除”文

    2024年04月09日
    浏览(54)
  • U盘/硬盘/数码相机RAW格式文件丢失的原因|恢复方法

    在现代数字生活中,U盘、硬盘以及数码相机等设备已经成为我们储存和分享数据的主要工具。然而,当这些设备中的RAW格式文件出现丢失时,我们可能会陷入困境。面对这种情况,了解如何恢复这些RAW格式文件就变得至关重要。 一、理解RAW格式文件 RAW格式文件是一种原始数

    2024年02月12日
    浏览(54)
  • 小米12s ultra,索尼xperia1 iv,数码相机 拍照对比

    首先说明所有的测试结果和拍摄数据我放到百度网盘了(地址在结尾) 我一直想知道现在的手机和相机差距有多大,到底差在哪儿? 先说结论: 1.1英寸的手机cmos(2022年) 6年前(2016)的入门款相机(m43画幅) 2.手机 不能换镜头,只能在特定的拍摄距离才能发挥出全部的实力.数码变焦画质损

    2024年02月09日
    浏览(83)
  • 【计算机视觉:算法和应用】第二章:图像形成——2.3数码相机

    2.1几何图元与变换 2.2相机辐射成像        从一个或多个光源开始,在世界中一个或多个表面反射并通过相机镜头后,光最终到达成像传感器。到达传感器的光子是如何转换为我们在数字图像上看到的数字(R,G,B)值的呢?在这一节,我们构建了一个简单的模型来解释大多数

    2024年01月19日
    浏览(63)
  • ORBBEC(奥比中光)AstraPro相机在ROS2下的标定与D2C(标定与配准)

    相机自带的D2C效果不好,颜色和点云没有很好地匹配上,自己按照下面的介绍手动匹配一下。 在下载来的sdk,里面没有标定的文件:ost.yaml. 需要自己进行标定、生成。 我所使用的相机型号是Astra_pro,它是一个单目结构光相机,有一个RGB摄像头+一个IR摄像头。从数量上算是一个

    2024年02月06日
    浏览(45)
  • 使用ROS功能包camera_calibration进行单目相机和双目相机的内参和外参标定

    本文总结使用ROS标定单目和双目相机的过程,同时提供生成棋盘格文件的方法。 参考链接: [1]使用ros标定相机的内参和外参 [2]ROS下采用camera_calibration进行双目相机标定 棋盘格可以自己买一个,或者打印一个粘在板子上,棋盘格电子版生成可以参考博客《使用kalibr标定工具进

    2024年02月11日
    浏览(45)
  • 基于虚拟机安装Ubuntu18.04+ROS的2D相机或电脑自带摄像头的在线标定方法

    硬件 :笔记本电脑自带摄像头或者通过usb接口连接的相机 软件 :虚拟机+ubuntu18.04+ROS1 melodic(针对ubuntu18.04对应的ROS版本) 首先确保在主目录下,创建ROS工程 克隆代码 编译代码 这个地方我报错了 – No package ‘libv4l2’ found CMake Error at /usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:419

    2024年02月02日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包