ROS2与Gazebo11入门教程-相机畸变(Camera Distortion)
说明:
- 介绍相机畸变(Camera Distortion)
简介
相机镜头通常会表现出一定程度的光学畸变,从而导致图像变形。一个示例就是鱼眼镜头相机,该相机通常在机器人应用程序中使用,来为对象识别或导航任务获取更宽广视野的环境数据。
使用Matlab或OpenCV等相机校准工具可以提取相机畸变系数以及相机其它固有参数。有了这些畸变系数,用户就可以在Gazebo中创建带有畸变的相机传感器图像数据。
具体实现
Gazebo支持基于Brown畸变模型的相机仿真。该畸变模型要求从相机校准工具获得5个畸变系数k1、k2、k3、p1和p2。系数k是畸变模型的径向分量,而系数p则是畸变模型的切向分量。
当前Gazebo的相机仿真实现存在以下需要加以考虑的局限性:
- Gazebo 版本5和6中仅支持桶形畸变(barrel distortion),该桶形畸变的k1通常为负值。Gazebo 7.7版本中增加了枕形畸变模型。
- 畸变会应用到相机图像纹理上。这意味着获得生成的图像数据后要将其矫正。需要注意的是,与具有桶形畸变的真实相机镜头相比,最终的仿真相机图像(尤其是在4个角上)的视野要更窄。补偿这种影响的一种解决方法就是增大Gazebo中相机传感器的视野。
创建带有畸变的相机模型
要添加一个带有畸变的相机模型,请执行以下操作步骤:
新建一个模型目录,命令为:
mkdir -p ~/.gazebo/models/distorted_camera
- 在该目录中创建一个模型配置文件,命令为:
gedit ~/.gazebo/models/distorted_camera/model.config
- 将以下内容粘贴到该模型配置文件中:
<?xml version="1.0"?>
<model>
<name>Distorted Camera</name>
<version>1.0</version>
<sdf version='1.5'>model.sdf</sdf>
<author>
<name>My Name</name>
<email>me@my.email</email>
</author>
<description>
My distorted camera.
</description>
</model>
- 在该目录中创建一个model.sdf文件,命令为:
gedit ~/.gazebo/models/distorted_camera/model.sdf
- 将以下代码块粘贴到该模型SDF文件中,该代码块是标准相机模型的一个副本,但增加了畸变:
<?xml version="1.0" ?>
<sdf version="1.5">
<model name="distorted_camera">
<link name="link">
<pose>0.05 0.05 0.05 0 0 0</pose>
<inertial>
<mass>0.1</mass>
<inertia>
<ixx>0.000166667</ixx>
<iyy>0.000166667</iyy>
<izz>0.000166667</izz>
</inertia>
</inertial>
<collision name="collision">
<geometry>
<box>
<size>0.1 0.1 0.1</size>
</box>
</geometry>
</collision>
<visual name="visual">
<geometry>
<box>
<size>0.1 0.1 0.1</size>
</box>
</geometry>
</visual>
<sensor name="camera" type="camera">
<camera>
<horizontal_fov>1.047</horizontal_fov>
<image>
<width>320</width>
<height>240</height>
</image>
<clip>
<near>0.1</near>
<far>100</far>
</clip>
<distortion>
<k1>-0.25</k1>
<k2>0.12</k2>
<k3>0.0</k3>
<p1>-0.00028</p1>
<p2>-0.00005</p2>
<center>0.5 0.5</center>
</distortion>
</camera>
<always_on>1</always_on>
<update_rate>30</update_rate>
<visualize>true</visualize>
</sensor>
</link>
</model>
</sdf>
- 启动Gazebo:
gazebo
- 插入带有畸变的相机模型,方法为:在左面板中,选择“插入(Insert)”选项卡,然后点击“Distorted Camera”模型。将该相机模型拖放到仿真世界中的某个位置上释放,并在该相机模型前方放置一个方盒(见下图)
- 要查看该畸变相机图像,请执行以下操作:点击“窗口(Window)”->“话题可视化(Topic Visualization)”菜单项(或者按下Ctrl + T组合键)来打开“话题选择(Topic Selector)”对话框。
- 找到名称像/gazebo/default/distorted_camera/link/camera/image的话题,并单击该话题,然后点击“确定(Okay)”按钮。这样就会打开一个“相机浏览(Camera View)”窗口,该窗口会显示相机图像数据。
- 如您所见,该相机图像有畸变,通过方盒的曲线边缘可以明显看出这种畸变。要调整畸变,只需要修改model.sdf文件中的k1、k2、k3、p1和p1畸变系数即可。
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号