はじめに
このページは研究室の歩行ロボットに搭載するために製作した ステレオビジョンに関するページです。

コンセプトは

  • 安く、小型につくる
  • 同期をとる です。
    ロボットに載せるには小さいに越したことはなく、ロボットの歩行に 伴って衝撃が加わり壊れる可能性があります。安くて 手にいれやすいに越したことはありません。 次に同期を取る必要性について述べます。 ステレオビジョンをつくる場合、2台のカメラの画像を同時に コンピュータに取り込む必要があります。そのためには、
    1. 映像を1画面ごとに交互に切り替えて、1系統で取り込む
    2. 2信号を(切り替えて)合成して1画面として取り込む
    3. コンピュータにビデオキャプチャを2系統用意して同時に取り込む
    厳密には、(1)も(2)も切り替えるには違いないのですが、微妙に違いが あります。

    まず、キャプチャや合成のために、(1),(2)ではカメラの同期をとる必要が あります。そもそも、ビデオキャプチャなどのビデオ信号を扱う電子回路は ビデオ信号から基準クロックを再生します。多くの場合、これは同期信号を もとにしています。このクロックで画素ごとの取り込みを行います。 そのため、同期していない映像信号を切り替えた直後は、キャプチャ側の クロック再生が乱れ、映像が乱れます。もし、切り替える信号が ほぼ同期していれば、影響無く、もしくは瞬時に適合して画像が乱れる ことなく取り込めます。

    (2)の場合は、より厳密に同期する必要があります。画面を合成するには 映像信号の途中でこまめに切り替えるなどすることがあります。 モノクロの場合は画像の中心がずれるくらいで済みますが、 カラーの場合は色がめちゃくちゃになる可能性があります。これは、 カラービデオ信号は、色の情報(彩度・色相)を3.58[MHz]の正弦波 (カラーサブキャリア)の振幅・位相という形でもっていて、 その基準は同期信号の近辺に 埋めてあります(カラーバースト)。 同期信号を含めて出力された側の画像は色が正しくでますが、 映像信号だけもってきたほうは本来と違う色がでてしまいます。

    (3)の場合は、一見、同期させる必要はないように思えます。実際、 動きのないものを対象とする場合は、同期の必要はありません。 しかし、動くものを対象にする場合は同期を取っておいたほうが無難です。 なぜならば、多くのCCDカメラは電子的なシャッタを持っていて、 そのシャッタが有効な瞬間の画像をとります。さらに、シャッタが 作動するタイミングは同期信号に対して、一定の関係を持つことが 予想されます(基準クロックから各種タイミングをロジックで つくるので)。この推定に基づくと、同期していない2台のカメラの シャッタタイミングは異なります。これらで動いている対象を 撮影すると(もしくはカメラが動くと)、その時間差分だけ対象が 画像の中で動いてしまいます。ステレオビジョンは、2枚の画像内での 対象物の見える位置の関係で距離などを算出するため、 このことは問題になります。

    と、いった理由で同期をとることにしました。

  • 2台のカメラの同期をとるのに、一番簡単な方法は「外部同期」という 機能のあるカメラを使うことです。これは外部からいれた基準信号 (映像信号の場合もあります)をもとに、映像信号をつくって出力します。 ただ、モノクロ品に比べてカラー品が少ない(サブキャリアの関係でしょうか)のと、 あっても高価なのが普通です。

    ここで、CCDカメラの内部構造を考えてみます。 分解してみると目でみてわかるのですが、 よくある構成は、CCDの他に、 小さな足の多いICがいくつかと、 水晶発振子が乗ってます。 水晶発振子で基準クロックをつくって、 それを加工(分周など)して、CCDの駆動信号や、映像の同期信号、 サブキャリアなどをつくると考えられます(サブキャリア用に もう一個搭載している場合もありましたが、主たる水晶に同期する構造でした: 秋月12,400円のカメラ)。 ということは、同じ基準クロックを与えて、同時に回路をリセットできれば、 そのあとはすっかり同じタイミングで動作することが期待できます。

    と、いうわけで改造します。

    同時にリセットできればいいのですが、往々にして、そういう都合のいい 端子はありません。そこで別の方法を考えます。

    とりあえず、クロックの同期を先に行います。一般に水晶発振子の 発振回路はインバータのような回路です。そのため、水晶を 取り外してしまって、インバータの入力側から、強制的に 信号をつっこんでしまえばOKです。ただし、このとき水晶を つけたままにしていると、変な共振が起ったりしてろくなことが ないので、水晶はとります。取れない場合は周辺の回路を追って、 パターンを切ります。問題はどっちの端子が 入力か、ということですが、弱い信号をいれてみて、もう一方から 大きな信号がでてきたら、入力信号です、としかいえません。 改造前にオシロで見てわかることもあれば、水晶をとってから 適当な抵抗経由で信号を与えてみなければならないこともあります。
    (クロック源に適当な抵抗をつないで、両端子に繋いでみて、 一方だけ映像が出るなら、それが入力と考えられます)

    次に、同期をとります。いろいろ方法があると考えられるのですが、 クロックを外部供給にしたことを生かして、 両者の信号が一致するまで、一方のカメラのクロックを止める をいう方法をとることにしました。いくつか試してみて、現在採用している 方法は、 カメラから同期信号を取ってきて、それをXORで比較し、一致している期間のみ 一方のカメラ(B)にクロックを与える。もう一方(A)はクロックを与え続ける。 というものです。同期信号にずれがあると、クロックが断続的に止まり、 カメラBのタイミングはどんどん遅れていきます。遅れた結果、周回遅れに なったところで完全に一致し、カメラBにもクロックが恒常的に供給される ようになるため、同期した状態で安定します。
    ただ、一部にはメインクロックをある程度の期間止めてしまうと、 供給後も映像が正常に出ない場合があるようで注意が必要です (後述の実例のMK-7248が実際そのようです)。

    この様な改造が可能な用件は、

  • クロックを外部供給できるように改造できること
  • ひと画面(1/30秒)周期の、周期的な何らかのロジック信号を 得られること になります。後者について補足しますと、NTSC信号は1/60秒で 一旦画面を1行おきに描いて、次の1/60秒でその間をうめ、 1/30秒で1画面が完成します(インターレス走査)。 そのため、最低そのタイミングで信号を 合わせなければなりません。さらに厳密にはそれが2画面(1/15)毎に 微妙なセットになっているので(4フィールドシーケンス)、 出来れば1/15秒周期が欲しいところですが。

    以下、具体的に実在のカメラで改造手順を示します。

    • トランジスタ技術 SPECIAL No31 「基礎からのビデオ信号処理技術」
      CQ出版
    • 1号機:松下 BS-7510 (秋月 12,400円カメラ):1999年
      2脚ロボット用に開発したステレオカメラ。当時はvideo for linuxなどもしらず、 市販のLinuxで動くと銘打った高い(7万くらい?)のビデオキャプチャを 使う関係上、画像合成がしたくて開発。
      同期原理は現在と同じであるが、改造原理が異なる。水晶発振器を適当な 抵抗で並列つなぎするという、非常識な手法(とはいえ、たまたまサイエンスアイで 発振器の引き込み、みたいな話をみてヒントを得た)でマスタクロックを同期。 クロックのOn/Offは松下でみつけたカメラ本体、搭載ICのブロック図などを もとに、ピンを一本はがして、小細工するという危険な方法を採用。
      (クロックの伝達経路に抵抗を挟んで、同期検出にOpenコレクタ回路をつないで GNDに引き摺り落す方法)
      同期化回路と共に画像スイッチを搭載し、合成画像を出力するユニット。

    • 2号機:松下 BS-7510 (秋月 12,400円カメラ):2001年
      4脚ロボット用に開発したステレオカメラ。当初は合成取り込みを考えて 回路をつくったが、現在はBt878の2枚さしで同時取り込み。
      同期化手法は現在の方法と同じ。ただ、がんばっても水晶を剥がせなかったので、 (1)水晶駆動側(発振アンプ出力側)配線、(2)入力側の発振安定用コンデンサ、への パターンをカッターで切断。

    • 3号機:MK-7428 (秋月 11,700円カメラ):2001年
      カメラをMK-7428で製作。BS-7510より素直できれいな仕上がり。 詳細は解説ページを参照。
    • 01/10/24 工事を開始しました
    • 01/10/25 公開開始しました(〜MK-7428)
    • 03/08/18 更新になってますが移動のための変更だけです。