質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.77%

AttributeError: 'float' object has no attribute 'time'

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,340

score 97

前提・実現したいこと

現在、ラズパイでpythonを使ってジャイロセンサーから値を取得しようとしています。
その時にでたエラーで困っています。
処理にかかった時間を取得して角速度から角度を算出したいです。
お分かりの方がいましたらコメントお願いします。

発生している問題・エラーメッセージ

Traceback (most recent call last):
  File "gyro.py", line 121, in <module>
    t1 = time.time()
AttributeError: 'float' object has no attribute 'time'

該当のソースコード

# -*- coding: utf-8 -*-
#!/usr/bin/python

# import module
import smbus            # use I2C
import math             # mathmatics
import  time
from time import sleep  # time module

#
# define
#
# slave address
DEV_ADDR = 0x68         # device address
# register address
ACCEL_XOUT = 0x3b
ACCEL_YOUT = 0x3d
ACCEL_ZOUT = 0x3f
TEMP_OUT = 0x41
GYRO_XOUT = 0x43
GYRO_YOUT = 0x45
GYRO_ZOUT = 0x47
PWR_MGMT_1 = 0x6b       # PWR_MGMT_1
PWR_MGMT_2 = 0x6c       # PWR_MGMT_2

new_degree=0
sum_degree=0
time=0.018

bus = smbus.SMBus(1)
                        # Sleep解除.
bus.write_byte_data(DEV_ADDR, PWR_MGMT_1, 0)

#
# Sub function
#
# 1byte read
def read_byte(adr):
    return bus.read_byte_data(DEV_ADDR, adr)
# 2byte read
def read_word(adr):
    high = bus.read_byte_data(DEV_ADDR, adr)
    low = bus.read_byte_data(DEV_ADDR, adr+1)
    val = (high << 8) + low
    return val
# Sensor data read
def read_word_sensor(adr):
    val = read_word(adr)
    if (val >= 0x8000):         # minus
        return -((65535 - val) + 1)
    else:                       # plus
        return val
#
# 温度
#
def get_temp():
    temp = read_word_sensor(TEMP_OUT)
    x = temp / 340 + 36.53      # data sheet(register map)記載の計算式.
    return x

#
# 角速度(full scale range ±250 deg/s
#        LSB sensitivity 131 LSB/deg/s
#        -> ±250 x 131 = ±32750 LSB[16bitで表現])
#   Gyroscope Configuration GYRO_CONFIG (reg=0x1B)
#   FS_SEL(Bit4-Bit3)でfull scale range/LSB sensitivityの変更可.
#
# get gyro data
def get_gyro_data_lsb():
    x = read_word_sensor(GYRO_XOUT)
    y = read_word_sensor(GYRO_YOUT)
    z = read_word_sensor(GYRO_ZOUT)
    return [x, y, z]
def get_gyro_data_deg():
    x,y,z = get_gyro_data_lsb()
    x = x / 131.0
    y = y / 131.0
    z = z / 131.0
    return [x, y, z]

#
# 加速度(full scale range ±2g
#        LSB sensitivity 16384 LSB/g)
#        -> ±2 x 16384 = ±32768 LSB[16bitで表現])
#   Accelerometer Configuration ACCEL_CONFIG (reg=0x1C)
#   AFS_SEL(Bit4-Bit3)でfull scale range/LSB sensitivityの変更可.
#
# get accel data
def get_accel_data_lsb():
    x = read_word_sensor(ACCEL_XOUT)
    y = read_word_sensor(ACCEL_YOUT)
    z = read_word_sensor(ACCEL_ZOUT)
    return [x, y, z]
# get accel data
def get_accel_data_g():
    x,y,z = get_accel_data_lsb()
    x = x / 16384.0
    y = y / 16384.0
    z = z / 16384.0
    return [x, y, z]

#
# Main function
#
i=0
gyro_z=[]
rotation_degree=[]
sum_degree=0

while  i<100:

    # 温度.
     #temp = get_temp()
    # 小数点以下第1位まで表示.
    #print  ('temperature[degrees C]:')
    #print ('%04.1f' % temp)
    #print ('||')
    # 角速度.
     #gyro_x,gyro_y,gyro_z = get_gyro_data_deg()
    print('aaaaaaaa')
    t1 = time.time()
    print('aaaaaaaa')
    gyro_z.append(get_gyro_data_deg())
    t2 = time.time()
    elapsed_time=t2-t1
    # 小数点以下第3位まで表示.
    #print ('gyro[deg/s]')
    #print ('x: %08.3f' % gyro_x)
    #print ('y: %08.3f' % gyro_y)
    #print ('z: %08.3f' % gyro_z)
    #print ('||')
    # 加速度
    #accel_x,accel_y,accel_z = get_accel_data_g()
    # 小数点以下第3位まで表示.
    #print ('accel[g]')
    #print ('x: %06.3f' % accel_x)
    #print ('y: %06.3f' % accel_y)
    #print ('z: %06.3f' % accel_z)

    #print ('\n')      # 改行.
    print('aaaaaaaa')

    rotation_degree.append(gyro_z*elapsed_time)
    #sum_degree+=rotation_degree
    #print('degree: %08.3f' % sum_degree)
    #print(sum_degree)
    #sleep(time)
    i=i+1

for i in range(100):
    print ('gyro[deg/s]')
    print('z: %08.3f' % gyro_z(i))
    sum_degree+=rotation_degree(i)
    print('degree: %08.3f' % sum_degree)
    print('\n')
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

import  time として time モジュールを読み込んでいるのですが、その後
time=0.018 と、 time という変数に0.018を代入しています。
このため、モジュールとしての time にアクセスできなくなっています。

変数 time の名前を timeval など別の名前に変えましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/05 13:14

    本当ですね。
    できました!ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る