今回使用した実験機器
-
ESP32:Wi-Fi と Bluetooth を内蔵しており,低コストで低消費電力なマイクロコントローラである.
-
BMX055:9 軸 (加速度 3 軸,ジャイロ 3 軸,磁気コンパス3 軸) センサを扱いやすいパッケージでまとめられたセンサモジュールである.
加速度センサから移動距離に変換する
加速度センサから取得した値は,時間と加速度のx, y, zである.それらの値が入ったcsvファイルを読み込んで,移動距離に変換している.今回は,加速度センサz軸のみ使用して計算を行っている.
- 加速度センサから値を取得するプログラム
https://github.com/cdsl-research/C0A20109/blob/8bdf883939ff1123ec5b66a6bd2332fc5da78cb9/accl_log.py
accl_distance.py
from csv import reader
import math
#csv読み込み
def csv_file(file):
with open(file, 'r') as csv_file:
csv_reader = reader(csv_file)
data_header = next(csv_reader) #一行目を出力
data = list(csv_reader)
return data
#計測時間処理
def time(data):
elapsed_time = 0
time_list = []
elapsed_time_list = []
for i in range(len(data)-1):
time_list.append(float(data[i+1][0]) - float(data[i][0]))
elapsed_time += time_list[i]
elapsed_time_list.append(elapsed_time)
#print(elapsed_time[i])
return time_list, elapsed_time_list
#z軸データ処理
def accl_z(data):
z_list = []
abs_z_list = []
for i in range(len(data)-1):
z_list.append(float(data[i+1][3]) - float(data[0][3]))
abs_z_list.append(math.fabs(z_list[i]))
#print(z[i])
#print(absolutely_z[i])
return z_list, abs_z_list
#速度計算
def speed(data, abs_z, time):
speed_list = []
for i in range(len(data)-2):
speed_list.append(((abs_z[i] + abs_z[i+1]) * time[i]) / 2)
#print(speed[i])
return speed_list
#移動距離計算
def distance(data, speed, time):
distance_sum = 0
distance_list = []
distance_sum_list = []
for i in range(len(data)-3):
distance_list.append(((speed[i] + speed[i+1]) * time[i]) / 2)
distance_sum += distance_list[i]
distance_sum_list.append(distance_sum)
return distance_sum_list
file = "accl.csv"
data = csv_file(file)
time, elapsed_time = time(data)
z, abs_z = accl_z(data)
speed = speed(data, abs_z, time)
distance_sum = distance(data, speed, time)
[実験結果] 移動距離の推移
これは,実際の距離が15mの状態を歩行した実験である.はじめに5秒間停止し,15m歩行して,再び5秒間停止している.
結果:12.6[m]
加速度センサから取る値の注意点
身体に加速度センサを取り付ける方法によって加速度の値の変動が大きいので,注意が必要です.(上記の実験は,腰にテープで取り付けた際の結果)