def BMXstuckDetection(mP, bmxThd, measureCount, countThd, mode=0):
    global aveinit, stuckCount
    returnVal = 0
    if mode == 0:
        for i in range(5):
            bmxinit = BMX055.bmx055_read()
            print(i, "init:", bmxinit[0:6])
            aveinit = aveinit + bmxinit[5]
        aveinit = aveinit / 5
        #print('aveinit', aveinit)
        Motor.motor(-mP, mP, 0.5)

    for i in range(measureCount):
        bmxnow = BMX055.bmx055_read()
        print(i, "now:", bmxnow[5])
        if math.fabs(bmxnow[5] - aveinit) < bmxThd:
            stuckCount = stuckCount + 1
            #print('stuckCount', stuckCount)
            if stuckCount > countThd:
                print("stuck DA YO NE ?")
                #Motor.motor(0, 0, 2)
                returnVal = 1
                break
        else:
            stuckCount = 0

    if mode == 0:
        Motor.motor(0, 0, 2)

    return returnVal
def readCalData(filepath):
    count = 0
    while count <= 100:
        bmx055data = BMX055.bmx055_read()
        with open(filepath, 'a') as f:
            for i in range(6, 8):
                #print(str(bmx055data[i]) + "\t", end="")
                f.write(str(bmx055data[i]) + "\t")
            #print()
            f.write("\n")
        count = count + 1
        time.sleep(0.1)
    Motor.motor(0, 0, 1)
def stuckDetection(nLat=0, nLon=0):
    global oLat
    global oLon
    global stuckNum
    global stuckStatus
    distance = 0.0
    angle1, angle2 = 0.0, 0.0
    rollCount = 0

    for i in range(10):
        bmx055data = BMX055.bmx055_read()
        if (math.fabs(bmx055data[0]) >= 6):
            rollCount = rollCount + 1
        time.sleep(0.05)

    if (rollCount >= 8):
        #if rover has rolled over
        if (not stuckStatus == 1):
            stuckNum = 0
        stuckStatus = 1
        stuckNum = stuckNum + 1
    elif (not nLon == 0.0):
        distance, angle1, angle2 = RunningGPS.calGoal(nLat, nLon, oLat, oLon,
                                                      0.0)
        if (distance <= 5):
            #if rover doesn't move
            if not stuckStatus == 2:
                stuckNum = 0
            stuckStatus = 2
            stuckNum = stuckNum + 1
        else:
            stuckStatus = 0
            stuckNum = 0
        oLat = nLat
        oLon = nLon
    else:
        stuckStatus = 0
        stuckNum = 0
    print(stuckStatus, stuckNum, distance)
    return stuckStatus, stuckNum
Exemple #4
0
import sys

sys.append.path("/home/pi/git/kimuralab/SensorModuleTest/BMX055")
sys.append.path("/home/pi/git/kimuralab/SensorModuleTest/Motor")
sys.append.path("/home/pi/git/kimuralab/Other")

import time
import traceback

import BMX055
import Motor
import Other

if __name__ == "__main__":
    BMX055.bmx055_setup()
    t_start = time.time()
    while (time.time() - t_start <= 3):
        lp, lr = Motor.motor(50, 50)
        Other.saveLog("bmx055data.txt", lp, lr, BMX055.bmx055_read())

    t_start = time.time()
    while (time.time() - t_start <= 3):
        lp, lr = Motor.motor(0, 0)
        Other.saveLog("bmx055data.txt", lp, lr, BMX055.bmx055_read())
    x_csv = x_csv / 70 * myoutput.beta[1]
    y_csv = y_csv / 70 * myoutput.beta[0]

    cal_data = [x_ave, y_ave, myoutput.beta[1] / 100, myoutput.beta[0] / 100]
    return cal_data


def readDir(calData, bmx055data):
    return math.atan2(
        (bmx055data[6] - calData[0]) / calData[2],
        (bmx055data[7] - calData[1]) / calData[3]) * 180 / math.pi


if __name__ == '__main__':
    try:
        BMX055.bmx055_setup()
        targetVal = 300
        Kp = 0.9
        Ki = 1.1
        Kd = 0.2
        dt = 0.05
        mPL, mPR, mPS = 0, 0, 0
        roll = 0
        time.sleep(1)
        fileP = Other.fileName("calData", "txt")

        print("Calibration Start")
        Motor.motor(0, 30, 1)
        while (math.fabs(roll) <= 720):
            mPL, mPR, mPS, bmx055data = pidControl.pidSpin(
                targetVal, Kp, Ki, Kd, dt)