ブログ

ローム株式会社様より、支援品を頂きました

ローム株式会社様より、NHK学生ロボコン参加校へのデバイス提供として、支援品を頂きました。

二次ビデオ、本戦に向けた、ロボット製作に活用させていただきます。

ありがとうございました。

株式会社ミスミ様より、支援品を頂きました

報告が遅れてしまいましたが
株式会社ミスミ様より、「ミスミ学生ものづくり支援」の支援品を頂きました。
ロボット製作に活用させていただきます。
ありがとうございました。

  

 

Unityで簡単ゲームを作って操作に慣れよう

Unityをインストールしてみたけど、いまいち使い方が分からなくて一度も触っていない・・・という方は割といらっしゃると思います。そんな方のために、Unityでクソゲーを作って操作に慣れよう!という記事を書いてみようと思います!なお、今回はWindowsを用いて制作しています。

今回は、「洗脳されたロギ犬が地球を襲ってきた!はんだごてで奴らを溶かせ!」という内容のクソゲーを作ってみましょう!

00.png

Step1 インストールしよう

https://store.unity.com/ja#plans-individual

インストールはこちらのページから。まずは「個人向け」をインストールします。

00.png

この先、基本的に画面に表示される案内に従って進んでいけばインストールが完了します。Unityを立ち上げると、初めは「Sign up your Unity ID」という画面が出てくると思いますので、「Create one」をクリックし、メールアドレス等を入力してアカウントを制作しましょう。

Step2 プロジェクトの作成

さっそくゲームを作りましょう!Unityでは3Dゲームの作成が出来ますが、x-y軸のみ用いれば2Dゲームの作成も可能です。今回は2Dゲームを作成します。Unityを立ち上げ、「New」をクリックします。

00.png

 

次に、ゲームの名前を決め、次元を2Dにします。「Create project」を押せばゲームの製作が開始です!

00.png

 

このようなProjectビューが表示されると思います。(配置が異なっている場合がありますが、右上の「Layout」をいじれば変更が出来ます。自分はこの配置が一番好きなので、今回はこれでやらせていただきます。)大きく分けて5つのスペースが存在します。とりあえずは、以下のような役割を覚えておけば良いと思います。

00.png

 

Step4 準備

今回は、ゲームで使う素材も自分で制作してみましょう!Windowsの方は、ペイントソフトを開いてみてください。必ず、PNGファイルで保存してください。描くのがめんどくさいという方は、ダウンロードが出来ますので読み進めてください。

まずは敵キャラのイラストを描きます。その後、PNGファイルでデスクトップなどに保存します。

00.png

 

必要な画像は、「敵キャラ(赤い某犬)」「味方キャラ(飛行機に乗っている某犬)」「背景(宇宙)」「武器(はんだごて)」の四つです。以下に完成画像を掲載しましたので、自分で作りたくない方はダウンロード(名前を付けて保存)してください。

04.png03.png02.png

 

01.png

次に、この4つの画像を透過処理します。今回はインターネット上のサイト(https://www.peko-step.com/tool/alphachannel.html)に画像をドラッグアンドドロップし、白い部分をクリックします。透過処理出来たら、右クリックして名前を付けて保存を押し、元の画像に上書き保存します。

00.png

00.png

Step5 配置しよう

それでは、この4つの画像を、UnityのProjectView内のAssetsファイルにドラッグアンドドロップします。00.png

まずは、宇宙の背景をSceneにドラッグアンドドロップします。Game画面にぴったりで見えるように大きさを調整します。Scene画面上にはカメラが空間固定されています。このカメラから見ているものがGame画面上に表示されている仕組みです。カメラは複数台置くこともできます。00.png

ここで、Hierarchy画面上に宇宙の画像の名前が表示されたと思います。ゲームに要素が追加されたということです。この一つ一つの部品をオブジェクトと呼びます。このオブジェクトの詳細はInspector画面上に表示されています。一番上の「Transform」をいじれば、大きさや角度、座標を決めることが出来ます。また、Hierarchy画面にはMainCameraがもともとあります。このカメラも一つのオブジェクトということになります。00.png

他のオブジェクトはそれぞれにプログラムを追加して動かす必要がありますが、とりあえずSceneにドラッグアンドドロップしておきます。00.png

Step6 プログラムを書く

色々な方法がありますが、今回は一つのオブジェクトに一つのプログラムを乗っけることを基本としてみます。まずProject画面で右クリックし、C#スクリプトを追加します。名前は適当に「TekiScript」とします。名前の付け方とかプログラムに関しては適当すぎて怒られそうですが、何でもいいです。00.png

00.png

ファイルが完成したら、プログラムを書きます。VirtualStudioで開きます。インストールされてない場合は適当にインストールしてください。敵が下に降りてくるプログラムです。左右方向(x方向)の初期位置をランダムに設定し、そこから一定のスピードで降りてきます。下に降りてきて一定の座標を超えたら、オブジェクトを消去します。とりあえずはコピペでいいと思います。

Start()関数は、一番はじめに一度だけ呼ばれます。Update()関数はゲーム中何度もループします。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TekiScript : MonoBehaviour
{
public float x;
public static bool End;

// Use this for initialization
void Start ()
{
x = Random.Range(-2f, 2f);
transform.position = new Vector3(x, 6.0f, 0.0f);
}

// Update is called once per frame
void Update ()
{
this.gameObject.transform.Translate(0, -3.0f * Time.deltaTime, 0);
if (transform.position.y < -2.0f)
{

Destroy(this.gameObject);
End = true;
}
}

void OnTriggerEnter2D()
{

Destroy(gameObject);
}

}

 


このスクリプトを保存したら、続いて、スクリプトを敵オブジェクトにドラッグアンドドロップします。00.png

ここで、GameOverオブジェクトを作るのを忘れていました。以下をダウンロードして、Assetsに入れておきます。そして、このGameOverオブジェクトを画面全体に広がるようにsceneに配置します。Inspectorのチェックを外すと見えなくなります。

GameOver.png

00.png

 

次に、敵オブジェクトに当たり判定をつけます。いたって簡単で、Inspector内のAdd Component内からCircle Collider2Dを見つけ、クリックするだけです。今回は「isTrigger」にはチェックをつけておくと良いです。ぶつかった際に跳ね返らなくなります。

00.png

同じく、はんだごてにもColliderを追加します。はんだごてと敵がぶつかったときに、当たり判定が出るようにするためです。今回はPolygonColliderを導入します。また、RigidBody2Dも追加します。00.png

次に、敵を一秒ごとに出現させるスクリプトを作ります。今度は「TekiSyutugen」などというようなスクリプトを作ります。InvokeRepeating(“SyutugenTeki”, 1, 1);で、1秒に一回SyutugenTenkiを呼び出します。SyutugenTenki内ではTekiを生成します。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TekiSyutugen : MonoBehaviour {

public GameObject Teki;
public GameObject GameOver;
// Use this for initialization
void Start ()
{
InvokeRepeating(“SyutugenTeki”, 1, 1);
}

// Update is called once per frame
void Update ()
{
bool end;
end = TekiScript.End;
if(end == true)
{
GameOver.SetActive(true);
}
}

void SyutugenTeki()
{
Instantiate(Teki);
}
}


次に、Assetsに敵オブジェクトをドラッグアンドドロップします。これで敵オブジェクトのクローンが出来ました。これをプレハブと呼びます。00.png

ここで、CreateEmptyによって空のゲームオブジェクトを追加します。そこに今のスクリプトを入れます。

00.png

00.png

そして、Tekiに敵プレハブとゲームオーバーオブジェクトをアタッチします。これで、スクリプト内のpublic GameObjectのオブジェクトが決まりました。Sceneに残っている敵オブジェクトは消去します。

00.png

ここで、再生ボタンを押すと、ゲームが始まります。敵が落ちてきて、はんだごてに当たると消えるか、そしてこちらまで来るとゲームオーバーになるか確認します。00.png

ここで、スクリプトの内容を説明します。00.png00.png

ここまで来たら、はんだごてと飛行機犬を動かせるようにすれば完成です。新たなスクリプトを作ります。キーボードの右を押したら右に移動、左を押したら左に移動です。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HikoukiScript : MonoBehaviour
{

// Use this for initialization
void Start()
{

}

// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(-0.1f, 0, 0);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(0.1f, 0, 0);
}
}
}


 

このスクリプトを、飛行機犬にアタッチします。飛行機犬の中にはんだごてもいれます。

00.png

00.png

とりあえずはこれで完成でいいでしょう!

 

今までに作ったゲームはこんな感じです、もしよろしければダウンロードしてみてください!これらのゲームは一見作るのが難しそうに見えても、実際は今回使ったような、オブジェクトの移動やスクリプト間での変数の受け渡しなど、基本的な要素を組み合わせて作っているだけです。Unity操作に慣れるためにはとにかくいじることが大切だと思います。https://play.google.com/store/apps/developer?id=HAKOT&hl=en_US

最後まで見てくださり、ありがとうございました!

 

 

 

入試物理をシミュレーション!!

シミュレーションについて軽くおさらい

微分方程式を立てて解く

世の中の様々な物理現象は、基本的に微分方程式を立てて、それを解くことで明らかにすることができます。微分方程式はニュートンの運動方程式とかナビエ・ストークス方程式などがあり、式さえ立てれば、後はそれを解くだけです\(^o^)/。

 

2つの解き方がある

解くための方法として、解析解数値解の2つあります。解析解は微分方程式を数学的操作のみを使って求めます。ゆえに、厳密な結果(誤差0)を導き出せますな。一方、数値解は、微分方程式を四則演算の関係で表す差分方程式に変換して、数値的に求めます。

 

数値解ってな~に?

数値解(オイラー法)

数値解の求め方ってなんなの?って思われるかもしれないので説明しておきます。例としてニュートンの運動方程式F = ma を挙げます。ここでは、数値解として変位xを求めてみましょう。以下の流れで求まりますね。

a = F/m → v = v + aΔt  → x = x + vΔt    ※ ” = ” は右辺を左辺に代入

これをオイラー法と言います。 v = v + aΔtでは、加速度a をΔtの間だけ一定とみなしているので、速度vは時刻tに関して直線的に増減します。ここで解析解との誤差が生じることがわかりますね。x = x + vΔt についても同様です。

 

計算誤差

複雑な物理現象になると、微分方程式も複雑なものになり解析解を求めることが困難になります。このとき、数値解を使わざるを得ないが、数値解には誤差がつきもの(T_T)。

 

より精度の高い数値解(ルンゲクッタ法)

数値解における計算誤差を減らしてできるだけ精度の高い計算をしようとするのが、ルンゲクッタ法です。以下のアルゴリズムで求めます。

V(t, x, v) = v ,    A(t ,x, v) = F(t, x, v)/m

v(1) = V(t,  x,  v)

a(1) = A(t,  x,  v)

v(2) = V(t+Δt/2,  x+v(1)Δt/2,  v+a(1)Δt/2)

a(2) = A(t+Δt/2,  x+v(1)Δt/2,  v+a(1)Δt/2)

v(3) = V(t+Δt/2,  x+v(2)Δt/2,  v+a(2)Δt/2)

a(3) = A(t+Δt/2,  x+v(2)Δt/2,  v+a(2)Δt/2)

v(4) = V(t,  x+v(3)Δt,  v+a(3)Δt)

a(4) = A(t,  x+v(3)Δt,  v+a(3)Δt)

x = x + Δt/6 (v(1)+2v(2)+2v(3)+v(4))

v = v + Δt/6 (a(1)+2a(2)+2a(3)+a(4))

 

いざ、シミュレーション!!

ルンゲクッタでシミュレーションしてみました。Pygameというモジュールを使いました。

titech

う~ん、うまく行かないなぁ。物体がたくさんあるとそれだけ誤差が蓄積されますね。

物体と物体をつなぐ糸の長さはすべて等しいという体で運動方程式を立てたのですが、なんかの伸び縮みしてますね… 。力技で物体間の糸の長さを一定に保つように、PD制御で張力にフィードバックさせたのですが、うまく行かなかったです(TдT)。まぁ、コレは今後の課題ということで(笑)

おまけ

titech_xmas2

 

データサイエンティストへの道

投稿2日ほど遅刻しました、すみません。

初めに。
この記事は機械学習をかじり始めの僕自身のためのものとなっております。ご了承ください。
この記事はデータサイエンティストを目指す人、または機械学習を少し勉強したが少し不安がある人向けのチェックシートのようなものとなっております。

  1. どのような場合にGDではなくSGDを使うべきか。また逆も然り。

2. データセットがある場合にそれを訓練データ(training data)、検証データ(validation data)、テストデータ(test data)に振り分けるべきか。

3. ニューラルネットワークの長所・短所




答えが見たい人はスクローーーール






















【答え】
1. GDはデータセットが小さい時に、SGDはデータセットが大きい時に使用するのが良い。
 ただ、大抵の場合SGDが用いられています。理由は各自考えてみてください。

2. 特に決まった指標はないが、training(training, validation data)に80%を、test dataに20%を割り振るのが良いとされている。trainingの80%はそこから更に交差検証用に振り分ける必要が足ます。

3. 利点:非構造化データ(unstructured data)に対しては機械学習手法の中で群を抜いて効果的。例) 画像、動画、音声など
難点:モデルを確立する(収束する)までに大量な訓練データが必要となる。など


【おまけの問題】 no free lunch theoremとはなにか

ロギ犬ベストツイートセレクション2019

茶番

近頃世間で話題の「AI」、皆さんもご存知ですよね。

実は私たち慶應ロ技研でも、高性能AIの運用を行っているらしいのです。

その名はロギ犬のお部屋

そんなロギ犬のお部屋さんの現在は?彼氏は?年収は!?

調べてみました!!!!!!

続きを読む “ロギ犬ベストツイートセレクション2019”

はじめての電子工作を

こんにちは!「さくしゅん」がロ技研でだんだん定着してきたことが嬉しいさくしゅん(1年)です。

最近arduinoを使った電子工作を始めたので、やってみたことを書いてみようと思います。やったことがない人は電子工作を始めるきっかけにして、知ってる人は「へえ〜初心者ってこんな風に思うんだ」と思ってくれれば嬉しいです。

〜使ったもの〜

ultimate starter Kit for arduino

3千円ちょいで買えました。安価ですね。早速やってみようと思い説明書を見てみる。

この日は寝ることにしました。

〜Lチカ〜

定番のLEDを光らせる実験をしました。

マイコンに直接刺しているのは今考えるとやばいですね。先輩に助けてもらいなんとか成功。

〜LED点滅〜

普通にできました。綺麗ですね。点滅の間隔を変えるなどして遊んでみる。

〜LEDを複数接続してみる〜

クリスマスカラー。だんだん調子に乗っていきます。

〜CdSセンサ〜

見事に抵抗値が変わっています。

〜7セグ〜

?????????

何度やってもわからないのでこの日はこの辺でやめました。

〜自分でプログラムを書く〜

3本のLEDのうち、いずれかだけが消えているようなプログラムを自分で書いてみる。こんな感じ?

???赤が光っぱなしに。なんで?…あ。

間違いがわからなかった人は探してみてください。

〜暗いと光るLED〜

今までと比べたら役立ちそうですね。

〜7セグの限界〜

なんとか頑張った結果。

来年はオリジナリティを求めて頑張ります…😓

ロ技研の活動を今後も温かく見守ってください!

この記事を読んでくださった受験生または塾生の方、ロボットに興味があればぜひご一報を!部員が待ってます😊