GPS・QZSS ロボットカーコンテスト 2016


10月23日に 東京海洋大学 で開催された GPS・QZSS ロボットカーコンテスト 2016 を見学しました。

会場は、明治丸の隣の芝のあるグランドです。
会場に着くと 明治丸 がお出迎えしてくれます。
20161022_gis_photo1 20161023_gps_meijimaru

コンテストの内容は、GPS測位による自動運転です。
競技は2種類あり、ダブルパイロンレースと アプリコンテストです。

ダブルパイロンレース
2箇所に置かれたパイロン(位置座標)を8の字に回ります。
14チームが参加しました。
結果は、大きく2つの傾向に分かれました。
なんとか1周できるか・できないかと、何周も安定して周回できるです。
GPS測位はもっと簡単なのかと思いしたが、自分とパイロンの相対位置をうまく判定できない感じです。
GPS測位だけだと点の情報なので、車体がどっち向きになっているかで、操縦の仕方が変わります。
その辺を、コンパスやジャイロを組合せて判定するのですが、これが難しいみたいでした。
20161023_gps_car_1 20161023_gps_car_2 20161023_gps_car_3
20161023_gps_car_4 20161023_gps_car_5

多くの機種は、コントローラとしてマイコンに自作のプログラムを搭載したものを使用していましたが、1つだけドローン用のコントローラ APM 2.6 を使用したものがありました。
これは、コントローラ自身に位置を覚える機能があり、位置を何点か指定すると、自動で周回するそうです。
20161023_gps_aps_1

アプリコンテスト
今回初めての企画です。
車体は、主催者側が用意したものを使います。
参加者は、車体をBluetooth経由で制御するアンドロイド・スマホのアプリを作成します。
7x7のマス目(位置座標)が用意され、当日指定された場所を巡回します。
参加は2チームでした。
結果は、散々なものでした。
1チームは車体が全く動かず、1チームは走り回るだけで目標には到達できなかった。
その理由は、通信の間隔は1秒毎と遅いためです。
通信の間隔に対して、車体の走行速度が速いため、指示が届いた時点では違う場所に居るらしい。
来年もやるそうなので、ぜひ成功するチームが出て欲しいですね。
20161023_gps_app_1 20161023_gps_app_2

最後にお土産として、茄子を頂きました。
20161023_gps_eggplant
当日の様子は、YouTube で公開されています。
3時間あるので、心して見てください。w
なお、最初の25分くらいまで、画面が映らず、音声だけです。


さくら IoT – 温湿度センサー HDC1000


さくら IoT と 温湿度センサー HDC1000 で温湿度を観測する

ハンズオン資料
さくらインターネットから、ハンズオンの資料が公開されています。
http://www.slideshare.net/sakura_pr/ss-64599802

センサーとして HDC1000 を、WebSocket クライアントとして node-red を使っています。
HDC1000 は、秋月電子で販売されています。
HDC1000使用 温湿度センサーモジュール

いくつか気になったことがあります。
(1) HDC1000 の +V を Arduino の 3.3V に接続している。
Arduino は 5V 動作なので、HDC1000 も 5V にすべきでしょう。
(2) node-red のインストールを、すべて root ユーザーで行っている。
yum 以外は、一般ユーザで設定できますね。
(3) node-red での動作確認が WebSocket を受信するところまでです。
これは、時間の関係かもしれないが、もうちょっとやりたいですよね。
WebSocket の受信だけなら、WEBブラウザーでも出来るし。
拙作の javascript 版

今回やったこと
HDC1000 のデータを node-red で受信するところまでは、資料と同じです。
その先として、グラフ表示をしてみました。

環境は、CentOS ではなく、MAC で構築しました。
インストールは、下記を参考にしてください。
brew で node をインストールする
MAC に Node-RED をインストールする
Node-RED でグラフ表示をする

センサ側
HDC1000 を通信モジュールに接続する
20161013_sakura_hdc1000

node-red の処理
WebSocket の受信から、http 出力にする flow がわからなかったので。
いったん、WebSocket で受信したデータをファイルに保存しました。
ファイルを読み出して、http 出力に結びつけました。

Flow
Flow は Github で公開しました。
20161013_sakura_flow

parser
WebSocket で受信したデータを cvs 形式にする
コード parser.js

text
一番新しいデータが、上になるように、逆順に並び替える
コード text.js

temperature、humidity、count
最新の100個のデータを、グラフ形式に変換する
コード temperature.js

結果
20161013_sakura_temperature


Node-RED でグラフ表示をする


Node-RED のグラフ機能として、
Google Chart のノードが提供されています。

他には、下記のようなサービスと連携することでグラフ表示ができるようです。
dashing
freeboard
pubnub
atlasboard

インストール

$ npm install  -g node-red-contrib-googlechart

確認
線グラフを表示します。
データは、Google Chart のもの を使いました。

flow
20161012_nodered_flow

chart の設定
20161012_nodered_chart_setting

function ノードにて、グラフのデータを用意する

msg.payload = [
{Day:1,  Galaxy:37.8, Avengers:80.8, Transformers:41.8},
{Day:2,  Galaxy:30.9, Avengers:69.5, Transformers:32.4},
{Day:3,  Galaxy:25.4,   Avengers:57, Transformers:25.7},
{Day:4,  Galaxy:11.7, Avengers:18.8, Transformers:10.5},
{Day:5,  Galaxy:11.9, Avengers:17.6, Transformers:10.4},
{Day:6,   Galaxy:8.8, Avengers:13.6,  Transformers:7.7},
{Day:7,   Galaxy:7.6, Avengers:12.3,  Transformers:9.6},
{Day:8,  Galaxy:12.3, Avengers:29.2, Transformers:10.6},
{Day:9,  Galaxy:16.9, Avengers:42.9, Transformers:14.8},
{Day:10, Galaxy:12.8, Avengers:30.9, Transformers:11.6},
{Day:11,  Galaxy:5.3,  Avengers:7.9,  Transformers:4.7},
{Day:12,  Galaxy:6.6,  Avengers:8.4,  Transformers:5.2},
{Day:13,  Galaxy:4.8,  Avengers:6.3,  Transformers:3.6},
{Day:14,  Galaxy:4.2,  Avengers:6.2,  Transformers:3.4}
];
return msg;

結果
20161012_nodered_chart

参考
Node-REDで線グラフ
見えるNode-RED!


MAC に Node-RED をインストールする


Node-RED は、ハードウェアデバイス、API、オンラインサービスなどを接続するためのツールです。
ボックスを接続する形式のグラフィックなツールです。
言語は JavaScript です。

Linux、Mac、Windows 環境で動作します。
IBM Bluemix、Amazon Web Services Microsoft Azure などのクラウド環境でも動作します。
node.js が必要です。

MAC へのインストール
(1) node のインストール
brew で node をインストールする

(2) node-red のインストール

$ npm install -g node-red

動作確認
Creating your first flow を試してみます。

flow
20161011_nodered_flow

結果
unixtime 形式の時刻が文字列に変換される
20161011_nodered_debug_1 20161011_nodered_debug_2


さくらの IoT Platform β


20161005_sakura_iot_beta

10月5日に、 さくらの IoT Platform の β サービスが発表されました。
通信モジュールの価格は、特価 4980円 です。
早速、ポッチしました。
さくらの IoT オンラインショップ

さくらインターネット – 『さくらのIoT Platform β』発表会
ASCII – モジュールと利用料で1万円切ったさくらのIoT Platform βがスタート
@IT – さくらのIoT Platformはベータを11月1日に開始、通信モジュールは4980円
Impress – 「さくらインターネット、「さくらのIoT Platform β」の申し込み受付を開始


さくらの夕べ IoT特別編


20161004_sakura_lt

10月1日、さくらインターネットで開催された 「さくらの夕べ IoT特別編」に参加しました。
さくらの IoT Platform の α版ユーザーが15名ほどが集まりました。

さくらインターネットから、11月開始されるβ版の説明がありました。
通信モジュールは小型化さて、α版の半分くらいになります。
写真撮影は不可という条件で、実物を見せてもらいました。
機能としてファイル転送が追加されたり、サービスとしてデータ保存のサービスが追加されるとのことです。
α版は無料でしたが、β版の通信モジュールは、有料で配布されます。
来週のCEATECで正式発表するそうです。

tsumugs から、Sharing Key というスマートロックが紹介されました。
さくらの IoTを採用した理由として、WiFiやBluetoothなどの通信手段の代わりに、3G/LTE回線を格安で使用できるためとのこと。
WiFiやBluetoothでは、空室物件にもインターネット環境を用意しておいたり、なぜか接続できなかったというトラブルが、ある程度避けられない。
そのため、スマートロックは賃貸物件にはほとんど使用されていないそうです。
賃貸物件のカギがスマートロックになると、何が起こる? 開発企業を独占取材

大阪の 共立電子 から、トイレの個室ドアにセンサーを取り付けて空き状況がわかる 「IoToilet」が紹介されました。
共立電子では、お客さんさんからの要望もあり、IoT に関するさまざまなアイデアを試行しているそうです。

テクニカルライターの大澤文孝さんから、ZigBee 搭載の TWE-Lite と組み合わせて、インターネットに温度データをアップロードした事例が紹介されました。
雑誌i/O に掲載したそうです。

私から、自作のセンサーボードと組み合わせた温度・湿度・気圧などの観測システムを紹介しました。
さくら IoT で温度・湿度を観測する

当日の様子は、私の事例も含めて、ASCIIのサイトに掲載されました。
発表直前β版もチラ見せ!「さくらのIoT」ユーザーのLT大会


gmail 経由でメール送信できない


Python などのプログラムで、メール送信すると、認証エラーになります。
これは、gmail のセキュリティが強化されたためです。
プログラム側で対応するのが、正当な対処だと思いますが。
暫定的に、gmail 側のセキュリティを弱くします。

「安全性の低いアプリ」にて、「安全性の低いアプリのアクセス」を「オンにする」にします。
20160905_gmail_auth

参考
安全性の低いアプリがアカウントにアクセスするのを許可する
クライアントでユーザー名とパスワードが受け入れられない


Python gmail 経由でメール送信する


Python にて gmail サーバー経由でメール送信するプログラム

import smtplib
from email.mime.text import MIMEText

def sendmail(from_addr, to_addr, subject, body):
	GMAIL_HOST = "smtp.gmail.com"
	GMAIL_PORT = 465
	GMAIL_USER = "ユーザ名"
	GMAIL_PASS = "パスワード"
	msg = MIMEText(body)
	msg['Subject'] = subject
	msg['From'] = from_addr
	msg['To'] = to_addr
	smtp = smtplib.SMTP_SSL(GMAIL_HOST, GMAIL_PORT)
	smtp.login(GMAIL_USER, GMAIL_PASS)
	smtp.sendmail(from_addr, [to_addr], msg.as_string())
	smtp.close()

# main
SUBJECT = "タイトル"
BODY = "本文"
FROM = "送信元メールアドレス"
TO = "送信先メールアドレス"
sendmail(FROM, TO, SUBJECT, BODY)

参考
Gmailで簡単にメール送信


Python メール送信


Python でメール送信するプログラム

import smtplib
from email.mime.text import MIMEText

def sendmail(from_addr, to_addr, subject, body):
	msg = MIMEText(body)
	msg['Subject'] = subject
	msg['From'] = from_addr
	msg['To'] = to_addr
	smtp = smtplib.SMTP()
	smtp.connect()
	smtp.sendmail(from_addr, [to_addr], msg.as_string())
	smtp.close()

# main
SUBJECT = "タイトル"
BODY = "本文"
FROM = "送信元メールアドレス"
TO = "送信先メールアドレス"
sendmail(FROM, TO, SUBJECT, BODY)

ネットにある例だと、connect() がなかったが、必要みたいです。

参考
メール送信 – Python入門から応用までの学習サイト