光学設計コンテスト(CODC)/ Uさん. Step4本設計開始。最終設計解へのアプローチ

前回:本設計開始に当たっての各種処理は、本設計をはじめるにあたっての、より有力視される初期光学系の選定と、具体的な最適化手順についての考察を行いました。今回が最終回です。さて、どんな最終解が得られるのでしょうか?

最終設計開始

初期解は、CODE Vのパテントデータより抽出した以下のモデルです。

TOW FIE ;AST 0.05 ;DST 5 ;LSA 0.05 ;GO

レンズ形状に関係する制約条件

“全系において、面の曲率半径の絶対値を等しく、もしくは平面にする”という制約がありますので、指定面の曲率半径を基準として、光学面の曲率半径を合わせこむように、最適化コンストレインツを追加します。

最大レンズ枚数21枚、42面もあるので各面について、ユーザー定義コンストレインツを定義して、全て制約条件を入れるのはとても面倒!

そこで、ループ処理で自動定義・設定するようにしました。
S2を基準面として、この面と曲率半径の絶対値が等しくなる、もしくは平面(曲率 → 0)となるようにコンストレインツを定義します。

------------------------------
for ^s 1 (num s)-1
  ^def_s2 == concat('@def_s2_s',num_to_str(^s))
  ^def_s2 == concat(^def_s2,' == (absf((rdy s2))-absf((rdy s')
  ^def_s2 == concat(^def_s2,num_to_str(^s))
  ^def_s2 == concat(^def_s2,')))*(cuy s')
コンストレインツの名前と
関数の定義
  ^def_s2 == concat(^def_s2,num_to_str(^s))
  ^def_s2 == concat(^def_s2,')')     $def_s2
  ^def_s2 == concat('@def_s2_s',num_to_str(^s))
  ^def_s2 == concat(^def_s2,' = 0')
ターゲットの指定
    $def_s2
    wtc 1.0
end for
------------------------------

※ユーザー定義コンストレインツは、同一名をつけることができないので、上記のように少し煩雑な記述が必要になります。
使用した最適化シーケンスファイルは、こちら( auto_fin0.seq )。

使用している関数
CONCAT(文字列1,文字列2)
NUM_TO_STR(数値)
ABSF(数値)
.
“$(文字列変数)”
:「文字列1」と「文字列2」とをつなぐ関数
:引数(数値)を「文字列」に変更します
:引数の絶対値を返します
.
:「文字列変数」をコマンドとして実行します



最適化を開始しましたが、あっという間に局所解に落ち込んでしまいました。収差図から見るとどうも近軸像面からデフォーカスによりバランスがとられているようです。これを嫌って、近軸像面からのデフォーカス(像面間隔)を変数化せずに、再度最適化を実行します。 順調に最適化評価関数も下がって行く。。。ように思われましたが、またここでローカル解に落ち込んでしまいました。


レンズデータを確認してみて気がつきました。「なんで平面が無いんだろう??」

よくよく考えてみると、「有限と無限では、任意の有限値に近づくように動いた方が、制約を満足しやすいからじゃないかな。」ということに思い至りました。ということは、このまま続けていても、絶対に平面になる面は出てこないような気がします。どうしよう・・・。

悩んだ結果、平面に向かうことを阻害しないように、各面の曲率半径同士の制約ウェイトを最初はもっと軽くしておくことにしました。もう少し何か上手い方法がありそうなものですが、それを再考するには時間が。。。

結局、こんな手順で行くことにしました。

■曲率半径のコンストレインツのウェイトは最初小さめに

  • まずは光学性能を上げることに専念
  • 性能が出てきたら、徐々にウェイトを大きくしていく
  • 最適化の仮定で、平面になりそうな面は、早々に平面に固定

結像性能に関する制約条件の追加

そしてもう一点、収差図を確認すると、残存収差が大きすぎる事に気づきます。最適化評価関数が大きいことからも、きれいに補正されていないんじゃないかとは、思っていました。そこで、

「口径を大きくするためには、球面収差の補正から!」

ということで、全系の球面収差係数を抑えることを考えました。

縦収差を確認すると、球面収差は7次収差まで出ていますので、各面で発生する3次収差を収差係数で抑えていくことで間接的に補正できます。しかし、まずは全系の球面収差係数を小さくする制約を掛けて最適化を実行します。

■EPDを大きく取るために
  • 全系の球面収差係数をなるべく小さくする
  • (高次収差補正のために、各面の3次の球面収差係数を小さくする)

さらに、画角特性の向上も視野に入れ、ペッツバール和およびタンジェンシャル方向の非点収差係数も制約に加えます。

画角を広く取るために
  • ペッツバール和を小さく(ゼロに)する
  • 全系の非点収差係数を小さくする
  • (各面の非点収差係数を小さくする)
    ※CODE Vの収差係数は、口径および
    焦点距離によって変動してしまう
    (ノーマライズされていない)ことに注意
    sa = 0 ;wtc .001
    ptb = 0 ;wtc 10
    tas = 0 ;wtc .001

さてさて、3度目の正直。 今度こそ上手く行くのでしょうか?
最終的に使用した最適化シーケンスはこちら(auto_fin.seq)

最終設計解

途中レンズの分割を行って、最終的に13枚構成の光学系となりました。

全長は、何と240m!しかし、大きくなったな〜。
まぁ、ある程度は想定の範囲内です。仕様には全長制約が無かったので問題はないのですが、何でしょうこの釈然としない感は?

↑ディストーションを見ると、まだ画角に余裕がありそうですが、
↓RMS波面収差からはギリギリのようです。

さて、このレンズでコンテストにエントリーします。果たして結果は。。。

付録 - 作成したマクロ

PICKUP.seq
ピックアップ処理用のマクロ。指定面との曲率半径誤差が3%未満の面の曲率半径を自動的にピックアップ設定します。
CHECK_RMS.seq
設定画角のRMS波面収差を計算し、リストおよびRMSvs.FOVのプロットを出力するマクロです。性能の確認に使用。

<< 前へ | 次へ >>

目次

 


お問い合わせ