python - 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)
这就是正在发生的事情,它不应该停止,但它会在第三次尝试时停止!
任何帮助将不胜感激!
解决方案
推荐阅读
- firebase - 从 Firebase Analytics 中排除 iOS 设备
- android - 如何在android中获取GPS关闭事件?
- windows - Plink 输出日志编码名称?
- list - Prolog - 确定列表中重复的数量并将数量转换为指数
- ibm-cloud - IBM Chatbot Assistant:处理多个实体
- php - 当我想注册时,角度帖子功能给我一个问题
- reactjs - React Router v4 路由区别
- swift - 斯威夫特:锁匠不更新数据
- node.js - 无法在 ionic 3 应用程序的 ios 设备上存储 cookie
- php - 如何限制孩子在PHP中返回的深度