測ったサグデータと同じ面を作りたい!

光学面の形状は計測機器を使ってサグデータとして測ることができます。この計測データより形状に関しては製造誤差を判断できます。

この実際に製造された光学部品の面形状を使って、シミュレーション評価をしたいときがあると思います。

たとえば、製造した光学製品の設計値に対する性能劣化要因をどのように特定していますか?
要因として光学面形状の製造誤差、光学材質の不均一性、アライメント誤差、検査誤差などが考えられますが、この中でどれが主な要因なのか一概には見当がつきません。
面形状の製造誤差が性能劣化の要因だとしても、その光学部品を製造しなおすべきなのか、アライメントで全体の光学性能を補償できるものなのか、簡単に判断できません。

では、このような場合に光学面の実測サグデータで面形状をモデリングする方法はないのでしょうか? 製造した光学系の性能劣化要因をCODE Vで特定することはできないのでしょうか? これが今回、攻略すべきポイントです。

こんなときにはサグデータから面形状のフィッティングを行うマクロ“SAGFIT2.seq”が便利です。
計測した面形状をCODE Vでモデリングできれば収差を解析できますし、どこが収差の発生要因か見当をつけることができます。

攻略のポイント!

  • 計測した面形状のサグデータはどのようなフォーマットで保存されていますか?
  • 計測した面形状はCODE Vのどの面タイプに一番近いですか?
  • どのパラメータを使って面形状をフィッティングしますか?
sagfit2.seq

まずは上のリンクから“SAGFIT2.seq”マクロをダウンロードして、作業フォルダ(C:\CVUSER)にコピーしてください。

サグデータを用意します。
sagdata.datなど何か適当な名前をつけた、拡張子.datのテキストファイルを作業フォルダに作成します。
中のテキストのフォーマットはサグデータの計測方法で異なります。
面上の座標値で計測 面頂点からの距離で計測

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列であるかチェックしています。

そして指定された面タイプに2面を変更しています。

ここからがマクロのコア部分です。

サグフィットする最適化シーケンスをsagfitaut.seqに記述しています。


※クリックで拡大表示します。

この最適化シーケンスは評価関数をユーザー定義評価関数のみとしています。
そしてサグデータを保存したファイルに保存されている座標データから瞳上での(X,Y)座標に対応するENT光線を定義しています。このENT光線の第2面の通過Z座標をターゲット値とするユーザー定義評価関数を作成していきます。
この設定で実行される最適化シーケンスをsagfitaut.seqに記述していきます。

最後にフィッティングエラーを評価関数から計算して表示するシーケンスを記述しています。

そして面データをリストした後、この後のフィッティング手順を説明するメッセージを出力します。

最初にモデリングしたシンプルなモデルにユーザーが変数とするパラメータを設定して、このsagfitaut.seqを実行すると面形状のフィッティングが行われるという仕組みです。

マクロプログラミングの中身に興味がある方は「機能別セミナー」をお勧めします。

例えば、こんな使い方できませんか?

SAGFIT2マクロを応用すれば、下のようなことが出来ます。
  • 自社の計測サグデータフォーマットを指定されているフォーマットに自動変換したい!
  • ”RMS fit error“が一番少ない面タイプを自動的に選んで欲しい!
  • SAGFIT2マクロでフィッティングして今あるモデルに組み込むのが面倒!
  • CODE Vで選択できる面タイプでは計測した面をフィッティングできない!
CODE V のマクロ機能を利用すれば、「こんなことできないかなぁ」がほとんど実現できます。
やりたいことはあるけれど、「プログラミングしている時間がない」とか、「プログラムはどうも苦手で・・・」という方は「光学分野エンジニアリングサービス」をご利用ください。

その他の記事