h_nari @ 熊本市のブログ。電子工作、プログラミング、ゲーム、TV、 政治、インターネットなどに日々の思い付きを、 うだうだ~と書いていきたい。
このブログにはコメント欄を設けておりません。 記事への御意見、ご質問はtwitter @h_nari宛に お願い致します。


アーカイブ

メタ情報
RSS
Login

2GTプーリー形状のベジェ曲線化

タイミングベルト2GT用のプーリーを3Dプリンタで 出力できるようになったが、 頂点多すぎる問題が気になって 他の作業が進まない。 仕方が無いので、 プーリー形状のベジェ曲線化に取り組むことにする。

点列をベジェ曲線に変換する方法を ネットで検索するが、簡単には見つからない。 TensorFlowを使う方法 最小二乗法を使う方法 (媒介変数tの値が解れば最小2乗法で解けるらしい) などに翻弄されつつ、 stack overflow 経由で 1990年に出版された本 Graphic Gems のプログラム FitCurves.c に辿り着く。 ソースも github で公開されている。 コンパイルすると、ちゃんと動いた。

そのままでは使いづらいので、自分でpython化した。 できあがったのが こちら。 numpyを使ったので、割とコンパクトになったのでは なかろうか。 点列をベジェ曲線の制御点列に変換する。 なかなか便利な気がする。他の用途にも使えそうだ。

出来上がったプログラムは githubに公開している。 今回のプログラムでは、 ベジェ曲線化するため、 なるべく単純な曲線を扱いたかったので、 プーリー形状が歯ごとにおなじ形の繰り返しであり、 その形も左右対称であるので、歯の半分の形状を生成、 それをベジェ曲線化、さらに倍にしたのち歯数分コピー という手順で作成した。 このため曲線の数は歯数の2倍の数の倍数となる。 例えば20歯のプーリーの曲線数は40の倍数になる。

以下にベジェ曲線化した歯型と元の歯型を比較した図を示す。 ベジェ曲線化の程度は、許容誤差(-eオプションで指定)で変化する。 許容誤差を大きくしても曲線の数は40より小さくはならない。 見た感じでは、許容誤差0.05mm, 曲線数80ぐらいあれば充分のような 気がする。 今回のプログラムでは、処理が複雑になるので、オフセットの設定は できなくなっている。

生成したsvgファイルをfusion360に挿入すると、 以前のものより処理が軽い。ほとんど問題にならない感じである。 20歯、40歯、60歯のプーリーを試作し、タイミングベルトとの噛み合わせ を確認したが、問題は無かった。

プログラムの残りの課題は、前述のオフセット処理と高速化である。 そのうち、気が向いたらやってみたい。