2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonista on iPADで乗り物の揺れの違いを見るのをもう少し簡単にする

Last updated at Posted at 2018-10-17

はじめに

Matlab iOS も便利に使えるのがわかったのだが、Phtynistaを使えばその出来上りをHome Screenに置き、さらに手軽に可視化できそうだ。Pythonはほとんど使ったことがないが、Pythonista のExampleプログラムを基軸にネット情報を頼ってなんとかツールらしきものを作ってみた。

Example program

Phtyonista 3 をiPAD にインストール。いろいろ触ってみて、Open, This iPad, Examples, Plottingの中の Motion plot.py を少しだけ変えれば、とりあえず形になりそうだ。
#必要 modules
motion : Pythonista 3 独特のmoduleらしい。iOS のセンサのデータを所得できる。凄い❣️詳しくは、作者ページmotionから。他にも、locationのデータにもアクセスできる。
matplotlib.pyplot : プロット専用。
time : 定期的にデータを獲得するため。
numpy : 数値計算用。

motion module

詳しくは、上記のページから。ざっと、acceleration, gravity, attitude, magnetic field を取得。Matlab のそれと似ているが同じではない。今回は、motion.get_user_acceleration()を使う。オリジナルはmotion.get_gravity()を使用。

全コード

めんどくさいので、全コードを貼り付ける。オリジナルをほぼそのままところもあるので、**問題があるなら、教えてください!**もちろん、根本的な考え方やコードの間違いなどの指摘も大歓迎です!

やってる(と思っている)ことは、

  1. 時間とデータをストックするための名前(例えば、Shinkansen20181017とか)を入力させて
  2. その2秒後にデータを取り始め「名前.npy」でデータをセーブ
  3. 生のデータと、フーリエ変換したデータをプロットして「名前.png」でセーブ
    今回もデータ取得は100Hzに設定しておいた。プロットが少し見にくくなるので、Y軸のラベルはコメントアウト。
    これを、Add to Home Screen でホームスクリーンにおくと、いつでも好きなときにデータを取り始めることができる。
TransportSickness.py

import motion
import matplotlib.pyplot as plt
from time import sleep
import numpy as np
def main():
	duration = input('enter duration: ')
	duration = int(duration)
	name = input('enter data name: ')
	motion.start_updates()
	sleep(2)
	print('Capturing motion data...')
	num_samples = duration * 100
	data = []
	for i in range(num_samples):
		sleep(0.01)
		a = motion.get_user_acceleration()
		data.append(a)
	motion.stop_updates()
	np.save(eval('name'),data)
	print('Capture finished, plotting...')
	ft = np.fft.fftn(data)
	p2=np.absolute(ft/num_samples)
	p1=p2[np.arange(0,int(num_samples/2)+1),]
	p1[1:] = 2*p1[1:]
	f=100*np.arange(0,int(num_samples/2)+1)/num_samples
	sample_number = [x*0.01 for x in range(num_samples)]
	plt.subplot(131)
	for i, color, label in zip(range(3), 'rgb', 'XYZ'):
		plt.plot(sample_number,[a[i] for a in data], color, label = label, lw=2)
	plt.grid(True)
	plt.xlabel('Sec')
	#plt.ylabel('Acceleration')
	plt.subplot(132)
	for i, color, label in zip(range(3), 'rgb', 'XYZ'):
		plt.plot(f,p1[:,i], color, label = label, lw=2)
	plt.grid(True)
	plt.xlabel('Hz')
	#plt.ylabel('Spectrum')
	plt.gca().set_xlim([0, 20.0])
	plt.subplot(133)
	for i, color, label in zip(range(3), 'rgb', 'XYZ'):
		plt.plot(f,p1[:,i], color, label = label, lw=2)
	plt.grid(True)
	plt.xlabel('Hz')
	#plt.ylabel('Spectrum')
	plt.gca().set_xlim([0, 2.0])
	plt.legend()
	plt.show()
	plt.savefig(eval('name'))	
if __name__ == '__main__':
	main()

考察というより感想

  1. センサーのデータに簡単にアクセスできるというのは、かなり嬉しい。
  2. Matlab を少しだけ齧った身としては一番役に立ったのはNumpy for Matlab Users
  3. プロットの見た目は、Matlabのそれに似ている。
  4. トグルでデータ取得のオンオフできるともっと使いやすいかも。
  5. Phtonistaはlocation,phtos,reminderなどにもアクセスすることができるみたいなので、いろいろ遊べるようになりたい。
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?