前回の空想話で、重曹を使った駆動装置を考えていたのですが、コストが抜けていたので、少し調べてみました。
自走キックボードの駆動装置を考える
毎日駅まで片道20分の道のり。その道のりを楽にしようと、電車の中に持ち運べる大人向け折りたたみキックボードを作ろうと空想しておりまして。
近頃、都内でキックボードで颯爽と移動しているスーツ姿の人を見かけることが増えました。見かけるのは外人ばかりだったのが、この前、日本人のおじさん(スーツを着たサラリーマン)が乗っているのを見かけて、おっ!と思いました。
この手の話を日本ですると、「法律で認められていない乗り物を使うなど、社会人として言語道断。そんな常識すら通用しない人は信用できん」なんてマインドが正論としてまかり通る社会。柔軟性の低い日本でも、浸透の兆しが見えてきたように思います。
キックボードとは言っても、満員電車で気軽に持ち込めるほどではないので、折りたたみにするべく、形状とか材質を色々空想しているのですが、今回は動力の話。
連番画像を動画に変換するソフト追加
最近、解析系で連番画像を動画にする機会が多くなりました。いつもはちょっとした動画作成なら自前のソフト(っといっても動画変換はフリーのライブラリ)で作っていたのですが、処理が遅いので、最近ではffmpegを使っていました。コマンド理解が必要だけども、早いし、コーデックかけれるのでそのままアップできるし、もはや、自前ソフトでやる意味なんて感じない^^;
ふと、自作ソフト公開サイトのアクセスログを見てみると、なぜかこのめちゃめちゃ処理の遅いこのソフトが一番人気。自分で言うのもなんだけど、ffmpegの方が便利だよ。ってことで、前のソフトのインターフェイスをそのままにffmepgを操作するフロントエンドソフトを作りました。
連番画像から動画生成ソフト-ffmpeg版-
http://software.tiblab.net/pc/img2avi_ffmpeg/
ただまぁ、自分が使う分に困らないくらいの作りこみしかしておらず、入力画像はPNGしか扱えないし、色々なエラーチェックを省略しているけども。人気があれば、改良を考えようっと。
DEMの勉強9
前回は下記の論文に参考に転がり抵抗を導入してみました。今回は、要素を土にするためにもう一つ必要な、粒子間の吸着力(土の世界でいう粘着力)を考慮したモールクーロンの破壊基準の適用にチャレンジします。
本来は、転がり抵抗モデルが意図した通りに組めているかの検証をしなくてはいけないところですが、やりたい・やれそうなことは、順序は関係なくやっていくスタンスです^^
地盤材料の破壊基準を表現するためのシンプルな個別要素モデル
何をするかと言うと、せん断に対する抵抗力を一定値ではなく、拘束力(直方向の力)に係数を掛けた値を上限とするモールクーロンの破壊基準を組み込みます。加えて、通常のDEMでは扱わない引張抵抗力(粘着力)を考慮するようなモデルにします。この引張力が転がり抵抗にも関与するので、それに応じて、転がり抵抗部分も変更します。
とにかくやってみよー。
ボンドモデル部分ソース(全ソースは最後に)
# 粒子間ボンドモデル
cdef double bs,tu=0
if i < peCount and j < peCount: #粒子同士
tu = pe[i].et[j]
if hn < -tu and tu > 0: #ボンド破壊条件
pe[i].et[j] = 0
tu = 0
print('bond break',i,j,hn,tu)
#モールクーロン破壊基準の適用
bs = (hn + tu) * tan(pe[i].ph)
if hn <= -tu:
hs = 0.0
elif fabs(hs) > fabs(bs):
hs = bs * hs/fabs(hs)
#hn = hn - tu
else: #粒子同士以外
if hn <= 0.0:
#法線力がなければ、せん断力は0
hs = 0.0
elif fabs(hs) >= inf.frc*hn:
#摩擦力以上のせん断力は働かない
hs = inf.frc*fabs(hn) *hs/fabs(hs)
上記論文ではDF条件と称して、接触状態にある粒子間では粘着力が発揮されていて、一定の引張力が加わったときに粘着がなくなり(ボンドが破壊)、その後の接触は通常の摩擦として扱うモデルになっています。
普通は離れている要素の粘着力は既にボンド破壊状態であり、粘着力は働かない(通常の摩擦であらわす)のですが、確かめるための便宜上、初期値では粘着力を有効にしておいて、破壊されるまでの間は、接触する要素間に粘着力が働くようにしておきます。
さて、どうなるか?
(左:粘着なし 右:粘着有り)
お、粘着力は働いてるっぽい。しかし、2つ問題が発生。動きが止まってきたあたりにバネのようにスライドする謎の動きと、後半、なぜか要素が離れていく・・・。
前者は、今回のボンドモデルに関係なく、線と円要素の接触処理によるところの部分の不具合ですかね。そういえば、前の転がり抵抗のときもそうでした。摩擦の上限を超えることなく、せん断バネでスライドしているせいかな?検証が必要ですなー。パラメータが非適正な値になっているだけだといいんだけど。
後者について、実はイメージで言うと、今回の動きは、僕の想像と違って、もっと粒子同士が重なって、重なった状態で安定するイメージでした。上のソースだと、粒子が反発して離れる過程で、引張力(粘着力)が働くけども、発揮される直方向の力自体の値には影響を与えません。収束状態は力の釣り合ったところなので、ボンドが破壊するまで反発が働き続けると、結果、離れてしまうのかなと。
ともすれば、最終的な力は、弾性力(反発力)に引張力を差し引いた値にするのでは?と思い、上のソースの最後に
hn = hn - tu
を加えてみました。すると、
イメージ通り、粒子同士は結着したものの、転がり抵抗力に余計な影響を与えるらしく、結着したまま回り続ける謎の動きにorz
転がり抵抗をOFFってみると、こんな感じ。
ありゃー、結着しながら転がっていくー。
転がり抵抗のモーメント算定式を修正するのと他に、粒子同士が結着した接触点が固定されるように回転を考慮しなくはいけないことが判明。
上記論文、モデルについて丁寧に書かれてくれている部類の論文だと思いますが、いざコード化すると、色々と不明な点が出てきます。さて、どうしようかな・・・。
DEMの勉強8
いよいよモデルいじり。粒子を土のモデルにしていきます。
モデルは色々あれど、一番最初に検索したら出てきたこの論文を参考にすることにします。
地盤材料の破壊基準を表現するためのシンプルな個別要素モデル
ポイントは2つ。モールクーロンの破壊基準を適用することと、転がり抵抗を導入すること。この内、転がり抵抗を導入してみました。
転がり抵抗は、実際の粒子は角ばっていて、コロコロ転がる事はないのですが、円形要素では、コロコロ転がっていってしまうので、それを防ぐために導入します。要は、円形要素で角ばった砂の粒子を模擬するためのものです。
さて、ちゃんと組めているか?
(左:転がり抵抗無し 右:転がり抵抗有り)
一瞬、戻っているような・・・気がするけど、コードがおかしいのか、せん断バネの反発で変に見えるだけか。とりあえず、抵抗力は発揮されているみたい。
さあ、沢山粒子のあるパターンで、安息角に違いが出るか確かめたい。
逆に、流れ出す粒子の数が増えてしまったなり。はて。イメージと違う。
ちなみに完全に回転を止めてみると・・・、
いくつも角が生えて、非現実的な面白い感じになります。
さて、どうやってちゃんとできているか確かめよう・・。
