(57)【要約】【課題】連続系方程式を用いて機構の挙動を時間軸に沿ってシミュレーションするダイナミクスシミュレーションと、３次元機構モデルを用いたキネマティックスシミュレーションとを併用する機構シミュレーション方法およびプログラムの提供。【解決手段】  ダイナミクスシミュレーションと、キネマティックスシミュレーションとを併用する機構シミュレーション方法及びであって、連続系方程式における変数と３次元機構モデルの機構要素との対応関係を読み込むステプログラムップ５０１、５０２と、ダイナミクスシミュレーションを実行し連続系方程式の変数の値を求めるステップ５０４と、対応関係を参照し、変数の値に基づいて３次元機構モデルの機構要素に対するキネマティックスシミュレーションを実行するステップ５０６とを具備する。【選択図】図３
2004220566.tif 000002
【特許請求の範囲】
【請求項１】
複数の変数を有する連続系方程式から構成されるダイナミクスモデルを用いて機構の挙動をシミュレーションするダイナミクスシミュレーションを実行する第１のシミュレータと、複数の機構要素から構成される３次元機構モデルを用いて前記機構の３次元空間内での幾何学的な動作をシミュレーションするキネマティックスシミュレーションを実行する第２のシミュレータとを連携させる機構シミュレーション方法であって、
前記第１のシミュレータが前記ダイナミクスシミュレーションを実行することにより前記連続系方程式のいずれかの変数の値を計算するステップと、
前記複数の変数と前記複数の機構要素との対応を表すテーブルを参照し、前記値が計算された変数に対応付けられる機構要素を特定するステップと、
計算された前記変数の値と特定された前記機構要素とを表す情報を前記第２のシミュレータに送信するステップと、
前記情報に基づいて、前記第２のシミュレータが前記キネマティックスシミュレーションを実行するステップとを具備する機構シミュレーション方法。
【請求項２】
前記ダイナミクスモデルは、連続系モデルと状態遷移モデルとからなるハイブリッドモデルを含み、前記ダイナミクスシミュレーションはハイブリッドシミュレーションを含む請求項１に記載の方法。
【請求項３】
前記状態遷移モデルには前記機構を制御する機構制御ソフトウェアを含む外部からの制御信号が入力される請求項２に記載の方法。
【請求項４】
前記機構要素はアクチュエータの回転角ないしは移動量を含む請求項１に記載の方法。
【請求項５】
請求項１に記載の方法であって、前記複数の変数と前記複数の機構要素との対応を表すテーブルを作成するステップをさらに具備し、該ステップは以下を含む：
前記複数の変数を表すダイナミクスモデルのデータを読み込むステップ；
前記複数の機構要素を表す３次元機構モデルのデータを読み込むステップ；
前記ダイナミクスモデルのデータから、前記複数の機構要素のいずれかに対応付けることが可能な変数を抽出するステップ；
前記３次元機構モデルのデータから、前記複数の変数のいずれかに対応付けることが可能な機構要素を抽出するステップ；および
抽出された変数のいずれかと抽出された機構要素のいずれかとの組み合わせをユーザに選択させるステップ。
【請求項６】
請求項５に記載の方法であって、前記組み合わせをユーザに選択させるステップは以下を含む：
抽出された各々の変数が属するクラスのいずれかを前記ユーザに選択させる第１のステップ；
前記第１のステップにより選択されたクラスに属するメンバー変数を前記ユーザに選択させる第２のステップ。
【請求項７】
前記ダイナミクスモデルのデータは、ハイブリッドモデリング言語の記述データを含む請求項５に記載の方法。
【請求項８】
生成されたテーブルをファイルに格納するステップをさらに具備する請求項５に記載の方法。
【請求項９】
複数の変数を有する連続系方程式から構成されるダイナミクスモデルを用いて機構の挙動をシミュレーションするダイナミクスシミュレーションを実行する第１のシミュレータと、複数の機構要素から構成される３次元機構モデルを用いて前記機構の３次元空間内での幾何学的な動作をシミュレーションするキネマティックスシミュレーションを実行する第２のシミュレータとを連携させる機構シミュレーションプログラムであって、
前記第１のシミュレータが前記ダイナミクスシミュレーションを実行することにより前記連続系方程式のいずれかの変数の値を計算する手順と、
前記複数の変数と前記複数の機構要素との対応を表すテーブルを参照し、前記値が計算された変数に対応付けられる機構要素を特定する手順と、
計算された前記変数の値と特定された前記機構要素とを表す情報を前記第２のシミュレータに送信する手順と、
前記情報に基づいて、前記第２のシミュレータが前記キネマティックスシミュレーションを実行する手順とをコンピュータに実行させる機構シミュレーションプログラム。
【請求項１０】
前記ダイナミクスモデルは、連続系モデルと状態遷移モデルとからなるハイブリッドモデルを含み、前記ダイナミクスシミュレーションはハイブリッドシミュレーションを含む請求項９に記載のプログラム。
【請求項１１】
前記状態遷移モデルには前記機構を制御する機構制御ソフトウェアを含む外部からの制御信号が入力される請求項１０に記載のプログラム。
【請求項１２】
前記機構要素はアクチュエータの回転角ないしは移動量を含む請求項９に記載のプログラム。
【請求項１３】
請求項９に記載のプログラムであって、前記複数の変数と前記複数の機構要素との対応を表すテーブルを作成する手順をさらに具備し、該手順は以下を含む：
前記複数の変数を表すダイナミクスモデルのデータを読み込む手順；
前記複数の機構要素を表す３次元機構モデルのデータを読み込む手順；
前記ダイナミクスモデルのデータから、前記複数の機構要素のいずれかに対応付けることが可能な変数を抽出する手順；
前記３次元機構モデルのデータから、前記複数の変数のいずれかに対応付けることが可能な機構要素を抽出する手順；および
抽出された変数のいずれかと抽出された機構要素のいずれかとの組み合わせをユーザに選択させる手順。
【請求項１４】
請求項１３に記載のプログラムであって、前記組み合わせをユーザに選択させる手順は以下を含む：
抽出された各々の変数が属するクラスのいずれかを前記ユーザに選択させる第１の手順；
前記第１の手順により選択されたクラスに属するメンバー変数を前記ユーザに選択させる第２の手順。
【請求項１５】
前記ダイナミクスモデルのデータはハイブリッドモデリング言語の記述データを含む請求項１３に記載のプログラム。
【請求項１６】
生成されたテーブルをファイルに格納する手順をさらに具備する請求項１３に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータを用いて機構の挙動をシミュレーションする方法およびプログラムに関し、特に微分方程式ないしは代数方程式からなる連続系方程式を用いた機構の時間軸に沿った挙動に関するダイナミクスシミュレーションと、３次元の形状データを含む３次元機構モデルを用いたキネマティックスシミュレーションとを併用するものである。
【背景技術】
【０００２】
現在、コンピュータを用いて機械やプラント等の連続系の時間軸上での挙動のシミュレーションを行う際には、対象を微分方程式などでモデル化し、数値積分などの手法を用いて解を求めることが行われている。さらに、複雑な系の挙動を表現するためには、ハイブリッドモデリングと呼ばれる手法が使われることもある。ハイブリッドモデルを用いたシミュレーションは、通常の連立微分方程式によるシミュレーションをさらに高度化したものであり、「ハイブリッドシミュレーション」と呼ばれている。このようなシミュレーション挙動をするシステムを「ハイブリッドシステム」と呼ぶこともある。シミュレーションの目的で作成されるハイブリッドモデルは、概念的には常微分方程式や代数方程式を連立させた連立方程式によって表現される連続系モデルと、イベント発生に伴う状態遷移を表現するための状態遷移モデルとを組み合わせたモデルである。ハイブリッドモデルによれば、連続系モデルで表現される状態が外部からのイベントなどにより瞬時に切り替わるシステムを表現することができ、より高度なモデル表現が可能である。
【０００３】
ハイブリッドモデルを記述するための言語として、米国ゼロックス社（商標）のパロアルト研究所にて創作されたＨＣＣ（Hybrid Concurrent Constraint Programming）と呼ばれる言語がある（下記非特許文献１参照）。ＨＣＣは発展途上にあり、現在も米国ＮＡＳＡのエイムズ研究所において研究が進められている。ＨＣＣは制約処理プログラミング（コンストレイントプログラミング）と呼ばれる技術の一種であり、連続系モデルを表現する常微分方程式や代数方程式を制約として扱い、これら方程式をそのまま順不同で記述することができる。このような制約記述に、状態遷移を制御する記述を付加してＨＣＣ言語のハイブリッドモデルは完成される。ＨＣＣによれば、方程式をそのまま制約として羅列する（プログラミングする）ことができ、複雑なモデルを記述することが可能である。
【０００４】
このようにハイブリッドモデルの技術を用いれば、系の特性を常微分方程式などでモデル表現し、初期状態から時間の推移に従ってどのような挙動を示すかをシミュレーションすることができる。このような微分方程式などの方程式によるモデル化は外乱による過渡応答や振動など動的な挙動を表現できるため、ダイナミクスシミュレーション（動力学シミュレーション）とも呼ばれる。
【０００５】
微分方程式などで表現可能な対象や現象を的確にモデル化できるハイブリッドモデルの技術の応用例として、ソフトウェアにより機構が制御されるメカトロニクス機器の機構シミュレーションがある。かかる機構シミュレーションによれば、機構の実機が存在しない状況においても、当該機構を制御する制御ソフトウェアのプロトタイピング、テスト、あるいはデバッグなどが行えるようになる。
【０００６】
一方、機構の３次元的な形状データや、部品同士の関節などによる接続関係の情報などを用いて、機構の３次元空間内での幾何学的な動作のシミュレーションを行う技術が知られている。３次元ＣＡＤの技術や機構シミュレーションソフトウェアがこれに相当し、例えば、特開２００１−２２２５７２公報（下記特許文献１）に記載の技術も参考にすることができる。このようなソフトウェアは振動特性のような時間軸に沿った系の挙動のシミュレーションはできないが、複雑な位置関係などを扱うことができ、キネマティックスシミュレーション（機構学シミュレーション）と呼ばれることもある。
【０００７】
特開２００１−２２２５７２に記載の技術は、ソフトウェアにより機構が制御されるメカトロニクス機器の機構シミュレーションを、キネマティクスシミュレーションおよび限定的かつすでにパッケージソフトウェアに組込み済みの限られたダイナミクスの範囲において、実現した公知例である。
【０００８】
機構シミュレーションソフトウェアの中には、ダイナミクスシミュレーションの機能を取り入れ、機構学と動力学の両方を扱えるようにしたものも存在する。しかし、このようなソフトウェアは、前記ＨＣＣで示したようなプログラミング言語的に、複雑な系のモデル化を柔軟に行えるダイナミクスシミュレーションには対応していない。このため、ユーザがシミュレーションの目的に応じて最適なモデル化手法を選び、それに基づいて作成したモデル記述を用いてキネマテティクスシミュレーションとダイナミクスシミュレーションを並立させて実行することができなかった。さらに、より複雑なハイブリッドモデリング技術を用いる場合には、キネマティクスシミュレーションとダイナミクスシミュレーションを連携させることは困難であった。
【非特許文献１】特開２００１−２２２５７２公報
【非特許文献１】インターネット＜ＵＲＬ：www2.parc.com/spl/projects/mbc/publications.html#cclanguages＞
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明はかかる事情を考慮してなされたものであり、微分方程式などの方程式記述によるダイナミクスモデルやハイブリッドモデルを用いた複雑なダイナミクスモデルと３次元形状データを含むキネマティクスモデルを容易に連携させることを可能とすることを目的とする。
【００１０】
また、これにより、ダイナミクスシミュレーションとキネマティクスシミュレーションを並立した高度なシミュレーションを、ソフトウェアにより機構が制御されるメカトロニクス機器の実機レスシミュレーションに適用可能にすることを目的にする。
【課題を解決するための手段】
【００１１】
本発明の一観点に係る機構シミュレーション方法は、複数の変数を有する連続系方程式から構成されるダイナミクスモデルを用いて機構の挙動をシミュレーションするダイナミクスシミュレーションを実行する第１のシミュレータと、複数の機構要素から構成される３次元機構モデルを用いて前記機構の３次元空間内での幾何学的な動作をシミュレーションするキネマティックスシミュレーションを実行する第２のシミュレータとを連携させる機構シミュレーション方法である。この機構シミュレーション方法は、前記第１のシミュレータが前記ダイナミクスシミュレーションを実行することにより前記連続系方程式のいずれかの変数の値を計算するステップと、前記複数の変数と前記複数の機構要素との対応を表すテーブルを参照し、前記値が計算された変数に対応付けられる機構要素を特定するステップと、計算された前記変数の値と特定された前記機構要素とを表す情報を前記第２のシミュレータに送信するステップと、前記情報に基づいて、前記第２のシミュレータが前記キネマティックスシミュレーションを実行するステップとを具備する。
【発明の効果】
【００１２】
本発明によれば、ハイブリッドモデルを用いるようなダイナミクスシミュレーションと３次元キネマティクスシミュレーションを簡便かつ効果的に連携させることが可能となり、かつダイナミクスシミュレーションは、ハイブリッドモデル記述言語のようなプログラミング言語により自由に記述することが可能となる。これにより、複雑な機構系を簡便かつ正確にモデル化でき、該機構系を制御する制御ソフトウェアとの連携シミュレーションにも好適な機構シミュレーション方法およびプログラムを提供できる。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照しながら本発明の実施形態を説明する。なお、以下では、ダイナミクスシミュレータとしてハイブリッドモデリング技術を採用し、かつ、機構制御ソフトウェアないしは機構制御ソフトウェアのシミュレータと連携して動作する最も複雑な実施形態の１つの態様をもとに説明する。
【００１４】
＜第１の実施形態＞
図１は、本発明の第１実施形態に係る機構シミュレータの概略構成を示すブロック図であり、図２は、かかる機構シミュレータが機構制御ソフトウェアないしは機構制御ソフトウェアのシミュレータと連携する場合の構成を示している。
【００１５】
機構シミュレータはダイナミクスシミュレーション部１０１およびキネマティクスシミュレーション部１０３および変数・機構要素対応テーブル１０５から構成され、機構制御ソフトウェアないしは機構制御ソフトウェアのシミュレータ１０８と制御信号１０９をやり取りする。なお、本実施形態は一般的なコンピュータ１０７を用いて構成することができ、その基本的なハードウェア構成として、図示しないが中央演算ユニット（ＣＰＵ）、メモリ、外部記録装置、通信インターフェース（Ｉ／Ｆ）、および表示装置やキーボード、マウス等の入力装置を備える。また、これらのハードウェアを制御するためのオペレーティングシステム（ＯＳ）を備える。また、本発明の実施形態に係る機構シミュレータは、このようなオペレーティングシステム上で動作するアプリケーションソフトウェアとして実装することができる。
【００１６】
シミュレーション対象である機構の動力学的なモデル記述は、後で詳細に説明するハイブリッドモデル記述言語により記述され、ファイル（ハイブリッドモデル記述）１０２としてあらかじめ記憶されている。一方、３次元形状情報を含む機構モデルデータも所定のフォーマットに従いファイル（３次元機構モデル）１０４としてあらかじめ保存されている。これらのデータはシミュレーション開始時に読み込まれる。この段階では、ダイナミクスシミュレーション部１０１およびキネマティクスシミュレーション部１０３がそれぞれ単独に動作することが可能である。次に、あらかじめ保存されていたダイナミクスモデル記述に現れる変数と３次元機構モデルの機構要素との対応関係データ１０６を読み込む、ないしはＰＣのキーボードなど入力デバイスより直接データを入力することにより、変数・機構要素対応テーブル１０５のデータがセットされる。これにより、ダイナミクスシミュレーション部１０１およびキネマティクスシミュレーション部１０３が連携して動作する準備が整う。
【００１７】
実際のシミュレーションにおいては、モータなどアクチュエータヘの加速コマンドや加速レートのパラメータ設定などの情報が、機構制御ソフトウェアないしは機構制御ソフトウェアのシミュレータ１０８から送信され、それに基づきハイブリッドモデルとして記述された適切な状態遷移と方程式に基づく数値積分による系の挙動が計算される。ハイブリッドモデルにより、どのようにダイナミクスが表現され、状態遷移が実現できるかについては、後で詳細に説明する。
【００１８】
実際の機構制御系においては、機構制御ソフトウェアからのコマンドやパラメータは、一定の時間サイクルごとに指定されたＩ／Ｏポートを読み込みにいくポーリング（Ｐｏｌｌｉｎｇ）処理によって取得される。そのためシミュレーションにおいても、これと同じ時間間隔ごとにシミュレーションをすすめていく。
【００１９】
すなわち、図３に示されるフローチャートのように、ハイブリッドモデルの読み込みステップ５０１および３次元機構モデル読み込みステップ５０２を実行し（５０１と５０２の順序は入れ替わった実施形態としても全く問題はない）、シミュレーションを開始する。前記一定のサイクルごとに制御信号を読み込みに行く制御信号受信ステップ５０３を行い、それに基づく適切な状態遷移と方程式に基づく数値積分による系の挙動が計算されるダイナミクスシミュレーションステップ５０４が実行される。これにより、各変数の値が計算されるので、変数と機構要素の対応関係をチェックしキネマティクスシミュレーション部に値を送信するステップ５０５が実行され、その値に基づきキネマティクスシミュレーションがステップ５０６で実行される。機構制御系は、機構からセンサー情報を受け取って、新たな制御コマンドの必要性を判断するので、ダイナミクスシミュレータ１０１ないしはキネマティクスシミュレータ１０３から得られる主にセンサーデータを機構制御系に送信するステップ５０７が実行される。このあと、あらかじめ指定された時間だけシミュレーションが進んだかどうかを判断するステップ５０８を行い、まだ実行途中であれば次の時間に進めるために、データの記録などの処理を行うステップ５０９が実行され、ふたたび制御信号の受信ステップ５０３にもどる。
【００２０】
このような本実施形態に係るダイナミクスシミュレーションのためのハイブリッドモデル記述１０２の詳細を、具体例を挙げて説明する。
【００２１】
図４および図５は、具体例に係るハイブリッドモデルの記述対象である機構を示す図である。この機構は、バルブ３０１、バネ３０３、およびピストン３０２を備えた簡素な構造を有するシリンダ装置である。
【００２２】
バルブ３０１は外部からの指令（イベント）に応じて開閉動作する。これによりシリンダ装置内の空気の流れを図２のように右側に変更するイベントを以下、「Ｒｉｇｈｔ」と呼び、空気の流れを図３のように左側に変更するイベントを「Ｌｅｆｔ」と呼ぶ。図４は、バルブ３０１にＲｉｇｈｔのイベントが与えられた状態を示しており、ピストン３０２には紙面左向きへの力が作用している。この状態を示す運動方程式はシリンダ装置の下部に示してあるように、「−Ｆ＝ｍｘ”」である。これに対し図５は、バルブ３０１にＬｅｆｔのイベントが与えられた状態を示しており、空気の流れの向きが変わり、運動方程式は同図のように「Ｆ＝ｍｘ”」に変化している。
【００２３】
図６は、このような状態変化とそれぞれの状態に対応する運動方程式を状態遷移図として表現したものである。ハイブリッドモデルは、この図６に示されるような状態遷移と、各状態の記述が微分方程式や代数方程式で表現されるものを指す。図６によれば、状態が２つあって、かかる２つの状態間に状態遷移が存在することがわかる。
【００２４】
図７は、図６の状態遷移図をもとに具体的なハイブリッドモデル内容をＨＣＣ（Hybrid Concurrent Constraint Programming）言語で記述したプログラムの一例を示す図である。図７において、（ソース）プログラムの論理行番号を仮にＬ１〜Ｌ８とする。Ｌ３、Ｌ４、およびＬ８は、この機構の初期状態やバルブ操作タイミングなどの運転条件の記述に相当し、Ｌ５およびＬ６は、図６に示した状態遷移の表現記述である。
【００２５】
ＨＣＣでは、運動方程式は、図から分かるようにプログラム内でそのまま記述することができる。また、それぞれの状態へ遷移する条件は、「always if」に続いて記述し、また、それぞれの状態から遷移していく条件は「watching」に続けて記述すればよい。
【００２６】
なお、ＨＣＣでは、プログラムの記述の順序（図７における論理行番号Ｌ１→Ｌ８の順序）にそって実行されるわけではない。ＨＣＣでは、個別のプログラム記述のうち、シミュレーションを実行する時間軸に沿って成立するものが探索され、実行される。すなわち、論理行番号Ｌ１→Ｌ８の順序は、実行順序とは関係がない。たとえば、シミュレーションを開始した時点では、Ｌ３およびＬ８のみが有効である。ここで、イベントＲｉｇｈｔ（ｅｖ１）がＬ３により発生するため、Ｌ６の前提条件であるＲｉｇｈｔが有効となり、Ｌ６に記述されている運動方程式ｅｑ２が有効になる。つまり、図４の左側の状態からシミュレーションが実行されることになる。
【００２７】
さらに、時間が５０になるとＬ４が有効となり、イベントＬｅｆｔ（ｅｖ２）が発生し、Ｌ６の遷移条件（「ｗａｔｃｈｉｎｇ」以下、すなわちＬｅｆｔ）が有効となって、Ｌ６の運動方程式ｅｑ２が無効となる。これに代わって、Ｌ５の前提条件が有効となり、運動方程式ｅｑ１が有効となる。
【００２８】
なお、以上のようなプログラム例は外部からのイベント（ｅｖ３，ｅｖ４）によって状態が遷移する場合を記述したものであったが、勿論、内部の状況によって状態を変化させてもよい。たとえば、図４においてバルブ３０１が切り替えられない場合には、移動するピストン３０２がバネ３０３に接触し、該バネ３０３からの反力を受けるようになる。すなわちピストン３０２の位置に関して、外部からのイベントが無い場合でも状態遷移が起こる場合が存在する。このような場合は、例えばｘが正であるかどうかといった内部変数の評価式（不等式）による評価結果に基づいて状態遷移の必要性を判断できる。
【００２９】
一般的に、ハイブリッドモデルは、常微分方程式や代数方程式をあるいはこれらを連立させた連立方程式（連続系方程式）によって表現される連続系モデルと、イベント発生に伴う状態遷移を表現するための状態遷移モデルとを組み合わせたモデルである。ハイブリッドモデルによれば、連続系モデルで表現される状態が外部からのイベントなどにより瞬時に切り替わるシステムを表現することができる。
【００３０】
次に、図１０から図１２を用いて、３次元機構モデル１０４およびキネマティクスシミュレーション部１０３の具体的な実施形態を説明する。
【００３１】
３次元機構モデル１０４では、図１０に示すように個々の部品の形状が、その構成要素である面や稜線、頂点などの要素の集合として表現される。これら面や稜線、頂点などは部品の形状の境界を表現しているため、境界表現の形状モデルと呼ばれ、３次元のＣＡＤシステムなどで広く用いられている。このように表現された個々の部品の関係は、さらに部品の部分形状間の関係として表現される。この例では、部品４０１、部品４０２、部品４０３の３次元形状があり、部品４０１の部分形状である平面４０４と部品４０２の部分形状である平面４０６が一致し、同様に円筒面４０５と円筒面４０７が同軸であるいう関係が定義されている。同様に部品４０２と部品４０３については、部分形状である平面４０８と平面４１０の一致関係、および平面４０９と平面４１１との一致関係が定義されている。
【００３２】
図１１は、図１０で定義された関係が計算機メモリなどの記憶手段にどのような形式で記憶されるかをグラフの形式で表現したものである。３次元形状の情報および部分形状の情報の他に、平面同士の一致関係４１２、４１４、４１５および円筒同士の同軸関係４１３がデータとして存在する。このような情報から部品４０１、４０２、４０３の相対的位置関係を計算する機能は幾何拘束処理ライブラリとして既存のソフトウェアが提供されている。具体的には、それぞれの部品には、部品特有のローカル座標系が設定されており、この座標系と空間内に固定されたワールド座標系との変換マトリックスという形でこの位置関係が表現される。すなわち、図１１に示されている一致などの関係から、部品４０１と部品４０２、部品４０３の位置を表現する変換マトリックスが幾何拘束処理ライブラリなどにより自動的に計算される。
【００３３】
図１２は、部分形状の間で定義された一致関係、すなわち部分形状間の拘束関係をすべて満足するように算出された部品間の位置関係の例を示す。すなわち、幾何拘束処理ライブラリが自動算出した部品の変換マトリックスを部品の形状データに作用させて得られた部品の位置を示している。このように組み立てられた部品には、４１６で示される回転自由度と４１７で示される並進自由度が存在する。実際に機構として作用させるためには、これらにモータなどのアクチュエータを装着し、外部の信号に基づいて駆動することが行われる。そこで、回転自由度４１６に装着されるアクチュエータにＪｏｉｎｔ１という名前を付け、並進自由度４１７に装着されるアクチュエータにＳｌｉｄｅ１という名前を付ける。キネマティクスシミュレーション部１０３はアクチュエータの名前とその値を指定すると、図１２のような３次元グラフィックスのアニメーションにて機構の動きを確認することなどが可能になる。また、図１２に示されている距離４１８を計算する機能などはキネマティクスシミュレーション部１０３に実装されており、部品４０３が溝の端まで到達したかどうかを検知するリミットスイッチセンサーの機能をこの距離の値の判定によってシミュレートすることができる。このセンサーの名前をＳｗｉｔｃｈ１とすると、キネマティクスシミュレーション部１０３はＳｗｉｔｃｈ１という名前でセンサー状態を問い合わせると、そのときのセンサーの状態を得ることができる。
【００３４】
今、アクチュエータＳｌｉｅｄｅ１は、実際には図４のシリンダ装置に取り付けられているとする。この場合、図７のダイナミクスシミュレータの記述における変数ｘが機構要素であるアクチュエータＳｌｉｄｅ１に対応する。さらにＪｏｉｎｔ１に相当するモータの挙動がダイナミクスシミュレータの記述において変数ｙとなっているとすると、変数・機構要素対応テーブル１０５は具体的に図１３に示すようになる。
【００３５】
このような例においては、図３のフローチャートにおいて、図７のダイナミクスモデル記述に基づきステップ５０４においてｘおよびｙの値の変化が計算される。次にステップ５０５において、変数・機構要素対応テーブル１０５である図１２のテーブルが参照され、キネマティクスシミュレーション部１０３に対して、ｘの値とＳｌｉｄｅ１という名前の組でデータが送信され、同じくｙの値とＪｏｉｎｔ１という名前の組でデータが送信される。ステップ５０６では、図１２のような個々の部品の３次元的な位置が計算され、それに基づき距離４１８も算出される。距離４１８の値によりセンサーＳｗｉｔｃｈ１の値もセットされる。ステップ５０７では、Ｓｗｉｔｃｈ１の値などが機構制御系へ送信される。
【００３６】
＜第２の実施形態＞
次に、本発明の第２の実施形態を説明する。第１の実施形態では公知のハイブリッドプログラミング言語であるＨＣＣを用いて説明したが、ここでは本出願の発明者が開発したハイブリッドプログラミング言語であるＤＣＭＬ(Dynamics Constraint Modeling Language)に基づいて説明する。ＤＣＭＬでは、ＨＣＣなど他のハイブリッドモデリング言語と同様に、連立常微分方程式で表現される連続系のシステムの初期値問題を解くことができる。すなわち、初期値を与えて、時間的にどのように系が変化するかをシミュレーションするダイナミクスシミュレーションを行うことができる。モデルの記述に当っては、常微分方程式ないしは代数方程式を制約の形式で宣言的に表現することができる。ただし、ＤＣＭＬでは、処理の高速化などの目的から不等式は許されいない。この点はＨＣＣと異なる。ＤＣＭＬはあるタイミングで連続系のシステム表現モデルを不連続的に切り替えることを許している。すなわち、イベントによってタイミングを指定し、そのタイミングにおいて常微分方程式ないしは代数方程式を制約の形式で表現されている制約の削除、追加、入れ替えを行うことができる。
【００３７】
ＤＣＭＬではオブジェクト指向の考え方に基づきクラスという形でモデル部品（ソフトウェア部品）を定義することができる。まずモデル部品の性質や挙動がクラス定義として記述され、個々のモデル部品の実体（インスタンス）はクラスのコンストラクタと呼ばれるメカニズムによって生成される。アクチュエータやセンサーなどがクラスとしてモデル化されていると、ＤＣＭＬによるダイナミクスシミュレータ用のモデルは、これらクラスを活用してコンパクトに記述することができる。さらに制約を宣言的に順不同に記述できるという性質から、モデル部品のプログラムを単純に結合するのみで、全体のモデルを作成することができる。
【００３８】
以下、さらに例を用いてＤＣＭＬプログラムがどのように記述されるかを説明する。図１４は不連続な変化を含まない単純なＤＣＭＬプログラムを示している。ＤＣＭＬではC++に類似した文法を採っている。このプログラム例において、contは連続変数ないしは連続値を取る関数の宣言である。a=0; b=0; は時間t=0において連続変数の初期値を示す。制御文always は、対応するb’=0.2; a’=sin(b); が対応する時間区間においてアクティブであることを示している。この例では、不連続的変化をおこすイベントは発生しないので、対応する時間区間は時間区間全体になり、すべての時間で、b’=0.2; a’=sin(b); はアクティブになる。最後の文 sample(a); では特別な組込み関数の呼び出しており、指定された変数の時間変化を記録する。
【００３９】
ＤＣＭＬにおいては、変数は連続変数とイベント変数があり、それぞれの宣言文にはcontとeventを用いる。連続系は連続変数を用いて表現される連続系拘束によって表現される。連続系拘束の表現の文法を形式的に表すと以下のようになる。
【数１】
2004220566.tif 000003
【００４０】
ここで、Variableは変数名でありConstantは実数を表す。Variable’ はVariableの時間微分となる。連続系はアクティブな連続系拘束の連立方程式としてモデル化される。連続系拘束のアクティブ化（有効化）と無効化は制御文で制御される。制御文の付いていない連続系拘束は時間０においてのみ有効になり、変数の初期値を指定する。連続系拘束をアクティブにしておくにはalways文を使う必要がある。例えば、以下のように用いる。
【数２】
2004220566.tif 000004
【００４１】
連続系システムの不連続変化は連続系拘束の有効化と無効化に対応する。このような制御は条件文の評価により実行される。ＤＣＭＬでは条件文は２つの種類が用意されている。
【００４２】
最初の種類は、if( CondClaus1 ) A else Bの形式になる。文法を形式的に表すと以下のようになる。
【数３】
2004220566.tif 000005
【００４３】
例えば、以下の例は a>1 を評価する。その評価結果に基づきｂの値が変化する。 
【数４】
2004220566.tif 000006
【００４４】
第２の種類は、条件文として１つの等式のみが認められるものである。これについて文法を形式的に表すと以下のようになる。
【数５】
2004220566.tif 000007
【００４５】
この種類には２つの制御文がある。
【数６】
2004220566.tif 000008
【００４６】
上記when文は、CondClause2が成立するタイミングを探し、そのタイミングにおいて連続系拘束Aを有効化する。do-watching文は、まず連続系拘束Bを有効化し、次にCondClause2が成立するタイミングを探索し、連続系拘束Bを無効化する。
【００４７】
ＤＣＭＬでは、オブジェクト指向の考え方に基づき、クラス定義を行うことができる。クラス定義はC++に類似した文法となっている。簡単なクラス定義の例を図１５に示す。変数のスコープ（有効範囲）は、変数宣言のprivate文またはpublic文で定義される。パブリック変数はC++のような形式で外部からアクセスできる。例えば、図１５中のパブリック変数m_aはapp1.m_aという形式で外部から参照可能となる。クラスのコンストラクタDCML_Class( cont a )は、この場合１つの引数cont aを持ち、この引数cont aはクラスの初期化に用いられる。def文はクラスの実体を規定しており、シミュレーション時に実行される部分である。この例では、状態遷移はm_a' = 0が成立するタイミングにおいて発生する。
【００４８】
図１６は紙搬送系モデルの一例を示している。このモデルは説明のため実際のモデルよりも大幅に簡略化してある。モータや紙などのモデル部品はＳ１中に示されるようにあらかじめ用意されている。モータの初期化には、初期スピード、加速時間、停止タイミングを属性として指定できる。モータは、モータスタートコマンドを受け取ると指定された初期スピードで動きはじめ、加速する。その後、スピード一定モードに移り、指定されたタイミングで停止する。紙はベルトコンベアで搬送されることが想定されており、モータの回転各速度と紙の速度の関係がモデルに記述されている。図中Ｓ２に示されているのが、設計者によって追加されるべきプログラムである。最初の行はmotor1がpaper1の搬送系に取り付けられていることを示し、それらの速度が等しいことを表す。これに続く行の記述には、モータおよび紙の定義と制御シナリオが含まれる。この例では、モータスタートコマンドはtime = 10とtime = 70で発生する。実際のシミュレーションに際しては、あらかじめ定義された部分と設計者によって追加されるべきプログラムが結合され、ダイナミクスシミュレーションのためのシミュレーションモデルとなる。
【００４９】
さらに、図８を用いて、ハイブリッドモデル記述を用いたダイナミクスシミュレーションの詳細について説明する。図８は、図１および図２に示したダイナミクスシミュレーション部１０１の一実施形態を示したブロック図である。
【００５０】
本実施形態は、ハイブリッドモデル前処理部８０１と、ハイブリッドモデルシミュレーション実行部８０２とにより構成されている。ハイブリッドモデル記述１０２は、ＨＣＣ言語で記述されたソースプログラムであって、本実施形態に係るハイブリッドモデル前処理部８０１への入力である。制御信号１０９はハイブリッドモデルシミュレーション実行部８０２への入力であり、この制御信号１０９は機構制御ソフトウェアもしくは機構制御ソフトウェアのシミュレータから与えられる。また、本実施形態に係る機構ハイブリッドモデルシミュレーション実行部８０２からの出力は、シミュレーション結果としての変数値の演算結果およびその時間履歴であり、変数値時間履歴記憶部８０５に対して出力される。
【００５１】
図８に示すように、ハイブリッドモデル前処理部８０１は、モデル方程式制御情報解析部８１１を備える。また、ハイブリッドモデルシミュレーション実行部８０２は、方程式構文解析部８１２、方程式データ記憶部８１４、連続系方程式切り替え部８１５、及び連続系シミュレーション部８０３とを備える。なお、本実施形態は一般的なコンピュータを用いて構成することができ、その基本的なハードウェア構成として、図示しないが中央演算ユニット（ＣＰＵ）、メモリ、外部記録装置、通信インターフェース（Ｉ／Ｆ）、および表示装置やキーボード、マウス等の入力装置を備える。また、これらのハードウェアを制御するためのオペレーティングシステム（ＯＳ）を備える。また、本発明の実施形態に係る機構シミュレータは、このようなオペレーティングシステム上で動作するアプリケーションソフトウェアとして実装することができる。
【００５２】
次に、ハイブリッドモデル前処理部８０１における処理について説明する。ハイブリッドモデル記述１０２は、まずハイブリッドモデル前処理部８０１のモデル方程式制御情報解析部８１１おいて処理され、モデル方程式登録プログラム８０６、モデル方程式制御プログラム８０７が生成される。また、ハイブリッドモデルシミュレーション実行部１０２を構成するソフトウェアモジュールとして、モデル方程式の登録を行うための関数及び連続系方程式を切り替えるための関数がＡＰＩ（Application Program Interface）関数として提供される。モデル方程式登録プログラム８０６およびモデル方程式制御プログラム８０７は、該当する上記ＡＰＩ関数を呼び出す記述を、入力されたハイブリッドモデル記述１０２に沿って適切に組み合わせたプログラムである。この観点から考えると、ハイブリッドモデル前処理部８０１は、入力をハイブリッドモデル記述１０２とし、出力を例えばＣ言語のＡＰＩ関数呼び出しの記述を含むＣプログラム（ソース）とするような、一種のコンパイラと考えることもできる。このようなモデル方程式登録プログラム８０６とモデル方程式制御プログラム８０７は、さらにＣ言語などのコンパイラによりコンパイルされ、例えば実行時に動的にリンク可能なライブラリが生成される。ハイブリッドモデルシミュレーション実行部８０２は、シミュレーション実行にあたって、生成された動的リンクライブラリがリンクされ、入力ハイブリッドモデルを忠実に再現するシミュレーションプログラムが完成し、実行可能になる。その実行時には、まず方程式構文解析部８１２を起動するＡＰＩ関数が呼ばれ、その後に連続系方程式切り替えのＡＰＩ関数群が実行されて連続系シミュレーションが遂行される。
【００５３】
ハイブリッドモデルシミュレーション部８０２のアプリケーションインターフェースを構成する具体的なソフトウェアモジュールの仕様などは様々考えられるが、ここでは説明の都合上、以下の３つのＡＰＩ関数が最低定義されているとする。なお、プログラミング言語はＣ言語とする。
【数７】
2004220566.tif 000009
【００５４】
１つ目のＡＰＩ関数XXX_AddEqnDataは、１つの連続系方程式を表す文字列のポインタを引数に指定する。XXX_AddEqnDataは、この連続系方程式を構文解析し、連続系方程式の記述をシミュレーション実行可能なデータ構造（内部データ表現）に変換し、かかる内部データ表現を方程式データ記憶部８１４に登録する処理を行う。なお、ここの連続系方程式には、ユニークなＩＤ番号が割り当てられる。
【００５５】
たとえば「ab/cos(a-(c+b))-3c」という式が与えられたと仮定すると、上記内部データ表現として図９のような木構造を生成する。この木構造において、例えば参照数字６１は線形多項式の親ノード（節）、６２は掛け算のノード、６３は割り算のノード、６４は外部関数（四則演算以外の意）のノード、６５は線形多項式を構成する各項のノードを表している。本例において、木構造の葉に相当するものはすべて変数（ａ，ｂ，ｃ）であり、これらに実数の係数が加わって線形式となる。線形式はｃｏｓなどの外部関数の引数になったり、掛け算や割り算の対象となる。変数には、別途、値が確定しているかどうかのフラグが設けられており、またこのような木構造のデータに基づいて該変数の現在の値が保持される。木構造のすべての葉の値（すなわち変数の値）が確定していれば、式の値を計算することができる。方程式データ記憶部１１４では、式の値の計算などを高速に行うことができるように、予め内部のデータ構造をつなぎ合わせて木構造を構成してある。
【００５６】
上記処理において何らかのエラーが発生した場合には、ｅｒｒにエラーコードがセットされる。正常に処理が終了した場合は、登録された方程式のＩＤ番号を返り値とする。
【００５７】
２番目のＡＰＩ関数XXX_ActivateEqnは、引数に指定された方程式のＩＤ番号に相当する方程式を有効にする。もし、すでに有効となっている方程式が指定されている場合には何もしない。返り値はエラーコードである。
３番目のＡＰＩ関数XXX_DeActivateEqnは、XXX_ActivateEqnとは逆に、引数に指定された方程式のＩＤ番号に相当する方程式を無効にする。すでに無効となっている方程式が指定された場合には何もしない。
【００５８】
モデル方程式制御情報解析部８１１は、まずXXX_AddEqnDataを必要な方程式について順に呼ぶ関数（InitEqnData）を生成する。これがモデル方程式登録プログラム８０６に相当する。
【００５９】
また、モデル方程式制御情報解析部８１１は、シミュレーション実行の際に、時間が△ｔ進むごとに条件のチェックおよび方程式の変更（入れ替え）を行う関数（ＣｈａｎｇｅＥｑｎ）も生成する。これはモデル方程式制御プログラム８０７に相当する。上記したようなハイブリッドモデル前処理部８０１における処理により、例えば、図７に示したハイブリッドモデル記述について、以下のようなＣ言語のソースプログラムが自動生成される。
【数８】
2004220566.tif 000010
【００６０】
なお、GetEventは、名前で指定されたイベントが生起しているかどうかをチェックする関数である。
【００６１】
以上のプログラムは、上述したようにＣ言語コンパイラによってコンパイルされ、さらに動的リンクライブラリの形式に整えられ、実行時にリンクされる。
【００６２】
なお、本実施形態では、プログラム言語としてＣ言語を用いた例について説明したが、本発明はこれに限定されるものではなく、例えばＣＰＰ（Ｃ＋＋）言語、ＳｐｅｃＣ言語等の他のプログラム言語を用いてもよい。
【００６３】
次に、シミュレーションの実行について説明する。シミュレーション実行時においては、ハイブリッドモデルシミュレーション実行部８０２が起動され、図２に示す機構制御ソフトウエアのシミュレータ１０８などから得られる制御信号１０９を受信しながら、連続系方程式の値を計算することでシミュレーション実行が行われる。このとき、連続系方程式切り替え部８１５は、上記したモデル方程式制御プログラム８０７に基づいて、連続系方程式の切り替えを有効・無効のフラグを用いて実行する。図４の状態では、図７の運動方程式ｅｑ１は無効であり、運動方程式ｅｑ２が有効になっている。ここで、Ｌｅｆｔのイベントが発生した図３の状況においては、図７の運動方程式ｅｑ１を有効にし、運動方程式ｅｑ２を無効にするようフラグを操作する。これら有効・無効のフラグは方程式データ記憶部８１４に記憶される方程式それぞれの属性データとして管理される。
【００６４】
連続系シミュレーション部８０３は、方程式データ記憶部８１４を参照し、同記憶部８１４に木構造の形式で格納されている連続系方程式の内部データ表現を演算対象として、時間ステップづつ数値積分を実行する。シミュレーションは、常微分方程式及び代数多項式の連立からなる非線形連立方程式についての初期値問題である。このため、例えば図４に示される初期状態が与えられている。具体的には、例えば一般によく使われているルンゲクッタアルゴリズムを用いて変数の値を計算する。
【００６５】
必要なデータは機構シミュレータから出力を行い、さらに連続系方程式切り替え部８１５の処理に戻り、上記の処理を繰り返すことにより必要な時間のシミュレーションを実行する。シミュレーション結果は、変数値時間履歴記憶部８０５に保存され、シミュレーション終了後の分析などに利用される。
【００６６】
［数１］−［数６］であらわされるようなハイブリッドモデル言語と、それを用いた図１６のようなシミュレーションモデルをダイナミクスシミュレーション部１０１として利用し、キネマティクスシミュレーション部１０３と連携する場合を考える。図１６のＤＣＭＬモデルを用いる場合には、図１３に例示されている対応関係において、変数名として、paper.val_や motor1.val_などを指定することになる。これらは、設計者によって追加されるべきプログラムに含まれているので比較的指定しやすい。これに対し、３次元の機構モデルを動作させるために関係を付けなければならない変数でありながらダイナミクスモデルのなかでは、予め定義されたモデルにしか出現しない変数などについては、図１３のような対応関係をモデル作成時に付けるのが困難である。
【００６７】
たとえば、両軸のモータがあり、片方の軸は駆動用で、反対側の軸には冷却用のファンが直結しているような場合を考える。図１６のようなモデルにおいて、設計者が追加するプログラムでは、ファンの回転角について考える必要はない。しかし、シミュレーションの際には、３次元キネマティクスシミュレーションによってファンの回転の様子をグラフィックス画面において確認したい場合には、ファンの軸を示す機構要素に対して、モータのクラス定義のみに現れるファン軸の変数名を指定する必要がある。しかし、あらかじめ定義されたクラスを多数読み込んで複雑なモデルを構築する場合には、キネマティクスシミュレーション用の要素とダイナミクスシミュレーション用の変数の両者を即座に選択して対応付けることが難しい。そこで本実施形態においては、モデルを読み込んだ際に、関係を付けられる要素を列挙し、可能性のあるもののみをユーザに提示して選択させるような構成にする。
【００６８】
まず、キネマティクスモデルにおける３次元機構モデルの機構要素を列挙する。図１２の例では、Slide1とJoint１の移動量のみが機構要素と成り得るので、これを画面に表示し、ユーザに選ばせる。図１７は、このようなユーザ入力画面１０（入力ダイアログ）の一例を示している。ここでは、機構要素はすでに入力済みであり、選択された機構要素の名称１０１が表示されている。選択可能要素ボタン１０２を押すことにより、選択可能な機構要素を選択することができる。
【００６９】
一方、ダイナミクスモデル変数については、事前登録されたモデルから変数を選ぶためのボタン１０３とそれ以外の変数を選ぶためのボタン１０４が用意されている。事前登録されたモデルから変数を選ぶためのボタン１０３は、読み込まれたクラスに関係する変数を選ぶためのボタンであり、それ以外の変数を選ぶためのボタン１０４はクラスのメンバでない変数を選ぶためのボタンである。それ以外の変数を選ぶためのボタン１０４を押した場合には、ポップアップメニューにそのような変数の一覧が表示され、その中から選択をする。
【００７０】
事前登録されたモデルから変数を選ぶためのボタン１０３が押された場合には、クラスの一覧を表示し、その一覧のなかからユーザにクラスを選択させる。図１８はその選択画面２０を示している。図１６のダイナミクスモデルの例では、MotorとPaperの２つのクラスがあるので、これらは共に表示されている。ここで、Motorが選択されると、さらに図１９のように部品の実体を選択させるポップアップメニュー２０１が表示される。ここでは、Motorの実体（インスタンス）としてはmotor1が１つだけ定義されている。これがユーザに選択されると、図２０のようにパブリックな連続変数のみの一覧２００１が表示される。ここで、val_が選択され、ユーザによりOKボタン２００２が押されると、図２１のようにmotor1.val_（１１）が指定される。
【００７１】
クラスの機能を利用するなどしてハイブリッドモデルのモデル部品を定義しておく場合には、設計者が作成するダイナミクスモデルの記述は簡便になる一方、キネマティクスモデルとの対応関係定義などでは変数を探すのが複雑かつ面倒になる。これに対し本発明の第２実施形態によれば、ハイブリッドモデルの構造に即した形でデータを階層的に扱い、それにあわせた形態でメニューを階層的に構成することで、容易にキネマティクスモデルの機構要素とダイナミクスモデルの変数の対応関係定義が行えるようになる。
【図面の簡単な説明】
【００７２】
【図１】本発明の第１実施形態に係わる機構シミュレータの概略構成を示すブロック図
【図２】本発明の第１実施形態に係わる機構シミュレータと機構制御ソフトウェアとが連携した状態を示すブロック図
【図３】本発明の第１実施形態に係わる機構シミュレーションの処理手順を示すフローチャート
【図４】本発明の第１実施形態に係わり、ハイブリッドモデル記述を説明するための具体例に係るシリンダ装置のある状態を示す図
【図５】本発明の第１実施形態に係わり、ハイブリッドモデル記述を説明するための具体例に係るシリンダ装置の別の状態を示す図
【図６】本発明の第１実施形態に係わり、ハイブリッドモデル記述を説明するための具体例に係るシリンダ装置の状態遷移を示す図
【図７】本発明の第１実施形態に係わり、ハイブリッドモデル記述の内容を示す図
【図８】本発明の第２実施形態に係わり、ダイナミクスシミュレーション部の一実施形態を示すブロック図
【図９】本発明の第２実施形態に係わり、１つの連続系方程式を構文解析した結果得られる内部データ表現の説明図
【図１０】本発明の第１実施形態に係わり、３次元機構モデルにおける構成要素に関する説明図
【図１１】本発明の第１実施形態に係わり、３次元機構モデルで定義された関係が計算機メモリなどの記憶手段にどのような形式で記憶されるかをグラフの形式で表現した図
【図１２】本発明の第１実施形態に係わり、機構の動きを３次元グラフィックスのアニメーションにて表現した図
【図１３】本発明の第１実施形態に係わり、変数・機構要素対応テーブル説明図
【図１４】本発明の第２実施形態に係わり、不連続な変化を含まない単純なＤＣＭＬプログラムの一例を示す図
【図１５】本発明の第２実施形態に係わり、クラス定義の例を示す図
【図１６】本発明の第２実施形態に係わり、紙搬送系モデルの一例を示す図
【図１７】本発明の第２実施形態に係わり、入力ダイアログを示す図
【図１８】本発明の第２実施形態に係わり、クラス選択画面を示す図
【図１９】本発明の第２実施形態に係わり、部品の実体選択画面を示す図
【図２０】本発明の第２実施形態に係わり、連続変数の一覧選択画面を示す図
【図２１】本発明の第２実施形態に係わり、連続変数の指定結果を示す図
【符号の説明】
【００７３】
１０１…ダイナミクスシミュレーション部、１０２…ハイブリッドモデル記述、１０３…キネマティクスシミュレーション部、１０４…３次元機構モデル、１０５…変数・機構要素対応テーブル、１０６…変数・機構要素対応データ、１０７…コンピュータ、１０９…制御信号
【図１】
2004220566.tif 000011
【図２】
2004220566.tif 000012
【図３】
2004220566.tif 000013
【図４】
2004220566.tif 000014
【図５】
2004220566.tif 000015
【図６】
2004220566.tif 000016
【図７】
2004220566.tif 000017
【図８】
2004220566.tif 000018
【図９】
2004220566.tif 000019
【図１０】
2004220566.tif 000020
【図１１】
2004220566.tif 000021
【図１２】
2004220566.tif 000022
【図１３】
2004220566.tif 000023
【図１４】
2004220566.tif 000024
【図１５】
2004220566.tif 000025
【図１６】
2004220566.tif 000026
【図１７】
2004220566.tif 000027
【図１８】
2004220566.tif 000028
【図１９】
2004220566.tif 000029
【図２０】
2004220566.tif 000030
【図２１】
2004220566.tif 000031