自由研究#3 ピッチングマシンの作成

こんにちは、開発担当の杉原です。

 

なんだか最近、急に過ごしやすくなった気がしますね。

少し前には、離れた北海道での話ではありますが、初雪を記録したとかも聞きました。

急に暑くなったように、秋を感じる間もなく寒い日になるような気もしますので、風邪をひかないようにしたいですね。

 

(8/24追記)

動画撮影作業だけ残して記事を未公開にしたまま手を付けられずにいたのですが、知らないうちに公開設定にされていました。

というわけで、動画部分を正しいものに差し替えて更新しました。

さて、自由研究ですが、もうエアホッケーはあきらめようかなと思います。

というわけで、新たにピッチングマシンを開発していきます。

先週作ったものがこれです。まずはここまでの作り方を紹介いたします。

 

この装置を構成する要素は以下のようになります。

・コンベア(SampleCatalog -> Roller Conveyor -> Roller 2000x607)

・センサー(SampleCatalog -> Sensors -> Pusher Sensor)

・プッシャー(SamleCatalog -> Transfers -> Pusher)

・円柱(右クリック -> New -> Basic -> Cylinder)

・ボール発生装置(QuickStart2017 -> Loads -> Demo3D Pallets for Roller)

・ボール(右クリック -> New -> Basic -> Sphere)

まずボールはBodyTypeプロパティをLoadに変更し、適当な大きさにしたら、なにかのカタログに登録しておきます。

これでLoadCreatorから生成できるようになるので、LoadCreatorではこのボールを生成するように設定を行います。

 

次にコンベア上にプッシャーを配置します。そのままではコンベアの端にしか置けないので、BladeOffsetプロパティを変更して中央あたりに配置できるようにした後、向きを90度変更します。

続いてセンサーを、生成されたボールが当たるような位置に配置して、Pusherプロパティに対して先ほど置いたプッシャーを参照させます。

最後に、このままではコンベアがコンベアとして動き出してしまうので(今回はセンサー等を置くためにコンベアを使っただけなので)、MotorプロパティのSpeedを0にして、モーターが動かないようにしておきます。

 

さて、円柱の存在は無視して、一度これで実行してみます。

無事ボールが打ち出されました。

が、すぐに落下して転がっていってしまいますね。

 

その理由は、普通に考えてわかるように、押し出す力が弱いためです。プッシャーの速度が遅いので、球速が全然出なくて落ちてしまうわけですね。

というわけで、プッシャーのVelocityプロパティで速度を上げてみようと思うのですが、例えばこれを1000m/s(=時速3600km)にしたところで全くスピードが出ません。

これは加速度の関係で、設定した速度に達する前にプッシャーのストローク最大位置まで達してしまうためです。

じゃあ加速度を設定しよう、そう思ったら加速度のプロパティが存在しません。その代わりに、Forceプロパティが存在します。

 

このForceプロパティは、単位N(ニュートン)で表される、力を示すプロパティです。1Nが1kgの物体に対して1メートル毎秒毎秒の加速度を与える力となります。

例えばプッシャーを秒速33m(≒時速120km)で、0.1秒かけて動かしたいとします。必要な加速度は330メートル毎秒毎秒でしょうか? そしてプッシャーの重さに関するプロパティが無いようなので1kgと仮定して、この加速度を得るには330N必要となるわけです。

というわけで早速、Velocityプロパティを33m/s、Forceプロパティを330Nに変更して動かしてみました。

なかなかいい感じではないでしょうか?

 

あとは円柱で作った筒を取り付けて、なんとなくそれっぽい見た目にしたいと思います。

(8/24追記:読み返して思ったのですが、ピッチングマシンってバレルつきましたっけ?)

ここで筒をそのまま取り付けてみると、ボールは筒をすり抜けて落下してしまいます。これは円柱には物理判定がないためです。

そこで筒のBodyTypeプロパティをDeflectorに変更してみるのですが、今度は筒の穴に見えない壁があるかのようにボールがせき止められてしまいました。

その原因は筒の物理範囲にあります。

Demo3DのリボンにあるVisualizationページの中にShowPhysicsというトグルボタン(下図の雑な赤丸内)が存在します。これを有効にすると物理の範囲が可視化できるのですが、なんと筒の物理範囲は四角柱状になっているではありませんか。

なぜかというと、CylinderにはColisionTypeプロパティが存在し、デフォルトではその値がBoxになっているためです。

この値を変えることで、下図のように物理衝突判定の範囲が変化していきます。

左から順に、Box、Cylinder、ConvexHull、ChordBox、VisualOnlyとなっています。

今回、筒状の判定としたいので、Cylinderを選択します。

これで無事ボールが筒の中を通過していくようになりました。


 

ということで次回、「自由研究#4 ランダム性を持たせる」をお送りする予定です。

更新は8/30(木)です。お楽しみに。