oxffff
(oxffff)
1
1. yaml中的
rectification_matrix:
rows: 3
cols: 3
data: [1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000]
projection_matrix:
rows: 3
cols: 4
data: [762.919983, 0.000000, 996.031350, 0.000000, 0.000000, 778.708130, 596.658613, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000]
是什么含义?自行标定的结果如何填入?
2. 对相机进行标定并填入yaml后,节点输出的图像是否已完成畸变矫正?
你好,这个文件实际上是一个叫GDC的硬件需要的文件,详细定义请参考多媒体章节,了解GDC部件(GDC属于VPS)。-
对于hobot_mipi_cam这个程序而言,指定后发布的nv12图像就是已经完成畸变校正的运算了,畸变校正的效果一般来说都还可以,如果需要更好的效果一般建议专门对手上的Sensor进行畸变校正,得到新的yaml文件
oxffff
(oxffff)
3
确定hobot_mipi_cam内部能做校正?我看代码中camera_calibration_info_只是原封不动的发布出来了,没看到校正部分的实现
您好,您是怎么处理的能分享一下吗?我正遇到和您一样的问题,如果可以得到您的帮助我将不胜感激,谢谢您
瓜仔
(瓜仔)
5
这帖里楼主后来没有回来跟进,所以没有现成的「他的处理方式」可以抄。不过这两个问题本身可以说清楚:
1. yaml 含义和自标定结果怎么填
这就是标准 ROS camera_info 格式:intrinsic_matrix 是内参(fx、fy、cx、cy),distortion_coefficients 是畸变系数,rectification_matrix(R)单目下就是单位阵,projection_matrix(P)前 3×3 一般等于内参。
自己标定最省事的路径是直接用 ROS2 的 camera_calibration 包对着棋盘格跑一遍:
ros2 run camera_calibration cameracalibrator \
--size 8x6 --square 0.025 \
image:=/image_raw camera:=/camera
标定完产出的 ost.yaml 字段和 GC4663_calibration.yaml 一一对应,直接替换文件,或把节点的 camera_calibration_file_path 指到新文件即可。
2. 节点到底有没有做畸变矫正
楼主的读码结论大概率是对的:X3 上 hobot_mipi_cam 只是加载这个 yaml 并发布 /camera_info,图像流本身不做矫正(可以实测确认:换一份差异明显的 yaml,看输出画面是否变化)。官方回复里说的 GDC 是指硬件具备 VPS/GDC 畸变矫正能力,需要单独调 GDC 接口、初始化时传入内参,不是 mipi_cam 节点内自动完成的,参考多媒体开发章节:7.3.1 系统概述 | RDK X3/X5 DOC
所以想要矫正后的图像,两条路:
- 下游节点根据
/camera_info 的内参和畸变系数做 CPU undistort(简单场景够用);
- 走 VPS/GDC 硬件矫正(X5 的 mipi_cam 有
gdc_enable 参数可在节点内开硬件矫正,X3 上建议先 ros2 param list /mipi_cam 确认有没有对应开关,没有就得自己接 GDC)。