では、このような場合に光学面の実測サグデータで面形状をモデリングする方法はないのでしょうか? 製造した光学系の性能劣化要因をCODE Vで特定することはできないのでしょうか? これが今回、攻略すべきポイントです。
こんなときにはサグデータから面形状のフィッティングを行うマクロ“SAGFIT2.seq”が便利です。面上の座標値で計測 | 面頂点からの距離で計測 |
---|---|
![]() sagdata.dat |
![]() sagdata2D.dat |
X [タブ区切り] Y [タブ区切り] Z X:面のローカルX座標 Y:面のローカルY座標 Z:その位置でのサグ量(面のローカルZ座標) |
H [タブ区切り] Z H:面頂点からの距離( ![]() Z:その位置でのサグ量(面のローカルZ座標) |
データは必ずタブで区切ってください。
また、コメント(数値から始まらない文字列)をテキストの冒頭に記入することもできます。
さらにフォーマットさえ守っていればサグデータのリストに順番や計測の規則性は必要ありません。格子状に計測されたデータはもちろん、面頂点から渦巻状に計測したデータやランダムな面上のポイントで計測したデータからもフィッティングをかけることができます。
座標も何かに合わせて正規化する必要もありません。
計測したデータをそのままリストにしてください。
次にこのサグデータからフィッティングする面のタイプを決めておきます。通常は非球面タイプ(ASP)です。X方向とY方向で形状が異なるのであればトロイダル面タイプ(XTO、YTO)やアナモルフィック非球面タイプ(AAS)ですし、自由曲面に近いのであればXY多項式面タイプ(SPS XYP)です。その他の面タイプにもフィッティングできます。
次に現在CODE Vで何か光学系を設計されている場合は、そのモデルを確実に保存しておいてください。
このSAGFIT2マクロを実行すると、現在のモデルは削除されます!
ではさっそくSAGFITマクロを実行します。
サグデータを保存したファイルsagdata.datを非球面タイプ(ASP)にフィッティングするためにはCODE Vのコマンドウィンドウで以下のようなコマンドを入力してください。
IN sagfit2 sagdata 'ASP'
このマクロはこれで終わりではありません。
SAGFIT2マクロを実行すると、第2面に指定した面タイプ(今回であれば非球面タイプ)が設定されたモデルが新しく作られます。この第2面のパラメータのうち、サグデータを元にしてフィッティングしたいパラメータを変数にします。
今回は4次、6次、8次の係数を変数化します。 (今回は曲率半径もフィッティングパラメータとなっています。ただし曲率半径は変数とせずカップ
リングパラメータのままとしてください。変数とするとフィッティングがうまく行われません。)
※クリックで拡大表示します。
測定誤差があり、サグデータに回転偏心成分が含まれている可能性もが考えられます。
このような場合には第2面の偏心パラメータも変数とすることで、その偏心成分を除去することができます。
必要なパラメータを変数としたら、以下のコマンドを実行してください。
IN sagfitaut
これでサグデータをCODE Vの面形状へフィッティングできました!
※クリックで拡大表示します。
実行した結果のテキスト出力に”RMS fit error = “としてフィッティングの精度が出力されています。
(この値があまりにも大きい場合は変数化するパラメータを修正してください。そして再度”IN sagfitaut”を実行すればOKです。)
といっても、このままでは何もモデリングされていません。。。
※クリックで拡大表示します。
フィッティングされた面の形状を確認するにはアパチャーを設定する必要があります。
サグデータを計測した面のアパチャーを第2面に設定してください。
これで3D描画(VIE)オプションを使ってフィッティングした形状を確認できます。
複雑な面形状にフィッティングした場合はレンダリングのコントロールタブで特殊面(SPS面)のサンプリングGRID数(SAM)を増やしておいた方がいいかもしれません。
ではこのフィッティングした面形状を保存しておきましょう!fittingsur.lenなど.LENフォーマットでこのモデルを保存してください。
次はこのフィッティングした面をモデルに組み込む方法を紹介します。
まずはこのフィッティングした面形状を組み込みたいモデルをCODE Vに読み込んでください。
次に編集メニューに面のインポートという項目がありますので、それを選択してください。
レンズファイルに先ほど保存したフィッティングした面のモデルfittingsur.lenを指定します。範囲は開始面も終了面も2としてください。そして前の面に挿入の設定でフィッティングした面を挿入したい位置を指定してください。
そのほかの設定はそのままでOKを押します。するとフィッティングした面形状が指定した面の前に挿入されます!
SAGFIT2マクロの中身を詳しく見てみると、光学系の設計に役立つこともあります。
sagfit2.seqを開いてみてください。
このSAGFIT2マクロですが、実行手順を見てもわかるようにCODE Vの最適化機能を利用しています。
マクロ内ではこのフィッティングするための最適化のコマンドを記述することになります
まず、ヘッダー情報とGUIダイアログのための記述があります。
次に引数の確認をしています。
そしてフィッティングのためのモデルを新しく作成していきます。波長500nm、入射瞳直径2mmで軸上画角だけで、構成も面間隔0で2面が並んでいるだけで非常に単純です。このモデルを最適化で計測したサグデータにフィッティングさせていくことになります。
サグデータファイルをバッファに読み込んで、ファイルの頭にコメント行があればそれを削除しています。
サグデータの数の確認や、すべての行が2列もしくは3列であるかチェックしています。
ここからがマクロのコア部分です。
サグフィットする最適化シーケンスをsagfitaut.seqに記述しています。
この最適化シーケンスは評価関数をユーザー定義評価関数のみとしています。