(57)【特許請求の範囲】
【請求項１】
非接触でワークを測定するセンサを有し、前記センサと前記ワークとを相対移動させながら前記ワークの形状を測定する表面性状測定機の制御プログラムであるパートプログラムを生成するパートプログラム生成装置であって、
ユーザの入力操作を受けて測定手順を設定していく測定条件設定部と、
前記測定条件設定部で設定された測定手順をパートプログラム言語に変換するパートプログラム生成部と、を備え、
前記測定条件設定部は、ユーザーインターフェースとして、
編集用言語で測定手順を編集できるエディタと、
測定手順の設定に使う前記編集用言語の命令セットと、をユーザに提供し、
前記編集用言語の命令セットには、前記センサを出発点から目的点に向けて移動させる際に障害を越えるように指令する迂回移動命令が含まれる
ことを特徴とするパートプログラム生成装置。
【請求項２】
請求項１に記載のパートプログラム生成装置において、
前記迂回移動命令が障害高さのパラメータを含み、
ユーザによって前記迂回移動命令が選択された場合、前記測定条件設定部は、ユーザに対し、障害の高さの入力を促す
ことを特徴とするパートプログラム生成装置。
【請求項３】
請求項１に記載のパートプログラム生成装置において、
ユーザにワークの最高点の高さを入力させ、
ユーザによって前記迂回移動命令のアイコンが選択された場合、
前記測定条件設定部または前記パートプログラム生成部は、前記最高点の高さを出発点から目的点に向けて移動する際の障害の高さとして自動設定する
ことを特徴とするパートプログラム生成装置。
【請求項４】
請求項１に記載のパートプログラム生成装置において、
さらに、ワークの高さ分布データを記憶する高さ分布データ記憶部を有する
ことを特徴とするパートプログラム生成装置。
【請求項５】
請求項１から請求項４のいずれかに記載のパートプログラム生成装置において、
前記パートプログラム生成部は、
出発点の座標値と、目的点の座標値と、を取得し、
前記ワークに存在する凸部あるいは段差であって前記センサの移動の妨げになり得る障害の高さデータを取得し、
前記センサが前記障害の上を移動する際に前記センサと前記障害との間に確保されるべき安全ギャップを設定し、
前記障害の高さと、前記センサの作動距離と、前記安全ギャップと、に基づいて、前記センサが前記障害の上を越える際に必要とされる安全高さを算出し、
出発点の座標値と、目的点の座標値と、前記安全高さと、に基づいて、前記出発点から前記目的点に至る経路において前記障害の上を前記安全高さ以上で通過する安全経路を求める
ことを特徴とするパートプログラム生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、表面性状測定機用のパートプログラム生成装置に関する。具体的には、表面性状測定機で測定対象（以下、ワーク）を測定するにあたって、ワーク測定手順を測定機に指示するパートプログラムの作成を支援する装置に関する。
【背景技術】
【０００２】
従来、ＣＮＣ（Ｃｏｍｐｕｔｅｒ  Ｎｕｍｅｒｉｃａｌ  Ｃｏｎｔｒｏｌ）タイプの画像測定機において、ワークの測定条件を記述したパートプログラムは、おおむね次の２つの方法を用いて作成される。
一つはオンラインティーチングである。
オンラインティーチングでは、測定機上に実際のワークを載置して、マニュアル操作で実際にワークを測定すると同時にその測定手順を画像測定機に記憶させる。
もう一つはオフラインティーチングである。
オフラインティーチングでは、ワークの２次元ＣＡＤデータを取り込んで画面上に表示させ、この２次元ＣＡＤデータを参照しながらマウスやキーボードといった入力手段によるコマンド打ち込みにより測定手順をプログラミングしていく（例えば特許文献１、２、３）。
【０００３】
オフラインティーチングで測定パートプログラムを作成する様子を概説する。
図１はオフラインティーチングで測定手順（測定条件）を設定していくためにユーザに提供されるＧＵＩ（グラフィカルユーザインターフェース）画面１２１の一例である。図１において、左上のウィンドウ１２５にはワークのＣＡＤデータが表示されている。ここで表示されているのは、ワークの平面図である。
【０００４】
例として、ワークの平面視において、左下に円Ｃ１があり、右上に円Ｃ２があるとする。そして、ユーザとしては、円Ｃ１を円測定（例えば中心および径の測定）した後、続けて円Ｃ２を円測定したいとする。
この場合、カメラを円Ｃ１の直上から円Ｃ２の直上に移動させるように測定手順（測定条件）を設定入力することになる。
ＧＵＩ画面１２１には、測定手順（測定条件）の設定によく使うコマンドがアイコン１４０として用意されている。さらに、ユーザが設定入力した測定手順（測定条件）は、編集用ウィンドウ１２２にわかりやすく表示されるようになっている。
【０００５】
編集用ウィンドウ１２２は、日常使用される言語（編集用言語）でわかりやすく表示され、専門的なプログラミング言語ではないので、誰でも簡単に内容を理解できる。編集用ウィンドウ１２２を見ながら、測定手順（測定条件）を途中で挿入・削除・変更するといった編集作業も容易に行える。
ユーザは、用意されたコマンドアイコン１４０をマウスで操作したり、キーボードで数値入力したりすることにより測定手順（測定条件）を入力していく。
【０００６】
円Ｃ１を円測定してから円Ｃ２の測定に移行する測定手順（測定条件）を設定する場合、例えば次のようにする。
まずカメラを円Ｃ１の直上に移動させる移動命令１を設定する。移動命令のコマンドアイコンである移動コマンドアイコン１４１をクリックし、移動先である円Ｃ１の（中心）座標（ｘ１、ｙ１、ｚ１）を入力する。円Ｃ１の中心座標をキーボードで直接打ち込んでもよいし、その他、例えば円Ｃ１の周上の任意の点をクリックすることで自動的にＣＡＤデータから円中心を認識させてもよい。その後、円測定のコマンドアイコンである円測定コマンドアイコン１４２をクリックする。
【０００７】
続いて、カメラを円Ｃ２の直上に移動させる移動命令２を設定する。すなわち、移動コマンドアイコン１４１をクリックし、円Ｃ２の中心座標（ｘ２、ｙ２、ｚ２）を入力する。そして、円測定コマンドアイコン１４２をクリックする。このようにして測定手順（測定条件）が設定される。
【０００８】
画像測定システムは、設定入力された測定手順（測定条件）を画像測定機が読み取り実行できるパートプログラム言語に展開・変換する機能を有する。
ユーザが編集用言語で設定した測定条件の命令セットをパートプログラム言語の命令セットに変換することでユーザが意図した測定を画像測定機に実行させるパートプログラムができる。
このようにして、２次元ＣＡＤデータを用いたオフラインティーチングでパートプログラムが作成される。このパートプログラムを画像測定機が読み取って実行することにより、ワークの測定が行われる。つまり、円Ｃ１を円測定した後、円Ｃ２の直上に移動して円Ｃ２の円測定が行われる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特許３５９６７５３  （発行日２００４年１２月２日）
【特許文献１】特許４８１２４７７  （発行日２０１１年１１月９日）
【特許文献１】特許４９３２２０２  （発行日２０１２年５月１６日）
【発明の概要】
【発明が解決しようとする課題】
【００１０】
２次元ＣＡＤデータは、３次元ＣＡＤデータとは違って、立体体な情報を持っていない。したがって、２次元ＣＡＤデータを用いたオフラインティーチングによってパートプログラムを作成した場合、画像測定システムは、ワークの立体形状に関する情報を取得できない。
カメラの移動経路上に段差や凸部が存在していても、画像測定システムはそのことを認識できず、もちろん、自動的に干渉チェックを行うこともできない。画像測定機がパートプログラムをそのまま実行してしまうと、例えば、図２に示すように、カメラ１６が凸部Ｂ０に接触してしまうという問題が発生する。
【００１１】
従来、画像測定機は、比較的平坦なものを測定対象としていたので、移動経路上でカメラ１６がワークＷに接触することを心配する必要はなかった。しかし、今後は、比較的大きな凹凸を有するワークも画像測定機で測定したいというニーズに応えていく必要がある。したがって、２次元ＣＡＤデータを用いたオフラインティーチングにおいて、カメラとワークとの干渉を回避するパートプログラムを容易に作成できるようにする画像測定機用パートプログラム生成装置が求められている。
【課題を解決するための手段】
【００１２】
本発明のパートプログラム生成装置は、
非接触でワークを測定するセンサを有し、前記センサと前記ワークとを相対移動させながら前記ワークの形状を測定する表面性状測定機の制御プログラムであるパートプログラムを生成するパートプログラム生成装置であって、
ユーザの入力操作を受けて測定手順を設定していく測定条件設定部と、
前記測定条件設定部で設定された測定手順をパートプログラム言語に変換するパートプログラム生成部と、を備え、
前記測定条件設定部は、ユーザーインターフェースとして、
編集用言語で測定手順を編集できるエディタと、
測定手順の設定に使う前記編集用言語の命令セットと、をユーザに提供し、
前記編集用言語の命令セットには、前記センサを出発点から目的点に向けて移動させる際に障害を越えるように指令する迂回移動命令が含まれる
ことを特徴とする。
【００１３】
本発明では、
前記迂回移動命令が障害高さのパラメータを含み、
ユーザによって前記迂回移動命令が選択された場合、前記測定条件設定部は、ユーザに対し、障害の高さの入力を促す
ことが好ましい。
【００１４】
本発明では、
ユーザにワークの最高点の高さを入力させ、
ユーザによって前記迂回移動命令のアイコンが選択された場合、
前記測定条件設定部または前記パートプログラム生成部は、前記最高点の高さを出発点から目的点に向けて移動する際の障害の高さとして自動設定する
ことが好ましい。
【００１５】
本発明では、
さらに、ワークの高さ分布データを記憶する高さ分布データ記憶部を有する
ことが好ましい。
【００１６】
本発明では、
前記パートプログラム生成部は、
出発点の座標値と、目的点の座標値と、を取得し、
前記ワークに存在する凸部あるいは段差であって前記センサの移動の妨げになり得る障害の高さデータを取得し、
前記センサが前記障害の上を移動する際に前記センサと前記障害との間に確保されるべき安全ギャップを設定し、
前記障害の高さと、前記センサの作動距離と、前記安全ギャップと、に基づいて、前記センサが前記障害の上を越える際に必要とされる安全高さを算出し、
出発点の座標値と、目的点の座標値と、前記安全高さと、に基づいて、前記出発点から前記目的点に至る経路において前記障害の上を前記安全高さ以上で通過する安全経路を求める
ことが好ましい。
【図面の簡単な説明】
【００１７】
【図１】オフラインティーチングで測定手順（測定条件）を設定していくためにユーザに提供されるＧＵＩ画面の一例を示す図である。
【図２】カメラが移動する様子を例示する図である。
【図３】画像測定システムの全体構成を示す図である。
【図４】パートプログラム生成装置の機能ブロック図である。
【図５】ユーザに提供されるＧＵＩ画面の一例を示す図である。
【図６】カメラが障害を迂回する様子を例示した図である。
【図７】ワークＷの一例を例示する図である。
【図８】作成された測定手順の一例を示す図である。
【図９】測定手順をパートプログラム言語に変換する様子を例示する図である。
【図１０】測定点Ｐ１から測定点Ｐ２への移動を説明するための拡大図である。
【図１１】パートプログラム生成の手順を説明するためのフローチャートである。
【図１２】パートプログラム生成の手順を説明するためのフローチャートである。
【図１３】測定手順をパートプログラム言語に変換する様子を例示する図である。
【図１４】測定手順をパートプログラム言語に変換する様子を例示する図である。
【図１５】測定点Ｐ５から測定点Ｐ６への移動を説明するための拡大図である。
【図１６】パートプログラム生成の手順を説明するためのフローチャートである。
【図１７】測定手順をパートプログラム言語に変換する様子を例示する図である。
【図１８】測定点Ｐ３から測定点Ｐ４への移動を説明するための拡大図である。
【図１９】測定手順をパートプログラム言語に変換する様子を例示する図である。
【図２０】ユーザに提供されるＧＵＩ画面の一例を示す図である。
【図２１】パートプログラム生成装置の機能ブロック図である。
【図２２】ユーザに提供されるＧＵＩ画面の一例を示す図である。
【図２３】測定手順をパートプログラム言語に変換する様子を例示する図である。
【図２４】測定手順をパートプログラム言語に変換する様子を例示する図である。
【図２５】カメラが移動する様子を例示する図である。
【図２６】カメラが移動する様子を例示する図である。
【図２７】変形例６において、第４迂回パターンと第５迂回パターンを模式的に示す図である。
【図２８】変形例６において、第４迂回パターンを説明するためのフローチャートである。
【図２９】変形例６において、測定手順をパートプログラム言語に変換する様子を例示する図である。
【図３０】変形例６において、第５迂回パターンを模式的に示す図である。
【図３１】変形例６において、第５迂回パターンを説明するためのフローチャートである。
【図３２】変形例６において、測定手順をパートプログラム言語に変換する様子を例示する図である。
【図３３】変形例７を模式的に示す図である。
【発明を実施するための形態】
【００１８】
本発明の実施形態を図示するとともに図中の各要素に付した符号を参照して説明する。
（第１実施形態）
図３は、表面性状測定機としての画像測定システム１０の全体構成を示す図である。
画像測定システム１０は、画像測定機１と、画像測定機１を駆動制御すると共に必要なデータ処理を実行する制御コンピュータユニット２と、を具備する。
【００１９】
画像測定機１は、次のように構成されている。
架台１１上に被測定対象であるワークＷを載置する測定テーブル１３が装着されている。測定テーブル１３は、図示しないＹ軸駆動機構によってＹ軸方向に駆動される。架台１１の後端部には上方に延びるフレーム１４が固定されている。フレーム１４の上部から前面に張り出したカバー１５の内部には図示しないＸ軸駆動機構およびＺ軸駆動機構が配設されている。これらＸ軸駆動機構およびＺ軸駆動機構によってＣＣＤカメラ（以下、カメラ）１６が支持されている。
カメラ１６は、測定テーブル１３を上部から臨むように取り付けられている。カメラ１６の下端側には、ワークＷに照明光を照射するためのリング状の照明装置１７が設けられている。
【００２０】
制御コンピュータユニット２は、ホストコンピュータ２１と、入出力手段２５と、を有する。
入出力手段２５としては、ディスプレイ２４と、キーボード２２と、マウス２３と、プリンタ４と、が設けられている。なお、ディスプレイ２４は、タッチパネルであってもよい。
【００２１】
ホストコンピュータ２１は、ＣＰＵとメモリとを有するいわゆるコンピュータである。ホストコンピュータ２１は、ユーザによる入力操作に応じて画像測定機１を駆動制御する。また、ホストコンピュータ２１は、カメラ１６で取得された画像データを処理してワーク（測定物）Ｗの形状解析等の処理を実行する。
また、ホストコンピュータ２１は、ディスプレイ２４の表示制御を行い、ユーザにグラフィカルユーザインターフェースを提供する。
本実施形態においては、２次元ＣＡＤデータを用いたパートプログラムの生成方法およびその装置を説明するが、このホストコンピュータ２１がパートプログラム生成装置となっている。
そして、主としてホストコンピュータ２１が画像測定機１の動作を制御する「制御装置」となっている。
【００２２】
（パートプログラム生成装置）
図４は、パートプログラム生成装置１００の機能ブロック図である。
パートプログラム生成装置１００は、パートプログラム生成プログラムをＣＰＵにロードすることにより、ＣＰＵおよび周辺回路（ＲＯＭ、ＲＡＭ等）によって実現される。
パートプログラム生成装置１００は、ＣＡＤデータ記憶部１１０と、測定条件設定部１２０と、パートプログラム生成部１３０と、を備える。
【００２３】
ＣＡＤデータ記憶部１１０は、ワークの２次元ＣＡＤデータを記憶するメモリである。
【００２４】
測定条件設定部１２０は、例えば図５に示すＧＵＩ画面１２１をユーザに提供するとともに、ユーザの入力操作を受けて測定手順（測定条件）を設定していく。
測定条件設定部１２０は、専門的なプログラミングのコマンドではなく、わかりやすい編集用言語で測定条件を編集できるエディタウィンドウ１２２をユーザに提供する。
また、測定条件設定部１２０は、測定手順（測定条件）の設定によく使う命令セットをコマンドアイコン１４０としてユーザに提供する。本実施形態において、図５に示されるように、"迂回移動"というコマンドアイコンの迂回移動コマンドアイコン１２４が新設されている。
迂回移動コマンドアイコン１２４によって提供される機能については後述する。
【００２５】
図５の左上のＣＡＤデータウィンドウ１２５にワークのＣＡＤデータが表示されている。ここでは、ワークの平面図が表示されている。
一例として、円Ｃ１を円測定した後、カメラ１６を円Ｃ２の直上に移動させて、円Ｃ２を円測定したいとする。ただし、円Ｃ１と円Ｃ２とを結ぶ経路上には、凸部Ｂ０があるとする。
このような場合、カメラ１６が移動中に凸部Ｂ０に接触してしまう可能性がある。
【００２６】
そこで、図６に例示するように、凸部Ｂ０を迂回するようにカメラ１６を移動させなければならない。
"移動"命令を複数組み合わせることで迂回路を設定するのは原理的には可能なのであるが、編集用言語を用いるとしても、このような迂回路をユーザが一つ一つ設定入力するのは大変な労力を要する。
【００２７】
本実施形態では、測定条件の編集用言語に、迂回移動コマンドアイコン１２４が用意されている。
ユーザは、出発点である移動元（円Ｃ１）から目的点である移動先（円Ｃ２）にカメラ１６を移動させるにあたり、途中に凸部Ｂ０があると判断する場合には、"迂回移動"命令である迂回移動コマンドアイコン１２４を用いて命令を設定する。
【００２８】
さて、ユーザが迂回移動コマンドアイコン１２４をクリックしたとする。すると、編集用ウィンドウ１２２に迂回移動命令に必要な入力事項として、移動先の座標値と、"障害の高さ"とを尋ねるメッセージ１２６が表示される。
ここでいう"障害の高さ"とは凸部Ｂ０の高さのことである。
ユーザは、例えば、平面図ではなく、側面図あるいは断面図のＣＡＤデータを別途参照して凸部Ｂ０の高さを入力しておけばよい。
あとは、後述のパートプログラム生成処理によって、凸部Ｂ０を適切に迂回しながら移動先に向かう経路をもったパートプログラムが自動的に生成される。
【００２９】
なお、図５のＧＵＩ画面１２１において、パラメータ設定のウィンドウ１２７が表示されている。パラメータとして、カメラ１６の作動距離（ワーキングディスタンス）と安全ギャップとを設定入力しておく。
【００３０】
カメラ１６の作動距離とは、カメラ１６の下端面と焦点面との距離である。例えば図６を参照されたい。作動距離は、カメラ１６の種類や倍率によって決まる値であるから、測定条件設定部１２０あるいはパートプログラム生成部１３０が自動取得するようにしてもよい。ここでは、作動距離が３０ｍｍのカメラ１６を使用するとする。
【００３１】
安全ギャップとは、カメラ１６が障害を跨ぐときにカメラ１６の下端と障害との間に確保すべき間隔である。
数ｍｍ程度の値を設定しておけばよい。デフォルトとして所定の値が設定されていてもよいし、ユーザが任意の値を入力設定してもよい。
ここでは、安全ギャップが５ｍｍに設定されているとする。
【００３２】
このようにしてユーザは測定条件設定部１２０に"迂回移動命令"を設定する。
迂回移動命令は新しい機能であるが、ユーザにとってみれば、既存の移動命令との差は"障害の高さ"を入力する手間があるかないかだけである。
【００３３】
カメラ１６の移動経路をより詳細に、かつ、網羅的に説明するため、図７のようなワークＷを考える。
点Ｐ１〜点Ｐ７は測定点である。カメラ１６は、点Ｐ１から点Ｐ７へ移動しながら各測定点（Ｐ１〜Ｐ７）を測定していくとする。
測定点と測定点との間には凸部がある。凸部を障害Ｂ１から障害Ｂ６と称することにする。
【００３４】
さらに、より具体的に説明するため、数値例を設定する。
図７において、測定点Ｐ１の高さ（Ｚ座標値）を０（ゼロ）とする。
障害Ｂ１から障害Ｂ６の高さ（Ｚ座標値）をすべて＋６とする。
測定点Ｐ２から測定点Ｐ７の高さ（Ｚ座標値）を、順に、−６、−２３、−３３、−２３、−６、０、とする。
【００３５】
先に説明した迂回移動コマンドアイコン１２４を使用して測定条件を入力していくと図８のような測定手順が簡単に作成できる。
迂回移動コマンド１２４により、移動先の座標と、その途中にある障害の高さを入力していくだけである。
なお、測定点Ｐ１のｘ座標、ｙ座標をｘ１、ｙ１とし、以下、測定点Ｐ２からＰ７のｘ座標、ｙ座標についても同様に添え字を用いて表わすこととした。
例えば測定点Ｐ１から測定点Ｐ２へ迂回移動を指令する場合、迂回移動命令Ｐ２として、移動先である測定点Ｐ２の座標値（ｘ２、ｙ２、−１０）と、その途中にある障害Ｂ１の高さ＋６を入力しておけばよい。
【００３６】
さて、パートプログラム生成部１３０は、測定条件設定部１２０で設定された測定手順（測定条件）（図８）をパートプログラム言語に展開・変換する（図９参照）。すなわち、編集用言語の命令セットをパートプログラム言語の命令セットに変換する。
【００３７】
本実施形態においては、編集用言語に"迂回移動"の命令セットである迂回移動コマンドアイコン１２４が新設された。
これに伴って、パートプログラム生成部１３０においても"迂回移動"の命令を適切にパートプログラム言語の命令セットに展開・変換しなければならない。
この点を、図１１、図１２、図１６のフローチャートおよび図１０、図１５、図１８、の動作例を参照しながら説明する。
【００３８】
（パートプログラム生成方法）
パートプログラム生成部１３０の動作を図１１、図１２、図１６のフローチャートを参照しながら順に説明していく。
編集用言語の命令セットとパートプログラム言語の命令セットとは原則的には一対一に対応しており、単純には、編集用言語の各命令セットをパートプログラム言語にコンパイルしてしまえばよい。
ただし、迂回移動命令のように新設された命令の場合、画像測定機１には迂回移動命令を直接実行する機能がなく、迂回移動命令を単一の命令にコンパイルすることができない場合がある。
この場合、迂回移動命令で意図していることを画像測定機１がすでに持っている機能で実現するように翻訳する必要がある。
【００３９】
本実施形態においては、まさに、迂回移動命令を画像測定機１に実行させる点に特徴を有するので、パートプログラム生成部１３０の動作として、測定条件設定部１２０に設定された迂回移動命令をパートプログラムに展開する処理を説明していく。
【００４０】
さて、カメラ１６が一の測定点（出発点）から次の測定点（目的点）へ移動する際、カメラ１６が障害に接触しないようにしなければならない。したがって、カメラ１６は、測定点から測定点へ移動するにあたって、必要に応じ、直行するのではなく、迂回する経路（図７中の矢印）をとることになる。
障害を跨いで測定点から測定点に移動する場合、４つの移動パターンがある。
つまり、迂回不要、第１迂回パターン、第２迂回パターン、第３迂回パターンである。
具体例を参照しながら、これら４つの移動パターンを順に説明する。
【００４１】
（迂回不要の移動パターン）
測定点Ｐ１から測定点Ｐ２に移動する場合を考える。つまり、測定点Ｐ１が出発点であり、測定点Ｐ２が目的点である。
図１０は、測定点Ｐ１から測定点Ｐ２への移動を説明するための拡大図である。
また、図８の測定条件（測定手順）でいうと、迂回移動命令Ｐ２に注目して頂きたい。
【００４２】
図１１のフローチャートに示すように、パートプログラム生成部１３０は、迂回移動命令をパートプログラムに展開するにあたって、まず、カメラ１６の"現在高さ"を取得する（ＳＴ１１０）。
ここで、「カメラの高さ」とは、カメラ１６の焦点面の高さを意味する。
また、"現在高さ"というのは、当該"迂回移動命令Ｐ２"の実行開始時にカメラ１６がある高さである。
言い換えると、当該"迂回移動命令"のひとつ前の命令（測定１）が終了した時点におけるカメラ１６の高さのことである。
【００４３】
さて、現在高さを取得する（ＳＴ１１０）。測定点Ｐ１の高さは０である。
図８の測定条件（測定手順）中で当該迂回移動命令Ｐ２の一つ前の移動（移動命令Ｐ１）で測定点Ｐ１に到達しているのであるから、移動命令Ｐ１で指示されている移動先を読み出せばよい。
【００４４】
次に、目的点高さを取得する（ＳＴ１２０）。
目的点とは移動先のことであり、ここでは測定点Ｐ２のことである。測定点Ｐ２の高さは、−６である。
【００４５】
続いて、パートプログラム生成部１３０は、"安全高さ"を算出する（ＳＴ１３０）。
ここで「安全高さ」とは、カメラ１６が安全に障害Ｂ１を跨ぐときに必要とされる「焦点面の高さ」のことである。
例えば図６を参照して頂くと、カメラ１６が障害を跨ぐ際には、カメラ１６の下端と障害との間に安全ギャップが確保されなければならない。
したがって、カメラ１６が安全に障害を跨ぐときに必要とされる焦点面の高さ（＝安全高さ）は、次のように表される。
（安全高さ）＝（障害の高さ）＋（安全ギャップ）−（作動距離）
【００４６】
安全高さの算出（ＳＴ１３０）の具体的手順を図１２のフローチャートに示す。
障害の高さ（ＳＴ１３１）、作動距離（ＳＴ１３２）、安全ギャップ（ＳＴ１３３）を取得し、前記の式で安全高さを算出する（ＳＴ１３４）。
ここでは、障害の高さ（ＳＴ１３１）が６で、作動距離（ＳＴ１３２）が３０で、安全ギャップ（ＳＴ１３３）が５である。
（安全高さ）＝（障害の高さ）＋（安全ギャップ）−（作動距離）
＝６＋５−３０
＝−１９
このようにして安全高さが求まる。
【００４７】
安全高さ（−１９）が求まったら、次に、"安全高さ"を"現在高さ"および"目的高さ"と対比する（ＳＴ１４０、ＳＴ１５０）。
今の例では、"現在高さ"（＝０）も"目的高さ"（＝−６）も"安全高さ"（＝−１９）よりも高い。この場合、カメラ１６が現在高さ（＝０）から目的高さ（＝−６）に直行しても、カメラ１６の高さが"安全高さ"（＝−１９）を下回ることはない。
したがって、パートプログラム生成部１３０は、測定点Ｐ１から測定点Ｐ２への迂回移動命令Ｐ２をパートプログラムに展開するにあたって迂回不要と判断し、迂回無しの単なる移動命令として変換する（図１３参照）。すなわち、迂回移動命令Ｐ２がパートプログラムに展開されても、移動先に直行する一つの移動命令（ｍｏｖｅＰ２）になるだけである。
【００４８】
（第１迂回パターン）
次に、迂回が必要になる例として、測定点Ｐ２から測定点Ｐ３への移動を考える（図７、図１０）。
図８の測定条件（測定手順）でいうと、迂回移動命令Ｐ３に注目して頂きたい。
【００４９】
現在高さを取得すると（ＳＴ１１０）、測定点Ｐ２の高さは"−６"である。
目的点の高さを取得すると（ＳＴ１２０）、測定点Ｐ３の高さは"−２３"である。
安全高さを算出すると（ＳＴ１３０）、障害Ｂ２の高さは＋６であるから（ＳＴ１３１）、安全高さは先程と同じように"−１９"である。
この安全高さ（−１９）を現在高さ（−６）および目的点高さ（−２３）と対比する（ＳＴ１４０、ＳＴ１５０）。
【００５０】
すると、現在高さ（−６）は安全高さ（−１９）より大であるが（ＳＴ１４０：ＹＥＳ）、目的点高さ（−２３）は安全高さ（−１９）よりも小である（ＳＴ１５０：ＮＯ）。
目的点高さ（−２３）が安全高さ（−１９）よりも低いため、カメラ１６が目的点に直行しようとすると、目的点に到達する前に、カメラ１６が障害（Ｂ２）に接触してしまう可能性がある。この場合、パートプログラム生成部１３０は、測定条件の迂回移動命令をパートプログラムに展開するにあたって、第１迂回パターンの迂回路をとるようにする。
【００５１】
すなわち、パートプログラム生成部１３０は、迂回移動命令を２つの移動命令に展開する（図１４参照）。
第１迂回パターンにおいては、図１１のフローチャートに示すように、まず、カメラ１６を水平移動によって目的点（ここでは点Ｐ３）の直上へ移動させるようにする（ＳＴ１７０）（図１０中の矢印Ａ１）。それから、カメラ１６を鉛直方向に沿って目的点の高さに降下させるようにする（ＳＴ１８０）（図１０中の矢印Ａ２）。
【００５２】
"現在高さ"（−６）は安全高さ（−１９）よりも大なので、現在高さのまま水平移動すれば障害（Ｂ２）を安全に超えていけるはずである。
水平移動で安全に障害の上を通過したら、目的点に向かえばよい。
ただ、測定条件には、障害Ｂ２の高さ（＋６）は入力されているが、障害Ｂ２の詳しい位置（座標）は入力されていない。
障害Ｂ２を確実に通過したといえるのは、目的点（測定点Ｐ３）の直上に来たときである。したがって、目的点の直上まで水平移動させた後（ＳＴ１７０）、目的点へ降下する（ＳＴ１８０）、という経路が、安全を確保する最適の経路である。
【００５３】
（第２迂回パターン）
次に、第２迂回パターンを採用するケースを説明する。
例として、測定点Ｐ５から測定点Ｐ６への移動を考える（図７、図１５）。
図１５は、測定点Ｐ５から測定点Ｐ６への移動を説明するための拡大図である。
図８の測定条件（測定手順）でいうと、迂回移動命令Ｐ６に注目して頂きたい。
【００５４】
現在高さを取得すると（ＳＴ１１０）、測定点Ｐ５の高さは"−２３"である。
目的点の高さを取得すると（ＳＴ１２０）、測定点Ｐ６の高さは"−６"である。
安全高さは、これまで同様、"−１９"である（ＳＴ１３０）。
【００５５】
図１１のフローチャートにおいて、安全高さ（−１９）をまず現在高さ（−２３）と対比する（ＳＴ１４０）。
すると、現在高さ（−２３）が安全高さ（−１９）よりも小さい（ＳＴ１４０：ＮＯ）。
続きのフローチャートは図１６を参照されたい。
次に、目的点高さ（−６）を安全高さ（−１９）と対比する（ＳＴ２１０）。
目的点高さ（−６）は安全高さ（−１９）よりも大である（ＳＴ２１０：ＹＥＳ）。
【００５６】
目的点高さ（−６）は安全高さ（−１９）よりも高いのであるが（ＳＴ２１０：ＹＥＳ）、現在高さ（−２３）が安全高さ（−１９）よりも低いので（ＳＴ１４０：ＮＯ）、カメラ１６が現在位置（測定点Ｐ５）から目的点（測定点Ｐ６）に直行しようとすると、目的点（測定点Ｐ６）に到達する前に、カメラ１６が障害Ｂ５に接触する可能性がある。
【００５７】
そこで、この場合、パートプログラム生成部１３０は、測定条件の迂回移動命令Ｐ６をパートプログラムに展開するにあたって、第２迂回パターンの迂回路をとるようにする。すなわち、パートプログラム生成部１３０は、迂回移動命令を２つの移動命令に展開する（図１５、図１７参照）。
具体的には、まず、カメラ１６を鉛直方向に沿って目的点（測定点Ｐ６）の高さまで上昇させる（ＳＴ２２０）（図１５中の矢印Ａ３）（図１７のｍｏｖｅＰ６−１）。
現在高さ（−２３）が安全高さ（−１９）よりも低いので、現在の高さから高さを変えずに横方向に移動するとカメラ１６が障害（Ｂ５）に接触する可能性がある。
そこで、まずは、カメラ１６を鉛直方向に上昇させ（図１５中の矢印Ａ３）、少なくとも安全高さ（−１９）よりも高く移動させておく必要がある。
ここで、安全高さ（−１９）まで上昇していれば、カメラ１６は障害Ｂ５の上を安全に通過できるのであるが、目的点（測定点Ｐ６）の高さ（−６）が安全高さ（−１９）よりも高いのであるから、一度の動作で目的点の高さまで上昇しておくのが合理的である。そしてその後、カメラ１６を水平移動によって目的点（測定点Ｐ６）へ移動させる（ＳＴ２３０）（図１５中の矢印Ａ４）（図１７のｍｏｖｅＰ６−２）。
【００５８】
現在高さ（−２３）が安全高さ（−１９）よりも小さく（ＳＴ１４０：ＮＯ）、かつ、目的点高さ（−６）が安全高さ（−１９）よりも大である（ＳＴ２１０：ＹＥＳ）ような場合には、目的点の高さまで上昇した後（ＳＴ２２０）、水平移動によって目的点へ移動する（ＳＴ２３０）、という経路が安全を確保する最適の経路である。
【００５９】
（第３迂回パターン）
次に、第３迂回パターンを採用するケースを説明する。
例として、測定点Ｐ３から測定点Ｐ４への移動を考える（図７、図１８）。
図１８は、測定点Ｐ３から測定点Ｐ４への移動を説明するための拡大図である。
図８の測定条件（測定手順）でいうと、迂回移動命令Ｐ４に注目して頂きたい。
【００６０】
現在高さを取得すると（ＳＴ１１０）、測定点Ｐ３の高さは−２３である。
目的点の高さを取得すると（ＳＴ１２０）、測定点Ｐ４の高さは−３３である。
安全高さは、これまで同様"−１９"である（ＳＴ１３０）。
【００６１】
さて、安全高さ（−１９）を現在高さ（−２３）および目的点高さ（−３３）と対比すると、いずれも安全高さ（−１９）よりも低い（ＳＴ１４０：ＮＯ、ＳＴ２１０：ＮＯ）。
このようなケースにおいては、まずはカメラ１６が安全に障害Ｂ３の上を通過するように配慮しなければならない。パートプログラム生成部１３０は、測定条件の迂回移動命令をパートプログラムに展開するにあたって、第３迂回パターンの迂回路をとるようにする。
【００６２】
すなわち、パートプログラム生成部１３０は、迂回移動命令を３つの移動命令に展開する（図１９参照）。
フローチャートとしては図１６を参照されたい。
具体的には、まず、カメラ１６を鉛直方向に沿って安全高さ（−１９）まで上昇させる（ＳＴ２４０）（図１８中の矢印Ａ５）（図１９のｍｏｖｅＰ４−１）。この高さまで上昇すれば、カメラ１６が障害Ｂ３に接触する心配はない。
【００６３】
続いて、水平移動で目的点（測定点Ｐ４）の直上へ移動する（ＳＴ２５０）（図１８中の矢印Ａ６）（図１９のｍｏｖｅＰ４−２）。
さらに、鉛直方向に沿って目的点へ降下する（ＳＴ２６０）（図１８中の矢印Ａ７）（図１９のｍｏｖｅＰ４−３）。この迂回路により、カメラ１６は安全に目的点に移動することができる。
【００６４】
現在高さも目的点高さも安全高さよりも低い（ＳＴ１４０：ＮＯ、ＳＴ２１０：ＮＯ）ような場合、まずはカメラを安全高さまで上昇させて安全を確保したうえで目的点に向かう。これにより、カメラは安全に障害を越えて目的点に達することができる。
【００６５】
（作用効果）
このような本実施形態によれば次の効果を奏する。
（１）本実施形態によれば、オフラインティーチングで障害を越えるような迂回路を設定する場合であっても、ユーザの作業としては障害の高さを入力するだけでよい。
障害の高さを入力すれば、パートプログラム生成部１３０の機能によって自動的に迂回の必要性を判定し、さらに、必要な安全高さで安全に障害を越えるように自動的に迂回路が設定される。
仮にこの迂回路をユーザが手作業で設定するとなると非常に煩雑である。
障害ごとに安全高さを計算したり、現在高さや目的高さと比較して迂回の必要性を判断したり、適切な迂回路を逐一入力するというのはあまりにも時間が掛かってしまう。しかも、計算や入力を間違えると、カメラもワークも破損するおそれがある。
この点、本実施形態によれば、ユーザの負担増がほとんど無しで迂回路を適切に設定できる。したがって、比較的凹凸が大きいワークを画像測定するような場合でもパートプログラムの作成が簡単、迅速、そして安全に行えるのである。
【００６６】
（２）本実施形態によれば、パートプログラム生成部１３０が障害ごとに必要な安全高さを求めたうえで、最適な迂回路が自動設定される。
ここで、障害を超えるにあたってカメラ１６の高さを十分に高いところまで上昇させてしまえば、カメラとワークとが接触するおそれはなくなる。極端にいえば、Ｚ軸ストロークの最高点までカメラ１６を上昇させてしまえば、カメラ１６とワークＷとが接触することはもちろんない。しかし、障害を越えるたびにそんな遠回りばかりしていては測定時間が無駄に長くなり、測定効率が極めて悪くなる。
この点、本実施形態では、障害の高さから安全高さを算出し（ＳＴ１３０）、安全に安全高さを超えかつ最も合理的な迂回路を取るようにできる。
したがって、高い測定効率を維持することができる。
【００６７】
（３）本実施形態では、画像測定機が迂回移動命令を直接実行できなくても、既存の移動命令の組み合わせで迂回移動を実現するようにできる。
画像測定機１のモーションコントローラの機能として迂回移動を実現するコマンドを新設するとなるとやや面倒な設計変更を要するが、本実施形態のように測定条件（測定手順）をパートプログラムに展開する段階で既存の移動命令の組み合わせに変換すれば画像測定機自体の変更は必要ない。
したがって、本実施形態の実施にあたっては、最小の追加コストでよい。
【００６８】
（変形例１）
上記第１実施形態においては、迂回移動命令のたびに障害の高さの入力を要求していた。
ここで、変形例１として、障害の高さの入力を毎回要求しないようにしてもよい。その方法として、例えば、予め、ワークのなかの最高点を入力させておくという方法が考えられる。例えば、図２０のように、パラメータ設定の項目の一つとして、ワークの最高点を入力させる。そして、迂回移動命令の処理にあたっては、ワークの最高点を障害の高さとする。
【００６９】
ワークの最高点を障害の高さとして迂回路を設定すれば、絶対に安全な迂回路になることは明白である。ユーザとしては、毎回障害の高さを入力しなくてもよいので、測定条件の設定が非常に簡便になる。
ただ、この方法で迂回路を作成すると、ワークの最高点を安全に超える高さまで毎回カメラが上昇することになる。すると、必要以上に余計な回り道をすることになり、測定時間がそれだけ余計に長くなるということになる。
しかしながら、測定時間そのものよりも測定条件の入力作業に多大な時間を浪費する方が問題となる場合もある。例えば、試作品や少数品を測定する場合である。同じ形状のワークを数百個、数千個、数万個、と連続測定する場合は別問題であるが、試作品や少数品を測定する場合であれば多少の回り道は問題ではなく、入力作業の簡便さが優先される。
【００７０】
（変形例２）
障害の高さの入力を毎回要求しない別法として、２次元ＣＡＤデータに加えて、ホストコンピュータに高さのデータを予め入力しておく、という方法も考えられる。
図２１において、ＣＡＤデータ記憶部１１０に高さ分布データ記憶部１１１が付設されている。
例えば、図２２において、ＣＡＤデータウィンドウ１２５にワークの平面図が表示されており、ハッチングで塗り分けられている。
この塗り分けは、ＣＡＤデータの読み込みのあと、ユーザが予め行っておく。
ここでは、ユーザが各範囲を指定し、高さを入力したとする。
ホストコンピュータのグラフィック処理により、例えば、高さに応じてハッチングの密度を変えるなどして高低を表現するようにする。もちろん、カラーで塗り分けるようにしてもよい。
あるいは、予め塗り分けたＣＡＤデータを読み込むようにしてもよい。
ユーザ補助として、ＣＡＤデータウィンドウ１２５中で各領域にマウスカーソルを合わせると、設定しておいた高さがポップアップまたはステータスバーなどに表示されるようにしておいてもよい。
あるいは、高さスケール１７１の範囲インジケータ１７２の上端、下端、或いは全体をマウスでドラッグして、所望の範囲を指定するとその高さ（例えば９ｍｍ−１０ｍｍ）の領域だけが際立つように色が付き、その他の領域は退色するようにしてもよい。
ユーザが範囲を指定するとしたが、ユーザが図形を描くようにして範囲を指定する方法もあるし、ホストコンピュータのグラフィック処理機能を利用して、ＣＡＤデータの輪郭線で囲まれた領域をコンピュータが自動認識するようにしてもよい。
【００７１】
高さを塗り分ける際、領域が重なることが有り得る。例えば、ワークの一番広い平坦面Ｗｐの高さを設定したあと、その平坦面Ｗｐのなかに障害となる凸部Ｂ０の高さを設定する場合がある。すると、凸部Ｂ０には二つの値が設定されていることになってしまう。このように領域が重なって二つの値が設定されている場合、どちらを優先するかルールを決めておく必要がある。
【００７２】
一つの考え方は、後から設定入力された高さを優先する、というものである。後から設定入力された凸部Ｂ０の高さを優先する。通常、凸部や孔部の領域はあとから選択されると考えられるので上記のルールでも十分に有用であると考えられる。
もちろん、先に入力した値と後から入力した値とのどちらを優先させるかをその都度ユーザが選択的に変更できるようにしてもよい。
もう一つの考え方として、包含される方、或いは狭い方に設定入力された高さを優先する、という方法もある。通常、広域的に大まかな設定を行い、それを局所的に修正設定していくので、このルールでも十分に有用であると考えられる。
もちろん、包含される方の値と包含する方の値とのどちらを優先させるかをその都度ユーザが選択的に変更できるようにしてもよい。      
【００７３】
エディタウィンドウ１２２で測定条件を設定入力するにあたって、ユーザが迂回移動を指令した場合、測定条件設定部１２０は、現在位置と目的位置とから経路上の最高点を障害の高さとして自動設定する。これにより、ユーザが測定条件の編集中に一々障害の高さを入力する必要はなくなる。
【００７４】
なお、測定条件設定部１２０が高さデータから経路上の最高点を読み出すのではなく、パートプログラムへの展開時にパートプログラム生成部１３０が高さデータから経路上の最高点を読み出すようにしてもよい。
【００７５】
（変形例３）
測定条件設定部１２０に設定された測定条件をパートプログラム言語に展開するにあたっては、図２３に示すように、迂回移動命令をサブルーチン１６１としてパートプログラムに組み込むようにしてもよい。
ここで、サブルーチン１６１は、図１１、図１２、図１６で説明した手順で迂回移動経路を生成し、その移動経路でカメラを移動させるサブルーチンである。
測定手順のなかの各迂回移動命令は、パートプログラムに変換されるとき、実引数として移動先の座標（Ｘ、Ｙ、Ｚ）と障害高さＨＢとをもち、サブルーチン１６１を呼び出すコール命令に変換される。
パートプログラムの実行時には、各コール命令がサブルーチン１６１を呼び出し、サブルーチン１６１は実引数に基づいて迂回移動経路を生成し、移動を実行する。
【００７６】
（変形例４）
上記第１実施形態では、画像測定機自体は"迂回移動命令"を直接には実行できないという前提で説明した。
もちろん、画像測定機（言い換えると、画像測定機のモーションコントローラ）が"迂回移動命令"を直接実行できてもよい。
迂回移動命令に対応するパートプログラム言語の命令を一つ用意しておく。
そして、図２４に例示するように、迂回移動命令は、対応するパートプログラム言語にコンパイルされる。
パートプログラムの実行時、画像測定機（画像測定機のモーションコントローラ）は、要するには、図１１、図１２、図１６のフローチャートの手順に従って迂回移動のコマンドを実行すればよい。
この場合は、画像測定機（画像測定機のモーションコントローラ）が「制御装置」を内蔵しているということである。
【００７７】
さらには、画像測定機が、パラメータ（カメラの作動距離、安全ギャップ）の設定、変更、迂回移動命令の障害高さパラメータの設定、変更、高さ分布データ（ファイル等）のロード、利用の機能を有していてもよい。
高さ分布データ（ファイル等）の作成支援機能はホストコンピュータ側でも良い。
【００７８】
（変形例５）
ここまでの説明では、カメラ１６は、出発点から目的点に直線的に"直行"するものとした。
ただ、カメラ１６と測定テーブル１３との相対移動は、Ｘ軸、Ｙ軸、Ｚ軸の３つの駆動軸の協働で実現するものであるため、実際的には、カメラ１６が出発点から目的点に直線的に直行するとは限らない。
【００７９】
例えば、図２５のケースを考えてみる。
図２５のワークにおいては、障害Ｂ８は円Ｃ１と円Ｃ２とを結ぶ直線から少しずれた位置にある。円Ｃ１の測定の後、カメラ１６が円Ｃ２に向けて直線的に直行するならば、カメラは障害Ｂ８に接触しない。
しかし、Ｙ駆動軸とＸ駆動軸とが調和的に協働せず、それぞれが独立に目的点を目指すとカメラ１６の移動経路は直線的にならない（例えば、図２５中の破線Ａ８）。この場合、障害Ｂ８は円Ｃ１と円Ｃ２とを結ぶ直線から少しずれた位置にあるにもかかわらず、カメラ１６の位置が障害Ｂ８よりも低いと、カメラ１６が障害Ｂ８に接触する可能性がでてくる。したがって、出発点から目的点にカメラ１６が移動する際に考慮すべき障害は、出発点から目的点に至る直線経路上にあるものだけでは不十分となる。
【００８０】
そこで、カメラ１６の移動経路が直線からずれる場合も考慮する。
カメラ１６の移動経路が直線からどんなにずれたとしても、すべての移動経路は出発点と目的点とを対角とする、辺が駆動軸に平行な長方形のなかに包含される。例えば図２６を参照されたい。したがって、ユーザが障害の高さを入力する場合には、出発点と目的点とを対角とする長方形のなかに包含される障害の最高点を障害の高さとして入力することが好ましい。
【００８１】
また、測定条件設定部１２０あるいはパートプログラム生成部１３０が障害の高さを自動取得する場合には、出発点と目的点とを対角とする長方形のなかに包含される障害の最高点を障害の高さとして設定するようにする。
【００８２】
この構成によれば、カメラの駆動軸が協働せず独立制御されるような場合であっても、適切に障害を超える経路で画像測定が行われる。
上記説明は、平面視（図２６）の２次元的な説明であるが、３次元的に考えても安全は確保される。
カメラ１６の移動経路が直線からどんなにずれたとしても、その移動経路は、出発点と目的点を対角として、辺が駆動軸に平行な直方体に包含される。ただし、カメラの上下動の経路は曲がらずＺ軸に平行である。
したがって、出発点において安全高さまで上昇し、目的点の直上まで来たところで目的点まで降下する経路を取れば、直方体内の障害を安全に越え、かならず安全は確保される。
【００８３】
（変形例６）
変形例６を説明する。
上記第１実施形態において第１迂回パターンと第２迂回パターンとを説明した。
第１迂回パターンおよび第２迂回パターンにおいては、現在高さおよび目的点高さの一方が安全高さよりも低い場合、水平移動で障害の上を通過するとした。
この迂回方式は、ステップ実行や移動速度抑制モードでパートプログラムを実行し、干渉チェックなどの目的で移動経路を目視確認する際に、動きが直角的なので分かり易く、安心感がある。
また、余裕（安全ギャップ）をもってカメラが障害の上を通過するので、若干の設定ミスや制御動作の不安定があっても確実に障害を越えていくという利点もある。
ただし、迂回経路が長くなり、その分時間は掛かる。
そこで、安全を確保できる範囲で斜め移動も利用してもう少し移動時間を短縮できる変形例６を説明する。
【００８４】
図２７を参照されたい。
これは図７に対応する図であり、第１迂回パターンに代えて第４迂回パターンとし、第２迂回パターンに代えて第５迂回パターンとしている。
第４迂回パターンを図２８、図２９を参照して説明する。
図２８のフローチャートにおいて、目的点高さが安全高さ未満であるとき（ＳＴ１５０：ＮＯ）、目的点に直行することはできないので迂回が必要である。
このとき、第４迂回パターンとしては、「水平移動」で目的点の直上に移動するのではなく、目的点直上の安全高さに移動する（ＳＴ１７１）。
図２９を図１４と対比して頂くと、第１段階の移動（ｍｏｖｅＰ３−１）において現在高さ（Ｚ＝−６）を保った水平移動ではなく、Ｚ＝−１９に向けて移動している。
そして、目的点直上の安全高さに達した後、目的点へ降下する（ＳＴ１８０）。
カメラ１６の高さが安全高さ以上であればカメラ１６がどのように移動しても安全なのであり、したがって目的点直上の安全高さに斜めに直行しても当然に安全は確保される。
そして、経路が短くなる分だけ移動時間も短縮される。
【００８５】
続いて、図３０、図３１、図３２を参照して第５迂回パターンを説明する。
図２８および図３１のフローチャートにおいて、目的点高さが安全高さ以上ではあるが（ＳＴ２１０：ＹＥＳ）、現在高さが安全高さ未満であるとき（ＳＴ１４０：ＮＯ）、目的点に直行することはできないので迂回が必要である。
このとき、第５迂回パターンとしては、目的点高さまで一気に上昇するのはなく、安全高さ（−１９）までの上昇にとどめる（ＳＴ２２１）。
図３２を図１７と対比して頂くと、第１段階の移動（ｍｏｖｅＰ６−１）において目的点高さ（Ｚ＝−６）まで上昇するのではなく、安全高さ（−１９）までの上昇にとどめ（ＳＴ２２１）、その後、目的点に直行するように移動する（ＳＴ２３０）。
カメラ１６の高さが安全高さまで上昇していればどのように移動しても安全なのであり、したがって目的点に斜めに直行しても当然に安全は確保される。
そして、経路が短くなる分だけ移動時間も短縮される。
【００８６】
（変形例７）
カメラの動きが直角的である方が見た目に分かりやすいという利点があるので、すべての移動経路を上下方向移動と水平移動とで構成するようにしてもよい。
例えば、図７において、点Ｐ１から点Ｐ２への移動および点Ｐ６から点Ｐ７への移動にあたって迂回不要としたので斜め移動で目的点に直行するとしが、図３３に例示するように、まず上昇（あるいは下降）した後に水平移動するようにしてもよい。もちろん、順番を変えて、水平移動した後に上昇（あるいは下降）するようにしてもよい。
【００８７】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
ここまでの説明では、表面性状測定機として画像測定機を例示したが、本発明の要旨は、非接触式のセンサでワークを計測する測定機に広く適用できる。
例えば、非接触式センサでワークの形状や高さ（プロファイル）を計測する形状測定機が知られている。
センサとしては、光電式や静電容量式の検出方式があり、光電式であれば、レーザー測距でもよいが、その他、例えば特許５１９０３３０に開示されているようなクロマチックポイントセンサ（ＣＰＳ）、あるいは、ＷＬＩ（Ｗｈｉｔｅ  Ｌｉｇｈｔ  Ｉｎｔｅｒｆｅｒｏｍｅｔｅｒ）の測定原理（白色光干渉）、なども知られている。
あるいは、色、光沢、膜厚などを測定するセンサであってもよい。
センサのワークに対する接近方向が上向きや横向きの測定機にも応用できる。
【００８８】
上記の説明では、ＣＡＤデータ記憶部にワークのＣＡＤデータを記憶させ、ユーザ補助としてＣＡＤデータウィンドウにワークのＣＡＤデータを表示させるとした。
オフラインティーチングとしては、ＣＡＤデータではなく、例えば、ワークの写真を使用するという方法もある。すなわち、ワークを平面視で撮像した画像データをデータ記憶部に記憶させ、ユーザ補助としてデータウィンドウにワークの写真データを表示させてもよい。この場合、予め測定機自体で長作動距離、広視野のレンズでワークを撮像しても良い。この撮影の際には、ユーザの手動操作で衝突を避けても良い。長作動距離の対物レンズを使用すればマニュアル操作も苦ではない。そして、複数の写真のスティッチング（継ぎ合せ）をしても良い。
【符号の説明】
【００８９】
１…画像測定機、
１０…画像測定システム、
１１…架台、１３…測定テーブル、１４…フレーム、１５…カバー、１６…カメラ、１７…照明装置、
２…制御コンピュータユニット、
２１…ホストコンピュータ、２２…キーボード、２３…マウス、２４…ディスプレイ、２５…入出力手段、
１００…パートプログラム生成装置、
１１０…ＣＡＤデータ記憶部、１１１…高さ分布データ記憶部、１２０…測定条件設定部、
１２１…ＧＵＩ画面、１２２…エディタウィンドウ、
１２４…迂回移動コマンドアイコン、１２５…ＣＡＤデータウィンドウ、１２７…パラメータ設定ウィンドウ、
１３０…パートプログラム生成部、
１４０…コマンドアイコン、１４１…移動コマンドアイコン、１４２…円測定コマンドアイコン。
【図１】
0006647094.tif 000002
【図２】
0006647094.tif 000003
【図３】
0006647094.tif 000004
【図４】
0006647094.tif 000005
【図５】
0006647094.tif 000006
【図６】
0006647094.tif 000007
【図７】
0006647094.tif 000008
【図８】
0006647094.tif 000009
【図９】
0006647094.tif 000010
【図１０】
0006647094.tif 000011
【図１１】
0006647094.tif 000012
【図１２】
0006647094.tif 000013
【図１３】
0006647094.tif 000014
【図１４】
0006647094.tif 000015
【図１５】
0006647094.tif 000016
【図１６】
0006647094.tif 000017
【図１７】
0006647094.tif 000018
【図１８】
0006647094.tif 000019
【図１９】
0006647094.tif 000020
【図２０】
0006647094.tif 000021
【図２１】
0006647094.tif 000022
【図２２】
0006647094.tif 000023
【図２３】
0006647094.tif 000024
【図２４】
0006647094.tif 000025
【図２５】
0006647094.tif 000026
【図２６】
0006647094.tif 000027
【図２７】
0006647094.tif 000028
【図２８】
0006647094.tif 000029
【図２９】
0006647094.tif 000030
【図３０】
0006647094.tif 000031
【図３１】
0006647094.tif 000032
【図３２】
0006647094.tif 000033
【図３３】
0006647094.tif 000034