2017
03.07

釣竿の仕様とmatplotlibを使ったグラフの作成

Internship

インターン生(学部一年)の深谷です。

本番の釣りハッカソンまであと5日となり、開発もより完成品に近いものとなってきました。

今日の活動内容

  • 釣竿の組み立て
  • 釣竿のしゃくりの動きのコード実装
  • 回転検出部分のコード実装
  • プレゼン用資料作成

釣竿について

AIワカサギ釣り用の釣竿(試作)です。

釣竿を動かすサーボ、リールの役割をするモーター、制御をするRaspberry Piで構成されています。

サーボ部分はしゃくりと呼ばれる魚をおびき寄せるための動きと釣り上げる際に竿を上げる動きをします。しゃくりはセンサーの誤作動を招く恐れがあるためその間はセンサーが反応しないように決定しました。

モーター部分は巻き上げなどのリールの役割と正しくモーターを動かすための回転数や向きの計測をします。回転数の計測には先日紹介した磁力センサーを利用した形式を採用します。磁石とセンサーの数を増やし回転方向も取れるように改良中です。

Raspberry Piの部分はこれらの動きの制御や今回の醍醐味であるAI(機械学習)による魚が掛かったかの判定を行います。機械学習のためのデータをとる9軸加速度センサーは竿の先に取り付けてあります。

前日までの作業で主要なプログラムは完成したので今日は不足部分を補ったりプログラムを統括するといった作業でした。

matplotlibを使ったグラフの作成

9軸加速度センサーから受け取った情報を可視化するためにグラフを作成するプログラムを作りました。

スイッチを押した前後0.1秒間のデータを軸毎に表示します。

%matplotlib inlineのコメント部分を外すことでjupyterでも動作可能です。

 

<サンプルコード>

#coding: UTF-8
import matplotlib.pyplot as plt
import numpy as np
import FaBo9Axis_MPU9250
import time
import sys
import RPi.GPIO as GPIO
#matplotlib inline
#jupyter
mpu9250 = FaBo9Axis_MPU9250.MPU9250()
i=0
co=0
data_len=1001
value=[]
data=[]
title=["Accel x","Accel y","Accel z","Gyro x","Gyro y","Gyro z","Magnet x","Magnet y","Magnet z"]
ymi=[-20,-2000,-100]
yma=[20,2000,100]
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(5,GPIO.IN)
mpu9250.configMPU9250(0x00,0x03)
def plotgr():
    array = np.array(data)
    for j in range(0,9):
        plt.subplot(3,3,j+1)
        plt.title(title[j])
        plt.ylim(ymin=ymi[j/3])
        plt.ylim(ymax=yma[j/3])
        plt.plot(array[:,j])
    plt.tight_layout()
    plt.show()

try:
    while True:
        if co>0:
            co+=1
        a = mpu9250.readAccel()
        g = mpu9250.readGyro()
        m = mpu9250.readMagnet()
        value=(a['x'],a['y'],a['z'],g['x'],g['y'],g['z'],m['x'],m['y'],m['z'])
        data.append(value)
        if len(data)==data_len+1:
            del data[0]
        if GPIO.input(5):
            if co==0 :
                co=1
        if co==(data_len+1)/2:
            co=0
            plotgr()
time.sleep(0.0001)

except KeyboardInterrupt:
    sys.exit()

<出力例>

Comment

  1. No comments yet.

  1. No trackbacks yet.

You must be logged in to post a comment.