使用ArUco标记同步多台pan/tilt/zoom摄像机云台参数的技术咨询
问题描述
初始配置两台可同时观测到同一ArUco标记的pan/tilt/zoom(PTZ)摄像机,两台设备均已完成标定获取相机矩阵,标记尺寸为已知量,可以测算得到标记到各摄像机的旋转向量、平移向量,同时两台摄像机当前的pan、tilt、zoom参数均已知。
移动ArUco标记后操控第一台摄像机跟踪标记,可记录该设备新的pan/tilt/zoom参数,测算得到新的旋转、平移向量。需要操控第二台摄像机对准标记,求计算该设备所需的全新pan、tilt设置值的方法。
已掌握基于两组旋转、平移向量构建组合变换矩阵的方法,但不清楚如何适配pan/tilt参数的变化需求。
计算逻辑说明
前提条件
- 初始状态下两台PTZ摄像机位置固定,仅姿态可调,均可观测到目标ArUco标记
- 已知初始状态下:两台相机各自相对于标记的旋转向量
rvec_1_init、tvec_1_init,rvec_2_init、tvec_2_init,以及两台相机初始的pan/tilt值pan_1_init、tilt_1_init、pan_2_init、tilt_2_init - 已知标记移动后第一台相机的新参数:相对于标记的旋转向量
rvec_1_new、tvec_1_new,以及当前的pan/tilt值pan_1_new、tilt_1_new
核心计算步骤
- 坐标系统一转换
选择初始ArUco标记的位置作为世界坐标系原点,将所有位姿参数统一到该坐标系下:- 初始状态下第一台相机在世界坐标系下的位姿为
T_w2c1_init = [R_1_init | t_1_init],其中R_1_init是rvec_1_init通过罗德里格斯公式转换得到的3×3旋转矩阵 - 同理可得初始状态下第二台相机在世界坐标系下的位姿
T_w2c2_init = [R_2_init | t_2_init],两台相机之间的外参变换矩阵可直接计算:T_c1_2_c2 = T_w2c2_init * T_w2c1_init.inv()
- 初始状态下第一台相机在世界坐标系下的位姿为
- 计算标记移动后第一台相机的新世界位姿
- 标记移动后的新位置在第一台相机当前坐标系下的位姿为
T_c1new_2_mark = [R_1_new | t_1_new],其中R_1_new为rvec_1_new转换得到的旋转矩阵 - 结合第一台相机的初始位姿和pan/tilt变化量,计算得到第一台相机当前在世界坐标系下的位姿
T_w2c1_new
- 标记移动后的新位置在第一台相机当前坐标系下的位姿为
- 推导标记在世界坐标系下的新位置
标记新的世界坐标系位姿为T_w2mark_new = T_w2c1_new * T_c1new_2_mark.inv() - 计算第二台相机需要调整到的旋转姿态
PTZ相机安装位置固定,因此第二台相机的世界坐标系平移量和初始状态一致,只需让第二台相机的光轴指向标记新世界坐标的中心,即可得到第二台相机需要的目标旋转矩阵R_2_target - 将旋转矩阵转换为pan/tilt参数
- 按照你所用设备的PTZ控制坐标系定义,将旋转矩阵分解为绕垂直轴的旋转角(对应pan)和绕水平轴的旋转角(对应tilt),注意匹配设备的正负方向定义(比如部分设备pan顺时针为正、tilt向上为正,需做对应符号适配)
- 最终得到的角度值扣除第二台相机的初始pan/tilt偏移量,就是需要下发的控制参数
注意事项
- 计算过程中要保持所有坐标系的方向定义一致,避免出现符号翻转导致的角度偏差
- 如果PTZ相机的zoom参数会影响内参,需要同步更新相机内参矩阵再做姿态解算
- 可先做小范围移动测试,验证旋转矩阵到pan/tilt的转换规则是否和设备实际控制逻辑匹配
内容的提问来源于stack exchange,提问作者Josh Davis
相关产品推荐
相关产品推荐

