如何从python中的gps检测速度?

2024-10-04 11:26:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个gps芯片和我的树莓皮使用python编码,我想从全球定位系统得到速度,并转换成英里每小时在一个循环使用1秒的循环。在

如何用相当精确的数据实现这一点?我当前正在使用以下代码:

From gps import *
import time
import threading
import math
import RPi.GPIO as GPIO ## Import GPIO library
import time ## Import 'time' library. Allows us to use 'sleep'

GPIO.setmode(GPIO.BOARD) ## Use board pin numbering
GPIO.setup(40,GPIO.OUT) ## Setup GPIO Pin 40 to OUT

class GpsController(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.gpsd = gps(mode=WATCH_ENABLE) #starting the stream of info
        self.running = False

    def run(self):
        self.running = True
        while self.running:
            # grab EACH set of gpsd info to clear the buffer
            self.gpsd.next()

    def stopController(self):
        self.running = False

    @property
    def fix(self):
        return self.gpsd.fix

    @property
    def utc(self):
        return self.gpsd.utc

    @property
    def satellites(self):
        return self.gpsd.satellites

mph = 15

if __name__ == '__main__':
    # create the controller
    gpsc = GpsController() 
    try:
        # start controller
        gpsc.start()
        while True:
            if gpsc.fix.speed < mph :
                print "speed is under 15 mph",gpsc.fix.speed
                print mph
                GPIO.output(40,GPIO.HIGH)
                time.sleep(1)
                GPIO.output(40,GPIO.LOW)
                time.sleep(1)
                #GPIO.output(40,True)
                #time.sleep(.5)
                #GPIO.output(40,False)
                #time.sleep(.10)

            elif gpsc.fix.speed > mph :
                print "speed (m/s) ",gpsc.fix.speed
                #    GPIO.cleanup()

            else:
                print "fine"
                #GPIO.cleanup()

            #print "latitude ", gpsc.fix.laif 
            #print "longitude ", gpsc.fix.longitude
            #print "time utc ", gpsc.utc, " + ", gpsc.fix.time
            #print "altitude (m)", gpsc.fix.altitude
            #print "eps ", gpsc.fix.eps
            #print "epx ", gpsc.fix.epx
            #print "epv ", gpsc.fix.epv
            #print "ept ", gpsc.gpsd.fix.ept
            #print "speed (m/s) ", gpsc.fix.speed
            #print "climb ", gpsc.fix.climb
            #print "track ", gpsc.fix.track
            #print "mode ", gpsc.fix.mode
            #print "sats ", gpsc.satellites
            time.sleep(1)

#Error
    #except:
    #   print "Unexpected error:", sys.exc_info()[0]
    #  raise

    #Ctrl C
    except keyboardInterrupt:
        print "User cancelled"

    finally:
        print "Stopping gps controller"
        gpsc.stopController()
        #wait for the thread to finish
        gpsc.join()

    print "Done"

GPIO.cleanup()

目前的代码给我一个读数,但它似乎是大约15英里每小时不同步。在


Tags: thetoimportselfgpiotimedefsleep
1条回答
网友
1楼 · 发布于 2024-10-04 11:26:07

您需要从芯片中获取GPS坐标,将其转换为cartesian coordinates,并从前一秒减去当前秒。两点之间的距离就是你在一秒钟内所走的距离。这将是噪音在低速,所以你可能想做一些过滤的种类。在

相关问题 更多 >