気の向くままに

たぶん、技術ネタブログになると思う。

【球状歯車に挑戦⑥】鞍状歯車の作り方

 実際に、球状歯車と鞍状歯車のうち、鞍状歯車を作っていきます。

基本の作り方の整理

 まず、下の動画の1:00~1:10ほどを見てください。
www.youtube.com
鞍状歯車を球状歯車の周りを回転させて歯形をトレースしていっています。鞍状歯車が16歯、球状歯車が32歯なのが読み取れます。ギア比が1:2ですね。

 この処理をまじめにやると
①球状歯車と鞍状歯車をモジュール*(32+16)の距離に配置
②それぞれその場で球状歯車をθ回転、鞍状歯車を-2θ回転
③結合にて鞍状歯車の方から、球状歯車分を切り取り
④②と③の処理を鞍状歯車一周分繰り返す
になります。ここで大事なのが、③の処理が高負荷であることと、結合面に差異が少ないとFusion360自体が内部エラーをおこします。あと、鞍状歯車のサイズを小さくしすぎていると、切れ端が多数でて、これが邪魔してまたエラーで止まりやすくなります(体感ですが)。

処理が楽な作り方

 では、エラーが起こり辛く処理が楽な作り方はあるのでしょうか。あります。
f:id:gear2nd_droid:20210711085455p:plain
図のように2つの円を歯車に見立ててに考えます。いわゆるサイクロイド曲線を考えるときの考え方と同じになります。小さい円の周りを大きい円が小さい円に接触しながら、自転することによって回転します。大きい円は小さい円の2倍の直径(歯数が2倍)です。そのため、大きい円は小さい円の周りを一周する間に、半周自転します。
大きい円の位置が小さい円に対して角度θ回転していたときの、大きい円自体の自転した角度φは、

\displaystyle{
φ=\frac{θ}2
}

 では、大きい円の自転する角度は、φでいいのでしょうか?実は駄目です。φにすると、こうなります(実はこの絵は歯形が違いますが、同じ症状は起きています)。(f:id:gear2nd_droid:20210711084931p:plain
歯形が残るようになっていないとおかしいです。では、どうしたらいいのでしょうか?わかりやすく歯車想定で正しい自転をしたものをのせます。f:id:gear2nd_droid:20210711085205p:plain
このように歯形がちゃんと見えます。この時の自転角度は、上の2つの円のにおいて、点Aを点Bまで回転させる処理をします。そのため、必要な回転角度φ’は次になります。

\displaystyle{
φ'=\frac{3θ}2+\pi
}

 この必要な回転角度φ'で最低半周だけ、球状歯車を鞍状歯車の元になる円柱の周りに自転させながら回転させたものを多数コピーします。それらを結合し、円柱から切り取り処理での結合(ブール演算)をすると鞍状歯車ができます。凄い力業な作り方になります。

 最後にできた球状歯車と鞍状歯車をのせておきます。
f:id:gear2nd_droid:20210708225154p:plain

【球状歯車に挑戦⑤】pythonでFusion360を動かす

 まずは球状歯車と鞍状歯車のうち、鞍状歯車を作るためにFusion360pythonガリガリ動かします。

ボディを選択してコピー

        #コピーのためのおまじない
        product = app.activeProduct
        design = adsk.fusion.Design.cast(product)
        rootComp = design.rootComponent
            
        #既存のBodyを読み込む
        orgBody, cpyBody = None, None
        for bufBody in rootComp.bRepBodies:
            if bufBody.name == "ball":
                orgBody = bufBody
        cpyBody = rootComp.features.copyPasteBodies.add(orgBody)
        cpyBody.name = "copy"   #これ実はBodyのnameと違うみたいです。下の操作履歴のところの名称みたいです。

 nameを参照して"ball"になっているBodyをコピーするという内容です。

コピーしたものを回転⇒移動させる

        #回転、移動のためのおまじない
        features = rootComp.features
        moveFeats = features.moveFeatures
        
        #targetのコレクションを作る
        target = adsk.core.ObjectCollection.create()
        #target.add(cpyBody)
        target.add(newBody)     #何故かこちらでないとコレクション等に入れられない

        #Y軸周りにangle角度回転
        #(1, 0, 0)ベクトルを(cos, o ,sin)ベクトルまで回転させる
        angle = 30
        if angle != 0:  #0°だと途中でエラーがでる
            fromVec = adsk.core.Vector3D.create(1,0,0)
            toVec = adsk.core.Vector3D.create(math.cos(math.radians(angle)), 0, math.sin(math.radians(angle)))
            axisVec = adsk.core.Vector3D.create(0,1,0)
            rotTrans = adsk.core.Matrix3D.create()
            rotTrans.setToRotateTo(fromVec, toVec, axisVec)
            rotFeatureInput = moveFeats.createInput(target, rotTrans)
            moveFeats.add(rotFeatureInput)

        #(px, py, pz)に移動
        px, py, pz = 10, 10, 0    #何故かcm単位系なのに注意
        if px**2 + py**2 + pz**2 != 0:  #移動距離が0だとエラーがでる
            moveTrans = adsk.core.Matrix3D.create()
            vector = adsk.core.Vector3D.create(px, py, pz)
            moveTrans.translation = vector
            moveFeatureInput = moveFeats.createInput(target, moveTrans)
            moveFeats.add(moveFeatureInput)

 必ず回転をする時はグローバル座標の原点中心で回転するつもりでしてください。回転の処理(moveFeats.add)をしてから、移動の処理をすることが大切です。変なところに吹っ飛んでいきます。

結合させる

        #結合をするおまじない
        combines = rootComp.features.combineFeatures
        
        #ツールで結合処理
        combineInput = combines.createInput(orgBody, targetCol)
        combineInput.operation = adsk.fusion.FeatureOperations.JoinFeatureOperation
        combineInput.isKeepToolBodies = False
        combineInput.isNewComponent = False
        retVal = combines.add(combineInput)

 isKeepToolBodies = Trueにすると、ツールのBodyが消えません。また後日説明しますが今回の用途だとツールが消える方が後の処理が楽です。
FeatureOperations.JoinFeatureOperationをFeatureOperations.CutFeatureOperationにすると切り取りになります。

 で、これらを色々組み合わせていくと鞍状歯車ができます。
参考までに上のでできるものはこんな感じです。回転してから移動した後、一つのBodyにまとまっています。
f:id:gear2nd_droid:20210709234555p:plain

【球状歯車に挑戦④】Fusion360で球状歯車を作る。

 それでは、まずは球状歯車と鞍状歯車のうち、球状歯車を作ります。

Fusion360を起動し、「ツール」>「アドイン」>「スクリプトとアドイン」
f:id:gear2nd_droid:20210709222737p:plain
②「ソリッド」>「スケッチ」を作成で、描画された歯車のXY平面状の平面を選択する。
f:id:gear2nd_droid:20210709223150p:plain
③スケッチでX軸上に歯車の全面より長い直線を引く。
④「ツール」>「回転」で、歯車の上面か下面どちらかを選択して、360°回転押出する。
f:id:gear2nd_droid:20210709223630p:plain
⑤描画できたので、余計な>>「SpurGear」を非表示にする。
⑥ついでに、できた球状歯車を「ball」とでも改名しておくと後が楽です。
f:id:gear2nd_droid:20210709224100p:plain

という書き方です。
(これに挑戦する人にここまで丁寧な解説いるか?って書きながら思ったりしてました。)

 今度こそ、次はFusion360スクリプト解説します。

【球状歯車に挑戦③】で、できた!!!

 本来、今回はFusion360の使い方を書こうと思っていたのですが、できたので我慢できなくなりました!とりあえず、報告と写真だけ。
f:id:gear2nd_droid:20210708225154p:plainf:id:gear2nd_droid:20210708225210p:plain

 できてから知ったんですが、球面歯車ではなくて球状歯車が正式名称だったみたいです。
(たまたま初めに見たツイートが球面歯車ってなってて勘違いしてました。)
それで、「球状歯車」で検索すると色んな人が成功してました。だいぶ遅いけど、何も見ずにやったんでいいことにしました。

【球状歯車に挑戦②】まずは現状の報告を

 現状、ここまでできています。
f:id:gear2nd_droid:20210708203927p:plain
これ何かというと、ボール状の歯車を削る対象の円柱の周りに一周させる間に、ボール状の歯車自体を半周自転させたものです。ボールが半分だったり、円柱を回すのも半周しかしてなかったりするのは、少しでも処理を軽くするためです。

 何故、こんなことをしたかというと、先の投稿のリンクの動画を見ると、ボール状の歯車は32歯で、X軸に対して回転押出したものを、自転させつつ、円柱に押し付けて加工していました。円柱側も逆回転で自転しています。これと実質的に同じ処理ができて、より負荷が軽いのがこの形だったからです。

 動画と同じやり方で回転させつつ、ブール演算で切り取る処理を繰り返してみましたが、ブール演算の過程で、破片がでると処理がクラッシュしたり、毎回処理すると、ブール演算で演算エラーを起こすということが分かったからです。あまりにも複雑な形状になっているんだと思います。Fusion360はソリッドCADだし、サーフェースやメッシュよりの処理をさせているから無理だったのでしょう。
(ちなみに、メッシュが得意だろうからBlenderも試しましたが、ブール演算するとメッシュがおかしくなってく不具合あって、置いています。上手いブール演算するプログラムわかったら別途まとめます。人力とか考えたくない処理だからスクリプト前提です。)

 それで、話を戻すと、回転させた歯が絶え間なく連続的につながっていき、歯面が残りませんでした。歯先が太いせいで削られすぎたのかと思い、限界まで転位させた歯車(転位係数+2.0!)で歯先がエッジがでる状態にしたもので、挑戦した結果ですが、これでも駄目でした。根本的にこの方針が悪いのかと思います。

 また、後日念のために動画と同じやり方で削ってみようとは思います。(ただ、すぐに演算エラーで止まるのでこの処理だと無理だと思っています。)とりあえず、次回以降はFusion360スクリプトのノウハウを公開します。

【球状歯車に挑戦①】球面歯車に挑戦!!!

 凄い久しぶりにブログ更新します。

 先日ネット上で山形大学の球面歯車が話題になっていました。
matomedane.jp

 歯車を360°押出回転させたものと、その回転させたもので円柱から3D形状の独特な形の歯車を削り出すというものです。なんと、2自由度で3軸の姿勢を作ることができるというものです。

https://shingi.jst.go.jp/var/rev0/0001/1317/2020_yamagata-u_3.pdf
このパワポが構造が分かりやすくまとまっていました。

 これを作るのに(無謀にも)挑戦したいと思います!!!
挑戦している人は他にもいました。

 まずはちょっと格闘した結果をまとめてみます。
試したツールは、次の3種類です。
・FreeCAD(完全無償のFreeSoftな3DCAD)
Fusion360(個人ユースでは無償の3DCAD)
Blender(完全無償のFreeSoftな3Dモデリングソフト)

 今のところ、Fusion360が一番まともに動いている気がします。ソフト複数試しているのは、なんやかんや上手くいかなくて、別のソフトに変えることになりました。正直に言ったら、現状、上手くいってません。360°回転押出する方はあっさり終わりましたが、もう一つの独特な形の歯車ができません。

地球儀カタン製作記③ MakerFaireTokyo2018に出展してきたよ!

ご無沙汰しております。gearです。
GW位から更新が止まっていました。すいません。だって進捗が・・・

タイトルのようにMakerFaireTokyo2018に出展してきました。ブースはこんな感じです。
Gear工房 | Maker Faire Tokyo 2018 | Make: Japan
f:id:gear2nd_droid:20180804143004j:plain

地球儀カタンの細かい仕様はまた別の時にブログを書きたいと思うけど、今回の展示では残念ながら、地球儀側の電子回路がお亡くなりになっていて、完全な展示はできませんでした。駄目だね、切削両面基板!

一日目、会場に着いてから設営完了する前にイベント始まっちゃいました。ちゃんと1.5時間位時間見てたのにorzその理由がこれです!
f:id:gear2nd_droid:20180804100754j:plain
地球儀の地軸のパイプが折れてました。衝撃的でした。なんとか持ってきていた瞬間接着剤で展示できる状態にできたから良かったものの、直んなかったらと思うと・・・ちゃんと補修用の工具類は持っていかないとね!

二日間展示していてびっくりしたのがカタンの認知度の高さです。予想していたよりも小さいお子さんから知られていて、小学校3・4年生くらいから遊んだことある子もいました。意外です。カタンを遊んだことある大人の方はだいたい何を展示しているか遠巻きに把握すると表情が変わるのが面白かったです。中に電子回路を色々詰めているのですが、なんでこんなことしているかを説明していたんですが、maker相手だとだいたい説明する前に確かにそうするわなーって、感じで会話無しで伝わっていたのが印象的でした。

色んなご意見を頂いたので、紳士に受け止め改良等々をしていきたいです。
今回、見学頂いた皆様、他の出展者の皆様、運営の皆様ありがとうございます。では、また来年のMakerFaireTokyoでお会いましょう。

PS:次の展示は多分、NicoTech加賀になるのかなー・・・あと地味に英語名の「The planet of Catan colonization project」ってのが好き。テラフォーミングしたカタン星に移住ですよ!