ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

鉄道車両のフランジをカプセルColliderで模擬してみる(手探り編)

フランジの実装方法は、少なくとも2種類ある。WheelColliderを使う方法と、CapsuleColliderを使う方法だ。今回は、ガイドローラー的なものをつくりたいので、まずはWheelColliderを使ってみた。

いきなり困ったのが、WheelColliderの向き。車輪なので当たり前かもしれないが、地面に垂直な向きしか設定できなくて困った。でもこれは、Rigidbodyを追加したらTransformの向きが反映されるようになって地面に水平な向きにもできるようになり、解決。

しかし。レールと当たり判定が生じない。なぜだ。

2時間ほどいじってみるも、解決しないのでCasuleColliderを使うことにした。今後ポイント(分岐器)とかも追加することを考慮し、カプセルの直径はフランジと同じにした。また、高さはフランジ高さよりすこし大きくし、段差等で車輪が跳ねても脱輪しないようにした。また、擦れたときに摩擦力で台車が暴れたので、CapsleColliderにPhisic Materialを追加し摩擦0とした。結果は下記動画の通り。

無事曲がれたよ!でも、まだぎごちないのでスプリング等を追加する予定。

鉄道車両の車輪をカプセルColliderで模擬してみる(これでいいや編)

カプセルColliderの設定、そういえば円筒の直径と実際の車輪直径が10mmしか違わないことを思い出した。ポイントまたぐ際にこの程度持ち上がるのは許容してしまおう。というわけで、踏面のシミュレーションはカプセルColliderで決定。次はフランジの実装だ。

鉄道車両の車輪をカプセルColliderで模擬してみる(スピードアップ編)

動力車で車輪を回すのに、Capsule ColliderとHinge Jointをつかっているんだけど、なぜかHinge JointのMotorに設定したTarget Velocityを大きくしても最大速度が上がらない。

f:id:donadonasan:20190810135826p:plain

車輪の設定

なんでかなーとあっちこっちの設定をみていたら、プロジェクトの設定に「デフォルト最大角速度」なんてのがあって、それが7に設定されていた。

f:id:donadonasan:20190810140017p:plain

プロジェクトの設定>物理シミュレーション

これを70にしたら、一気に速度UP!ただ、ここの数値はあまりいじりたくないなあ。「デフォルト」と言っているので、おそらく個別に設定できるのだろうけど。

・・・なんと。スクリプトからじゃないと個別設定できないのか。設定項目はRigidbody.maxAngularVelocityでした。ちょっと設定面倒だなあ。

鉄道車両の車輪をカプセルColliderで模擬してみる(手探り編)

踏面の形状をCapsuleCollidorで模擬したけど、これダメだ。間違いなく、ポイントで乗り上げる。

仕方ないので、CapsuleCollidorは使うけど円筒の側面だけ活用する方向で。レールの中心に沿う機能、どうしよう。フランジだけじゃあ無理だよなあ。

レールの曲率

ヤードにおけるレールの曲率情報がまったく見つからない。

仕方ないな、ポイントの曲率を使うか。

f:id:donadonasan:20190806230416p:plain

ポイントの曲率等(「鉄道線路の話」より)

突き放しの速度を考えると、曲率が一番小さくてすむ8番だろうか。じゃあ、この曲率でいってみよう。

新南陽ヤードの構造

L4カーが稼働していた新南陽ヤードの当時の構造はどうなっていたんだろう?国土地理院の航空写真を見てみたけど、撮影時期が1974~1978と幅があり、掲載されている写真が稼働を開始した1978年以後なのかがわからなかった。まあでも、こんなかんじらしい。

f:id:donadonasan:20190806210306p:plain

南陽ヤード(1974~1978のどこか)

当時の地図はないのかな。あれば線路が書かれていそうだけど。

鉄道車両の車輪をカプセルColliderで模擬してみる(準備編)

鉄道車両の車輪とレールとの当たり判定をCapsule Colliderで模擬することにしたわけだが、このためにはレールとColliderが接触する部分の傾きを本物とだいたい同じにする必要がある。本物の踏面は1:20の傾斜になっており、また車輪一対の中心から560mmの場所で測った車輪の直径が860mmとなっている。

f:id:donadonasan:20190804174906p:plain

国鉄の車輪寸法 (鉄道辞典 pp.1009より)

以上から、作るべきCapsule Colliderの半径rと、球と球の距離dが求まる。球と車輪の直径を量る場所とのなす角をθ°とすると、

tanθ = 1/20 より θ = 2.86°

r cosθ = 860/2 より r = 430.5

d = 560 - r sinθ より d = 538.5

なんか、ほとんど円筒だ。うまくいくのかなあ。