写在前面
最近研究在Gazebo中仿真px4,使用Apriltag-ros包对Apriltag二维码检测的时候发现光源对检测影响非常大,因此想要在仿真世界中设置多个光源以消除背光面(暗面),以提高检测成功率。虽然在.world文件中能够在开头就找到标签,比如:
<light name='sun' type='directional'>
<cast_shadows>1</cast_shadows>
<pose>0 0 10 0 -0 0</pose>
<diffuse>0.8 0.8 0.8 1</diffuse>
<specular>0.2 0.2 0.2 1</specular>
<attenuation>
<range>1000</range>
<constant>0.9</constant>
<linear>0.01</linear>
<quadratic>0.001</quadratic>
</attenuation>
<direction>-0.5 0.1 -0.9</direction>
<spot>
<inner_angle>0</inner_angle>
<outer_angle>0</outer_angle>
<falloff>0</falloff>
</spot>
</light>
但是实在是不理解其中各标签的作用,尤其type,不知道有哪些类型的光源可以选择,在网络上查询没有找到合适的回答,最终在查阅官方文档后找到了相关的资料,想到可能有同学也对这一块比较困惑,因此写这篇文章对标签中各参数进行一个简单的介绍。
官方文档链接
https://gazebosim.org/docs/garden/sdf_worlds
如下:
type中主要包括了point、directional和spot类型,下面对每个类型进行简单介绍。
point类型
点光源类型,此时环境光照受光源pose设置的影响,可以看到图中正方体迎光面被照亮,而背光面明显更加暗。diffuse和specular标签似乎和色调和明度有关系,但注意该标签在Gazebo中可以设置为0-255的整数,而在.world文件中却是设置为0-1的小数,Gazebo根据设置的小数*255并取最近整数在其中显示数值。direction标签在point类型下没有作用。
range标签表示了光源照射范围,将范围设置为20,照射范围明显缩小,范围之外为黑,如图:
attenuation标签中参数设置了光源的某些特性,可以尝试修改观察变化。
可以设置多个光源,环境亮度会随着光源数量增加而增加,如图在对角一共设置了两个光源,亮度显著增加,并且可以观察到光源轮廓(似乎可以用于仿真路灯?):
directional类型
directional类型为方向光源,默认的sun光源就是这个类型。该类型下环境光照情况与光源位置没有关系,如图:
pose在该类型下没有作用,diffuse和specular标签作用与point类型相同,见上文。direction标签可以改变光线角度,如图改变该标签的值,阴影的方向也会响应变化。attenuation标签在该类型下没有作用。设置多个光源也可以增加环境亮度。
spot类型
spot类型光源可以模拟射光灯效果,如图所示,其中标签中Inner angle作用不明确,outer angle设置了照射范围的大小,range也是设置照射范围,但所作用不同,试验便知。
falloff设置了照射区域以外的亮度,设置为0时,其他区域完全为黑,如图:
pose标签设置了光源放置位置,对环境光照有影响,和direction标签一起可以控制光照区域的位置。diffuse、specular和attenuation标签作用同point,见上文。