目录
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
然后标定窗口就会打开,如下图所示:
下面就是移动棋盘格,进行多角度移动,直到所有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
评估标定结果
把标定板重新放到标定窗口,右上角有一个线性误差(也被称为重投影误差)的评估,值越小,标定结果越好。如下:
保存标定结果
点击SAVE按钮就会把数据保存到默认的目录下:
终端会显示以下信息:
('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')
此文件夹tmp在根目录(其他位置,计算机)中显示,双击进入会看到calibrationdata.tar.gz压缩包,打开会发现有图片和文件数据信息:
注意:要及时的把标定结果压缩包从默认路径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。文章来源:https://www.toymoban.com/news/detail-744683.html
6、【ROS】usb_cam相机标定--------给出了最后一步,添加结果到launch文件。文章来源地址https://www.toymoban.com/news/detail-744683.html
到了这里,关于记录1---在ROS下标定网络相机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!