RflySimSDK v3.05
RflySimSDK说明文档
载入中...
搜索中...
未找到
UE4CtrlAPI.Radiation类 参考

此类用于定义和处理给定场景中各种对象的辐射属性。 更多...

Public 成员函数

 __init__ (self, any ue)
 辐射类的构造函数。
 
 sendUE4SetStencilValueByActorName (self, Actorname, StencilValue, is_name_regex=False, windowID=-1)
 由Actor名向UE发送辐射设置模板值的命令
 
 sendUE4SetStencilValueByMeshComponentName (self, Meshname, StencilValue, is_name_regex=False, windowID=-1)
 由Actor的Mesh组件名向UE发送设置辐射模板值的命令
 
 sendUE4SetStencilValueByCopterID (self, CopterID, StencilValue, windowID=-1)
 由CopterID向UE发送设置辐射模板值的命令
 
 radiance (self, absoluteTemperature, emissivity, dx=0.01, response=None)
 物体辐射的计算
 
 get_new_temp_emiss_from_radiance (self, tempEmissivity, response)
 由辐射强度计算模板值
 

Public 属性

 ue
 
 tempEmissivity
 

详细描述

此类用于定义和处理给定场景中各种对象的辐射属性。

辐射类初始化时带有预定义的对象集,每个对象都有特定的温度(以开尔文为单位), 发射率(与理想黑体相比),以及一个标志表示名称是否引用角色Actor。

根据预设的二维列表,计算普朗克公式的积分,得到一个辐射值,并 归一到0~255范围内,发送给UE,然后UE将这个辐射值直接设置为 物体的模板值,然后由 CameraCapture 上写的材质规则去渲染纹理图片,然后用原来的图像传感器的接口返回到python。

构造及析构函数说明

◆ __init__()

__init__ ( self,
any ue )

辐射类的构造函数。

参数
ue与辐射属性关联的Unreal Engine对象。

使用预定义的值(包括对象名称、温度、发射率和是否为角色Actor的标志)初始化tempEmissivity数组。

tempEmissivity数组示例如下

self.tempEmissivity = np.array(
    [
            ["Floor", 276, 0.96, True],
            ["SK_Man_Arms", 309, 0.98, False],
            ["SK_Man_Head", 309, 0.98, False],
    ]
)                
这里需要预先给定场景中1:所有物体的名字(或名字中的某一段)、2:温度(开尔文)、
3:发射率(与理想黑体)、4:是否是Actor的名字(如果是Actor的名字,那么它所有的Mesh的辐射值都会被设置,否则会设置一个Mesh)
每个地图都会不一样,所以需要预先给定。

摄氏度与开尔文的转换关系为:
K = C + 273.15

成员函数说明

◆ get_new_temp_emiss_from_radiance()

get_new_temp_emiss_from_radiance ( self,
tempEmissivity,
response )

由辐射强度计算模板值

  • 参数
    tempEmissivity包含物体温度和发射率的二维数组。数组的第一列是物体的ID,第二列是温度,第三列是发射率。
    response响应函数,用于调整辐射强度的计算。默认为None,即不调整。
    返回
    tempEmissivityNew 新的二维数组,包含物体的ID和计算得到的辐射强度ID值。 调用 radiance 函数,获得辐射强度
    然后用这个辐射强度归一化后乘以255(0~255)作为ID,这个ID传给UE后会作为物体的stencil值,UE根据这个值来显示物体的辐射强度 这个值越大,物体越亮,反之越小越暗

    这个值越大,物体越亮,反之越小越暗

详细实现
    1. 获取物体的数量 numObjects。
    2. 调用 radiance 函数计算每个物体的辐射强度:
       - 提取 tempEmissivity 数组中的温度和发射率,并转换为浮点数。
       - 使用提取的温度和发射率调用 radiance 函数,得到每个物体的辐射强度数组 L。
    3. 对辐射强度数组 L 进行归一化处理,并将其缩放到0到255的范围内,转换为8位无符号整数类型。
    4. 构建新的二维数组 tempEmissivityNew,包含物体的ID和归一化后的辐射强度ID值。
    5. 返回新的二维数组 tempEmissivityNew。
+ 函数调用图:

◆ radiance()

radiance ( self,
absoluteTemperature,
emissivity,
dx = 0.01,
response = None )

物体辐射的计算

  • \begin{eqnarray*} L\left(T, \epsilon_{\text {avg }}, R_{\lambda}\right)=\epsilon_{\text {avg }} \int_{\lambda=8 \mu m}^{\lambda=14 \mu m} R_{\lambda}\left(\frac{2 h c^{2}}{\lambda^{5}} \frac{1}{\exp \left(\frac{h c}{k T \lambda}\right)-1}\right) d \lambda \end{eqnarray*}

    Fomula 1: 对普朗克函数在8~14μm波长上积分得到物体的辐射强度。
    其中 \(R_\lambda \)是相机的接受率(程序中默认为1),
    \(\varepsilon_{avg} \)是物体的红外发射率(它和温度T都是 tempEmissivity 预先给定的值),
    它们俩乘以积分得到的辐射功率密度就是相机接收到的该物体的辐射功率密度。
参数
absoluteTemperature温度
emissivity发射率
dx用于积分的步长
response响应函数(默认为None),实际是相机的接受率
返回
radiance 积分得到的物体辐射强度

用物体的温度和发射率(提前给定的),由普朗克公式的积分计算出物体的辐射强度。

普朗克函数可以计算一个黑体在某个温度下某个波长的光谱辐射度(W/m²/μm),然后光源发出的总功率密度(单位是W/m²)可以通过光谱辐照度在所有波长(或能量)上积分来计算

详细实现
    1. 定义积分步长和边界 
    定义波长范围 wavelength 为8到14微米之间,以 dx 为步长。
    2. 定义普朗克公式中的常数
    定义常数 c1 和 c2:
    - c1 = 1.19104e8,是一个与普朗克常数和光速相关的常数。
    - c2 = 1.43879e4,是另一个与普朗克常数、光速和波尔兹曼常数相关的常数。
    3. 定义相机接受率
    根据是否提供了响应函数 response,计算辐射强度 radiance:
    - 如果提供了 response,则计算时会考虑响应函数的影响。
    - 否则默认response=1,直接根据普朗克公式和发射率计算辐射强度。
    4.  计算积分
    对辐射强度数组进行积分,计算总辐射强度:
    - 如果 absoluteTemperature 是多维数组,则在每个维度上分别进行积分。
    - 否则,对整个数组进行积分。
    5. 返回总辐射强度。
+ 这是这个函数的调用关系图:

◆ sendUE4SetStencilValueByActorName()

sendUE4SetStencilValueByActorName ( self,
Actorname,
StencilValue,
is_name_regex = False,
windowID = -1 )

由Actor名向UE发送辐射设置模板值的命令

  • 参数
    ActornameMesh组件名
    StencilValue物体辐射模板值
    is_name_regex是否为Actor名
    windowIDRflySim3D窗口ID
+ 函数调用图:

◆ sendUE4SetStencilValueByCopterID()

sendUE4SetStencilValueByCopterID ( self,
CopterID,
StencilValue,
windowID = -1 )

由CopterID向UE发送设置辐射模板值的命令

  • 参数
    CopterID物体的序号
    StencilValue辐射模板值
    windowIDRflySim3D窗口ID
+ 函数调用图:

◆ sendUE4SetStencilValueByMeshComponentName()

sendUE4SetStencilValueByMeshComponentName ( self,
Meshname,
StencilValue,
is_name_regex = False,
windowID = -1 )

由Actor的Mesh组件名向UE发送设置辐射模板值的命令

  • 参数
    MeshnameMesh组件名
    StencilValue物体辐射模板值
    is_name_regex是否为Actor名
    windowIDRflySim3D窗口ID
+ 函数调用图:

该类的文档由以下文件生成: