YKpages

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

UnityでARKit1.5

はじめに

ARKit1.5から画像認識の機能が追加されたらしい。

ARライブラリでマーカーの認識ができるものを探していたので使ってみた。

使ってみた感想として、自分が期待していた程の精度ではなかったので残念。

YoutubeでARKit2.0のデモをみたところ良い感じだったので期待。

www.youtube.com

導入方法

以下、bitbucketのUnity公式アカウント

bitbucket.org

ここからUnity-ARKit-Pluginをダウンロード

このプロジェクトを開いて、中のARKit1.5からサンプルを開けば使える。

参考

以下を参考

UnityやXcodeのバージョンも以下を参考に

blogs.unity3d.com

Octaveの使い方(Ubuntu16.04)

はじめに

最近、数値計算用の言語Octaveを使ったので、使い方をまとめておく。

OctaveMatlabと互換性がある。

環境

Ubuntu16.04

導入

以下のコマンドを実行

sudo apt install octave

Octaveはパッケージの追加を行える。

(例)controlというパッケージを追加

sudo apt install octave-control

また、パッケージはロードする必要がある。

以下のコマンドはOctaveコマンドライン上か、 mファイルに記述する。

pkg load control

Octaveの起動

ターミナルで以下のコマンドを実行

octave

mファイルを記述

vimなどのエディタを用いてfilename.mというファイルに記述

mファイルの実行

octaveを起動している状態で以下のコマンドを実行

octave filename.m

また、グラフなどを描画する場合

octave --persist filename.m

mファイル内でのインデントはスペース4つ分

Octaveの使い方

% 変数の宣言
x = 0
y = 1

% 行列の宣言
A = [1 2; 3 4]
B = [0; 1]
C = [1 0]

inv(A)    %逆行列
A'          %転置
det(A)   %行列式

基本的にMatlabと同じ書き方ができるのでググれば大丈夫

UnityでiOSアプリ開発(+ARKit)

はじめに

ARKitを使用したアプリを作成したときのメモです。

目的

UnityでiOSアプリを作成、ARKitのサンプルを動かす

環境

iOSアプリのビルドにはXcodeが必要なので、Mac PCを用意してください。

手順

  1. Unityインストール
  2. Xcodeインストール
  3. AppleIDを開発者として登録
  4. XCodeの設定
  5. Unity起動、ARKit Pluginをインポート
  6. Unityビルド設定
  7. Build & Run、iOS端末へ送信

1. Unityインストール

公式サイトからUnityをインストール

unity3d.com

2. Xcodeインストール

App StoreからXcodeをインストール

3. AppleIDを開発者として登録

アプリ開発するためにAppleIDを開発者として登録する必要があります。

AppleIDとパスワードを入力するだけです。

Sign in with your Apple ID - Apple Developer

(「AppleID 開発者」と検索すると公式サイトが引っ掛かります)

4. Xcodeの設定

まず、AppleIDを設定

Xcode > Preferences... > Accountsでアカウントを登録

左下にある「+」ボタンを押すと登録できます。

次にXcodeエディタの真ん中のエリアで、「General」タブの「Signing」で「Team」に自分を登録

5. Unityを起動してARKit Pluginをインポート

Unityを起動

新しいプロジェクトを作成します(プロジェクト名などは適当に)

Unityエディタが開いたらAsset Storeを開きます。

上部の「Window」タブの中から「Asset Store」を選択

Asset Store内で「ARKit」と検索すると「Unity ARKit Plugin」が見つかります

これをインポートします

6. Unityのビルド設定

Unityエディタの「File」タブから「Build Settings」を選択

  1. 「Add Open Scenes」を押す
  2. Scenes In Buildの中で一番上のシーンにチェックを入れる(ARKitScene)
  3. Platformで「iOS」を選択後、左下の「Switch Platform」ボタンを押す

次に「Player Settings」ボタンを押すとUnityエディタの右側に設定項目が出てくる

  1. 一番上の「Company Name」と「Product Name」を適当に入力
  2. Other Settingsの「Bundle Identifier」に「com.Company Name.Product Name」となるように入力

以上で設定終了

7. Build & Run、iOS端末へ送信

iOS端末をMac PCと有線で接続

「Build Settings」ウインドウの右下にある「Build And Run」を押す

Xcodeが立ち上がっていなくても自動で立ち上がるので大丈夫)

Xcodeでビルドが完了したら、Xcode左上の再生ボタン(三角のやつ)を押すとiOS端末へ送信される

Xcodeでエラーが起こった場合

基本的にエラー内容を読めばどう対処すればいいか分かります。

また、ググれば解決方法が分かります。

Xcodeのバージョンが~と言われたらおそらく現在のバージョンが古いのでアップデートする

iPad is busy: ~と言われたらiOS端末を再起動する

iOSアプリが信頼されていないと言われたら

iOS端末上で作成したアプリを開こうとしたら「このアプリ(開発元)は信頼されていない」みたいなことを言われるかもしれません。

この場合は「設定」> 「デバイス管理」から自分を選択して信頼します。

動いたときの様子

f:id:kato_robotics:20180627164941p:plain

まとめ

UnityでiOSアプリを開発しました。ARKitのサンプルを動かしました。

Unity と ROS の通信 ( rosbridge, websocket_sharp )

追記(2018/10/24)

この記事では websocket-sharp をそのまま使用して通信を行っていますが、 ROS# (ros-sharp) というライブラリを使った方が楽です

github.com

使い方を簡単にまとめてみました

kato-robotics.hatenablog.com

はじめに

だいぶ前にUnityアプリからTurtleBotを動かしたときのことをまとめます。

(ざっと流れを書いていくので参考程度に)

目的

UnityアプリからTurtleBotを操作

環境

  • Ubuntu16.04
  • ROS Kinetic Kame
  • Unity

手順

  • Unity側

    • websocket-sharpライブラリの準備
    • TurtleBotへ命令を出すコードを用意
  • TurtleBot側

    • TurtleBotが動かせるように準備
    • rosbridge_serverを起動

websocket-sharpの準備(Unity側)

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

qiita.com

rosbridgeの準備(ROS側)

以下のコマンドでインストール

sudo apt install ros-kinetic-rosbridge-server

以下のコマンドで実行

roslaunch rosbridge_server rosbridge_websocket.launch

rosbridge_serverを立てている間は、 外部からトピックへアクセスできる。

TurtleBotの準備(ROS側)

すでにTurtleBotを動かすために必要なものは揃っている前提。

以下のコマンドを実行

roslaunch turtlebot_bringup minimal.launch
roslaunch turtlebot_teleop keyboard_teleop.launch

これでTurtleBotが動くはず。

TurtleBotを動かすためのコード(Unity側)

以下がサンプルコード

きれいではないけど動くとは思います。

(websocketよく分からん)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WebSocketSharp;
using WebSocketSharp.Net;

public class TurtleBot_Script : MonoBehaviour
{
    [System.Serializable]
    public class RosData1
    {
        public string op;
        public string topic;
        public string type;
    }

    [System.Serializable]
    public class RosData2
    {
        public string op;
        public string topic;
        public Msg msg;
    }

    [System.Serializable]
    public class Msg
    {
        public Vector3 linear;
        public Vector3 angular;
    }


    WebSocket ws;
    public float linear_val = 1.0;
    public float angular_val = 1.0;

    void Start()
    {
        string ipaddress = "xxx.xxx.xxx.xxx"; //自分のIPアドレス
        ws = new WebSocket("ws://" + ipaddress + ":9090/");

        ws.OnOpen += (sender, e) =>
        {
            Debug.Log("WebSocket Open");
            RosData1 data = new RosData1();
            data.op = "advertise";
            data.topic = "/mobile_base/commands/velocity";
            data.type = "geometry_msgs/Twist";
            string json = JsonUtility.ToJson(data);
            ws.Send(json);
        };

        ws.OnError += (sender, e) =>
        {
            Debug.Log("WebSocket Error Message: " + e.Message);
        };

        ws.OnClose += (sender, e) =>
        {
            Debug.Log("WebSocket Close");
        };

        ws.Connect();
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 lin = new Vector3(linear_val ,0,0);
        Vector3 ang = new Vector3(0,0,angular_val);

        Msg msg = new Msg();
        msg.linear = lin;
        msg.angular = ang;

        RosData2 data = new RosData2();
        data.op = "publish";
        data.topic = "/mobile_base/commands/velocity";
        data.msg = msg;
        string json = JsonUtility.ToJson(data);
        ws.Send(json);
    }
}

まとめ

UnityアプリからROSへデータを送る方法を書きました。

おわりに

あまり確認作業をせずに書いたので間違ってたらすみません。

他に参考にしたもの

oohito.com

oohito.com

OculusGo+Unityの始め方(+ビルド後の話も)

はじめに

今流行りのOculusGoを買ったので、 Unityで何か作ってみようと思ってます。

そのためのメモなど書いていきます。

開発環境

Unity: 2018.1.3f1

OS: Windows10

アプリをビルドするまで

正直、私が書くまでもなく情報がたくさんありました。

とりあえず手順は以下の通り

  1. Unityをインストール
  2. Oculus公式ページよりOculus用のUnityパッケージをインストール
  3. Androidアプリをビルドするための準備(SDKJDKなど)
  4. OculusGoを開発者モードにするために組織設定を行う(簡単だから大丈夫、開発者モードをONにするときに公式ページに飛べる)
  5. OculusGoとPCを有線で接続(無線でもできるらしい、まだやってない)
  6. ビルドの設定(アプリの設定)
  7. ビルド

具体的な方法は以下の参考ページへ。

参考ページ

OculusGo公式

developer.oculus.com

参考にしたページ(ありがたい)

syuuki-k.hatenablog.com

tomozooo.hatenablog.com

qiita.com

気をつけること

  • Unityを初めて使う場合はUnityの使い方から入った方がいいかもしれません。

  • Androidアプリを初めてビルドする場合は、SDKJDKの準備につまづくかもしれません。 ググると情報がたくさん出てきます。

  • ビルドでエラーが出る場合は、Unityの「Build Setting」での設定が十分ではない可能性が高いです。 これもググると情報がたくさん出てきます。

  • とりあえずUnityを再起動してみるとなんとかなるかもしれません。

ビルド後アプリはどこへ?

ビルドは無事できたのですが、 そのアプリはどこいったのかなと探してたら見つけました。

OculusGoの開発者モードがONになっている状態で、 ライブラリの提供元不明の一覧の中に自分が作ったアプリがあります。

OculusGoのスクショ、録画

自分で作ったアプリの記録を撮りたいなと思っていたら、 デフォルトでその機能がありました。

ホーム画面のシェアを押すと、「録画」「写真を撮る」などがあります。

おわりに

無事、OculusGo対応のアプリをUnityでビルドできました。

発売から一ヶ月以上経っていることもあり、情報がたくさんあってありがたかったです。

これからゲームとかいろいろ作っていこうと思います。

(急いで書いているので変なところがあったらすいません。)

f:id:kato_robotics:20180609200949p:plain
コントローラ出せた

ARCoreの始め方(Unity編)

はじめに

GoogleはARCoreを開発していくということなのでちょっと使ってみる

(Tangoは開発終了らしい)

目的

ARCoreのサンプルを動かす

環境

  • Windows10
  • Unity2017.4.1f1
  • ARCore 1.1.0
  • 端末 : ZenFone AR

公式のクイックスタート

とりあえずここを参考にする

Quickstart for Unity  |  ARCore  |  Google Developers

Unityをインストール

Unityをインストールしていない場合はインストール

Unity 2017.3.0f2以上が必要らしい

unity3d.com

ARCore SDK for Unityをダウンロード

ARCore SDK for Unityを公式サイトからダウンロード

Quickstart for Unity  |  ARCore  |  Google Developers

Android SDKをインストール

Android SDK version 7.0 (API Level 24)以上が必要らしい

Android SDKは「Android Studio」をインストールすると、一緒に入っている

Android StudioSDK ManagerでSDKのアップデートなどができる

またSDK Managerを開くとSDKの保存場所が分かる(後でパスを通すときに必要)

developer.android.com

Unityを起動

まずインストールしたUnityを起動

「New」ボタンを押すと、新規プロジェクトを作成できる

適当な名前を決めて、プロジェクトを作成

ARCore SDKをインポート

Unityエディタの上部タブから選択していく

Assets > Import Package > Custum Package ...

さっきダウンロードしたARCore SDKを選択するとインポートされる

Android SDKのパスを通す

(もしかすると自動でパスが通っているかも)

Unityエディタの上部タブ

Edit > Prefrences... > External Tools

の下の方にSDKのパスを記述

注意 : Android Studioから手に入るAndroid SDKはそのままではエラーを起こす可能性がある(後述->ビルド時のエラー)

JDKのインストール

JDK(Java Development Kit)が必要なので、インストールしていない人はする

最新のバージョンでも大丈夫だと思う

(ちなみに私のバージョンはjdk1.8.0_151)

Java SE Development Kit 8 - Downloads

そしてパスをちゃんと通す

パスを記述するところはAndroid SDKと一緒

サンプルのシーンを開く

ARCore SDKが正常にインポートされていると、UnityエディタのProjectビューに「GoogleARCore」があるはず

GoogleARCore > Examples > HelloAR > Scenes > HelloAR

を選択(ダブルクリックとかする)

シーンが開くはず

ビルドセッティング

上部タブから File > Build Setting を選択

  1. 真ん中右あたりにある「Add Open Scenes」ボタンを押す
  2. 左下のPlatform選択でAndroidを選択して、「Switch Platform」ボタンを押す
  3. 「Player Setting」ボタンを押す。Unityエディタの右にあるInspectorビューをみる
  4. 一番上のCompany NameとProduct Name(アプリ名)を適当に決める(7.で使用)
  5. Other Settingを開く
  6. Multithreaded Renderingのチェックを外す
  7. Package Nameを「com.CompanyName.ProductName」のように書く(4.で決めた通り)
  8. Minimum API LevelとTarget API LevelをAndroid 7.0以上にする
  9. XR SettingでARCoreを選択

・端末側で開発者オプションからUSBデバッグを有効にする

・「Build and ran」ボタンを押すと、apkファイルの名前を聞かれるので、適当に名前を付ける

apkファイルの保存場所は、プロジェクトフォルダ直下(Assetsフォルダなどがある層)

ビルド時のエラー(重要)

大半のエラーはAndroid SDKが合ってないか、JDKがあっていないかだと思う

調べたところによると新しいAndroid Studioで手に入るAndroid SDKがUnityと上手く合わないらしい

解決策として、Android SDKの中にあるtoolsだけを古いものと置き換えるとうまくいく

参考(この記事の最後の方にエラーについて書いてくれている)

[Unity] アプリをビルドしてandroid実機上でテストする

アプリが正常に動かない(重要)

ビルドが通ってアプリは起動したが何も起こらない場合は、端末を再起動すると直るかもしれない

私は端末を再起動したら動きました

スクリーンショット

正常に動作したときのスクショ

検出された平面をタッチすると緑のキャラが生成される

f:id:kato_robotics:20180418214722j:plain

おわりに

ARCoreが無事動いてよかった

もしエラーが出て動かない人は頑張ってください

質問してもらえれば何か答えます

JavaScriptの始め方 (Windows, Jupyter notebook)

はじめに

JavaScript(Node.js)、使ってみる。

とりあえず、インストールをして、Jupyter notebookで使えるところまでを確認する。

環境

  • Windows10
  • anaconda3 (4.3.8)
  • Node.js 8.10.0(LTS)

Jupyterはすでにインストールしていることを前提とする

参考

公式ページを参考

github.com

Node.jsをインストール

1か2のどちらかの方法でインストール

どっちでも良い

  1. 公式サイトよりインストーラをダウンロード

インストーラに従ってインストール

Download | Node.js

  1. Anacondaならcondaでインストール
conda install nodejs

IJavaScriptをインストール

コマンドプロンプトを開き、以下のコマンドを入力

npm install -g ijavascript
ijsinstall

Jupyter notebookで確認

Jupyter notebookを起動すると、JavaScript(Node.js)が追加されている

恒例として、Hello World!!を出力して確認

console.log("hello world");

結果

JavaScriptをインストールして、Jupyter notebook上で使えるように環境を作った

おわりに

JavaScriptはよく使われる言語なので、やってみた

おもしろそうなので、暇なのときに勉強してみる

色々な言語のまとめ

kato-robotics.hatenablog.com