首页 > 解决方案 > GPS 程序运行 3 个平局然后停止

问题描述

我正在使用 Glonas ublock 7 GPSD。出于某种原因,我的程序运行了 3 次,然后停止了,我不知道为什么。当我尝试从另一个程序调用该函数时,它会做同样的事情。

from gps import *

def getPositionData(gpsd):
    nx = gpsd.next()
    if nx['class'] == 'TPV':
        lat = getattr(nx,'lat', "Unknown")
        lon = getattr(nx,'lon', "Unknown")
        return lat, lon
    return 0,0

if __name__ == "__main__":
    gpsd = gps(mode=WATCH_ENABLE|WATCH_NEWSTYLE)
    while True:
        print(getPositionData(gpsd))
    

程序的另一部分:

import serial
import adafruit_mpl3115a2 as baro_lib
import adafruit_bno055 as imu_lib
import os
import math
import board
import init_barometer
import init_imu
import gps_read
from gps import *
import photo_lib


if __name__ == "__main__":
    
    
    os.system('sudo fuser -k /dev/ttyUSB0')
    
    ser = serial.Serial(port='/dev/ttyUSB0',baudrate = 57600, parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1)
    ser.write(("\r\n").encode("utf-8"))
    ser.write(("#######################").encode("utf-8"))
    ser.write(("CANSat").encode("utf-8"))
    ser.write(("#######################").encode("utf-8"))
    ser.write(("\r\n").encode("utf-8"))
    i2c = board.I2C()
    
    ser.write(("\r\n").encode("utf-8")+("Barometer Starting").encode("utf-8")+("\r\n").encode("utf-8"))
    # barometer setup
    barometer = baro_lib.MPL3115A2(i2c)
    
    # barometer intialisation routine
    init_barometer.initialise(ser, barometer)

    
    # imu setup
    ser.write(("\r\n").encode("utf-8")+("IMU Starting").encode("utf-8")+("\r\n").encode("utf-8"))
    IMU = imu_lib.BNO055_I2C(i2c) 
    IMU.mode = imu_lib.NDOF_MODE

    # imu initialisation routine
    init_imu.initialise(ser, IMU)
    IMU.mode = imu_lib.M4G_MODE
    ser.write(("\r\n").encode("utf-8")+("GPS Starting").encode("utf-8")+("\r\n").encode("utf-8"))
    # GPS initialisation
    gpsd = gps(mode=WATCH_ENABLE|WATCH_NEWSTYLE)
    
    start = False
    stop = False
    
    ser.write(("\r\n").encode("utf-8")+("System Ready").encode("utf-8")+("\r\n").encode("utf-8"))
    while True:
        command = str(ser.readline()).lower()
        if command[2:][:-1] == "calibrate-barometer" :
            init_barometer.initialise(ser, barometer)
        elif command[2:][:-1] == "calibrate-imu" :
            init_imu.initialise(ser, IMU)
        elif command[2:][:-1] == "calibrate-gps" :
            pass
        elif command[2:][:-1] == "test" :
            ser.write(("\r\n").encode("utf-8")+("CANSat here...testing...1 2 3").encode("utf-8")+("\r\n").encode("utf-8"))
        elif command[2:][:-1] == "start" :
            ser.write(("\r\n").encode("utf-8")+("Starting data capture").encode("utf-8")+("\r\n").encode("utf-8"))
            start = True
            stop = False
        elif command[2:][:-1] == "stop" :
            ser.write(("\r\n").encode("utf-8")+("Starting data capture").encode("utf-8")+("\r\n").encode("utf-8"))
            stop = True
            start = False
        elif command[2:][:-1] == "reboot" :
            ser.write(("CANSat - Rebooting...").encode("utf-8"))
            os.system("restart")
        elif command == "b''":
            pass
        elif command[2:][:-1] == "help":
            ser.write(("\r\n").encode("utf-8")+(" 'calibrate-imu'       : Calibrates the IMU").encode("utf-8")+("\r\n").encode("utf-8"))
            ser.write(("\r\n").encode("utf-8")+(" 'calibrate-gps'       : Calibrates the GPS").encode("utf-8")+("\r\n").encode("utf-8"))
            ser.write(("\r\n").encode("utf-8")+(" 'calibrate-barometer' : Calibrates the Barometer").encode("utf-8")+("\r\n").encode("utf-8"))
            ser.write(("\r\n").encode("utf-8")+(" 'reboot'              : Reboots raspberry pi").encode("utf-8")+("\r\n").encode("utf-8"))
            ser.write(("\r\n").encode("utf-8")+(" 'stop'                : Stop data capture").encode("utf-8")+("\r\n").encode("utf-8"))
            ser.write(("\r\n").encode("utf-8")+(" 'start'               : Starts data Capture").encode("utf-8")+("\r\n").encode("utf-8"))
            
            
        else:
            print(command)
            ser.write(("CANSaT - Wrong Command").encode("utf-8"))
        
        if start == True and stop == False:
            
            altitude = barometer.altitude
            
            angX = round(IMU.euler[1],2)
            angY = round(IMU.euler[2],2)
            angZ = round(IMU.euler[0],2)
            
            lat, lon =  gps_read.getPositionData(gpsd)
            

            
            ser.write(("\r\n").encode("utf-8")+("Altitude: "+str(altitude)).encode("utf-8")+("\r\n").encode("utf-8"))
             
            if lat == "Unknown" or lon == "Unkown":
                ser.write(("\r\n").encode("utf-8")+("GPS not acquired").encode("utf-8")+("\r\n").encode("utf-8"))
            
            ser.write(("\r\n").encode("utf-8")+("x Angle: "+str(angX)).encode("utf-8")+("\r\n").encode("utf-8"))
            ser.write(("\r\n").encode("utf-8")+("y Angle: "+str(angY)).encode("utf-8")+("\r\n").encode("utf-8"))
            ser.write(("\r\n").encode("utf-8")+("z Angle: "+str(angZ)).encode("utf-8")+("\r\n").encode("utf-8"))
            
            image = photo_lib.TakePhoto()
            objects = photo_lib.locateobjects(image)
            coordinates = photo_lib.coordtogps(21 , 23, altitude, image, objects,256)
            
            

这就是正在发生的事情,它不应该停止,但它会在第三次尝试时停止!

程序在第四次尝试时停止

任何帮助将不胜感激!

标签: pythonraspberry-pigps

解决方案


推荐阅读