2019年10月28日月曜日
タイミングベルト2GT用のプーリーを3Dプリンタで
出力できるようになったが、
頂点多すぎる問題が気になって
他の作業が進まない。
仕方が無いので、
プーリー形状のベジェ曲線化に取り組むことにする。
点列をベジェ曲線に変換する方法を
ネットで検索するが、簡単には見つからない。
TensorFlowを使う方法や
最小二乗法を使う方法
(媒介変数tの値が解れば最小2乗法で解けるらしい)
などに翻弄されつつ、
stack overflow 経由で
1990年に出版された本
Graphic Gems のプログラム
FitCurves.c に辿り着く。
ソースも
github で公開されている。
コンパイルすると、ちゃんと動いた。
そのままでは使いづらいので、自分でpython化した。
できあがったのが
こちら。
numpyを使ったので、割とコンパクトになったのでは
なかろうか。
点列をベジェ曲線の制御点列に変換する。
なかなか便利な気がする。他の用途にも使えそうだ。
出来上がったプログラムは
githubに公開している。
今回のプログラムでは、
ベジェ曲線化するため、
なるべく単純な曲線を扱いたかったので、
プーリー形状が歯ごとにおなじ形の繰り返しであり、
その形も左右対称であるので、歯の半分の形状を生成、
それをベジェ曲線化、さらに倍にしたのち歯数分コピー
という手順で作成した。
このため曲線の数は歯数の2倍の数の倍数となる。
例えば20歯のプーリーの曲線数は40の倍数になる。
以下にベジェ曲線化した歯型と元の歯型を比較した図を示す。
ベジェ曲線化の程度は、許容誤差(-eオプションで指定)で変化する。
許容誤差を大きくしても曲線の数は40より小さくはならない。
見た感じでは、許容誤差0.05mm, 曲線数80ぐらいあれば充分のような
気がする。
今回のプログラムでは、処理が複雑になるので、オフセットの設定は
できなくなっている。
|
|
|
一番条件をゆるくした歯型
歯頭から歯底まで1本のベジェ曲線で描かれている。
これでも使えたりして... |
歯頭から歯底まで2本のベジェ曲線。
これで充分ではなかろうか。 |
歯頭から歯底まで3本のベジェ曲線。
これで充分。 |
|
歯頭から歯底まで15本のベジェ曲線。
意味ないよね。 |
生成したsvgファイルをfusion360に挿入すると、
以前のものより処理が軽い。ほとんど問題にならない感じである。
20歯、40歯、60歯のプーリーを試作し、タイミングベルトとの噛み合わせ
を確認したが、問題は無かった。
|
|
|
20歯、40歯、60歯のプーリー試作 |
噛み合わせ問題なし。
|
なんとなく作ったプーリーの使用例。
12歯を使用したが小さすぎた。
プーリーが小さいとベルトを曲げるのに
力が必要になる。 |
プログラムの残りの課題は、前述のオフセット処理と高速化である。
そのうち、気が向いたらやってみたい。