
相应内外参如下相机型号 : ZED 2i序列号 : 31474187固件版本 : 相机 1523 / 传感器 778 左相机 Left 内参 分辨率 : 1280 x 720焦距 fx, fy : 536.4066, 536.4066主点 cx, cy : 642.2694, 351.1544内参矩阵 K :[[536.40655518 0. 642.26940918][ 0. 536.40655518 351.15435791][ 0. 0. 1. ]]视场角 FOV : h100.07°, v67.74°, d107.71°畸变系数 : [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] 右相机 Right 内参 分辨率 : 1280 x 720焦距 fx, fy : 536.4066, 536.4066主点 cx, cy : 642.2694, 351.1544内参矩阵 K :[[536.40655518 0. 642.26940918][ 0. 536.40655518 351.15435791][ 0. 0. 1. ]]视场角 FOV : h100.07°, v67.74°, d107.71°畸变系数 : [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] 加速度计 Accelerometer 参数 [说明] IMU 没有 fx/fy/cx/cy 那种相机内参它的参数 采样率 量程 分辨率 噪声密度 随机游走采样率 : 400.0 Hz量程 : -78.4800033569336 ~ 78.4800033569336 m/s²分辨率 : 0.002395019633695483 m/s²噪声密度 : 0.0004400000034365803 m/s²/√Hz随机游走 : 0.02019999921321869 m/s²/s/√Hz 陀螺仪 Gyroscope 参数 [说明] IMU 没有 fx/fy/cx/cy 那种相机内参它的参数 采样率 量程 分辨率 噪声密度 随机游走采样率 : 400.0 Hz量程 : -1000.0 ~ 1000.0 °/s分辨率 : 0.030517578125 °/s噪声密度 : 0.004991999827325344 °/s/√Hz随机游走 : 0.042399998754262924 °/s/s/√Hz 磁力计 Magnetometer 参数 [说明] IMU 没有 fx/fy/cx/cy 那种相机内参它的参数 采样率 量程 分辨率 噪声密度 随机游走采样率 : 50.0 Hz量程 : -2500.0 ~ 2500.0 µT分辨率 : 0.30000001192092896 µT噪声密度 : 0.07000000029802322 µT/√Hz随机游走 : N/A 气压计 Barometer 参数 [说明] IMU 没有 fx/fy/cx/cy 那种相机内参它的参数 采样率 量程 分辨率 噪声密度 随机游走采样率 : 25.0 Hz量程 : 300.0 ~ 1100.0 hPa分辨率 : 0.009999999776482582 hPa噪声密度 : 0.00039999998989515007 hPa/√Hz随机游走 : N/A 外参 左相机 Left - 右相机 Right 旋转矩阵 R :[[1. 0. 0.][0. 1. 0.][0. 0. 1.]]旋转角 (roll/pitch/yaw) : 0.0000° / -0.0000° / 0.0000°平移向量 t [右相机 Right 在 左相机 Left 系下的位置] : [0.11990686 0. 0. ]坐标变换P_左相机 Left R · P_右相机 Right t[左相机 Left 在 右相机 Right 坐标系中的位置] : [-0.11990686 0. 0. ]变换矩阵 T :[[1. 0. 0. 0.11990686][0. 1. 0. 0. ][0. 0. 1. 0. ][0. 0. 0. 1. ]] 外参 左相机 Left - IMU 旋转矩阵 R :[[ 0.99976206 0.01169387 -0.01841571][-0.0116109 0.99992198 0.00460632][ 0.01846814 -0.0043914 0.99981982]]旋转角 (roll/pitch/yaw) : -0.2517° / -1.0582° / -0.6654°平移向量 t [IMU 在 左相机 Left 系下的位置] : [ 0.023061 -0.000217 -0.002 ]坐标变换P_左相机 Left R · P_IMU t[左相机 Left 在 IMU 坐标系中的位置] : [-2.30210978e-02 -6.14721674e-05 2.42532406e-03]变换矩阵 T :[[ 9.99762058e-01 1.16938744e-02 -1.84157118e-02 2.30610017e-02][-1.16108973e-02 9.99921978e-01 4.60632052e-03 -2.17000023e-04][ 1.84681416e-02 -4.39140107e-03 9.99819815e-01 -2.00000009e-03][ 0.00000000e00 0.00000000e00 0.00000000e00 1.00000000e00]]双目基线 baseline 0.1199 m注意在运行代码与使用相机前需要先安装zed2i相机的sdk我的cuda是cu11.7所以安装的sdk是ZED_SDK_Windows_cuda11.8_v4.2.5.exesdk链接如下我用夸克网盘给你分享了「ZED_SDK_Windows_cuda11.8_v4.2.5.exe」点击链接或复制整段内容打开「夸克网盘APP」即可获取。/~52173aDuRT~:/链接https://pan.quark.cn/s/b46717dbb838?pwdjdNr提取码jdNr相机内外参直接提取的代码打印 ZED2i 的相机内参 / IMU 参数 / 外参。 本文件是 realsense-435i-vio/realsense_calib_params.py 的 ZED2i 移植版。 ZED2i 与 D435i 的标定信息来源不同 RealSense按流depth/color/infrared/accel/gyro分别取 profile ZED2i 所有参数都在 zed.get_camera_information() 里一次性给出。 映射 视频流内参 - camera_configuration.calibration_parameters.left_cam / right_cam IMU 参数 - sensors_configuration.accelerometer_parameters / gyroscope_parameters 采样率/量程/噪声密度/随机游走 外参 - calibration_parameters.stereo_transform左-右右相机在左相机系下的位姿t≈baseline sensors_configuration.camera_imu_transform左相机-IMU import math import numpy as np import pyzed.sl as sl # --------------------------------------------------------------------------- # 视频流内参左 / 右相机 # --------------------------------------------------------------------------- def print_video_intrinsics(name, cp): 打印单个相机内参。cp 为 sl.CameraParameters。 if cp is None: print(f[WARN] {name}: 参数不可用跳过) return K np.array([ [cp.fx, 0, cp.cx], [0, cp.fy, cp.cy], [0, 0, 1.0], ]) print(f\n {name} 内参 ) print(f 分辨率 : {cp.image_size.width} x {cp.image_size.height}) print(f 焦距 fx, fy : {cp.fx:.4f}, {cp.fy:.4f}) print(f 主点 cx, cy : {cp.cx:.4f}, {cp.cy:.4f}) print(f 内参矩阵 K :\n{K}) print(f 视场角 FOV : h{cp.h_fov:.2f}°, v{cp.v_fov:.2f}°, d{cp.d_fov:.2f}°) print(f 畸变系数 : {list(cp.disto)}) # --------------------------------------------------------------------------- # IMU 参数加速度计 / 陀螺仪 # --------------------------------------------------------------------------- # sl.SENSORS_UNIT 枚举 - 人类可读单位 _SENSOR_UNIT_STR { sl.SENSORS_UNIT.M_SEC_2: m/s², sl.SENSORS_UNIT.DEG_SEC: °/s, sl.SENSORS_UNIT.U_T: µT, sl.SENSORS_UNIT.HPA: hPa, sl.SENSORS_UNIT.CELSIUS: °C, sl.SENSORS_UNIT.HERTZ: Hz, } def _unit_str(sensor_unit): 把 sl.SENSORS_UNIT 枚举转成可读单位字符串。 return _SENSOR_UNIT_STR.get(sensor_unit, str(sensor_unit)) def print_sensor_parameters(name, sp): 打印单个传感器参数。sp 为 sl.SensorParameters。 if sp is None or not sp.is_available: print(f\n {name} 参数 (不可用)) return unit _unit_str(sp.sensor_unit) # sensor_range 是 numpy.ndarray形状 (2,)[min, max] rng sp.sensor_range print(f\n {name} 参数 ) print(f [说明] IMU 没有 fx/fy/cx/cy 那种相机内参) print(f 它的参数 采样率 量程 分辨率 噪声密度 随机游走) print(f 采样率 : {sp.sampling_rate} Hz) print(f 量程 : {rng[0]} ~ {rng[1]} {unit}) print(f 分辨率 : {sp.resolution} {unit}) nd N/A if math.isnan(sp.noise_density) else f{sp.noise_density} {unit}/√Hz rw N/A if math.isnan(sp.random_walk) else f{sp.random_walk} {unit}/s/√Hz print(f 噪声密度 : {nd}) print(f 随机游走 : {rw}) # --------------------------------------------------------------------------- # 外参 # --------------------------------------------------------------------------- def rotation_matrix_to_euler(R): 3x3 旋转矩阵 - (roll, pitch, yaw)单位度。 采用 ZYX 内旋约定R Rz(yaw) Ry(pitch) Rx(roll) roll 绕 X 轴、pitch 绕 Y 轴、yaw 绕 Z 轴。 sy np.sqrt(R[0, 0] ** 2 R[1, 0] ** 2) if sy 1e-6: roll np.arctan2(R[2, 1], R[2, 2]) pitch np.arctan2(-R[2, 0], sy) yaw np.arctan2(R[1, 0], R[0, 0]) else: # 万向锁退化pitch ≈ ±90° roll np.arctan2(-R[1, 2], R[1, 1]) pitch np.arctan2(-R[2, 0], sy) yaw 0.0 return np.degrees([roll, pitch, yaw]) def transform_to_R_t(transform): sl.Transform - (R, t)。transform.m 为 4x4 numpy.ndarray行主序。 布局同 ZED SDK 文档 [ R00 R01 R02 tx ] [ R10 R11 R12 ty ] [ R20 R21 R22 tz ] [ 0 0 0 1 ] m transform.m R np.array(m[:3, :3], dtypenp.float64) t np.array(m[:3, 3], dtypenp.float64) return R, t def print_extrinsics(name_from, name_to, transform): 打印外参旋转 平移 4x4 变换矩阵 欧拉角。 约定name_from - name_to 表示 name_to 在 name_from 坐标系下的位姿 机器人学里常见的 A - B B 在 A 系下的位姿即 T_A_B。 平移向量 t 即 name_to 原点在 name_from 系中的位置坐标变换为 P_{name_from} R · P_{name_to} t if transform is None: print(f[WARN] {name_from} - {name_to}: 参数不可用跳过) return R, t transform_to_R_t(transform) T np.eye(4) T[:3, :3] R T[:3, 3] t roll, pitch, yaw rotation_matrix_to_euler(R) # name_from 原点在 name_to 系中的位置反变换 -R^T·t pos_from_in_to (-R.T t).ravel() print(f\n 外参 {name_from} - {name_to} ) print(f 旋转矩阵 R :\n{R}) print(f 旋转角 (roll/pitch/yaw) : {roll:.4f}° / {pitch:.4f}° / {yaw:.4f}°) print(f 平移向量 t [{name_to} 在 {name_from} 系下的位置] : {t}) print(f 坐标变换P_{name_from} R · P_{name_to} t) print(f [{name_from} 在 {name_to} 坐标系中的位置] : {pos_from_in_to}) print(f 变换矩阵 T :\n{T}) def main(): init sl.InitParameters() init.coordinate_units sl.UNIT.METER zed sl.Camera() status zed.open(init) if status ! sl.ERROR_CODE.SUCCESS: print(f[ERROR] 无法打开 ZED2i请检查连接: {repr(status)}) return info zed.get_camera_information() calib info.camera_configuration.calibration_parameters sensors info.sensors_configuration print(f相机型号 : {info.camera_model}) print(f序列号 : {info.serial_number}) print(f固件版本 : 相机 {info.camera_configuration.firmware_version} / f传感器 {sensors.firmware_version}) # 视频流内参左 / 右相机 print_video_intrinsics(左相机 Left, calib.left_cam) print_video_intrinsics(右相机 Right, calib.right_cam) # IMU 参数 print_sensor_parameters(加速度计 Accelerometer, sensors.accelerometer_parameters) print_sensor_parameters(陀螺仪 Gyroscope, sensors.gyroscope_parameters) print_sensor_parameters(磁力计 Magnetometer, sensors.magnetometer_parameters) print_sensor_parameters(气压计 Barometer, sensors.barometer_parameters) # 外参 # stereo_transform左相机 - 右相机 右相机在左相机系下的位姿t ≈ baseline print_extrinsics(左相机 Left, 右相机 Right, calib.stereo_transform) print_extrinsics(左相机 Left, IMU, sensors.camera_imu_transform) print(f\n双目基线 baseline {calib.get_camera_baseline():.4f} m) print(f[说明] ZED2i 的灰度/彩色共用左相机无独立 RGB-IR 外参。) zed.close() if __name__ __main__: main()