以下に、本願の開示するモデル変換プログラム、シミュレーションプログラム、シミュレーション装置を図面に基づいて詳細に説明する。また、以下に、本願の開示するモデル変換方法およびシミュレーション方法の各実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
[シミュレーション装置の構成]
実施例1に係るシミュレーション装置について説明する。図1は、実施例1に係るシミュレーション装置の構成を示す図である。本実施例に係るシミュレーション装置10は、動力を発生する動力部、動力部により発生された動力を伝達するための動力伝達部、および動力伝達部により伝達された動力に応じて駆動する駆動部を備えたシミュレーション対象の装置のモデルを取得する。そして、本実施例に係るシミュレーション装置10は、取得したモデルに基づいて、動力部および動力伝達部が組み合わされた単一の新たな動力部のモデルを生成する。また、本実施例に係るシミュレーション装置10は、取得したモデルに基づいて、動力部および動力伝達部を新たな動力部とし、この新たな動力部が駆動部に動力を与えて駆動部を駆動させるようなモデルを生成する。
図1に示すように、シミュレーション装置10は、入力部11と、出力部12と、記憶部13と、制御部14とを有する。
入力部11は、各種情報を制御部14に入力する。例えば、入力部11は、ユーザから、後述のシミュレーション処理を実行する指示を受け付けて、受け付けた指示を制御部14に入力する。入力部11は、例えば、マウスやキーボードなどの操作受付デバイスである。なお、入力部11は、ユーザの指示を受け付けて、後述のモデルデータ13aを外部の装置から取得し、取得したモデルデータ13aを制御部14に入力することもできる。
出力部12は、各種の情報を出力する。出力部12のデバイスの一例としては、LCD(Liquid Crystal Display)やCRT(Cathode Ray Tube)などの表示デバイスや、音声を出力する音声出力デバイスなどが挙げられる。例えば、出力部12が表示デバイスである場合には、出力部12は、後述のシミュレーション部14cから送信されたシミュレーション結果を表示する。また、出力部12が音声デバイスである場合には、出力部12は、シミュレーション部14cから送信されたシミュレーション結果を音声で出力する。
記憶部13は、各種情報を記憶する。例えば、記憶部13は、モデルデータ13aを記憶する。また、記憶部13には、ノードデータ13bおよび新モデルデータ13cが後述の生成部14bにより格納される。
モデルデータ13aは、動力を発生する動力部、動力部により発生された動力を伝達するための動力伝達部、および動力伝達部により伝達された動力に応じて駆動する駆動部を備えたシミュレーション対象の装置のモデルのデータである。
モデルデータ13aのデータ構造の一例としては、動力部データ配列、動力伝達部データ配列および駆動部データ配列を含むデータ構造が挙げられる。動力部データ配列には、動力部のデータが、各動力部ごとに登録される。動力伝達部データ配列には、動力伝達部のデータが、各動力伝達部ごとに登録される。駆動部データ配列には、駆動部のデータが、各駆動部ごとに登録される。これらの動力部データ配列、動力伝達部データ配列および駆動部データ配列は、シミュレーションに用いる各種データを管理するための一つのテーブルに登録されてもよいし、それぞれ独立して記憶部13に記憶されてもよい。以下の説明では、このようなテーブルを「管理テーブル」と略記する。また、以下の説明では、動力部のデータを「動力部データ」と略記する。また、以下の説明では、動力伝達部のデータを「動力伝達部データ」と略記する。また、以下の説明では、駆動部のデータを「駆動部データ」と略記する。
管理テーブルの一例について説明する。図2Aは、管理テーブルの一例を示す図である。図2Aの例では、管理テーブル15は、動力部データ配列15a、動力伝達部データ配列15b、および駆動部データ配列15cを有する。
動力部データ配列15aには、動力部データが各動力部ごとに登録される。図2Aの例は、動力部データ配列15aに、l個の動力部データが登録されたことを示す。なお、以下の説明では、動力部データ配列[i]は、動力部データ配列15aに登録されたi番目の動力部データを指す。
動力伝達部データ配列15bには、動力伝達部データが各動力伝達部ごとに登録される。図2Aの例は、動力伝達部データ配列15bに、m個の動力伝達部データが登録されたことを示す。なお、以下の説明では、動力伝達部データ配列[i]は、動力伝達部データ配列15bに登録されたi番目の動力伝達部データを指す。
駆動部データ配列15cには、駆動部データが各駆動部ごとに登録される。図2Aの例は、駆動部データ配列15cに、n個の駆動部データが登録されたことを示す。なお、以下の説明では、駆動部データ配列[i]は、駆動部データ配列15cに登録されたi番目の駆動部データを指す。
次に、動力部データの一例について説明する。動力部の一例としては、モータが挙げられる。動力部としてモータを採用した場合には、動力部データに含まれる各種データの一例としては、「名前」、「位置」、「形状」、「歯車の歯数」、「回転方向」、「作用種別」、「回転速度」、「動力部ツリーリンク」などが挙げられる。
「名前」には、各モータに付与されたID(Identification)が含まれる。また、「位置」には、シミュレーションにおけるXYZの直交座標系の三次元空間上のモータが存在する座標が含まれる。また、「形状」には、モータを模式的に表す場合の外観の形が含まれる。かかる形の一例としては、四角形、円などが挙げられる。「歯車の歯数」には、モータに直接取り付けられた歯車の歯数が含まれる。「回転方向」には、歯車の回転する方向が含まれる。「作用種別」には、与える動力の作用の種別が含まれる。動力の作用の種別としては、例えば、歯車が回転することで動力が回転方向に作用する合には、「作用種別」は「回転」であり、歯車がスライドすることで動力がスライドして作用する場合には、「作用種別」は「スライド」である。「回転速度」には、歯車の回転する速度が含まれる。「動力部ツリーリンク」には、後述する動力部のノードデータのアドレスを示すポインタが含まれる。
図2Bは、動力部データに含まれる各種データの一例を説明するための図である。図2Bの例は、動力部データ16に、「名前」、「位置」、「形状」、「歯車の歯数」、「回転方向」、「作用種別」、「回転速度」、「動力部ツリーリンク」が含まれることを示す。
図2Bの動力部データ16の例は、動力部の「名前」が「AA」であり、「位置」が「(X1,Y1,Z1)」であり、「形状」が「四角形」であり、「歯車の歯数」が「N」であることを示す。また、図2Bの動力部データ16の例は、「回転方向」が「X軸と平行な軸周りをZ軸の正からY軸の正、Y軸の正からZ軸の負、Z軸の負からY軸の負、Y軸の負からZ軸の正へと回転する方向」であることを示す。また、図2Bの動力部データ16の例は、「作用種別」が「回転」であり、「回転速度」が「S1[rps]」であり、「動力部ツリーリンク」に登録された動力部のノードデータのアドレスを示すポインタが「Pt1」であることを示す。
次に、動力伝達部データの一例について説明する。動力伝達部の一例としては、歯車やベルトが挙げられる。動力伝達部として歯車を採用した場合には、動力伝達部データに含まれる各種データの一例としては、「名前」、「位置」、「形状」、「歯車の歯数」、「回転方向」、「作用種別」、「作用元名」などが挙げられる。
「名前」には、各歯車に付与されたIDが含まれる。また、「位置」には、シミュレーションにおけるXYZの直交座標系の三次元空間上の歯車が存在する座標が含まれる。また、「形状」には、歯車を模式的に表す場合の外観の形が含まれる。かかる形の一例としては、円などが挙げられる。「歯車の歯数」には、歯車の歯数が含まれる。「回転方向」には、歯車の回転する方向が含まれる。「作用種別」には、与える動力の作用の種別が含まれる。動力の作用の種別としては、例えば、歯車が回転することで動力が回転方向に作用する合には、「作用種別」は「回転」であり、歯車がスライドすることで動力がスライドして作用する場合には、「作用種別」は「スライド」である。「作用元名」には、動力伝達部データ16に対応する歯車に動力を与えたノードの「名前」が含まれる。ここで、歯車に動力を与えたノードとしては、例えば、他の歯車などの動力伝達部や、モータなどの動力部が挙げられる。
図2Cは、動力伝達部データに含まれる各種データの一例を説明するための図である。図2Cの例は、動力伝達部データ17に、「名前」、「位置」、「形状」、「歯車の歯数」、「回転方向」、「作用種別」、「作用元名」が含まれることを示す。
図2Cの動力伝達部データ17の例は、動力伝達部の「名前」が「BB」であり、「位置」が「(X2,Y2,Z2)」であり、「形状」が「四角形」であり、「歯車の歯数」が「M」であることを示す。また、図2Cの動力伝達部データ17の例は、「回転方向」が「X軸と平行な軸周りをZ軸の正からY軸の負、Y軸の負からZ軸の負、Z軸の負からY軸の正、Y軸の正からZ軸の正へと回転する方向」であることを示す。また、図2Cの動力伝達部データ17の例は、「作用種別」が「回転」であり、「作用元名」に登録された、歯車に動力を与えたノードの「名前」が「AB」であることを示す。
次に、駆動部データの一例について説明する。駆動部データに含まれる各種データの一例としては、「名前」、「位置」、「形状」、「作用元名」などが挙げられる。
「名前」には、各駆動部に付与されたIDが含まれる。また、「位置」には、シミュレーションにおけるXYZの直交座標系の三次元空間上の駆動部が存在する座標が含まれる。また、「形状」には、駆動部を模式的に表す場合の外観の形が含まれる。かかる形の一例としては、四角形、円などが挙げられる。「作用元名」には、駆動部に動力を与えたノードの「名前」が含まれる。ここで、駆動部に動力を与えたノードとしては、例えば、歯車などの動力伝達部や、モータなどの動力部が挙げられる。
図2Dは、駆動部データに含まれる各種データの一例を説明するための図である。図2Dの例は、駆動部データ18に、「名前」、「位置」、「形状」、「作用元名」が含まれることを示す。
図2Dの駆動部データ18の例は、駆動部の「名前」が「CC」であり、「位置」が「(X3,Y3,Z3)」であり、「形状」が「四角形」であることを示す。また、図2Dの駆動部データ18の例は、「作用元名」に登録された、駆動部に動力を与えたノードの「名前」が「BC」であることを示す。
図1の説明に戻り、ノードデータ13bは、動力部、動力伝達部および駆動部のそれぞれのノードに関するデータであり、動力伝達についてのノードの接続関係を示すデータである。ノードデータ13bは、ノードごとに、後述の生成部14bによって生成され、記憶部13に格納される。
例えば、ノードデータ13bは、親ノードのノードデータ13bが記憶された記憶部13のアドレスを示すポインタを含む。ここで、親ノードとは、あるノードに対して、動力伝達方向の上流側に位置し、このノードと動力伝達についての接続関係を有するノードを指す。例えば、2つの歯車が噛み合っている場合には、この2つの歯車は、動力伝達についての接続関係を有するといえる。また、2つの歯車のうち、動力伝達方向の上流側に位置する歯車のノードは、下流側に位置する歯車のノードに対して、親ノードであるといえる。
また、ノードデータ13bは、同一階層ノードのノードデータ13bが記憶された記憶部13のアドレスを示すポインタを含む。ここで、同一階層ノードとは、自身を子ノードとした場合に、共通の親ノードを有する他の子ノードを指す。
また、ノードデータ13bは、子ノードのノードデータ13bが記憶された記憶部13のアドレスを示すポインタを含む。ここで、子ノードとは、あるノードに対して、動力伝達方向の下流側に位置し、このノードと動力伝達についての接続関係を有するノードを指す。例えば、噛み合っている2つの歯車のうち、動力伝達方向の下流側に位置する歯車のノードは、上流側に位置する歯車のノードに対して、子ノードであるといえる。
また、ノードデータ13bは、ノードのデータが登録された配列の要素のアドレスを示すポインタを含む。例えば、ノードデータ13bは、ノードが動力部であり、この動力部の動力部データ16が、動力部データ配列15aのi番目の配列[i]に登録されている場合には、動力部データ配列[i]が記憶された記憶部13のアドレスを示すポインタを含む。また、ノードデータ13bは、ノードが動力伝達部であり、この動力伝達部の動力伝達部データ17が、動力伝達部データ配列15bのi番目の配列[i]に登録されている場合には、動力伝達部データ配列[i]が記憶された記憶部13のアドレスを示すポインタを含む。また、ノードデータ13bは、ノードが駆動部であり、この駆動部の駆動部データ18が、駆動部データ配列15cのi番目の配列[i]に登録されている場合には、駆動部データ配列[i]が記憶された記憶部13のアドレスを示すポインタを含む。
図3は、ノードデータに含まれる各種データの一例を説明するための図である。図3の例は、ノードデータ13bに、「親ノードへのリンク」、「同一階層ノードへのリンク」、「子ノードへのリンク」、「データへのリンク」が含まれることを示す。
図3のノードデータ13bの例は、ノードデータ13bに対応するノードに対する親ノードのノードデータ13bのポインタが「Pt6」であり、同一階層ノードのノードデータ13bのポインタが「Pt7」であることを示す。また、図3のノードデータ13bの例は、ノードデータ13bに対応するノードに対する子ノードのノードデータ13bのポインタが「Pt8」であることを示す。また、図3のノードデータ13bの例は、ノードデータ13bに対応するノードのデータが登録された配列の要素のポインタが「Pt9」であることを示す。
図4は、親ノードと子ノードとの関係にある各ノードのノードデータの一例を説明するための図である。図4に示す例では、2つのノードデータ13a_1、13a_2のそれぞれに対応する2つのノードのうち、ノードデータ13a_1に対応するノードが、ノードデータ13a_2に対応するノードの親ノードとなる。一方で、図4に示す例では、ノードデータ13a_2に対応するノードが、ノードデータ13a_1に対応するノードの子ノードとなる。
図4のノードデータ13a_1の例は、ノードデータ13a_1に対応するノードに対する子ノードのノードデータ13a_2のポインタが「Pt11」であることを示す。また、図4のノードデータ13a_2の例は、ノードデータ13a_2に対応するノードに対する親ノードのノードデータ13a_1のポインタが「Pt12」であることを示す。したがって、ノードデータ13a_1、13a_2の登録内容から、ノードデータ13a_1、13a_2のそれぞれに対応する2つのノードが親ノード、子ノードの関係にあることが把握される。
このように、ノードデータ13bには、動力伝達についてのノードの接続関係を示すデータが含まれている。そのため、各ノードデータ13bは、生成部14bによりノード全体の接続関係を把握する際に用いられる。
図1の説明に戻り、新モデルデータ13cは、上記のモデルデータ13aを用いてシミュレーションを行う場合よりも、より短い時間で精度の高いシミュレーションを行うためのモデルである。新モデルデータ13cは、生成部14bにより生成される。新モデルデータ13cについては後述するが、新モデルデータ13cは、モデルデータ13aに含まれる動力部および動力伝達部を新たな動力部とし、新たな動力部が駆動部に動力を与えて駆動部を駆動させるようなモデルのデータである。
記憶部13は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部13は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部14は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部14は、図1に示すように、取得部14aと、生成部14bと、シミュレーション部14cとを有する。なお、以下の説明では、動力部のノードを根ノード、駆動部のノードを葉ノードと称する場合がある。
取得部14aは、モデルデータを取得する。例えば、取得部14aは、記憶部13からモデルデータ13aを取得する。なお、取得部14aは、入力部11から入力されたモデルデータ13aを取得することもできる。
生成部14bは、モデルデータから、シミュレーションの時間がより短くなる新たなモデルデータを生成する。
例えば、生成部14bは、まず、取得部14aにより取得されたモデルデータ13aに含まれる動力部データ16、動力伝達部データ17、駆動部データ18から、動力部、動力伝達部および駆動部の全ノードの動力伝達についての接続関係を解析する。
具体例を挙げて説明すると、生成部14bは、まず、未選択の動力部データ16を動力部データ配列15aの要素の中から一つ選択する。そして、生成部14bは、選択した動力部データ16の「動力部ツリーリンク」に、選択した動力部データ16の「名前」が示す動力部のノードデータ13bのポインタを登録する。また、生成部14bは、かかるノードデータ13bの「データへのリンク」に、選択した動力部データ16のポインタを登録する。これにより、選択した動力部データ16と、対応するノードデータ13bとでリンクが張られることになる。
そして、生成部14bは、選択した動力部データ16に含まれる名前と作用元名が一致する動力伝達部データ17および駆動部データ18を全て抽出する。これにより、生成部14bは、選択した動力部データ16に対応する動力部と、抽出した動力伝達部データ17および駆動部データ18に対応する各ノードとが、それぞれ、親ノードと子ノードとの関係にあることを抽出する。
そして、生成部14bは、親ノードのノードデータ13bの「子ノードへのリンク」に、子ノードのノードデータ13bのポインタを登録する。また、生成部14bは、子ノードのノードデータ13bの「親ノードへのリンク」に、親ノードのノードデータ13bポインタを登録する。これにより、親ノードのノードデータ13bと子ノードのノードデータ13bとの間でリンクが張られたことになる。
また、動力伝達部データ17および駆動部データ18のノードを複数抽出した場合には、これらのノードは互いに同一階層ノードであるため、生成部14bは、これらのノードのノードデータ13bに同一階層ノードのノードデータ13bのポインタを登録する。これにより、同一階層ノードのノードデータ13b間でリンクが張られたことになる。
また、生成部14bは、親ノードおよび子ノードのそれぞれのノードデータ13bの「データへのリンク」に、対応するノードのデータ、例えば、動力部データ16、動力伝達部データ17、駆動部データ18のいずれかのデータを登録する。これにより、各ノードと、各データとの間でリンクが張られたことになる。
続いて、生成部14bは、子ノードの中から未選択の子ノードを、処理対象のノードである処理ノードとして選択し、選択した処理ノードが駆動部となるまで、処理ノードに対して、上記の処理を繰り返し行う。これにより、選択された動力部データ16に対応する動力部から、処理ノードとして選択された駆動部までの間に存在する動力伝達部の接続関係を示す情報が、対応する動力伝達部のノードデータ13bに登録される。
選択した処理ノードが駆動部であり、かつ、選択した処理ノードに同一階層ノードが存在し、その同一階層ノードが未選択である場合には、生成部14bは、次のような処理を行う。すなわち、生成部14bは、この未選択の同一階層ノードを処理ノードとして選択し、選択した処理ノードが駆動部となるまで、上記の処理を繰り返し行う。これにより、選択された動力部データ16に対応する動力部から、処理ノードとして新たに選択された駆動部までの間に存在する動力伝達部の接続関係を示す情報が、対応する動力伝達部のノードデータ13bに登録される。
また、選択した処理ノードが駆動部であり、かつ、選択した処理ノードに同一階層ノードが存在しないかまたは選択した処理ノードの同一階層ノードが全て選択済みである場合には、生成部14bは、次のような処理を行う。すなわち、生成部14bは、処理ノードの親ノードが根ノードであるか否かを判定する。処理ノードの親ノードが根ノードでない場合には、生成部14bは、処理ノードの親ノードを新たな処理ノードとして選択する。
そして、選択した処理ノードに同一階層ノードが存在し、その同一階層ノードが未選択である場合には、生成部14bは、次のような処理を行う。すなわち、生成部14bは、この未選択の同一階層ノードを処理ノードとして選択し、選択した処理ノードが駆動部となるまで、上記の処理を繰り返し行う。これにより、選択された動力部データ16に対応する動力部から、処理ノードとして新たに選択された駆動部までの間に存在する動力伝達部の接続関係を示す情報が、対応する動力伝達部のノードデータ13bに登録される。
ここで、生成部14bが、処理ノードの親ノードが根ノードであると判定した場合には、次のような状態となる。すなわち、選択された動力部データ16に対応する動力部と、かかる動力部が発生する動力によって駆動される全ての駆動部との間に存在する全ての動力伝達部の接続関係を示す情報が、生成部14bにより、対応する動力伝達部のノードデータ13bに登録される。
そこで、生成部14bは、未選択の動力部に対しても同様の処理を行うために、未選択の動力部データ16を動力部データ配列15aの要素の中から一つ選択し、上記と同様の処理を行う。生成部14bは、かかる処理を全ての動力部データ16を選択するまで繰り返し行う。これにより、全ての動力部の各々と、動力部の各々が発生する動力によって駆動される全ての駆動部との間に存在する全ての動力伝達部の接続関係を示す情報が、生成部14bにより、全ての動力伝達部のノードデータ13bに登録される。
このようにして、生成部14bは、ノードデータ13bに接続関係を示す情報を登録することで、動力部、動力伝達部、駆動部の接続関係を示すツリーを生成する。
図5は、生成部により生成されるツリーの一例を示す図である。図5は、ツリー70を示す。図5の例は、生成部14bにより、動力部データ配列15aの要素の中から、動力部データ配列[i]の要素の動力部30の動力部データ16が選択されたことを示す。
図5の例では、動力部30と、動力伝達部31との関係において、動力部30が親ノードであり、動力伝達部31は子ノードである。図5の例では、生成部14bは、動力部30のノードデータ13bの「子ノードへのリンク」に、動力伝達部31のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、動力伝達部31のノードデータ13bの「親ノードへのリンク」に、動力部30のノードデータ13bのポインタを登録する。
また、図5の例では、動力部30と、動力伝達部32との関係において、動力部30が親ノードであり、動力伝達部32は子ノードである。図5の例では、生成部14bは、動力部30のノードデータ13bの「子ノードへのリンク」に、動力伝達部32のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、動力伝達部32のノードデータ13bの「親ノードへのリンク」に、動力部30のノードデータ13bのポインタを登録する。
また、図5の例では、動力伝達部31と、動力伝達部32とが互いに同一階層ノードである。図5の例では、生成部14bは、動力伝達部31のノードデータ13bの「同一階層ノードへのリンク」に、動力伝達部32のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、動力伝達部32のノードデータ13bの「同一階層ノードへのリンク」に、動力伝達部31のノードデータ13bのポインタを登録する。
また、図5の例では、動力伝達部31と動力伝達部33との関係において、動力伝達部31が親ノードであり、動力伝達部33は子ノードである。図5の例では、生成部14bは、動力伝達部31のノードデータ13bの「子ノードへのリンク」に、動力伝達部33のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、動力伝達部33のノードデータ13bの「親ノードへのリンク」に、動力伝達部31のノードデータ13bのポインタを登録する。
また、図5の例では、動力伝達部31と動力伝達部34との関係において、動力伝達部31が親ノードであり、動力伝達部34が子ノードである。図5の例では、生成部14bは、動力伝達部31のノードデータ13bの「子ノードへのリンク」に、動力伝達部34のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、動力伝達部34のノードデータ13bの「親ノードへのリンク」に、動力伝達部31のノードデータ13bのポインタを登録する。
また、図5の例では、動力伝達部33と、動力伝達部34とが互いに同一階層ノードである。図5の例では、生成部14bは、動力伝達部33のノードデータ13bの「同一階層ノードへのリンク」に、動力伝達部34のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、動力伝達部34のノードデータ13bの「同一階層ノードへのリンク」に、動力伝達部33のノードデータ13bのポインタを登録する。
また、図5の例では、動力伝達部33と動力伝達部36との関係において、動力伝達部33が親ノードであり、動力伝達部36は子ノードである。図5の例では、生成部14bは、動力伝達部33のノードデータ13bの「子ノードへのリンク」に、動力伝達部36のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、動力伝達部36のノードデータ13bの「親ノードへのリンク」に、動力伝達部33のノードデータ13bのポインタを登録する。
また、図5の例では、動力伝達部36と駆動部37との関係において、動力伝達部36が親ノードであり、駆動部37は子ノードである。図5の例では、生成部14bは、動力伝達部36のノードデータ13bの「子ノードへのリンク」に、駆動部37のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、駆動部37のノードデータ13bの「親ノードへのリンク」に、動力伝達部36のノードデータ13bのポインタを登録する。
また、図5の例では、動力伝達部34と駆動部38との関係において、動力伝達部34が親ノードであり、駆動部38は子ノードである。図5の例では、生成部14bは、動力伝達部34のノードデータ13bの「子ノードへのリンク」に、駆動部38のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、駆動部38のノードデータ13bの「親ノードへのリンク」に、動力伝達部34のノードデータ13bのポインタを登録する。
また、図5の例では、動力伝達部32と動力伝達部35との関係において、動力伝達部32が親ノードであり、動力伝達部35は子ノードである。図5の例では、生成部14bは、動力伝達部32のノードデータ13bの「子ノードへのリンク」に、動力伝達部35のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、動力伝達部35のノードデータ13bの「親ノードへのリンク」に、動力伝達部32のノードデータ13bのポインタを登録する。
また、図5の例では、動力伝達部35と駆動部39との関係において、動力伝達部35が親ノードであり、駆動部39は子ノードである。図5の例では、生成部14bは、動力伝達部35のノードデータ13bの「子ノードへのリンク」に、駆動部39のノードデータ13bのポインタを登録する。また、図5の例では、生成部14bは、駆動部39のノードデータ13bの「親ノードへのリンク」に、動力伝達部35のノードデータ13bのポインタを登録する。
また、図5の例では、動力部30は根ノードである。また、図5の例では、動力伝達部31〜36は、内部ノードである。また、図5の例では、駆動部37〜39は、葉ノードである。
次に、生成部14bが、全てのノードのノードデータ13aおよびモデルデータ13aに基づいて、モデルデータ13aを用いた場合より、精度の高さはそのままでシミュレーションの時間が短くなる新たなモデルデータを生成する処理について説明する。具体例を挙げて説明すると、生成部14bは、この処理において、未選択の動力部データ16を動力部データ配列15aの要素の中から一つ選択する。そして、生成部14bは、選択した動力部データ16の「動力部ツリーリンク」に登録されたポインタが示すノードデータ13bを取得する。
そして、生成部14bは、取得したノードデータ13bに対応する動力部により発生された動力によって駆動する全ての駆動部のノードデータ13bを、葉ノードのノードデータとして抽出する。生成部14bは、各ノードデータ13bの情報を用いて、接続関係を有するノードを探索することで、葉ノードのノードデータを抽出することができる。
そして、生成部14bは、未選択の葉ノードを、処理対象の葉ノードである処理葉ノードとして一つ選択する。そして、生成部14bは、選択した処理葉ノードの親ノードが動力伝達部であるか否かを判定する。選択した処理葉ノードの親ノードが動力伝達部でない場合には、新たなモデルを生成しないため、生成部14bは、未選択の葉ノードを、処理葉ノードとして一つ選択する上記の処理を行い、以降の処理を同様に行う。なお、選択した処理葉ノードの親ノードが動力伝達部でない場合は、選択した処理葉ノードの親ノードが動力部である場合である。
一方、選択した処理葉ノードの親ノードが動力伝達部である場合には、生成部14bは、処理葉ノードの親ノードを処理ノードとして選択する。そして、生成部14bは、処理ノードのノードデータ13bを、先入れ後出し方式のスタックへ入れる。
続いて、生成部14bは、処理ノードの親ノードが動力伝達部であるか否かを判定する。処理ノードの親ノードが動力伝達部である場合には、生成部14bは、処理ノードの親ノードを新たな処理ノードとして選択し、処理ノードのノードデータ13bを、後入れ先出し方式のスタックへ入れる上記の処理を行い、以降の処理を同様に行う。
一方、処理ノードの親ノードが動力伝達部でない場合には、生成部14bは、選択した動力部データ16に対応する動力部から、選択した葉ノードの駆動部までのパス上に存在する動力伝達部のノードデータ13bをスタックから取得する。ここで、取得したノードデータ13bの順番は、動力伝達方向の最も下流側に位置する動力伝達部のノードデータ13bが先頭であり、以降は、動力伝達方向の下流側から上流側までの動力伝達部の位置に対応する順番となっている。なお、処理ノードの親ノードが動力伝達部でない場合は、処理ノードの親ノードが動力部である場合である。
そして、生成部14bは、取得したノードデータ13bと、選択した根ノードの動力部とを新しい一つの動力部のモデルとした場合に、この新モデルに付与するIDを生成する。
続いて、生成部14bは、取得したノードデータ13bおよびモデルデータ13aに基づいて、次のような処理を行う。すなわち、生成部14bは、取得したノードデータ13bに対応する各動力伝達部と、選択した根ノードの動力部とを新しい動力部とした場合に、新しい動力部が駆動部に動力を与えて駆動部を駆動させるような新モデルを生成する。
例えば、生成部14bは、動力部がモータであり、動力伝達部が歯車である場合には、新しい動力部の新モデルとして、これらのモータと歯車とを一つにしたモータのモデルを生成する。このような場合、生成部14bは、取得したノードデータ13bおよびモデルデータ13aに基づいて、新モデルのモータの回転速度を以下の式(1)により算出する。
回転速度=動力部データ16に含まれる回転速度×動力部データ16に含まれる歯車の 歯数/駆動部に直接つながる動力伝達部の歯車の歯数・・・式(1)
また、生成部14bは、取得したノードデータ13bおよびモデルデータ13aに基づいて、次のような処理を行う。すなわち、生成部14bは、取得したノードデータ13bに対応する動力伝達部の数が奇数の場合には、新モデルのモータの回転方向を、動力部データ16のモータの回転方向の逆方向として算出する。また、生成部14bは、取得したノードデータ13bに対応する動力伝達部の数が偶数の場合には、新モデルのモータの回転方向を、動力部データ16のモータの回転方向として算出する。これは、動力伝達部の歯車の数が奇数の場合には、駆動部に直接つながる歯車の回転方向は、モータの回転方向と逆方向となり、動力伝達部の歯車の数が偶数の場合には、駆動部に直接つながる歯車の回転方向は、モータの回転方向と同一方向となるからである。
また、生成部14bは、取得したノードデータ13bおよびモデルデータ13aに基づいて、新モデルのモータの回転軸を、駆動部に直接つながる歯車の回転軸として算出する。生成部14bは、駆動部に直接つながる歯車の回転軸を、スタックに最初に入れられたノードデータ13bの「データへのリンク」に登録されたポインタが示す動力伝達部データ17に含まれる「回転方向」から取得する。
そして、生成部14bは、駆動部に直接つながる歯車の形状を、新モデルのモータの形状として算出する。また、生成部14bは、駆動部に直接つながる歯車の位置を、新モデルのモータの位置として算出する。生成部14bは、駆動部に直接つながる歯車の形状、位置を、スタックに最初に入れられたノードデータ13bの「データへのリンク」に登録されたポインタが示す動力伝達部データ17に含まれる「形状」、「位置」から取得する。
その後、生成部14bは、新モデルのモータのID、回転速度、回転方向、回転軸、形状、位置などを含むデータを新モデルデータ13cとして生成する。新モデルデータ13cは、動力部および動力伝達部を一つの動力部としたモデルであり、従来のモデルデータ13aよりもデータ構造が簡易であるため、シミュレーションの処理時間を短くさせることが可能である。また、新モデルデータ13cは、高い精度で算出された回転速度、回転方向、回転軸などのシミュレーション時に重要なパラメータを含んでいる。この結果、新モデルデータ13cを用いたシミュレーションでは、より短い時間で精度の高いシミュレーションを行うことができる。続いて、生成部14bは、生成した新モデルデータ13cを記憶部13に格納する。
そして、生成部14bは、未選択の葉ノードを、処理葉ノードとして一つ選択する上記の処理を行い、以降の処理を同様に行う。
また、抽出した全ての葉ノードを処理葉ノードとして選択済みである場合には、生成部14bは、未選択の動力部データ16を動力部データ配列15aの要素の中から一つ選択する上記の処理を再び行い、以降の処理を同様に行う。生成部14bは、このような処理を、全ての動力部データ16が選択済みとなるまで繰り返し行う。
図6は、図5の例において、新モデルデータを生成した場合の一例を示す図である。図6の例では、シミュレーション対象を、図5の例において存在していた動力部30、動力伝達部31〜36に代えて、新モデルデータ13cの新動力部40、41、42としたことを示す。
図6の例では、動力部30および動力伝達部31、33、36が、一つの簡易な動力部40にされたことを示す。また、図6の例では、動力部30および動力伝達部31、34が、一つの簡易な動力部41にされたことを示す。また、図6の例では、動力部30および動力伝達部32、35が、一つの簡易な動力部42にされたことを示す。
図7Aは、生成部による新モデル生成前のシミュレーション対象の一例を示す図である。また、図7Bは、生成部による新モデル生成後のシミュレーション対象の一例を示す図である。図7Aの例は、ロボットの腕70に設けられた動力部であるモータ71と、動力伝達部である平行軸歯車72と、駆動部であるロボットの腕73とが、シミュレーション対象であることを示す。一方、図7Aの例において、生成部14bは、モータ71と平行軸歯車72とを一つのモータとするモデルデータを新モデルデータ13cとして生成する。この結果、図7Bの例に示すように、モータ71および平行軸歯車72に代えて、新モデルデータ13cが示すモータ74がシミュレーション対象となる。
なお、図7Bの例では、生成部14bは、モータ74の回転速度を、下記の式(2)によって算出する。
モータ74の回転速度=モータ71の回転速度×モータ71の歯車の歯数/平行軸歯車 72の歯数・・・式(2)
また、図7Bの例では、生成部14bは、モータ71の回転方向と逆方向を、モータ74の回転方向として算出する。
また、図7Bの例では、生成部14bは、平行軸歯車72の回転軸を、モータ74の回転軸として算出する。
図8Aは、生成部による新モデル生成前のシミュレーション対象の一例を示す図である。また、図8Bは、生成部による新モデル生成後のシミュレーション対象の一例を示す図である。図8Aの例は、ロボットの腕75に設けられた動力部であるモータ76と、動力伝達部である交差軸歯車77と、駆動部であるロボットの腕78とが、シミュレーション対象であることを示す。一方、図8Aの例において、生成部14bは、モータ76と交差軸歯車77とを一つのモータとするモデルデータを新モデルデータ13cとして生成する。この結果、図8Bの例が示すように、モータ76および交差軸歯車77に代えて、新モデルデータ13cが示すモータ79がシミュレーション対象となる。
なお、図8Bの例では、生成部14bは、モータ79の回転速度を、下記の式(3)によって算出する。
モータ79の回転速度=モータ76の回転速度×モータ76の歯車の歯数/交差軸歯車 77の歯数・・・式(3)
また、図8Bの例では、生成部14bは、モータ76の回転方向と逆方向を、モータ79の回転方向として算出する。
また、図8Bの例では、生成部14bは、交差軸歯車77の回転軸を、モータ79の回転軸として算出する。
図9Aは、生成部による新モデル生成前のシミュレーション対象の一例を示す図である。また、図9Bは、生成部による新モデル生成後のシミュレーション対象の一例を示す図である。図9Aの例は、ロボットの腕80に設けられた動力部であるモータ81と、動力伝達部である平行軸歯車82と、平行軸歯車83と、駆動部であるロボットの腕84とが、シミュレーション対象であることを示す。一方、図9Aの例において、生成部14bは、モータ81と平行軸歯車82と平行軸歯車83とを一つのモータとするモデルデータを新モデルデータ13cとして生成する。この結果、図9Bの例が示すように、モータ81、平行軸歯車82および平行軸歯車83に代えて、新モデルデータ13cが示すモータ85がシミュレーション対象となる。
なお、図9Bの例では、生成部14bは、モータ85の回転速度を、下記の式(4)によって算出する。
モータ85の回転速度=モータ81の回転速度×モータ81の歯車の歯数/平行軸歯車 83の歯数・・・式(4)
また、図9Bの例では、生成部14bは、モータ81の回転方向を、モータ85の回転方向として算出する。
また、図9Bの例では、生成部14bは、平行軸歯車83の回転軸を、モータ85の回転軸として算出する。
図10Aは、生成部による新モデル生成前のシミュレーション対象の一例を示す図である。また、図10Bは、生成部による新モデル生成後のシミュレーション対象の一例を示す図である。図10Aの例は、ロボットの腕90に設けられた動力部であるモータ91と、動力伝達部である平行軸歯車92と、平行軸歯車93と、駆動部であるロボットの腕94とが、シミュレーション対象であることを示す。また、図10Aの例は、平行軸歯車95と、平行軸歯車96と、ロボットの腕97とが、シミュレーション対象であることを示す。一方、図10Aの例では、生成部14bは、モータ91と平行軸歯車92と平行軸歯車93とを一つのモータとするモデルデータ、およびモータ91と平行軸歯車95と平行軸歯車96とを一つのモータとするモデルデータを新モデルデータ13cとして生成する。この結果、図10Bの例が示すように、モータ91、平行軸歯車92および平行軸歯車93に代えて、新モデルデータ13cが示すモータ98がシミュレーション対象となる。また、図10Bの例が示すように、モータ91、平行軸歯車95および平行軸歯車96に代えて、新モデルデータ13cが示すモータ99がシミュレーション対象となる。なお、各モータ98、99の回転速度、回転方向、回転軸などは、上記の例と同様に算出することができる。
図1の説明に戻り、シミュレーション部14cは、生成部14bにより生成された新モデルデータ13cを用いてシミュレーションを行う。シミュレーション部14cは、モデルデータ13aと比較して、簡易なモデルであり、精度の高いパラメータを有する新モデルデータ13cを用いて、装置の動作のシミュレーションを行うので、より短い時間で精度の高いシミュレーションを行うことができる。
図11は、シミュレーション部による動作のシミュレーションの一例を説明するための図である。図11の例では、新モデルデータ13cの新動力部であるモータ50は、台座51に接続されており、移動はしないが、回転動作が可能である。
また、図11の例では、モータ50に駆動部52の一端が接続されており、駆動部52は、モータ50の回転に伴い移動する。また、図11の例では、駆動部52の他端に、新モデルデータ13cの新動力部であるモータ53が接続されている。モータ53に駆動部54の一端が接続されており、駆動部54は、モータ53の回転に伴い移動する。
例えば、シミュレーション部14cは、所定の時刻からの各時間のモータ50、53の回転角度を計算するとともに、各時間のモータ50、53の回転角度に応じた駆動部52、54の位置を計算し、計算結果に応じたシミュレーション結果を出力部12に送信する。これにより、出力部12からシミュレーション結果が表示されたり、音声出力される。
図11の例では、シミュレーション部14cは、時刻0におけるモータ50、53の位置P50_0、P53_0を計算する。また、図11の例では、シミュレーション部14cは、時刻0における駆動部52、54の位置P52_0、P54_0を計算する。
そして、図11の例では、シミュレーション部14cは、時刻0におけるモータ50、53、駆動部52、54の各位置に、モータ50、53、駆動部52、54の各形状が出力部12の表示デバイスに表示されるように、次のような処理を行う。すなわち、シミュレーション部14cは、各形状および各位置を出力部12に送信する。
そして、図11の例では、シミュレーション部14cは、時刻0から所定時間T経過後の時刻Tにおけるモータ50、53の回転角度を計算する。シミュレーション部14cは、例えば、モータ50の回転速度W50と所定時間Tとから、W50と所定時間Tとの積(W50×T)を、時刻0から時刻Tまでのモータ50の回転角度W1として計算する。
そして、図11の例では、シミュレーション部14cは、時刻0の駆動部52の位置から、モータ50を中心として角度W1だけ回転させた駆動部52の位置P52_Tを計算する。
また、図11の例では、シミュレーション部14cは、例えば、モータ53の回転速度W53と所定時間Tとから、W53と所定時間Tとの積(W53×T)を、時刻0から時刻Tまでのモータ53の回転角度W2として計算する。
また、図11の例では、シミュレーション部14cは、時刻0のモータ53の位置から、モータ50を中心として角度W1だけ回転させたモータ53の位置P53_Tを、時刻Tにおけるモータ53の位置として計算する。
また、図11の例では、シミュレーション部14cは、時刻0の駆動部54の位置から、モータ50を中心として角度W1だけ回転させた駆動部54の位置P54_T1を計算する。そして、図11の例では、シミュレーション部14cは、駆動部54の位置P54_T1から、モータ53の位置P53_Tを中心として角度W2だけ回転させた駆動部54の位置P54_Tを、時刻Tにおける駆動部54の位置として計算する。
そして、図11の例では、シミュレーション部14cは、時刻Tにおけるモータ50、53、駆動部52、54の各位置に、モータ50、53、駆動部52、54の各形状が出力部12の表示デバイスに表示されるように、次のような処理を行う。すなわち、シミュレーション部14cは、各形状および各位置などのシミュレーション結果を出力部12に送信する。
シミュレーション部14cは、上記のようなシミュレーションにおける計算を各時刻ごとに繰り返し行い、シミュレーション結果を出力部12に送信する。
制御部14は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。
[処理の流れ]
次に、本実施例に係るシミュレーション装置10の処理の流れを説明する。図12は、実施例1に係るシミュレーション処理の手順を示すフローチャートである。このシミュレーション処理は、入力部11からシミュレーション処理を実行する指示が制御部14に入力された場合に実行される。
図12に示すように、取得部14aは、モデルデータ13aを取得する(ステップS101)。
生成部14bは、後述のツリー生成処理を実行する(ステップS102)。生成部14bは、後述のモデル生成処理を実行する(ステップS103)。そして、シミュレーション部14cは、新モデルデータ13cを用いてシミュレーションを行い(ステップS104)、処理を終了する。
図13は、実施例1に係るツリー生成処理の手順を示すフローチャートである。
図13に示すように、生成部14bは、変数iの値を1に設定する(ステップS201)。生成部14bは、動力部データ配列[i]の要素が示す動力部データ16を選択し、選択した動力部データ16と、対応するノードデータ13bとでリンクを張る(ステップS202)。具体例を挙げると、生成部14bは、選択した動力部データ16の「動力部ツリーリンク」に、選択した動力部データ16の「名前」が示す動力部のノードデータ13bのポインタを登録する。また、生成部14bは、かかるノードデータ13bの「データへのリンク」に、選択した動力部データ16のポインタを登録する。
生成部14bは、選択した動力部データ16に含まれる名前と、作用元名が一致する動力伝達部データ17および駆動部データ18を全て抽出することで、子ノードを抽出する(ステップS203)。
生成部14bは、親ノードのノードデータ13bの「子ノードへのリンク」に、子ノードのノードデータ13bのポインタを登録する。また、生成部14bは、子ノードのノードデータ13bの「親ノードへのリンク」に、親ノードのノードデータ13bポインタを登録する(ステップS204)。
生成部14bは、抽出された子ノードのノードデータ13bに、同一階層ノードのノードデータ13bのポインタを登録する(ステップS205)。そして、生成部14bは、子ノードの中から未選択の子ノードを、処理対象のノードである処理ノードとして選択する(ステップS206)。
生成部14bは、選択した処理ノードが、駆動部であるか否かを判定する(ステップS207)。選択した処理ノードが駆動部でない場合(ステップS207否定)には、生成部14bは、次のような処理を行う。すなわち、生成部14bは、選択した処理ノードの動力伝達部データ17に含まれる名前と、作用元名が一致する動力伝達部データ17および駆動部データ18を全て抽出することで、子ノードを抽出し(ステップS208)、ステップS204に戻る。
選択した処理ノードが駆動部である場合(ステップS207肯定)には、生成部14bは、選択した処理ノードに同一階層ノードが存在し、その同一階層ノードが未選択であるか否かを判定する(ステップS209)。同一階層ノードが未選択である場合(ステップS209肯定)には、生成部14bは、未選択の同一階層ノードを処理ノードとして選択し(ステップS210)、ステップS207に戻る。
一方、同一階層ノードが未選択でない場合(ステップS209否定)には、生成部14bは、処理ノードの親ノードが根ノードであるか否かを判定する(ステップS211)。処理ノードの親ノードが根ノードでない場合(ステップS211否定)には、生成部14bは、処理ノードの親ノードを新たな処理ノードとして選択し(ステップS212)、ステップS209へ戻る。
一方、処理ノードの親ノードが根ノードである場合(ステップS211肯定)には、生成部14bは、変数iの値を一つインクリメントする(ステップS213)。そして、生成部14bは、変数iの値が、動力部データ配列15aの要素数l以下であるか否かを判定する(ステップS214)。変数iの値が、動力部データ配列15aの要素数l以下である場合(ステップS214肯定)には、ステップS202へ戻る。一方、変数iの値が、動力部データ配列15aの要素数l以下でない場合(ステップS214否定)には、処理結果を制御部14の内部メモリに格納し、リターンする。
図14は、実施例1に係るモデル生成処理の手順を示すフローチャートである。
図14に示すように、生成部14bは、変数jの値を1に設定する(ステップS301)。生成部14bは、動力部データ配列[j]の要素の動力部データ16を選択する(ステップS302)。
生成部14bは、選択した動力部データ16の「動力部ツリーリンク」に登録されたポインタが示すノードデータ13bを取得する。そして、生成部14bは、取得したノードデータ13bに対応する動力部により発生された動力によって駆動する全ての駆動部のノードデータを葉ノードのノードデータとして抽出する(ステップS303)。
生成部14bは、抽出した全ての葉ノードを処理葉ノードとして選択したか否かを判定する(ステップS304)。抽出した全ての葉ノードを、処理葉ノードとして選択していない場合(ステップS304否定)には、生成部14bは、未選択の葉ノードを、処理対象の葉ノードである処理葉ノードとして一つ選択する(ステップS305)。
そして、生成部14bは、選択した処理葉ノードの親ノードが動力伝達部であるか否かを判定する(ステップS306)。選択した処理葉ノードの親ノードが動力伝達部でない場合(ステップS306否定)には、ステップS304に戻る。
一方、選択した処理葉ノードの親ノードが動力伝達部である場合(ステップS306肯定)には、生成部14bは、処理葉ノードの親ノードを処理ノードとして選択する(ステップS307)。そして、生成部14bは、処理ノードのノードデータ13bを、後入れ先出し方式のスタックへ入れる(ステップS308)。
続いて、生成部14bは、処理ノードの親ノードが動力伝達部であるか否かを判定する(ステップS309)。処理ノードの親ノードが動力伝達部である場合(ステップS309肯定)には、生成部14bは、処理ノードの親ノードを新たな処理ノードとして選択し(ステップS310)、ステップS308へ戻る。
一方、処理ノードの親ノードが動力伝達部でない場合(ステップS309否定)には、生成部14bは、次のような処理を行う。すなわち、生成部14bは、選択した動力部データ16に対応する動力部から、選択した葉ノードの駆動部までのパス上に存在する動力伝達部のノードデータ13bをスタックから取得する(ステップS311)。
そして、生成部14bは、取得したノードデータ13bと、選択した根ノードの動力部とを新しい動力部のモデルとした場合に、この新モデルに付与するIDを生成する(ステップS312)。
続いて、生成部14bは、新モデルのモータの回転速度、回転方向、回転軸、形状、位置などを算出する(ステップS313)。生成部14bは、新モデルのモータのID、回転速度、回転方向、回転軸、形状、位置などを含むデータを新モデルデータ13cとして生成し、生成した新モデルデータ13cを記憶部13に格納し(ステップS314)、ステップS304へ戻る。
一方、抽出した全ての葉ノードを、処理葉ノードとして選択した場合(ステップS304肯定)には、生成部14bは、変数jの値を一つインクリメントする(ステップS315)。そして、生成部14bは、変数jの値が、動力部データ配列15aの要素数l以下であるか否かを判定する(ステップS316)。変数jの値が、動力部データ配列15aの要素数l以下である場合(ステップS316肯定)には、ステップS302へ戻る。一方、変数jの値が、動力部データ配列15aの要素数l以下でない場合(ステップS316否定)には、処理結果を制御部14の内部メモリに格納し、リターンする。
[実施例1の効果]
上述してきたように、本実施例に係るシミュレーション装置10は、動力部、動力伝達部、および駆動部を備えたシミュレーション対象の装置のモデルデータ13aに基づいて、次のような処理を行う。すなわち、本実施例に係るシミュレーション装置10は、この動力部および動力伝達部を新たな動力部とし、新たな動力部が駆動部に動力を与えて駆動部を駆動させるような新モデルデータ13cを生成する。この際に、本実施例に係るシミュレーション装置10は、モデルデータ13aに基づいて、動力部および動力伝達部が組み合わされた単一の新たな動力部のモデルを生成する。そして、本実施例に係るシミュレーション装置10は、生成された新モデルデータ13cを用いて装置の動作のシミュレーションを行う。このように、本実施例によれば、モデルデータ13aと比較して、簡易で精度の高いパラメータを有するモデルである新モデルデータ13cを用いて、装置の動作のシミュレーションを行うので、より短い時間で精度の高いシミュレーションを行うことができる。
また、本実施例に係るシミュレーション装置10は、駆動部に関する駆動部データ、動力伝達方向の最上流側に位置する動力伝達部の動力伝達部データ、および動力伝達方向の最下流側に位置する動力伝達部の動力伝達部データに基づいて、次のような処理を行う。すなわち、本実施例に係るシミュレーション装置10は、回転速度、回転方向、回転軸、形状、位置などの新たな駆動部の駆動部データを算出する。したがって、本実施例によれば、全ての動力伝達部データを用いて、新たな駆動部の駆動部データを算出する場合と比較して、より少ない情報量で、新たな駆動部の駆動部データを算出することができる。
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
[モデル変換装置]
上記の実施例1では、シミュレーションを行うシミュレーション部14cを有する場合について例示したが、開示の装置はこれに限定されない。例えば、開示の装置は、シミュレーション部14cを省略することができる。この場合、開示の装置は、例えば、新モデルデータ13cを生成するモデル変換装置として機能する。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。例えば、既に、同一階層ノード間でリンクが張られている場合には、図13に示すステップS205の処理を省略することもできる。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。例えば、図14に示すステップS312の処理と、ステップS313の処理との順番を入れ替えることもできる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、図1に示す取得部14aと生成部14bとが統合されてもよい。