材質を限定して最適化したい!

※ 以下で紹介するマクロをさらに強化した材質最適化マクロが提供されています。
これはORAエンジニアリングチームの光学設計に関する専門知識を結集して作成されました。経験豊かな光学エンジニアが設計作業において“手作業で”行う材質選択のプロセスを真似た材質最適化をどなたでも行うことができます。この新しいマクロにより設計プロセスのうちの材質最適化フェーズを大幅に削減することができます。詳しくはFAQをご覧ください。
FAQを閲覧するには、ログインアカウントとパスワードが必要です。ユーザー登録がお済みでない方は、こ ちらから登録して下さい。

光学系を設計する際に、最初から使用できる材質を限定されることってありませんか?

例えば、光学系を設計するときに材質を入手するガラスメーカを限定しておくのは常套手段です。
過去に自分の会社で実績のある、つまり使い慣れている材質や流通性の高い材質を使うとコスト面で断然お得です。

逆に、最適化で算出した屈折率とアッベ数だけを見て、使ったことのない材質を新たに導入しようとすると、使えるかどうかの検査や検証などをする工数が増えてしまいます。
また、材質によってはコーティングの施しやすさや、いつも頼んでいるコーティングメーカーの技術力も考えなければいけません。
他にもモールドができる材質がいいとか、プラスチックしか使えない・・・とか設計の初期段階で悩むことはありませんか?

このように一口で「材質」と言っても、屈折率とアッベ数以外にも考慮しなければならない点があります。

CODE Vで材質を最適化する場合は、仮想ガラスを使います。
これは屈折率とアッベ数がどんな値をとることも出来る、まさに理想的なガラス材質ですが、残念ながら価格や入手性、モールドできる云々はまったく考慮していません。
でも、その代わり非常に大きな自由度がありますので材質でさえも最適化が出来てしまいます。

最適化で得られた仮想ガラスを実際のガラスに置き換えるにはGLASSFITマクロを利用します。
このマクロはCODE V入門セミナでも紹介しています。

GLASSFITマクロの使い方はFAQに紹介されています。
   ※FAQを閲覧するには、ログインアカウントとパスワードが必要です。
   ユーザー登録がお済みでない方は、こちらから登録して下さい。

このGLASSFITマクロは非常に便利ですが、使える材質やメーカが限定されている場合には効率が悪く、使える材質と理想ガラスが大きくかけ離れてしまうことが多々あります。

こうなると、材質を何度も入れ替えながら最適化を繰り返したり、新しい材質を探したり・・・想像するだけで面倒です。時間がやたらかかります。

それでは、使える材質が決められている場合、どのように光学系を設計していけばいいのでしょうか?
使える材質を指定して最適化を走らせることは出来ないのでしょうか?
これが今回、攻略すべきポイントです。

こんなときには使える材質を指定して最適化できるマクロ“TESGLASS.seq”が便利です。

攻略のポイント!

  • 光学系を設計するのに利用できる材質は何ですか?
  • その材質を当てはめたいのはどの面ですか?
  • 最適化の設定はどういったコマンドですか?
今回はサンプルレンズmicroscp.lenを例にとって説明します。
何はともあれ、まずはモデルを読み込みます。

RES CV_LENS:microscp

次に使える材質のリストを作りましょう!
今回はオハラ社のガラスSFPL51、SBAM4、SLAM7、STIH23、SNSL36、PBH11、SNSL5だけしか使えない状況だと仮定します。
作業フォルダに“glass_list.dat”という名前のテキストファイルを作って、このガラス達を縦に並べてリストします。


glass_list.dat

さぁ、モデルのパラメータに変数を設定しましょう!
材質を変数化することを忘れないようにしてください。

microscpサンプルレンズは像面直前のフィルタの間隔と、像面の面間隔(デフォーカス)が既に変数です。
さらに絞り面とフィルタ以外の面の曲率半径を変数にします。

CCY S2..4 0; CCY S6..15 0

もちろん全ての材質は変数です。
GLC SA 0

最後に、どんな設定で光学系の最適化を実行するか決めましょう!
今回は有効焦点距離が5というコンストレインツだけ設定して最適化をまわします。

普段コマンドを自ら記述してAUTを実行している方は、その最適化シーケンスをaut_tesglass.seqなどの名前をつけて保存してください。

普段、GUIからコンストレインツなどを設定して最適化をかけられている方はちょっとだけ複雑な作業が必要です。
まずは自動設計>最適化から普段どおりに最適化の設定をしてください。
設定できたらオプション設定>確認で表示されているコマンドを選択してCtrl+Cでコピーしてください。

そして作業フォルダにaut_tesglass.seqと名前をつけたファイルを作ってください。
そのファイルの中にコピーしたコマンドをペーストしてAUTとGOで挟んでください。
こうすることでGUIで設定した最適化をコマンドを記述できます。


aut_tesglass.seq

それでは、このCODE V上に開いている最適化設定ウィンドウは用済みです。閉じてください。
最適化を実行するのではなく、『OK』、『閉じる』、『キャンセル』です。

ここまで終わりましたらTESGLASSマクロの出番です。
メニューのツール>マクロマネージャからサンプルマクロのツリーの下の最適化のリストで
“C:\CODEV*****\macro\tesglass.seq”を選択してください。
そして実行ボタンを押せば、TESGLASS設定画面が現れます。

毎回、この作業が面倒に感じる方は“お気に入りに追加”か“ツールバーに指定”、“メニューバーに追加”をすれば、次回からは簡単にこのマクロにアクセスできます。

ではGlass List (req’d)にglass_listを指定してください。
次にOptimization sequenceにaut_tesglassを指定します。

その他の設定はそのままで結構です。
OKを押してください。

すると、リストした材質だけを使用して光学系が最適化されます。
最適化された光学系の材質をご覧ください。

見事にリストしたガラス達が各面の材質に割り当てられています!
もちろん、最適化で設定したガラスバウンダリの外にある「異常分散性ガラスSFPL51」もリストから選ばれて使用されています。

テキスト出力の最後には最適化の評価関数がリストされます。

つまり、このマクロは変数となっている理想ガラスを、ひとつひとつリストの中で一番近い材質に置き換えて最適化を繰り返してくれます。
材質を置き換える前のモデルにも1回最適化をまわしているので、今回は全部あわせると10回も最適化しています。 評価関数は最終的に0.1887に落ち着きました。

これで材質を限定して最適化する作業は終了です!

TESGLASSマクロで設定できる各パラメータの意味については、FAQに紹介されています。
   ※FAQを閲覧するには、ログインアカウントとパスワードが必要です。
   ユーザー登録がお済みでない方は、こちらから登録して下さい。

マクロの中身をちょっと覗いてみませんか?

TESGLASSマクロの中身を詳しく見てみると、光学系の設計に役立つこともあります。
CODE Vのインストールフォルダにあるmacroフォルダ内のtesglass.seqを開いてみてください。

このマクロの中身はちょっと複雑かもしれません。
まず、他のマクロと同じようにヘッダー情報、GUIダイアログのための記述があります。
次に、各パラメータ、ローカル変数の初期設定、定義が行われています。

ここからがマクロのコア部分です。
まずはどの面の材質が変数か確認しています。

Selection strategyパラメータにTOR、つまり公差解析の結果基準を設定した場合は変数化された材質に屈折率公差、アッベ数公差が 設定されているかどうかを確認します
他にもズーム化されていないか、ノンシーケンシャル面範囲の中にないか確認します。
変数化された材質がズーム化されている場合、全ズームの材質は同じ材質になります。
ノンシーケンシャル面範囲であった場合はガラス1もガラス2もガラス1の材質になります。ご注意ください。

一旦、この段階でオリジナルの光学系を最適化します。

その後に使える材質がリストされたファイルを読み込み、それぞれの屈折率とアッベ数を確認します。 そして変数となっている材質それぞれの面番号、屈折率、分散、アッベ数、ガラスリストの中で一番近いガラス、その差異を確認します。
次にこの材質リストをSelection strategyパラメータに基づいてソートします。
そのソートしたリストの中で、一番上の面の理想ガラスをガラスリストの中の一番近いものに置き換えます。
このモデルで最適化をまわします。

この作業の繰り返しです。
Interactive modeパラメータをYesにしていると、ひとつ理想ガラスがリストの中の材質に置き換わるごとに、ここで終了するか続行するか?を聞かれます。

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

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

TESGLASSマクロを応用すれば、下のようなことが出来ます。
  • 使えるガラスリストにプライベートガラスを指定したい!
  • 最適化をいちいちコマンドで記述するのは面倒くさい!
  • 材質じゃなくてカタログレンズを入れ替えて光学系を最適化したい!
  • モールドできる材質のリストってありませんか?
CODE V のマクロ機能を利用すれば、「こんなことできないかなぁ」がほとんど実現できます。
やりたいことはあるけれど、「プログラミングしている時間がない」とか、「プログラムはどうも苦手で・・・」という方は、ぜひ「光学分野エンジニアリングサービス」をご活用ください。

その他の記事