RflySimSDK v4.01
RflySimSDK说明文档
载入中...
搜索中...
未找到
鱼眼相机

鱼眼相机输出

1. 功能概述

1.1 支持的功能操作

传感器输出

  • 提供 180°~270° 视场角的广角图像输出,捕捉周围大范围环境。
  • 支持将全景图像以球面投影方式映射为平面图像。
  • 适配 CubeMap 格式输出,可实现 360° 环境映射图像。

应用场景

  • **无人机监控与侦察**:

    • 捕获大范围区域的实时影像,用于快速侦查和环境监控。

    **自动驾驶感知系统**:

    • 提供大范围视角的车辆环境感知,支持盲区检测与避障。

    **虚拟现实与全景建模**:

    • 用于全景视频拍摄和 VR 场景生成。

    **工业巡检**:

    • 覆盖设备周围的监控范围,识别可能存在的问题区域。

1.2 使用示例

配置文件添加传感器

以下是配置文件 Config.json 的示例代码,用于添加鱼眼相机:

{
"VisionSensors":[
{
"SeqID":0,
"TypeID":8,//鱼眼相机
"TargetCopter":1,
"TargetMountType":0,
"DataWidth":640,
"DataHeight":640,
"DataCheckFreq":30,//鱼眼相机比较消耗性能,单个鱼眼相机运行时在开发电脑能稳定在30帧左右
"SendProtocol":[0,127,0,0,1,9999,0,0],
"CameraFOV":200,//视场角取180~270之间,单位度
"SensorPosXYZ":[0,0,-0.3],
"SensorAngEular":[0,0,0],
"otherParams":[512,0,0,0,0,0,0,0]//otherParams[0]为CubeMap尺寸
}
]
}

**参数说明**:

  • DataWidthDataHeight
    • 定义图像的分辨率,分辨率越高,输出的图像越清晰,但对系统性能需求越高。
  • CameraFOV
    • 视场角,单位为度,推荐设置为 180°~270° 之间。
  • otherParams[0]
    • 定义 CubeMap 的尺寸,决定全景球面投影的分辨率。通常建议该值小于 DataWidthDataHeight

Python 调用传感器接口 取图显示相关代码:

vis = VisionCaptureApi.VisionCaptureApi() # 创建一个视觉传感器实例
vis.jsonLoad() # 加载Config.json中的传感器配置文件
isSuss = vis.sendReqToUE4() # 向RflySim3D发送取图请求
vis.startImgCap() # 开启取图
vis.hasData[i] # 图片i数据是否更新
vis.Img[i] # 图片i数据
cv2.imshow('Img'+str(i),vis.Img[i]) # 显示图片i图像

例程链接

1.3 现实中的鱼眼相机

  • 硬件示例
    • **GoPro Max**:提供 360° 全景拍摄,适用于户外活动和运动场景。

      **Insta360 ONE R**:模块化设计,可切换鱼眼镜头模块,支持高分辨率全景视频录制。

      **FLIR Blackfly S Fisheye Camera**:工业级鱼眼相机,适用于机器人视觉和机器学习。

      **Ricoh Theta Z1**:全景拍摄相机,支持高质量 360° 照片和视频输出。


2. 传感器配置

2.1 传感器安装

参数名称 取值范围 含义
TargetMountType 0: 固定载具上(相对几何中心);1: 固定载具上 (相对底部中心);2: 固定地面上(监控);3:相对地面坐标系的吊舱相机,固定飞机上,但相机姿态不随飞机变化(地面坐标系);4:将传感器附加到另外一个传感器上 决定传感器的所属载体对象及安装方式。
TargetCopter 目标传感器ID(默认为0)或目标实体对象 ID (默认 1) 决定传感器安装方式后,选择目标测量对象ID。传感器固定在载具或地面上时,该值对应目标载具或其它实体对象的CopterID;传感器固定在其它传感器上时,该值对应目标传感器**SeqID**。
SensorPosXYZ [x, y, z] (单位:米) 相对于传感器所属载体对象的安装位置。
EulerOrQuat 0: 欧拉角;1: 四元数 选择安装姿态的表示方式。
SensorAngEular [roll, pitch, yaw] (弧度) 安装姿态,欧拉角方式表示。
SensorAngQuat [q0, q1, q2, q3] 安装姿态,四元数方式表示。

2.2 网络通信配置

参数名称 取值范围 含义
SendProtocol [mode, IP, port, …] 配置数据传输协议,支持共享内存和 UDP。
SendProtocol[0] 0: 共享内存;1: UDP 压缩传输 选择传输方式。
SendProtocol[5] 端口号 数据传输的目标端口号。

2.3 传感器技术规格

技术参数 配置值 说明
SeqID 0 每个传感器的唯一编号。
TypeID 8 传感器类型编号,8 表示鱼眼相机。
DataHeight 640 图像垂直分辨率,越高图像越清晰。
DataWidth 640 图像水平分辨率,越高图像越清晰。
DataCheckFreq 30 Hz 数据刷新频率,默认 30 Hz,性能消耗较大。
CameraFOV 200° 视场角范围,推荐 180°~270°。
otherParams[0] 512 CubeMap 的投影尺寸,影响全景投影的图像分辨率。

3.鱼眼相机接缝问题优化

[](https://www.paulbourke.net/dome/fish2/)

3.1 概述

鱼眼相机的**接缝**是指在将多幅鱼眼图像或立方体贴图面去畸变后拼接到同一个视图时,邻接图像块之间由于投影、视角或曝光差异而产生的可见分界线或融合伪影 (sigport.org, en.wikipedia.org)。这些接缝常出现在立方体贴图各面交界处(如四色网格之间的边界)或双鱼眼镜头拼接区域(如两个圆形投影的重叠带) (sigport.org)。主要成因包括:

  • **视差误差**(Parallax):镜头未严格保持同一旋转中心,深度变化导致边缘错位 (sigport.org)。
  • **投影模型不一致**:不同视角或贴图面采用各自的畸变矩阵与投影参数,边缘处难以完美对齐 (panotourplugin.com)。
  • **曝光/色彩差异**:各镜头自动曝光或色彩校准不统一,拼接后接缝处亮度、色调突变明显 (en.wikipedia.org)。

3.2 示例图解

下方以四个典型示例说明鱼眼相机接缝的位置与形态 (en.wikipedia.org):

  1. 四色网格立方体贴图
  • 图中四块不同颜色的网格(红、黄、绿、蓝)分别对应立方体贴图的四个面,其交界处即为接缝 。

立方体展开十字形

  • 将六面贴图展开为十字形,边缘处黑色空白与纹理过渡不连续,典型展示了接缝位置 。

双鱼眼重叠拼接

  • 两张圆形鱼眼投影在重叠区域形成窄条带,未融合前可见明显分界 。

自然场景鱼眼拼接

  • 多镜头拍摄的雪山全景,在圆形视图的四等分处仍能看到轻微缝合线条 。

以上示例展示了接缝在不同拼接方式下的典型表现。要实现无缝全景,需要结合缝隙查找(Seam Finding)、多频带融合(Multi-band Blending)和曝光补偿等算法进行后处理,以抹平这些可见分界。

3.3 基于UE的解决方案

新增一个后处理体积按照网页内容操作Camera360v2 解决渲染有接缝问题 UE5.4 - 哔哩哔哩

  1. World Outliner场景视图 中选中已有的 Post Process Volume 实例。
  2. Details 面板中,展开 Post Process Volume Settings**,找到 **Infinite Extent (Unbound) 选项,并**取消勾选**。

2. 缩小原体积的 Bounds

  1. 选中该体积,在 Viewport 中会出现一个立方体的可视化包围盒。
  2. 使用 Scale 工具(快捷键 R**)或者在 **Details → Transform → Scale 下调整,亦可在 Details 面板搜索 **Box Extent**(若为 Blueprint 中的组件)直接精确输入数值,将其缩小到目标区域大小 dev.epicgames.comdev.epicgames.com

3. 新增局部 Post Process Volume

  1. 打开 Place Actors 面板(默认在左上),搜索 “Post Process Volume”。
  2. 将其**拖拽**到场景中相机活动的核心区域,使其中心对齐目标区域。
  3. 同样使用 Scale 工具或 Box Extent 字段,将其包围盒调至仅覆盖该局部区域 dev.epicgames.comyoutube.com

4. 配置新体积的后处理参数

在新创建的 Post Process VolumeDetails 面板中,按以下类别展开并设置:

4.1 Bloom(发光)
  • **Method(方法)**:Standard
  • **Intensity(强度)**:0.0
  • **Threshold(阈值)**:0.0

将 Bloom 彻底关闭,避免亮斑或光晕伪影 dev.epicgames.com

4.2 Exposure(曝光)
  • **Metering Mode(计量模式)**:Manual
  • **Exposure Compensation(曝光补偿)**:11.0
  • **Apply Physical Camera Exposure(应用物理摄像机曝光)**:✓

手动曝光保证每帧亮度一致,不受环境光变化影响 dev.epicgames.comdev.epicgames.com

4.3 Chromatic Aberration(色差)
  • **Intensity(强度)**:0.0
  • **Start Offset(开始偏移)**:0.0

关闭色差,消除分色边缘 dev.epicgames.com

4.4 Image Effects(图像效果)
  • **Vignette Intensity(晕映强度)**:0.0
  • **Sharpen(锐化)**:0.0

关闭晕映与锐化,确保画面平滑自然 dev.epicgames.com

4.5 Lens Flares(镜头光晕)

Directional Light 组件的 Details → Light 中:

  • 取消勾选 Enable Light Shaft Occlusion(光束遮挡)
  • 取消勾选 Enable Light Shaft Bloom(光束泛光)

彻底关闭光束效果,避免光芒射线干扰全景 dev.epicgames.com

4.6 Volumetric Fog(体积雾)

在同一 Directional LightAvanced → Light → Volumetric Scattering Intensity 设置为 0.0

关闭光源对体积雾的贡献,避免雾中光照渲染 dev.epicgames.com


完成以上四步后,即可实现:

  • 原全局后处理体积不再生效于全场景;
  • 局部体积仅作用于关键区域;
  • 关闭所有可能引入伪影的后处理效果;
  • 手动曝光补偿确保全景渲染的一致性。

场景打包之前可以在场景里面添加一个场景捕获立方体(场景捕获组件),然后内容浏览器新增一个立方体渲染目标纹理,把这个纹理给到这个相机,在场景中移动相机,直接看纹理有没有接缝