九州工業大学 CIR-KIT Blog

九工大自律移動ロボット製作プロジェクトCIR-KITの技術系ブログ

No.5-2:センサについて(カメラの歪み 編)

gazebo_logo

検証日時

02/14/2015 (Sat)

概要

Gazeboのチュートリアル第五弾「Sensors」。
シミュレーションのセンサは環境を分析し、センサになるべくよく似たデータストリームを生成します。
チュートリアルでは、センサの使い方と修正方法について説明します。 今回はその「Camera Distortion」編です。
公式サイトを適当に翻訳しただけですので、あしからず。

レベル

BEGINNER

環境
PC : Lenovo ThinkPad X240
Prosessor : Intel Core i7-4600U (2.10GHz, 4MB, 1600MHz)
RAM : PC3-12800 DDR3L (8GB)
OS : Ubuntu 14.04 LTS 64bit
Kernel : 3.13.0-44-generic
Gazebo : Version 5.0.1
参考

GAZEBO Tutorial-Sensors

はじめに

カメラのレンズはたいてい光学の角度ゆがみがあり、これにより、イメージ(像)が歪む。例として、タスクを実行したり、物体を発見するのに、より広い範囲の環境視野を確保する目的でロボティクスの分野で広く使用されている、魚眼カメラが挙げられる。
MatlabやOpenCVのようなカメラキャリブレーションツールを使うと、カメラ固有のパラメータに付随した、歪み係数をなしにすることができる。そのような歪み系数とともに、Gazeboの中に歪んだカメラセンサを生成することができる。

現在の実装

Gazeboでは、現在、Brown’s distortion model#Software_correction)に基づいたカメラのシミュレーションをサポートしています。このモデルでは、カメラのキャリブレーションツールから取得できる歪み系数をk1k2k3p1p2としている。kという係数は歪みモデルの放射状の構成であり、pという係数はタンジェントの構成を示す。   現在の実装には以下のようないくつかの制限がある。

  1. 樽状の歪みだけがサポートされており、たいていは、k1の値が負である。

  2. 歪みは、カメラのイメージテクスチャに適用されています。これは、イメージデータを生成し、ねじっているだけのものを使っていることを意味する。このことは、最終的なイメージ(特に角では)が現実の樽状の歪みを持ったカメラレンズよりも、狭い視野になるという警告を持つことになる。この現象を償う一つの解決策はGazeboの中で、カメラセンサの視野を増加させるという方法である。

カメラを歪みとともに生成する

歪みのあるカメラモデルを追加するには:

  1. モデルのディレクトリを作る
1
mkdir -p ~/.gazebo/models/distorted_camera
  1. model.configファイルを生成する
1
gedit ~/.gazebo/models/distorted_camera/model.config
  1. model.configに以下の内容をコピペする
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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>
  1. ~/.gazebo/models/distorted_camera/model.sdfファイルを生成する
1
gedit ~/.gazebo/models/distorted_camera/model.sdf
  1. model.sdfに以下の内容をコピペする。以下のモデルはスタンダードなカメラモデルに歪みを付加したものです。:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?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>
      </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>
  1. Gazeboを起動する
1
gazebo
  1. 歪みを付加したカメラモデルを挿入する : 画面左側の枠の中で、Insertタブを選び、Distorted Cameraをクリックする。その後、シミュレータにそれを設置する。

  2. 歪みを付加したカメラモデルを観測する : Topis Selectorを表示するために、Window->Topic Visualazationをクリックする(もしくは、Ctrl-Tを押す)。

  3. /gazebo/default/hokuyo/link/camera/imageのような名前のトピックを探し、クリックしたら、Okayをクリックしてください。すると、カメライメージが表示されたウィンドウが見えるはずです。

手順は、以下の動画を参照ください。また、動画でご覧いただくように、カメラのイメージは湯がんでおり、箱のエッジが曲がって見えます。歪みを調整するには、model.sdfファイルにある、k1,k2,k3,p1,p2の歪み係数を変更するだけでよいです。