< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-相机畸变(Camera Distortion)

ROS2与Gazebo11入门教程-相机畸变(Camera Distortion)

说明:

  • 介绍相机畸变(Camera Distortion)

简介

  • 相机镜头通常会表现出一定程度的光学畸变,从而导致图像变形。一个示例就是鱼眼镜头相机,该相机通常在机器人应用程序中使用,来为对象识别或导航任务获取更宽广视野的环境数据。

  • 使用Matlab或OpenCV等相机校准工具可以提取相机畸变系数以及相机其它固有参数。有了这些畸变系数,用户就可以在Gazebo中创建带有畸变的相机传感器图像数据。

具体实现

  • Gazebo支持基于Brown畸变模型的相机仿真。该畸变模型要求从相机校准工具获得5个畸变系数k1、k2、k3、p1和p2。系数k是畸变模型的径向分量,而系数p则是畸变模型的切向分量。

  • 当前Gazebo的相机仿真实现存在以下需要加以考虑的局限性:

      1. Gazebo 版本5和6中仅支持桶形畸变(barrel distortion),该桶形畸变的k1通常为负值。Gazebo 7.7版本中增加了枕形畸变模型。
      1. 畸变会应用到相机图像纹理上。这意味着获得生成的图像数据后要将其矫正。需要注意的是,与具有桶形畸变的真实相机镜头相比,最终的仿真相机图像(尤其是在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畸变系数即可。

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与gazebo11入门教程