YKpages

ロボット分野で勉強したことのまとめ

Unity と GitHub プロジェクトの管理

はじめに

UnityのプロジェクトをGitHubで管理する方法を簡単にまとめます。

あと、GitHubに公開されているUnityプロジェクトをダウンロードして自分の環境で開く方法も書いておきます。

環境

  • Windows10 (Macはターミナルを利用)
  • Unityのバージョンは任意

前提条件

以下のことがすでに済んでいることを前提にしています。

  • Unityのインストール
  • GitHubアカウントの作成
  • Gitの基本的な操作の習得

GitHub Desktop をインストール

Windowsでは GitHub Desktop を利用すると簡単です

desktop.github.com

GitHub Desktop から push

GitHub Desktop の File > Add local Reposity から GitHub にあげたい Unity プロジェクトを選択

  • リポジトリの名前を入力
  • README作成にチェック
  • gitignore は 「Unity」を選択
  • Lisenceを選択

.gitignoreについて

以下を参照。ありがたい。

qiita.com

qiita.com

GitHubへpush

GitHub Desktop、またはコマンドを利用してcommit、GitHubへpushします。

以上までがとりあえずのGitHubでの管理方法です。

あとは、適宜pullしたり、branchを切り替えたりします。

GitHubからダウンロードしたUnityプロジェクト

GitHubからzipファイルでダウンロードしたり、 cloneしたりで手に入れたUnityプロジェクトを開きます。

Unityのメニュー画面で(プロジェクトを選択する画面)、 openボタンを押すと、ディレクトリを選択できます。

そこで開きたいUnityプロジェクトを選択します。

以上です。

シェルコマンドでファイルの文字数をカウント

はじめに

bashのコマンドでテキストファイルの文字数をカウント。

とりあえずできただけのものなので、 もっといい方法があれば教えてください。

ファイルの文字をカウント

自分が書いている日記(markdown形式)の文字数をカウント

以下のようなテキストファイル(file)

### 08/06/2018
---

あいうえおかきくけこ。
さしすせそ、たちつてと。

なに、ぬねの。
はひふへほまみむめも。

上から2行(日付と罫線)とスペース、改行を除いた文字をカウント。

cat file | awk 'NR>2{print}' | sed 's/ //g' | tr -d ' ' | tr -d '\n' | wc -m

説明

cat file : ファイルの中身を出力

awk 'NR>2{print}' : 3行目以上を出力(2行目までを削除)

sed 's/ //g' : 全角スペースを削除

tr -d ' ' : 半角スペースを削除

tr -d '\n' : 改行を削除

wc -m : 文字数をカウント

Windows10でデスクトップ画面が頻繁に再描写される問題(解決)

問題

突然、Windows10でデスクトップ画面が頻繁に再描写され(30秒に1回くらい)、 パソコンの操作に支障が出た。

解決した方法

デスクトップに置いていたBlenderで作成したファイルを削除し、パソコンを再起動。 (Blenderは3Dモデル作成ソフト)

原因(おそらく)

特に検証をした訳ではないため、あくまで仮説です。正直、あまり自信はないです。

Windows10では、定期的にデスクトップ画面が再描写されている。 その再描写は、基本的には一瞬で終わる。 (人間が気にならないくらい早く。)

セキュリティソフトをインストールしている場合、 デスクトップ画面の再描写時に、 デスクトップに存在しているファイルをチェックしている可能性がある。

デスクトップに一般的ではないファイルを置いていた場合、 そのファイルのチェックに時間がかかり、 その結果、再描写に時間がかかった。

Vuforia の World Center Mode について

はじめに

今回は Vuforia の World Center Mode について書きます。

環境

  • Unity2018.1.6f1
  • Vuforia7.1.35

World Center Mode について

ARCamera の Vuforia Behaviour に World Center Mode の項目がある。

World Center Mode には4つの選択肢があります。

  • SPECIFIC_TARGET
  • FIRST_TARGET
  • CAMERA
  • DEVICE_TRACKING

f:id:kato_robotics:20180721134318p:plain

SPECIFIC TARGET について

自分が選択した Image_target をワールド座標系の原点にできます。

FIRST TARGET について

アプリを起動して一番最初に見つけたマーカをワールド座標系の原点にできます。

CAMERA について

常に ARCamera がワールド座標系の原点になります。

DEVICE TRACKING について

アプリ起動時のデバイスの位置姿勢がワールド座標系の原点になります。

その後デバイスを移動や回転をさせても、オブジェクトの位置や姿勢は動きません。

詳しくは以下を参照してください。

kato-robotics.hatenablog.com

Vuforia7 + Unity デバイストラッキング

はじめに

UnityにVuforiaが統合されてから、Vuforiaがすごく使いやすくなったのでありがたいです。

今回はVuforiaでデバイスラッキングをするための設定方法を書いていきます。

環境

  • Unity : 2018.1.6.f1
  • Vuforia : 7

バイスラッキングとは何か

VuforiaのデバイスラッキングをONにすると、 デバイスのセンサを使って、デバイス本体がどのくらい移動回転をしたか計算で求めてくれます。

アプリ起動時のデバイスの位置姿勢がワールド座標系の原点を決定します。

その原点からデバイスがどのくらい移動回転したかが自動で分かります。

バイスラッキングの設定

まず、Vuforiaをインポート。

そして、ARCameraを作成。

Projectビューの Resources > VuforiaConfiguration

Device Tracker の Track Device Pose にチェック

さらに Tracking mode は 「ROTATIONAL」「POSITIONAL」を選択

f:id:kato_robotics:20180721134304p:plain

ちなみに、ARCamera の Vuforia Behaviour にある World Center Mode が「Device Tracking」になります。

f:id:kato_robotics:20180721134318p:plain

openFrameworks を Ubuntu16.04 にインストール(コンパイル時のエラーについて)

はじめに

openFrameworksを使ってみようかなと思ってインストールしてみました。

色々あって無駄に手間がかかってしまったので、 その時のメモを残しておきます。

目的

Ubuntu16.04にopenFrameworksをインストール

環境

  • Ubuntu16.04(仮想環境:VirtualBox)
  • openFrameworks0.10.0

参考

参考にした記事の内容とはバージョンが違います。

openFrameworks のインストールから新規プロジェクトの作成まで | ざきのメモ

インストール方法

wgetを使ってインストールしたかったけどエラーが出たのでwebサイトからダウンロード

https://openframeworks.cc/download/

展開したディレクトリはホーム直下におく

あとはそのディレクトリ内で作業

/scripts/linux/ubuntu で以下のコマンドを実行

sudo ./install_dependencies.sh
sudo ./install_codecs.sh

次にこのコマンドを実行して二つインストール(実行する場所はどこでもいい)

sudo apt install -y qtcreator eclipse

/scripts/linux/で以下のコマンドを実行してコンパイル

./compileOF.sh -j3
./compilePG.sh

以上でインストールは終了

コンパイル時のエラー対応

以下のコマンドを実行したときにパッケージが足りないことでエラーがでました。

./compileOF.sh -j3

パッケージが見つからないというエラーを出されたときの、追加するパッケージを列挙していきます。

もしかすると私がつづりを間違えているかもしれないので確認してください。

一括でインストールするコマンド

sudo apt install gstreamer0.10-plugin-base-apps libsndfile1-dev libopenal-dev libpulse-dev libglew-dev liburiparser-dev libglfw3-dev librtaudio-dev libpugixml-dev

一つずつインストール

エラー:gstreamer0.10~.pcが見つからない

sudo apt install gstreamer0.10-plugin-base-apps

エラー:sndfile.pcが見つからない

sudo apt install libsndfile1-dev

エラー:openalが見つからない

sudo apt install libopenal-dev

エラー:libpulse-simpleが見つからない

sudo apt install libpulse-dev

エラー:glewが見つからない

sudo apt install libglew-dev

エラー:uriparser/Uri.hが見つからない

sudo apt install liburiparser-dev

エラー:GLFW/flfw3.hが見つからない

sudo apt install libglfw3-dev

エラー:RtAudio.hが見つからない

sudo apt install librtaudio-dev

これで警告は出てきますが、コンパイルは通りました。

さらに以下のコマンドでもエラーが出たので追加するパッケージを書いておきます。

./compilePG.sh

エラー内容を読むとpugiクラスでエラーが出ているのでそのパッケージをインストール

sudo apt install libpugixml-dev

プロジェクトの作成と実行

/projectGenerator-linux64/で以下のコマンドを実行

./projectGenerator

GUI上でウィンドウが出てきます

そこで好きなプロジェクト名を決めて、Generateボタンを押すと作成できます

そして、/apps/myApps/に自分が作成したプロジェクトが追加されています

自分のプロジェクト内の/src/にcppファイルやhファイルがあります

おわりに

インストールするだけで思ったよりも時間を使ってしまったけど、 無事インストールできてよかったです

Unityで録音アプリを作成

はじめに

Unityで録音アプリを作成してみました。

今回は録音して再生する機能を持ったアプリです。

目的

Unityで録音アプリを作成

環境

  • Unity : 2018.1.6f1
  • OS : Windows10

ソースコード

MITライセンス

UIのボタンを3つ作成して関数を関連付けしてください。

(StartButton, EndButton, PlayButton)

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

public class MyRecording : MonoBehaviour
{
    AudioClip myclip;
    AudioSource audioSource;
    string micName = "null"; //マイクデバイスの名前
    const int samplingFrequency = 44100; //サンプリング周波数
    const int maxTime_s = 300; //最大録音時間[s]

    void Start()
    {
        //マイクデバイスを探す
        foreach (string device in Microphone.devices)
        {
            Debug.Log("Name: " + device);
            micName = device;
        }
    }

    public void StartButton()
    {
        Debug.Log("recording start");
        // deviceName: "null" -> デフォルトのマイクを指定
        myclip = Microphone.Start(deviceName: micName, loop: false, lengthSec: maxTime_s, frequency: samplingFrequency);
    }

    public void EndButton()
    {
        if (Microphone.IsRecording(deviceName: micName) == true)
        {
            Debug.Log("recording stoped");
            Microphone.End(deviceName: micName);
        }
        else
        {
            Debug.Log("not recording");
        }
    }

    public void PlayButton()
    {
        Debug.Log("play");
        audioSource = gameObject.GetComponent<AudioSource>();
        audioSource.clip = myclip;
        audioSource.Play();
    }
}

コード解説

ソースコードを簡単に解説します。

まず、使用するマイクデバイスを探します。

ここでmicNameにnullを入れると、 その端末でデフォルトのマイクを使用します。

foreach (string device in Microphone.devices)
{
    Debug.Log("Name: " + device);
    micName = device;
}

Microphone.Startで録音を開始します。

引数は、マイクデバイスの名前、ループするかどうか、録音時間[s]、サンプリング周波数です。

Unity公式のリファレンスを読むと分かりやすいです。

録音データはAudioClip変数に保存されます。

myclip = Microphone.Start(deviceName: micName, loop: false, lengthSec: maxTime_s, frequency: samplingFrequency);

Microphone.Endで録音を停止します。

また、ループをfalseにしていると、録音時間を過ぎれば録音は終了します。

Microphone.End(deviceName: micName);

録音したデータを再生します。

audioSource.Play();

おわりに

Unityで録音機能を持ったアプリを作成しました。

あとは、録音データをセーブしたり、 音声ファイルとして書き出せたりすると、便利になりそうです。