極楽とんぼのロボット製作記

情報工学系大学院生がロボットとその周辺技術や身の回りの出来事について紹介するブログ

No connection to TeamViewer server

TeamViewer起動時に

No connection to TeamViewer server
Please check your internet connection
Most likely you use a proxy server and you have to enter the proper information in the options dialog

f:id:gokuraku104robot:20171023112817p:plain
と表示されてログインできない場合の対処法です。

ターミナルで

$ sudo service teamviewerd restart

を実行してからTeamViewerを再起動すれば問題なく動作します。原因を調査していますが、根本的な解決策を見つけられていません。現状、起動するたびに実行している状態です。対処療法ですが、参考になる方がいらっしゃれば幸いです。

Ubuntu Linux refuses to connect to Teamviewer servers - TeamViewer Community - 979
Ubuntu Linux refuses to connect to Teamviewer servers - Page 2 - TeamViewer Community - 979

Ubuntu16.04をWindows10とデュアルブート in UEFI

機械学習の実行環境がほしいと思って買ったBTOパソコンがUbuntuを受け付けてくれない。Windows10とUbuntuのデュアルブートについて、調べあげた記録を残しておきます。最近のGPUがのったPCでUbuntu16.04をデュアルブートするにはWindows10,UEFIBoot,NvidiaGPUの3つがうまく動くように設定してやる必要があります。設定しないままインストールしようとするとインストールディスクが読み込めなかったり、画面が真っ暗になったりしてインストールできません。こうした設定があちらこちらのサイトに散らばっているので探すのに苦労しました。そうした設定を以下に全てまとめました。冗長な部分もあるかとは思いますが、最後までお付き合いいただければ幸いです。

インストール環境

まずは私が今回Ubuntu16.04をインストールした環境を説明します。
使用したPCはパソコン工房で買ったBTOパソコンです。
iiyama STYLE-R027-i7-XN [Windows 10 Home] | パソコン工房【公式通販】

インストール済みOS: Windows 10
インストールしたいOS: Ubuntu 16.04.3 GNOME
ブート環境: UEFI
GPU: GeForce GTX 1080 Ti 11GB GDDR5X

インストールディスク作成

まずは下記サイトからイメージデータをダウンロードしてきましょう
UbuntuGNOME/GetUbuntuGNOME - Ubuntu Wiki
f:id:gokuraku104robot:20171013121652p:plain:w350
"16.04.3 64bit Direct Download"を選択します。今回、GNOMEを選んだのはUbuntu18.04からGNOMEがデフォルトのデスクトップ環境になるためです。今のうちにGNOMEに慣れておきましょう。

USBにイメージファイルを書き込むためのソフト(Universal USB Installer)をダウンロードします。
Universal USB Installer 1.9.7.8 - ダウンロード
Universal USB Installerを使ってUSBにイメージファイルを書き込みます。
Step1:Ubuntu
Step2:Browseからubuntu-gnome-16.04.3-desktop-amd64.isoを選択
Step3:書き込むUSBメモリを設定
Fat32でフォーマットを選択
f:id:gokuraku104robot:20171018104108p:plain
Createを選択して書き込みをします。

Windowsでの設定

高速スタートアップの無効化

インストールしたいSSDまたはHDDがNTFSとして設定されている場合はWindowsで設定されている高速スタートアップを無効にする必要があります。これを無効にすることでUbuntuでNTFS領域をマウントできるようになります。
nagamitsu1976.hatenadiary.jp

Windowsキーを押す→設定→システム→電源とスリープ→電源の追加設定→電源ボタンの動作を選択する→現在利用可能ではない設定を変更します→「高速スタートアップを有効にする」のチェックを外す
f:id:gokuraku104robot:20171018112849p:plain:w500
f:id:gokuraku104robot:20171018112844p:plain:w500
f:id:gokuraku104robot:20171018112909p:plain:w500
f:id:gokuraku104robot:20171018112900p:plain:w500
f:id:gokuraku104robot:20171018112856p:plain:w500
f:id:gokuraku104robot:20171018112905p:plain:w500

Ubuntu用パーティション作成

WindowsからUbuntuをインストールするためのパーティションを切ります。Ubuntuをインストールする時にGparted等でパーティションを切っても良いのですが、Gpartedは時々落ちたりするので私はWindowsからパーティションを切っています。Windowsからパーティションを切るには(通常画面右下の)Windowsマーク上で右クリックして「コンピュータの管理」を選択します。
その後、「ディスクの管理」を選択、パーティションを切りたい場所(今回はWindows(C))で右クリックして、「ボリュームの縮小」を選択します。
f:id:gokuraku104robot:20171018120735p:plain:h300
f:id:gokuraku104robot:20171018120739p:plain:w500
f:id:gokuraku104robot:20171018120743p:plain:w500
縮小するボリュームのサイズでUbuntuに割り当てたい領域を決めます。今回は204800MiB(200GiB)を設定しました(後で分かりましたが、スワップ領域が作られるのでUbuntuに設定される領域は正確にはこの値ではありません)。
MiBからGiBへ変換するにはこちら
MiB GiB - Google 検索

UEFI BIOSでの設定

インストールの前にBIOSでいくつか設定を行います。BIOSを立ち上げるためのキーはPCのメーカーによりけりですが、私のPCはDELキーでした。他のメーカーでも多くは、F1,F2,F4,F8,F10,F12,Tabなどです。BIOSによって設定画面は異なりますが、参考までに私の設定画面を載せます。
f:id:gokuraku104robot:20171018150939p:plain

Secure Boot無効化

セキュアブートが設定されているとUbuntu等のOSがインストールできないので無効化します。
セキュアブートについてはこちら
UEFI の セキュアブートの設定について: 変更方法や注意点など - ぼくんちのTV 別館

Settings→Advanced→Secure Boot →Secure Boot Support→Disabledを選択
f:id:gokuraku104robot:20171018151214p:plain
f:id:gokuraku104robot:20171018151419p:plain
f:id:gokuraku104robot:20171018151426p:plain

Fast Boot無効化

Windowsの高速スタートアップとは別にBIOSが提供する機能としてFastBootというものがあります。詳しくは下の記事に書いてあります。BIOSの設定を変更したり、ハードウェア構成を変更する場合には無効にしておくべきものです。
UEFI の Fast Boot とはどんな機能なのか?無効化するのはどういう状況か? - ぼくんちのTV 別館
Settings→Advanced→Fast Boot→Disabledを選択
f:id:gokuraku104robot:20171018152434p:plain

Boot順序の設定

USBのインストールディスクを優先的にBootしてほしいので、ブート順序を変更します。UEFIではマウスで簡単に順番を変更できます。設定画面の上にBoot Priorityを設定する場所があり、ここで明るくなっている(認識されている)USBのアイコンをドラックアンドドロップするだけで、優先順位が変更できます。左から順番に解釈されるので、1番左に持っていけば再優先のBootになります。
f:id:gokuraku104robot:20171018152931p:plain

設定が完了したら、保存して再起動(Save&ExitのSave Changes and Reboot)しましょう。

Ubuntuのインストール

さて、ようやくUbuntuのインストールです。Try Ubuntuを選択してUbuntuが正常に動くか確認しましょう。

Try UbuntuまたはInstall Ubuntuを選択後画面が真っ暗になる。

Try UbuntuまたはInstall Ubuntuを選択後画面が真っ暗になってしまう場合、splash画面がうまく表示されていない可能性があります。
qiita.com
これはUbuntuがGPUをうまく認識できないために発生する不具合なようです。
Try Ubuntu にカーソルを合わせてeキーを押すと起動設定画面が出てきます。カーソルキーで移動して"quiet splash"のところを、"nomodeset"に変更してください。変更したらF10キーを押してBootします。

インストール画面

無事にTry UbuntuができたらUbuntuをインストールしましょう。Superキー(ウィンドウズマークのキー)を押してInstall Ubuntu GNOME 16.04.3 LTSを選択します。
f:id:gokuraku104robot:20171021115001p:plain
まずは言語選択です。Japaneseも選択できますが、後でフォルダ名を変更するのが面倒なので私はEnglishのままやります。言語を選択したらcontinueを選択します。
(前から疑問に思っているのですが、Linuxにはシンボリックリンクという素晴らしい機能があるのにもかかわらず、Japaneseを選択した時にフォルダ名が"ダウンロード"のように全角の名前を直書きしてしまうのでしょうか。シンボリックリンクで全角名を指定してくれていれば誰も文句を言わない気がするのですが...)
f:id:gokuraku104robot:20171021115916p:plain
インストールする際にサードパーティソフトウェアを入れるにチェックします。
f:id:gokuraku104robot:20171021120319p:plain:w500

ポップアップウィンドウが出て"Unmount partitions that are in use?"がと出てきますが、ここはNoを選択します。
f:id:gokuraku104robot:20171021121041p:plain:w500

Install typeは"Install Ubuntu GNOME alongside Windows Boot Manager"を選択して、"Install Now"を押します。
f:id:gokuraku104robot:20171021121804p:plain:w500

Write the changes to disks?と出るので、"Continue"を選択します。
f:id:gokuraku104robot:20171021123123p:plain:w500
上の画像の場合、インストールする領域としてパーティションの5,6を使うので、ここをフォーマットしますと出ています。もしWindowsを消してしまわないか心配という方はSuperキーを押してから"disks"と打って、ディスク管理を行うソフトを起動します。下の画像のようにパーティション3がWindowsの領域、パーティション5,6がUbuntu用に確保した領域だと確認できます。
f:id:gokuraku104robot:20171021133000p:plain:w500

ここからは面倒な確認もなく、必要なことを入力していくだけです。
まずはユーザーを登録しましょう。空欄を埋めて、Continueを選択します。
f:id:gokuraku104robot:20171021124000p:plain:w500
地域を選択しましょう。時刻同期や言語設定などに使われます。
f:id:gokuraku104robot:20171021124041p:plain:w500
キーボードを設定します。Japaneseを選択していれば問題ないとは思いますが、一応下の入力欄で確認しておきましょう。特に記号は重要です。時々パイプ | が別のキーに割り当てられたりしているので注意です。
f:id:gokuraku104robot:20171021124139p:plain:w500
お疲れ様でした。これでインストールは終了です、と言いたいところですが、まだやることが残っています。
f:id:gokuraku104robot:20171021124313p:plain:w500

再びBIOSの設定

現在の設定のまま、PCを起動しようとするとおそらくそのままWindowsが起動します。
Settings→Boot→UEFI Hard Disk Drive BBS Prioritiesを選択します。
f:id:gokuraku104robot:20171021124914p:plain:w500
ここでブートの優先順位をUbuntuが#1になるように変更します。
f:id:gokuraku104robot:20171021124951p:plain:w500
こうすることでPC起動時にGrubが起動し、GrubからUbuntuかWindowsのどちらを起動するのか選択することができるようになります。

NVIDIA Driverのインストール

さて、無事にインストールが完了して、Grubから起動できるようになりましたが、splash画面が崩れていた方は相変わらずeキーを押して、"quiet splash"のところを、"nomodeset"に変更しないと正常に起動しません。この問題も解決しましょう。
問題はGPUが正常に認識されていないことが原因なので、GPUのドライバを入れてやれば問題ありません。
nomodesetでの起動に成功したら、ターミナルを起動します。

以下のコマンドで利用可能なnvidiaのドライバを探します。

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
$ apt-cache search 'nvidia-[0-9]+$'
nvidia-331 - Transitional package for nvidia-331
nvidia-346 - Transitional package for nvidia-346
nvidia-352 - Transitional package for nvidia-361
nvidia-361 - Transitional package for nvidia-367
nvidia-367 - Transitional package for nvidia-375
nvidia-304 - NVIDIA legacy binary driver - version 304.137
nvidia-340 - NVIDIA binary driver - version 340.104
nvidia-375 - NVIDIA binary driver - version 375.82
nvidia-378 - NVIDIA binary driver - version 378.13
nvidia-381 - NVIDIA binary driver - version 381.22
nvidia-384 - NVIDIA binary driver - version 384.90
nvidia-387 - NVIDIA binary driver - version 387.12

どうやら本記事執筆時(2017/10)の最新バージョンはnvidia-387のようです。GPUによって対応しているドライバが異なることも考えられますので、古いGPUを使う場合は念の為調べておくと良いかもしれません。
どのドライバが使用可能かはこちらから調べられます。
NVIDIAドライバダウンロード
以下のコマンドでドライバをインストールします。

$ sudo apt install nvidia-387

インストール終了時に、ディスプレイマネージャーを選択する画面がでるかもしれません。GDM3かLightDMが選択できると思われますが、GNOMEデフォルトのディスプレイマネージャーであるGDM3を選択します。
eng-entrance.com

お疲れ様でした。以上でセットアップは完了です。ここからはプログラム環境の構築といったところでしょうか。dotfilesを作っておけば、自分好みの環境をコマンド1つで構築することも可能です。
www.g104robo.com


参考サイト
121ware.com > サービス&サポート > Q&A > Q&A番号 015493
大学推奨 Windows 8.1 PCでUbuntuとのデュアルブートに苦労した(TOSHIBA R732,Ubuntu14.04) - Qiita
Ubuntu16.04 + Windows10 のデュアルブート環境を構築する - 俺とプログラミング
UEFI の セキュアブートの設定について: 変更方法や注意点など - ぼくんちのTV 別館
UEFI の Fast Boot とはどんな機能なのか?無効化するのはどういう状況か? - ぼくんちのTV 別館

【ROS】catkin_wsをgitで管理する

自分で作成したcatkin_wsをgitで管理する方法を紹介します。

リポジトリ作成

やり方は簡単です。まずはGithubやBitbucketでリポジトリを作成しましょう。
今回はmy_rosとしておきます。

$ git clone https://github.com/username/my_ros.git

ワークスペースの初期化

$ cd my_ros
$ mkdir src
$ cd src
$ catkin_init_workspace

このあたりでコミットしておくと良いでしょう。

$ git add .
$ git commit -m "initial commit"

試しにsrcに何かパッケージを入れてビルドしてみましょう。

.gitignoreの設定

ビルドするとbuildやdevelが作成されます。これをリポジトリとして管理する意味は特にないので、リポジトリの管理対象から除外します。gitで特定のディレクトリやファイルを除外するには.gitignoreに設定します。

$ cd my_ros
$ vim .gitignore

.gitignoreには次のように書きます。

build/
devel/

これでbuildとdevelが除外されました。
.gitignoreに関してはこちらの記事が参考になります。階層構造をもったファイルを除外する際のテクニックなどが応用編として書かれていて、これを応用して特定のファイルだけを管理対象にすることもできます。
.gitignore の書き方 - Qiita


ROS向けignoreの紹介

ROSのgitignoreとしてさらに詳しいものがおいてある場所があります。
gitignore/ROS.gitignore at master · github/gitignore · GitHub
ここではmsgを作成したり、dynamic reconfigureを生成したりした際に自動生成されるファイルやemacsのスワップファイルを除外する方法などが書かれています。

参考サイト
.gitignore の書き方 - Qiita
gitignore/ROS.gitignore at master · github/gitignore · GitHub

【git】addできずにfatal: Pathspec '/hoge/piyo' is in submodule '/hoge'と表示される

gitでaddしようとした際に、
fatal: Pathspec '/hoge/piyo' is in submodule '/hoge'
と表示されて、addできなかった際の対処方法をまとめておきます。

まずは落ち着いてstatusを確認してみましょう。

$ git status
..... /hoge .....(submodule untracked content)

のように表示されているかと思われます。これはaddしようとしているgitリポジトリ(以降:上位リポジトリ)内にさらに別のgitリポジトリ(以降:下位リポジトリ)などがあった場合に、上位リポジトリが下位リポジトリをサブモジュールとして認識している際に起こる現象です。例えば下のようにgitリポジトリが入れ子になっている状況です。

foo
  /.git
  /hoge
    /.git
    /piyo

ここで

$ cd foo
$ git add /hoge/piyo

を行おうとすると、冒頭のようにエラーが出てaddできません。

対処方法としては、

$ git rm --cached /hoge
$ git add /hoge/piyo

のように一度、上位リポジトリの管理から外してから、直接addすることで解決できます。


このエラーには自分のROS環境をgitで管理している際に、catkin_wsをまとめて管理しようとして行き当たりました。catkin_wsのgitリポジトリが各外部パッケージのgitリポジトリをサブモジュール化しようとしてaddできない状態になっていました。
ちなみにこの方法では外部パッケージを自分のリポジトリに入れてしまうので、うっかりどこかに公開してしまうとライセンス違反になるかもしれません。ROSで同じようなことをしている方はお気をつけください。

参考サイト
stackoverflow.com

【ROS】一斉にnodeを起動するLaunchの書き方

roslaunchとは

予めlaunchファイルに記述したnodeとroscoreを同時に複数立ち上げてくれるツールです。launchファイルはXMLで記述します。

f:id:gokuraku104robot:20170923103729p:plain
launchファイルの例

基本的なlaunchの書き方

基本的な書き方はROSの公式に書いてあります。
ja/roslaunch/XML - ROS Wiki

<launch>
    <node pkg="ros_pkg" name="node_name" type="file_name"/>
</launch>

launchタグで囲んで、起動したいノードをnodeタグで囲みます。
pkg:パッケージ名(ex. hoge_ros)
type:実行ファイル名(ex. hoge_ros_node)
name:ノード名(ex. hoge_ros)

起動方法

$ roslaunch ros_pkg ros_pkg.launch

これだけだと普通にrosrunするのと手間が変わらなく感じますが、launchの良い所はroscoreが立ち上げっていなければ、自動的にroscoreも立ち上げてくれるところです。

同一実行ファイル複数ノードの立ち上げ方法

ここからがlaunchの本来の目的である複数ノードに対して様々な設定を施しながら起動する方法です。

<launch>
    <node pkg="ros_pkg" name="node_first" type="file_name"/>
    <node pkg="ros_pkg" name="node_second" type="file_name"/>
</launch>

name="node_first", name="node_second"のように、ノード名を変更することで同一実行ファイルを複数起動できます。

パラメータを設定する(param)

複数ノード立ち上げるとノードごとにパラメータを設定したくなりますよね。その際はnodeタグの間にparamタグを書き、パラメータを設定します。こうすることでそのノードのプライベートパラメータを設定できます。

<launch>
    <node pkg="ros_pkg" name="node_first" type="file_name">
        <param name="init_param" value="1"/>
    </node>
    <node pkg="ros_pkg" name="node_second" type="file_name">
        <param name="init_param" value="2"/>
    </node>
</launch>

これらのパラメータをプログラム上で読み出すには以下のようにします。
C++での例

    ros::NodeHandle node_private("~");  //プライベートパラメータを読みだすためのノードハンドル
    int initNum //プライベートパラメータを格納する変数
    if(node_private.getParam("init_param", initNum))  //プライベートパラメータの取得
    {
        ROS_INFO_STREAM("initialization in: " << initNum ); //パラメータ取得時,パラメータを表示
    }
    else
    {
        ROS_ERROR_STREAM("Failed to get init_param at " << ros::this_node::getName()); //パラメータ取得失敗時,ノード名を表示
    }

引数を与える(arg)

パラメータを変更するのにいちいちlaunchファイルを変更するのも面倒ですよね。そんな時はargで引数を設定しましょう。引数を設定するには以下のようにします。

<launch>
    <arg name="hoge"/>
    <node pkg="ros_pkg" name="node_name" type="file_name">
    </node>
</launch>

これでhogeという名前の引数を設定できます。当然これだけではただその引数が"ある"というだけで何の約にも立ちません。引数をパラメータに入れるには次のようにします。

<launch>
    <arg name="hoge"/>
    <node pkg="ros_pkg" name="node_name" type="file_name">
    <param name="piyo" value="$(arg hoge)"/> 
    </node>
</launch>

これで引数"hoge"をパラメータ"piyo"に入れることができます。
実行する際は

$ roslaunch ros_pkg ros_pkg.launch hoge:=1

のようにして実行します。
パラメータの与え方は3種類あります。

<arg name="hoge"/> 
<!-- 引数hogeの宣言 必ずコマンドライン引数を与える必要があります。-->
<!-- 引数を設定しなかった場合、requires the 'hoge' arg to be set 
と言われ、launchの起動が中止されます。-->

<arg name="hoge" default="1.0"/>
<!-- 引数hogeにデフォルトの値を設定できます。
もちろんコマンドラインからデフォルトの値を上書きすることもできます。-->

<arg name="hoge" value="1.0"/>
<!-- 引数hogeをvalueの値で初期化します。上書きができません。-->
<!-- 上書きしようとすると、
Invalid <arg> tag: cannot override arg 'hoge', which has already been set. 
と言われ、launchの起動が中止されます。-->

引数として設定するものとしては画像データのパブリッシュのフラグなどがあります。デバック時にはカメラのimageを出していてほしいけど、通常は要らない場合などに、パラメータとしてフラグを設定して、画像の有り無しを切り替えることができます。

topic名を変更する(remap)

ソースファイル内でトピック名を決め打ちしていると、いざ別名でトピックをパブリッシュしたりサブスクライブしたりしたくなった時に不便です。普通なら名前を変えてからもう一度コンパイルすることを考えますが、ROSではその必要はありません。remapを使うことでトピック名も編集することができます。
またトピックをパブリッシュするノードを複数立ち上げると、同じ名前でそれぞれがトピックをパブリッシュしてしまいます。こんな時もremapの出番です。
以下はhoge_pubというトピックをpiyo_pubというトピックに変更しています。もちろんパブリッシャーだけでなくサブスクライバーのトピックも変更できます。
fromに変更したいトピック名、toに変更後のトピック名を設定してください。

<launch>
    <node pkg="ros_pkg" name="node_name" type="file_name">
    <remap from="/hoge_pub" to="/piyo_pub" />
    </node>
</launch>

名前空間を設定する(group)

起動するノードが増えてくるとでのノード名の変更やremapでのトピック名変更が面倒になってきます。そんな時はgroupで名前空間を設定しましょう。こうすることで、同じノードでも1つのroscore上に存在できます。

<launch>
    <group ns="ns1">
        <node pkg="ros_pkg" name="node_name" type="file_name">
        <remap from="/hoge_pub" to="/piyo_pub" />
        </node>
    </group>

    <group ns="ns2">
        <node pkg="ros_pkg" name="node_name" type="file_name">
        <remap from="/hoge_pub" to="/piyo_pub" />
        </node>
    </group>
</launch>

名前空間を設定するとノード名やトピック名が名前空間で修飾されます。具体的にはrosnode listすると

$ rosnode list
/ns1/node_name
/ns2/node_name

のようになります。
同じようにトピック名に関しても

$ rostopic list
/ns1/node_name/piyo_pub
/ns2/node_name/piyo_pub

のようになります。

ROS_INFO,ROS_WARN,標準出力を表示する

通常、launchを用いて起動すると、ROS_INFO,ROS_WARN,標準出力などが表示されません。デバッグ等でこれらを表示したい時は以下のようにします。
launch起動時に--screen

$ roslaunch ros_pkg ros_pkg.launch --screen

or
launchのnodeにoutput="screen"

<launch>
    <node pkg="ros_pkg" name="node_name" type="file_name" output="screen"/>
</launch>

さらに複雑なlaunchを作りたい方はこちらが参考になります。
大きなプロジェクトでどのようにlaunchを設定すべきか解説されています。
ja/roslaunch/Tutorials/Roslaunch tips for larger projects - ROS Wiki


参考
ja/roslaunch/Commandline Tools - ROS Wiki
ja/roslaunch/XML - ROS Wiki
roslaunch/XML/arg - ROS Wiki
ろすでろぼっと: launchファイルを調べる
ROS launchファイルの使い方
ja/roslaunch/Tutorials/Roslaunch tips for larger projects - ROS Wiki

ROS初心者向けの参考書です。インストール方法からシミュレータ上でロボットを動かすところまで解説されています。ROSの公式のチュートリアルよりもバリエーションが多くRoombaやPR2などを動かせるので飽きないところも良いところです。

GitHubのリポジトリ名変更

GitHubのリポジトリ名を変更する手順です。

Web上での操作

GitHubの対象リポジトリのSettingタブからRepository Nameに新しい名前を入れてRenameを選択します。
f:id:gokuraku104robot:20170921204146p:plain

対象リポジトリ上での操作

下記のコマンドを対象のリポジトリ上で実行して、リモートリポジトリのURLを変更します

$ git remote set-url origin 変更後のURL

下記のコマンドでリポジトリのURLを確認できます。

$ git remote -v


参考サイト
GitHubのリポジトリ名変更方法 - Qiita
【Git】リモートリポジトリの名前を途中から変更する - mzgkworks
忘れがちなGit & GitHubのTips集 – ファイル/ディレクトリ/リポジトリの変更時の操作 | maesblog

スマホで家電を操作する IRKitを試してみた

IRKitとは

IRKit - Open Source WiFi Connected Infrared Remote Controller
Wifi機能のついた赤外線リモコンデバイスで、テレビやエアコンなどの赤外線操作できるリモコンの赤外線を記録させ、スマホからの操作を可能にするものです。家でも外出先からでも家電を操作できるので、寝ながらテレビ付けたり、帰宅前にエアコンをつけて、部屋を涼しくしたりできます。
IRKit - iPhone,iPadを使って外出先からエアコン等の家電を操作できる学習リモコン

使い方

使い方はアプリにて詳しく紹介されているので、まずはIRKitシンプルリモコンをダウンロードして下さい。
Android: IRKitシンプルリモコン - Google Play の Android アプリ
iOS: IRKitシンプルリモコンを App Store で
主に行う作業はデバイスの追加とリモコンボタンの追加です。

デバイスの追加

アプリを開いてデバイスの追加を選択します。
f:id:gokuraku104robot:20170907132627p:plain:w500
あとはアプリの案内通りに設定すればデバイスを追加できますが、私はここでつまづいてかなり時間をとられました。IRKitが家のWifiを見つけられずWifiの設定や仕様を確かめたり、再起動したりしてみてもうまく行かず、最終的にスマホを機内モードにしてからスマホのWifiのみをONにするとIRKitがWifiをうまく見つけられました。
うまくいかない場合はこちらが参考になります。
Frequently Asked Questions | IRKit

ボタンの追加

デバイスが設定できたらボタンを追加します。
f:id:gokuraku104robot:20170907133242p:plain:w500
私は照明のリモコンとエアコンのリモコンを追加しました。
f:id:gokuraku104robot:20170907133552p:plain:w500
ボタンを追加していくと分かりますが、リモコン内の状態によって同じボタンでも信号を変えている場合があります。例えばエアコンの入切でもリモコンが切の状態で押した場合は入の信号が、入の状態で押した場合は切が送信されるので、1つのボタンでも2通り記録させる必要があります。設定温度の上下もリモコン内の設定温度の数値を送信している(28℃なら28℃という情報を送信している)場合は設定温度ごとに記録させる必要があります。例えば28,27,26℃くらいを記録しておけば、とりあえずの温度調整はできます。
当然ながらIRKitはリモコンの状態や機器の状態を追えないので、ONの信号を送って、それが確実に機器に受理されたかどうかは分かりません。今後、光や音を使って機器の状態を把握できるようになれば面白いと考えています。
例えばカーネギーメロン大学のLAPUTさんが開発したSynthetic Sensorsみたいな感じにできたら良いと考えています。
MIT Tech Review: コンセントに挿すだけで家中をスマートにする全部のせセンサー
Gierad Laput | Synthetic Sensors

設置方法(例)

設置場所は部屋を俯瞰できるような位置が良いです。どのデバイスからもIRKitの赤外線が届くような位置をスマホからボタンを押しながら探ります。理想的には神棚みたいなところに置くのが一番だと思っています。ただ一般家庭に今時、神棚なんて無いと思いますし、そこに置いてしまっていいのかという問題もありますので、壁美人とワイヤーを使ってIRKitを設置する場所を作成します。

材料

  • ワイヤーネット(100均)
  • ワイヤーバスケット(100均)
  • 壁美人

材料は100均で売っているワイヤーネットやワイヤーバスケットです。ワイヤーネットを壁に固定するのに壁美人を使用しています。

設置した様子です。
f:id:gokuraku104robot:20170907140335p:plain:w500
もう少し美的にやってみたかったのですが、私のセンスではこれが限界です。

参考サイト
haikara.news