【AI×CAD 第2回】見積もりのたびに穴を数えていませんか。STEPのB-Repから穴・ザグリ・皿ザグリを自動で拾う

解析曲面として出力されたSTEPでは、穴・ザグリ・皿ザグリ・フィレットの寸法が数値として記録されています。無料の3D CADビューワー兼AI解析ツールCADASのフィーチャ認識で、12個の穴を5行の表にし、厳密解析でSTEPに記録された正確な寸法に置き換えるまでを、実測値と実装の中身で解説します。

【AI×CAD 第2回】見積もりのたびに穴を数えていませんか。STEPのB-Repから穴・ザグリ・皿ザグリを自動で拾う

こんにちは!

今回は、「AI × CAD・設計情報」シリーズ全5回の第2回目です!

見積もりのたびに、図面を開いて穴を数える。

φ6が4つ、φ8の止まりが3つ、ザグリはこれとこれ。

数えた結果をExcelに転記して、拾い忘れたザグリの深さを後から電話で確認する。3Dデータはとっくに手元にあるのに、拾い出しだけは今日も目視です。

解析曲面として出力されたSTEPでは、穴・ザグリ・皿ザグリ・フィレットを構成する曲面の寸法が数値として記録されています

円筒面の半径、円錐面の開き角、面の向き。人が数えているものは、機械が読めるものです。

第1回ではSTEPをブラウザで開いて見る・測る・切る・渡すところまでを扱いました。今回は一段深く潜って、当社が無料公開している3D CADビューワー兼AI解析ツール「CADAS」に積んだフィーチャ認識、つまり穴・ザグリ・皿ザグリ・フィレットをSTEPのB-Repから自動で拾って表にする機能の中身を、実装した側の目線で書きます。数値はすべて実測値です。

まずは実物からどうぞ↓

下の穴種プレートは、厳密解析まで済ませた状態で埋め込んであります。右の表の行をクリックすると、その穴が3Dで光ります。ドラッグで回転、ホイールで拡大。ザグリ穴は赤、皿ザグリ穴は青、止まり穴は黄で塗り分けてあります。

この埋め込み自体もCADASの機能です。解析結果とマーキングを付けたままの状態を、iframeでWebサイトやブログに貼れます。仕組みはこのあと順に書きます。

連載5回の流れ。第1回 見る・測る・切る・渡す、第2回 穴・ザグリを自動で拾う、第3回 金型DFM 抜き勾配・肉厚、第4回 AIに設計をレビューさせる、第5回 設計知の伝承とローカルLLM。第2回を強調
図1 AI × CAD・設計情報 連載の全体像(第2回)

穴種プレートを開くと、12個の穴が5行の表になる

CADASのサンプルギャラリーに「穴種プレート」というモデルを入れてあります。100×70×12mmの板に、通し穴・止まり穴・ザグリ穴・皿ザグリ穴・ボス上の止まり穴を配置したもので、当社がcadqueryで自前生成したものなので正解の寸法が分かっています。

読み込むと右ペインに「穴テーブル」タブが出ます。筆者環境(Windows+Chrome)で、ギャラリーの決定ボタンを押してから表が出るまで2.8秒でした。

CADASで穴種プレートを開き、穴テーブルタブにメッシュ推定の結果(通し穴φ5.96×4、止まり穴φ7.95×3、皿ザグリ穴φ5.46×2、ザグリ穴φ6.56×2、止まり穴φ4.97×1)が表示されている
穴種プレートを開いた直後の穴テーブル。この時点の寸法は「メッシュ推定」で、近似値です

通し穴が4つ、止まり穴が3つ、皿ザグリが2つ、ザグリが2つ、ボスの止まり穴が1つ。種別と個数は設計どおりですが、直径の欄をよく見ると φ5.96、φ7.95、φ6.56 と、少しずつずれています。設計値は φ6、φ8、φ6.6 です。

このずれには理由があります。

ブラウザ内の解析は「三角形から円を推定」している

ブラウザに読み込んだ直後のCADASが持っているのは、STEPをパースして得た三角形メッシュと、その三角形がB-Repのどの面に属するかの対応表です。ここから穴を見つけるには、面ごとに三角形の法線の分布を調べて「これは円筒面らしい」「これは円錐面らしい」と統計的に判定し、円をあてはめて半径を推定します。

三角形の頂点は円周上に乗っていますが、三角形の重心は円周の少し内側に落ちます。φ6の穴に対して φ5.96 が出るのはそのためで、この重心ベースの推定法では避けられない近似です。種別の判定と個数の集計にはこれで十分ですが、

見積もりに書く数字としては、もう一歩ほしい。

そこでCADASは二段構えにしました。

穴テーブルの下にある「高度な分析(厳密解析)」を押すと、確認のダイアログが出ます。

高度な分析の送信確認ダイアログ。STEPファイルの中身を当社サーバーへ送信すること、抽出にのみ使用し保存しないこと、AIへは送らないことが書かれている
高度な分析の確認ダイアログ。同意したときだけSTEPファイルの中身がサーバーへ送られ、抽出後は保持されません

同意して送ると、サーバー側でSTEPの本文から解析曲面のエンティティを直接読み取り、その結果だけを返します。穴種プレート(109KB)で往復0.82秒。1.03MBの減速ギアユニットでも同じ0.82秒でした。

厳密解析後の穴テーブル。通し穴φ6×4、止まり穴φ8深さ6×3、皿ザグリ穴φ5.5(皿φ10.4・90°)×2、ザグリ穴φ6.6(ザグリφ11×深さ4)×2、止まり穴φ5深さ10×1と、STEPに記録された値そのもの(このサンプルでは設計値と一致)の数字が並んでいる
厳密解析の後。バッジが「厳密解析(STEP 解析曲面・サーバー抽出)」に変わり、寸法がSTEPに記録された値そのもの(このサンプルでは設計値と一致)になります

φ6.000、φ8.000、皿 φ10.400 の90°、ザグリ φ11.000 の深さ4.000。設計値と小数第3位まで一致しました。メッシュ推定と厳密解析を並べると、こうなります。

設計値メッシュ推定厳密解析
通し穴 ×4φ6.0 貫通φ5.96φ6.000
止まり穴 ×3φ8.0 深さ6φ7.95 深さ6φ8.000 深さ6.000
ザグリ穴 ×2下穴φ6.6 / ザグリφ11 深さ4φ6.56 / φ10.95 深さ4φ6.600 / φ11.000 深さ4.000
皿ザグリ穴 ×2下穴φ5.5 / 皿φ10.4 90°φ5.46 / φ10.33 90°φ5.500 / φ10.400 90.0°
ボスの止まり穴 ×1φ5.0 深さ10φ4.97 深さ10φ5.000 深さ10.000

種別と個数はどちらの経路でも全問正解、寸法は厳密解析でSTEPに記録された値そのもの(このサンプルでは設計値と一致)。この使い分けが、CADASのフィーチャ認識の骨格です。機密のファイルはブラウザ内の推定だけで数えて、寸法の正確さが要るときにサーバーへ送るかどうかを自分で決められます。

STEPのB-Repには何が書いてあるのか

ここからは中身の話です。

STEP(ISO 10303)のAP203/AP214/AP242では、ソリッド形状をB-Rep(境界表現)で表現でき、一般的な機械CADのSTEP交換ではこの表現が広く使われています。ソリッドは閉じた面の集合で、各面は「どの曲面の上にあるか」と「どの辺で区切られているか」で定義されます。この曲面の部分が肝心で、解析曲面として出力されている場合、円筒なら CYLINDRICAL_SURFACE に軸の位置・方向・半径が、円錐なら CONICAL_SURFACE に半頂角が、トーラス面なら TOROIDAL_SURFACE に大半径と小半径が、そのまま数値で書かれています。

穴種プレートのSTEPを数えると、円筒面19・円錐面2・トーラス面1・平面13、面の総数35でした。内訳は、通し穴4・止まり穴3・ザグリ穴の下穴とザグリで4・皿ザグリの下穴2・ボスの止まり穴1・ボスの外周1・四隅のR6が4で、円筒面が19。皿ザグリの皿が円錐面2、ボス根元のR2がトーラス面1、という対応です。

厳密解析のサーバー側がやっているのは、STEPの本文をレコードに分割して、

ソリッド→シェル→面→曲面

と参照を辿り、この数値を取り出すことです。

面がどちらを向いているかは、ADVANCED_FACE の same_sense フラグ(面の向きが曲面の法線と同じか逆かを表す)と、曲面の法線の向きを組み合わせて求めます。まあこれはふつうの3Dグラフィックでもやるポリゴン平面の向きの計算といっしょですね。で、これで穴の内壁とボスの外周を区別できます。境界の頂点を軸に投影すれば、その円筒がどの高さからどの高さまで続いているか(つまり穴の深さ)も出ます。

取り出した曲面を、穴に組み立てるのが分類器です。ルールは次のとおりです。

同じ軸線上にある内向き曲面の構成判定
円筒1径・両端とも底がない通し穴
円筒1径・片側に底がある止まり穴
円筒2径・大径側が開口端に達しているザグリ穴(大径がザグリ、小径が下穴)
開き角15〜75°の円錐が開口端にある皿ザグリ穴(円錐が皿)
上記以外の複数径段付き穴

「同じ軸線上」の判定は軸間距離0.3mm以内、「同じ径」は直径差0.06mm以内としています。分類器はメッシュ推定の曲面にも厳密解析の曲面にも同じものを使います。

貫通判定で一度失敗した話

最初の実装では、貫通かどうかを「穴の高さレンジが局所の板厚をほぼ覆っているか」で決めていました。板厚は、穴の周囲にある頂点の高さの幅から推定します。

これが止まり穴で外れました。穴の周囲に頂点が少ないと板厚が過小に推定され、深さ6の止まり穴が「板厚をほぼ覆っている=貫通」と判定されたのです。テッセレーションの粗さに依存するやり方は、こういう形で裏切られます。

今は、穴の両端で軸線を少しだけ延ばし、そこに三角形(穴の底面)があるかどうかを直接検査しています。底があれば止まり、両端とも無ければ貫通。テッセレーションの粗さに左右されにくい判定にしてから、穴種プレート・減速ギアユニット・24部品の時計ムーブメントの3サンプルで全問正解になりました。

もう一つ、平面が巨大なトーラス面に誤判定される件と、軸の向きが反転した円錐で皿の大径側と小径側を取り違える件も、この段階で潰しています。フィーチャ認識は、ルールを書くこと自体より、正解の分かっているモデルで外れ方を見ることに時間がかかります。

行をクリックすると、その穴が光る

表の数字だけでは、どの穴の話か分かりません。

行をクリックすると、3D表示でその種別の穴がすべてハイライトされます。

穴テーブルのザグリ穴の行を選択し、3D表示でザグリ穴2箇所が黄色い透過マーカーでハイライトされている
ザグリ穴 φ6.6 の行をクリックしたところ。該当する2箇所が光り、ステータスバーにも表示されます
皿ザグリ穴の行を選択し、下段の2箇所がハイライトされている
皿ザグリ穴 φ5.5 の行。ザグリと皿は表の上では似た顔をしていますが、3Dで見ると別物です

厳密解析の後は面の対応表を持たないので、穴の位置と径から軸方向に透過のマーカーを立てる方式にしています。壁の向こうにある穴も見えるので、板の裏から入る穴でも見失いません。

フィレットも同じ仕組みで拾える

「フィレット」タブには、トーラス帯と部分円筒帯をR値でまとめた一覧が出ます。穴種プレートでは、ボス根元のR2(トーラス帯・凹のすみ肉)が1箇所、プレート四隅のR6(円筒帯・凸の丸み)が4箇所でした。こちらも厳密解析で R2.000、R6.000 です。

フィレットタブにR2トーラス帯(凹・すみ肉)1箇所とR6円筒帯(凸・丸み)4箇所が表示されている
フィレット一覧。凹(すみ肉)と凸(丸み)を区別して数えます

最小Rが1mmを切ると、一覧の上に警告が出ます。工具径や応力集中の目安として、小さすぎるRを一覧の先頭で知らせる仕組みです。

アセンブリでも、部品をまたいで数えられる

単品の板だけでは実務に足りません。減速ギアユニット(5部品)で試します。

厳密解析の結果は、ザグリ穴 φ5.5(ザグリφ9×深さ3)が4個、φ10の通し穴が2個、φ10.2の通し穴が2個。φ10は歯車2枚のボア、φ10.2はベースプレートの軸穴で、歯車とプレートは別部品です。部品ごとの寸法が一つの表に集まっています。

減速ギアユニットの穴テーブル(厳密解析)でザグリ穴の行を選択し、ベースプレート四隅の取付穴4箇所がハイライトされている
減速ギアユニット。ザグリ穴の行をクリックすると、ベースプレート四隅の取付穴4箇所が光ります

こちらも実物を埋め込んでおきます。「ザグリ穴」の行をクリックしてみてください。ベースプレート四隅の4箇所が光ります。

アセンブリのSTEPでは、各部品は自分のローカル座標で定義され、配置関係と座標変換が別のエンティティ群で表現されています。厳密解析ではこの変換を親から順に再帰的に合成して、穴の位置をワールド座標に直しています。四隅のザグリが (±45, ±22) の位置に出ることを回帰テストで固定してあり、部品を動かしてもハイライトがずれません。

数えた先で、表をどう使うか

穴テーブルは「CSVに書き出し」でそのまま落とせます。穴種プレートの実物はこうです。

"種別","φ (mm)","深さ (mm)","個数","詳細","部品"
"通し穴","6","12","4","貫通","hole-plate"
"止まり穴","8","6","3","止まり","hole-plate"
"皿ザグリ穴","5.5","12","2","皿 φ10.4・90°","hole-plate"
"ザグリ穴","6.6","12","2","ザグリ φ11 × 深さ 4","hole-plate"
"止まり穴","5","10","1","止まり","hole-plate"

見積もりの拾い出しなら、この5行を単価表と突き合わせるだけです。

転記も、数え直しもありません。

もう一つ、行の右端にある「タグ」ボタンを押すと、その種別の穴の面がまとめて面マーキングに登録されます。減速ギアユニットでザグリ穴の行をタグ付けすると、4箇所×2面の8面、合計6.83cm²が「要確認」タグに入りました。

穴テーブルのタグボタンでザグリ穴の面8面を要確認タグに一括登録し、3D表示で取付穴が赤く塗られ、面マーキングウィンドウに面数8・面積6.83cm²と集計されている
穴テーブルの「タグ」から一括登録。8面・6.83cm² が「要確認」として3Dに塗られ、集計にも載ります

この状態を第1回で紹介した共有パッケージ(.cadas)にして渡せば、受け取った側は穴テーブルとマーキングが入った状態でモデルを開けます。「このザグリ、全部同じ深さでいいですか」を、穴に色が付いた3Dを見ながら聞けるわけです。

ファイルを渡す代わりに、この分析済みの状態をそのままWebページに埋め込む手もあります。この記事の冒頭と、減速ギアユニットの節に貼ってあるのがその実物で、「ファイル > 埋め込み・共有リンクを発行」から発行したiframeタグを貼っただけです。社内ポータルに貼れば、CADを持たない部門が穴テーブルを見ながら3Dを回せます。閲覧者を限定したいときは、発行時にユーザー名とパスワードを付けられます。

正解の分かるモデルで検証している

フィーチャ認識は、それらしい表が出るだけでは信用できません。

私たちは次の形で検証しています。

題材は自前生成のモデルだけにしました。

穴種プレートも減速ギアユニットもcadqueryのスクリプトから作っていて、φ6.6のザグリが (−20, 22) と (10, 22) にある、といった設計値がスクリプトに書いてあります。回帰テストはこの設計値と突き合わせ、メッシュ推定は近似許容、厳密解析は0.001mm以内の一致を要求します。

そのうえで、テストが本当に欠陥を捕まえるかも確かめました。貫通判定のキャップ検査を無効にする、円錐の端半径の入れ替えを外す、アセンブリの変換合成を止める、という3種類の欠陥をわざと注入し、それぞれでテストが落ちることを確認してから採用しています。

通るテストより、落ちるべきときに落ちるテストのほうが大事ですね。

まとめ

解析曲面として出力されたSTEPでは、穴・ザグリ・皿ザグリ・フィレットを構成する曲面の寸法が数値として記録されています。CADASはそれをブラウザ内のメッシュ推定で数え、必要なときだけサーバーの厳密解析で、STEPの解析曲面に記録された正確な幾何値に置き換えます。

今回の自前サンプルでは、その値が設計値と小数第3位まで一致しました。穴種プレートの12個の穴は5行の表になり、CSVに落ち、面に色が付き、共有パッケージで渡せます。

目視で数えていた拾い出しが、読み込んで一回クリックする作業になります。

次回の第3回は、金型の話です。

「この形、抜けません」

を設計中に知るための、抜き勾配・アンダーカット・肉厚の自動チェックを、正解の分かる樹脂ケースで実走します。

まずは穴種プレートを開いてみてください

CADASは無料・登録不要です。「ファイル > サンプルギャラリー」から穴種プレートを選び、右ペインの「穴テーブル」タブを開いてください。手元のSTEPを読ませる場合は、そのままブラウザ内の推定で数えられます。

CADAS(無料・登録不要)をブラウザで開く

当社コンサル部門では、ソースコードから3D CADデータまで、AI/ITを活用した設計現場のイノベーションを課題調査からソリューション導入まで一気通貫のご支援を提供しています。もしご興味あれば、 AI × CAD・設計情報コンサルティング(無料相談) まで、お気軽にご相談くださいませ。

それでは、また次回、お会いしましょう!

関連リンク

【AI×CAD 第1回】設計の3Dデータ、設計部門の外で誰も見られない問題を無料+ブラウザだけで解決する(当ブログ)

CADAS - 3D CADビューワー兼AI解析ツール(無料・当社開発)

AI × CAD・設計情報コンサルティング | Qualiteg(コンサルティングのご案内)

Read more

【AI×CAD 第1回】設計の3Dデータ、設計部門の外で誰も見られない問題を無料+ブラウザだけで解決する

【AI×CAD 第1回】設計の3Dデータ、設計部門の外で誰も見られない問題を無料+ブラウザだけで解決する

STEPファイルをブラウザで開ける無料の3Dビューワー「CADAS」を公開しました。インストール・登録不要。表示・計測・断面はブラウザ内で処理され、ファイルは外部へ送信されません。CADライセンスのない部門と3Dデータを共有する方法を、実際の画面と実測値で紹介します。

By Qualiteg コンサルティング
TensorRT 10 × Blackwell 移行ガイド【後編】5D grid_sample をカスタムプラグインで通す

TensorRT 10 × Blackwell 移行ガイド【後編】5D grid_sample をカスタムプラグインで通す

こんにちは! 「TensorRT 10 × Blackwell 移行ガイド」シリーズもいよいよ最終回です。前編では TensorRT 化の基本と「5D(volumetric)の grid_sample はビルドが拒否される」という壁を、中編では「ビルドが通っても正しいとは限らない」沈黙劣化の数々を扱いました。 回テーマ 前編(Part 1)RTX 50 で推論資産が動かない — 基本と最初の壁 中編(Part 2)ビルドが通っても正しいとは限らない — 沈黙劣化 5 連発 後編(Part 3)5D grid_sample をカスタムプラグインで通す(本記事) 後編は、前編で保留にした最大の宿題に挑みます。TensorRT がネイティブに対応していない 5D grid_sample を、

By Qualiteg プロダクト開発部
Luckfox Pico Mを外出先から使う。3,750円・64MBのLinuxボードにWireCanalで公開URLをつけるまで

Luckfox Pico Mを外出先から使う。3,750円・64MBのLinuxボードにWireCanalで公開URLをつけるまで

秋葉原で買った3,750円のLinuxボード Luckfox Pico M(RV1103・64MB・USB-Cのみ)を、Web公開用の受信ポートを追加せずにインターネット側から使えるようにするまで。SDカード書き込み、RNDIS経由のネットワーク、WireCanal無料プランでの公開、busybox initでの常駐とブラウザからのLED操作、再起動復帰(33秒)まで実測手順で解説します。

By Qualiteg プロダクト開発部