2017-12-05 12 views
-1

私は私のラズベリーパイでコーディングのためのPythonを使用しているgpsチップを使用しています。私はgpsからスピードを取得し、1秒のループを使用してループでmphに変換したいと思います。Pythonでgpsから速度を検出するにはどうすればよいですか?

これはどのようにかなり正確なデータで達成できますか?私は現在次のコードを使用しています:

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 mphずれているようです。

+0

開始地点(試したコード、チップからの出力など)を入力してください – brddawg

+0

m/sまたはmphをお探しですか?あなたのデータはm/sであり、あなたはそれをmphと比較しています。 – poompt

+0

mphに変換したいと思います – Byrne

答えて

0

チップからGPS座標を取得し、cartesian coordinatesに変換し、前の秒から現在の秒を減算する必要があります。 2つのポイント間の距離は、1秒間に移動した距離です。これは低速ではノイズが多いので、何らかのフィルタリングをしたいかもしれません。

関連する問題