こんにちは!ときにはmeviyで板金の形状認識の開発をしたりしてます、南です。
meviyでは様々なCADデータをアップロードして部品を調達できるんですよね。CADでモデリング時に「ここは曲げで、ここはタップ穴で、ここを溶接して……」といった情報を入力すれば製造時に情報を参照して加工することもできますが、すべてのCADデータで情報を統一することは、まぁ無理ですよね。また、企業や組織が異なると設計時に入力する情報も異なるでしょう。
ということで、meviyではアップロードされた形状情報から特徴を抽出し、その部位が何であるのかを認識します。もうちょっと大きく言うと3Dモデルから設計者の意図を読み解きます!ぼくたちが形状認識と呼んでいる分野ですね。
そこで今日は板金部品における形状認識でどういったことをやっているか、基礎の基礎部分を解説していくゾ!
B-repモデル
上でも述べたように形状認識とは3Dモデルの各部位が何なのかを特定するものです。とはいっても、生のバイナリデータをそのまま解析することはできませんよね。まずは各種CADデータを一般的に境界表現やB-repモデリングと呼ばれるような、オブジェクトのジオメトリ(geometry:点、曲線、曲面などの形状)とトポロジ(topology:オブジェクト間の空間的相関関係)を独立に表現するモデルにします。
B-repについては同僚が(社外で)執筆した記事があるのでご興味のある方はどうぞ!
meviyの形状認識でもトポロジとしての面(FACE)に対応するジオメトリとしての曲面(SURFACE)のような構造のモデルになっています。
形状認識するためにまずは形状の特徴を最も表すFACEに注目します。
例えばmeviyにアップロードされているモデルも……
FACEの集合とみることができます。モデルをパッカーンと分割することができるんですね!
プリミティブ認識
形状認識で処理しやすいようにこのFACEがどのような形状をしているのか分類していきます!
3DCADでの設計段階やデータ変換で一つの人の目には一つと見える面でも複数のFACEに分割されていたりします。また、FACEにはどちらを境界の外とするのかという向きがあります。例えば円柱面であれば外側を向いているのは凸円柱面、内側を向いているのは凹円柱面ですね。
こういったことなども考慮して分類していきます。このFACEを分類する単位をプリミティブ(Primitive)と呼んでいます。
上でパッカーンしたmeviyのモデルの例では8個の平面プリミティブ、の凹円柱プリミティブ、1個の凸円柱プリミティブに分類できますね!
セマンティック認識
プリミティブとして認識した形状に設計上の意味を見出します。凹円柱のプリミティブと言ってもその形状や位置によって意味は変わってきます。また、一つのプリミティブが複数の意味を持つこともあります。これらのプリミティブの意味をぼくたちはセマンティック(Semantic)と呼んでいます!
プリミティブはB-repのオブジェクトを保持しているので、そのジオメトリやトポロジからプリミティブの形状やつながりを保持しています。
それぞれのプリミティブの位置関係からプリミティブを板部分(Wall)、曲げ部分(Bend)、通し穴部分(Hole)などのセマンティックとして認識しています。「Wall?」とか思ったりするかもしれませんが、ぼくたちがそう呼称しているというものなので、それは飲み込んでください。(meviyで板部分にマウスをホバーすると「壁」というポップアップが出ます。)
例えばWallは背を向けあった同じような形状である程度の面積のある平面プリミティブのうち、垂直な側面の平面プリミティブで囲われているといったような条件を満たすプリミティブを集めて認識します。
このようにしてすべてのプリミティブをセマンティックに分類していきます!
認識した形状の使いどころ
meviyではモデルは3Dデータでアップロードされますが、形状認識で設計者の設計意図を読み取り、セマンティックとして認識ことにより各工程の自動化や省人化が可能となります。
- 板部分と曲げ部分を認識することで3Dモデルを平板に展開する。
- 2D図面を作成する。
- 切り出す板金の形状を作成する。
- 曲げCAMデータを作成する。
- 加工可否のチェックをする。
- 各種形状から見積もりのためのパラメータを取得する。
さいごに
とまぁ、初歩の初歩の流れを説明しましたが、実際にはCAD設計時の人が意識しない(論理演算をした時の誤差などの)微小なデータ、データ変換時の誤差やデータ構造の変化、3Dデータとして正しくないデータ、3Dデータとしては正しくても板金として正しくないデータなど、設計者の意図をくみとって時には補正して形状認識処理をしなくてはならなかったりします。
形状認識と聞くと「すわっ!機械学習!」と思いがちですが、meviyでは上記のようにプログラミングで地道に幾何形状を読みとって形状を認識しています。
というのも厳密さを欠いた形状認識で、実際には制作できない形状や設計者が意図していない形状を後工程に流すわけにはいきません。また、認識できない形状について「なぜ認識できなかったのか?」は重要な情報で、ぼくたちはそれをちゃんと説明できなくてはいけません。入力をダイレクトに出力に変換してしまうAIは、ぼくたちと違ってなぜ認識できなかったのかは説明してくれないので。(まぁ単純に入出力データを何にすれば美しく問題解決できるのかという難しさもあります……)
とは言いつつ、将来高精度で説明性も高い良いモデルが作れたら、いけしゃあしゃあと機械学習を使ってたりすると思いますが、それはまだ先のお話。今日もコツコツ設計者の意図をくみ取っているのです!