RTK-GPS och autostyrning

Berätta om dina pågående projekt.
Användarvisningsbild
rjl11
Inlägg: 371
Blev medlem: 1 november 2010, 18:25:27
Ort: Herrljunga

Re: RTK-GPS och autostyrning

Inlägg av rjl11 »

Äntligen klar med en första version av koden som funkar i teorin. Det går både att sätta punkt A och B, ställa redskapsbredd,
autostyrning med styrvinkel feedback, visning av begärd styrvinkel med rc-servo, status dioder för bredd och punkter.
Anslutning genom tcp till rtklib i tcpgps.py
anslutnign till arduino med serieport.
Härva.JPG
tm1638 interface.JPG
Nu kan jag koncentrera mig på att bygga in allt i lämplig låda och montera rattmotor på en av traktorerna.

Koden:

Kod: Markera allt

# -*- coding: utf-8 -*-

import tcpgps
import serial
import time
import gps
from math import pi

#Redskaps bredd i meter
w = 2.0
v = w - w*2 #Spegelvänd redskapsbredd

#Skapa variabler
latA = 58.1000
lonA = 12.0000
latB = 58.0000
lonB = 12.9000

global latD
global lonD
latD = 58.0000 # för att inte rikting skall få spratt vid uppstart
lonD = 12.0000

ser = serial.Serial('com35',9600) # serieport till arduino
ser.setDTR(level=False)
time.sleep(2)

text = "hej"

def xt_main():
    line = tcpgps.nmea() # Hämta nuvarande position
    if line is not None:  # Om position finns fortsätt

        global lat
        global lon
        lat, lon = line   # Två globala floats från en tuple
        
        xt = gps.cross_track( latA, lonA, latB, lonB, lat, lon) # Räkna ut spårfel

        #v = w - w*2 #Spegelvänd redskapsbredd
        
        if xt > w * 0.7:        # Om spårfel är mer än 70 procent av redskaps bredd
            while xt > w * 0.7:
                xt = xt - w     # Flytta linje med en redskaps bredd mindre           
            #print xt,"\r",      # Skriv ut aktuellt spårfel
            return xt

        elif xt < v * 0.7:      # Om spårfel är mer än 70 procent av redskaps bredd
            while xt < -v * 0.7:
                xt = xt + w     # Flytta linje med en redskaps bredd mer        
            #print xt,"\r",      # Skriv ut aktuellt spårfel
            return xt

        else:
            
            #print xt,"\r",
            return xt

def riktning(): # Ta reda på i vilken riktning vi färdas i förhållande till A-B linjen.
    global latD
    global lonD
    ang = gps.bearing(latA, lonA, latB, lonB)
    deg_ab = ang * (180/pi)
    #print deg
    ang = gps.bearing(latD, lonD, lat, lon)# Riktning från förra varvet till där vi är nu
    deg_relative = ang * (180/pi)
    
    
    latD = lat # updatera old
    lonD = lon

    skillnad = deg_relative - deg_ab
    if skillnad < -180:
        skillnad = skillnad + 360

    elif skillnad > 180:
        skillnad = skillnad - 360  
    
    if skillnad < 90 and skillnad > -90:
        return True

    else:
        return False

def arduino():
    buffer = ''
    if ser.inWaiting > 0:
        buffer = buffer + ser.read(ser.inWaiting())
        if '\n' in buffer:
            lines = buffer.split('\n') # Splits buffer block into lines at linefeed
            last_received = lines[-2]
            buffer = lines[-1]
            #print last_received #debug
            if last_received is not None:
                return last_received
    


while True: # main Loop
    crosstrack = xt_main()
    if crosstrack is not None:
        #print crosstrack,"\r",
        ''' Om Vi färdas från B mot A så invertera crosstrack '''
        if riktning() == False and crosstrack > 0:
            crosstrack = crosstrack - crosstrack * 2
            #print "Back -"

        elif riktning() == False and crosstrack < 0:
            crosstrack = crosstrack + crosstrack * 2
            #print "Back +"
            


        pos = (crosstrack + w ) * ( 200 / ( w + w ))
        
        pos = "%0.0f" % (pos)

        print pos,"\r","\n",
        pos = int(pos)
    
        
    if pos > 0 and pos < 200:
        ser.write(pos)
        ser.write("\n")
        ser.write("\r")
    temp = arduino()
    if temp is not None:
        text = temp

    if 'SetA' in text:
        latA = lat
        lonA = lon
        response = int(400)
        ser.write(response)
        ser.write("\n")
        ser.write("\r")
        text = "Hej"
        print "Set-A"

    if 'SetB' in text:
        latB = lat
        lonB = lon
        response = int(500)
        ser.write(response)
        ser.write("\n")
        ser.write("\r")
        text = "Hej"
        print "Set-B"

    if 'With' in text:
        text = text.strip("With")
        w = float(text) * 0.01
        v = w - w*2 #Spegelvänd redskapsbredd
        print w
        text = "Hej"
        response = int(300)
        ser.write(response)
        ser.write("\n")
        ser.write("\r")
        		
main.py

Kod: Markera allt

# -*- coding: utf-8 -*-
'''
TCP klient för anslutning till rtklib av Robert JL
RJL11 på http://elektronikforumet.com/forum/
'''
import socket

def read_TCP():
    
    
    TCP_IP = '127.0.0.1' # adress
    TCP_PORT = 8989 # port
    BUFFER_SIZE = 1024 # buffer storlek

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((TCP_IP, TCP_PORT))

    data = s.recv(BUFFER_SIZE)
    return data
    #print data

def nmea():
    data = read_TCP()
    
    date, time, lat, lon, height, q, ns, sdn, sde, sdu, sdne, sdeu, sdun, age, ratio = data.split() # dela strängen

    lat = float(lat) # till float
    lon = float(lon) # till float
    #print lat, lon
    return lat,lon # retunera kordinater
tcpgps.py

Kod: Markera allt

#https://bitbucket.org/miracle2k/pyutils/src/e00c83e5c490/pyutils/gis/geodesy.py

"""Port of the "Latitude/longitude spherical geodesy formulae & scripts"
(c) Chris Veness 2002-2009, originally in JavaScript, licensed under
LPGL:

    http://www.movable-type.co.uk/scripts/latlong.html

Not all functions are included (only those I needed personally so far),
and a cross-track function, as described on the page but not included
in code, was added by myself.

Some other links I stumbled over while researching this follow below -
I hope I won't need them again:

    http://stackoverflow.com/questions/1299567/how-to-calculate-distance-from-a-point-to-a-line-segment-on-a-sphere/
    http://stackoverflow.com/questions/1051723/distance-from-point-to-line-great-circle-functino-not-working-right-need-help
    http://williams.best.vwh.net/avform.htm
    http://mail.python.org/pipermail/python-list/2005-June/328382.html
    http://postgis.refractions.net/pipermail/postgis-users/2009-July/023903.html
    http://www.google.com/codesearch/p?hl=en&sa=N&cd=3&ct=rc#ArccXqZgcB0/source/Common/Source/Airspace.cpp (xcsoar@sourceforge)
    http://mathforum.org/library/drmath/view/51785.html
    http://www.physicsforums.com/showthread.php?t=178252
"""


from math import radians, degrees, sin, cos, asin, sqrt, atan2, pi


__all__ = ('EARTH_RADIUS',
           'distance_haversine', 'distance_cosine', 'bearing',
           'bearing_degrees', 'destination', 'cross_track',)


#EARTH_RADIUS = R = 6371.00;   # kilometers  (make sure this is a float)
EARTH_RADIUS = R = 6371008.7714;   # Meters  (make sure this is a float)

def distance_haversine(lat1, lon1, lat2, lon2):
    """Use Haversine formula to calculate distance (in km) between two
    points specified by latitude/longitude (in numeric degrees).

   from: Haversine formula - R. W. Sinnott, "Virtues of the Haversine",
         Sky and Telescope, vol 68, no 2, 1984
         http://www.census.gov/cgi-bin/geo/gisfaq?Q5.1
    """
    dlat = radians(lat2 - lat1)
    dlon = radians(lon2 - lon1)
    lat1 = radians(lat1)
    lat2 = radians(lat2)

    a = sin(dlat / 2) * sin(dlat / 2) + cos(lat1) * \
        cos(lat2) * sin(dlon / 2) * sin(dlon / 2)
    c = 2 * atan2(sqrt(a), sqrt(1 - a))
    d = R * c
    return d


def distance_cosine(lat1, lon1, lat2, lon2):
    """Use Law of Cosines to calculate distance (in km) between two
    points specified by latitude/longitude (in numeric degrees).
    """
    lat1 = radians(lat1)
    lat2 = radians(lat2)
    dlon = radians(lon2 - lon1)
    return acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(dlon)) * R


def bearing(lat1, lon1, lat2, lon2):
    """Calculate the (initial) bearing between two points:

        http://williams.best.vwh.net/avform.htm#Crs

    Will return a value in radians, different from the original.
    """
    lat1 = radians(lat1)
    lat2 = radians(lat2)
    dlon = radians(lon2 - lon1)

    y = sin(dlon) * cos(lat2)
    x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dlon)
    return atan2(y, x)


def bearing_degrees(lat1, lon1, lat2, lon2):
    """See ``bearing()```.
    """
    radians = bearing(lat1, lon1, lat2, lon2)
    return (degrees(x) + 360) % 360  # unsigned


def destination(lat, long, bearing, d):
    """Calculate destination point given start point, with initial bearing
    in degrees and distance in kilometers:

        http://williams.best.vwh.net/avform.htm#LL

    Returns a 2-tuple (lat, long), in degrees.
    """
    lat1 = radians(lat)
    lon1 = radians(long)
    bearing = radians(bearing)

    lat2 = asin(sin(lat1) * cos(d/R) + cos(lat1) * sin(d/R) * cos(bearing))
    lon2 = lon1 + atan2(sin(bearing) * sin(d/R) * cos(lat1),
                        cos(d/R) - sin(lat1) * sin(lat2))
    lon2 = (lon2 + pi) % (2 * pi) - pi   # normalize to -180...+180

    # if lat2 == NaN || lon2 == NaN: return None  # Hm.
    return degrees(lat2), degrees(lon2)


def cross_track(latA, lonA, latB, lonB, latP, lonP):
    """Returns the distance of a point P from a great-circle path AB,
    in kilometers.

    Sometimes called cross track error.

    >>> "%.8f" % cross_track(48.76165, 11.41947, 48.75857, 11.42501, 48.76176, 11.41595)
    '0.15697753'
    """
    d13 = distance_haversine(latA, lonA, latP, lonP)
    brng12 = bearing(latA, lonA, latB, lonB)
    brng13 = bearing(latA, lonA, latP, lonP)
    dXt = asin(sin(d13 / R) * sin(brng13 - brng12)) * R
    return dXt


if __name__ == '__main__':
    import doctest
    doctest.testmod()
gps.py

Kod: Markera allt

/*
Rutin för autostyrning, värde in på serie port. 1 till 200
*/

#include <TM1638.h>
#include <Servo.h> // Servo för att visa vart man ska
int serv;
Servo myservo;



// define a module on data pin 40, clock pin 41 and strobe pin 42
TM1638 module1(40, 41, 42);

// http://dx.com/p/8x-digital-tube-8x-key-8x-double-color-led-module-81873
// else google TM1638

int sensorPin = A0; // styrvinkelgivare potensiometer 10k på analog 0
int r_1 = 30; // relä 1 på digital 30
int r_2 = 31; // relä 2 på digital 31
int val = 0; // styrvinkel
int ska = 100; // begärd styrvinkel rakt fram tills serieport igång.
int ded = 30; // glapp i mitten
int buff;    // buffer

int del = 250;
int with = 0;
int bt1 = 0; // Knapp 1, från höger till vänster
int bt2 = 0;
int bt3 = 0;
int bt4 = 0;
int currentWith = 0;
boolean ledStateA = false;
boolean ledStateB = false;
boolean ledStateWith = false;
boolean ledStateStatus = false;
long previousMillis1 = 0;
long previousMillis = 0;
long interval = 250;
long intervalS = 250;

void setup()
{
  pinMode(r_1, OUTPUT);
  pinMode(r_2, OUTPUT);
  Serial.begin(9600);
  myservo.attach(9); // servo på pin 9 pwm
  Serial.setTimeout(50); // Hur länge Serial.parseInt skall vänta på giltig integer
}

void loop()
{
  unsigned long currentMillis1 = millis();
  
  if (Serial.available()) // kolla om det finns något inkommande
  {
    buff = Serial.parseInt(); // om sant läs
    Serial.flush(); // Töm buffer.
    
    if (buff == 300)
    {
      withResponde();
    }
    
    else if (buff == 400)
    {
      SetAResponde();
    }
    
    else if (buff == 500)
    {
      SetBResponde();
    }
    
    else if (buff > 0 && buff < 200) // Om parseInt returnerar ett värde större än noll
    {
      if (buff != ska)
      {
        statusBlink();
      }
      ska = buff; // Nytt ska värde från serie port
    }
    serv = map(ska, 0, 200, 0, 179); // mappa in ett rc-servo
    myservo.write(serv);
  }
  
   else if (vinkel() < ska - ded) // Sväng vänster
  {
    if(currentMillis1 - previousMillis1 > intervalS)
    {
      previousMillis1 = currentMillis1;
      left();
    }
  }
 
  else if (vinkel() > ska + ded) // Sväng höger
  {
    if(currentMillis1 - previousMillis1 > intervalS)
    {
      previousMillis1 = currentMillis1;
      right();
    }
  }    

  
  else
  {
    if(currentMillis1 - previousMillis1 > intervalS)
    {
      previousMillis1 = currentMillis1;
      brake();
    } 
  }
  
  
  
  interface(); // kör interface rutinen.
  
  
}

int vinkel() // läs styrvinkel
{
  val = analogRead(sensorPin);
  val = map(val, 0, 1023, 0, 200);
  return val;
}

void left() //sväng vänster
{
  digitalWrite(r_1, HIGH);
  digitalWrite(r_2, LOW);
}

void right() //sväng höger
{
  digitalWrite(r_1, LOW);
  digitalWrite(r_2, HIGH);
}

void brake() //bromsa
{
  digitalWrite(r_1, LOW);
  digitalWrite(r_2, LOW);
}

void interface() // interface rutin.
{
  unsigned long currentMillis = millis();
  if (module1.getButtons() == 0b10000000)
  {
    if(currentMillis - previousMillis > interval)
    {
      previousMillis = currentMillis;
      bt1 =  bt1 + 1;
      if (bt1 > 9)
      {
        bt1 = 0;
      }
    }  
  }
  else if (module1.getButtons() == 0b01000000)
  {
    
    if(currentMillis - previousMillis > interval)
    {
      previousMillis = currentMillis;
      bt2 =  bt2 + 1;
      if (bt2 > 9)
      {
        bt2 = 0;
      }
    }  
  }
  else if (module1.getButtons() == 0b00100000)
  {
    if(currentMillis - previousMillis > interval)
    {
      previousMillis = currentMillis;
      bt3 =  bt3 + 1;
      if (bt3 > 9)
      {
        bt3 = 0;
      }
    }
  }
  else if (module1.getButtons() == 0b00010000)
  {
    if(currentMillis - previousMillis > interval)
    {
      previousMillis = currentMillis;
      bt4 =  bt4 + 1;
      if (bt4 > 9)
      {
        bt4 = 0;
      }
    }
  }
  
  currentWith = bt1*1 + bt2*10 + bt3*100 + bt4*1000;
  
  if (currentWith != with)
  {
    with = currentWith;
    module1.setDisplayToDecNumber(with, 4, false);
    Serial.print ("With");
    Serial.print (with);
    Serial.print ("\n");   
  }
  
  if (module1.getButtons() == 0b00000001)
  {
    if (currentMillis - previousMillis > interval)
    {
      previousMillis = currentMillis;
      Serial.print ("SetA");
      Serial.print ("\n");
    }   
  }
  
  else if (module1.getButtons() == 0b00000100)
  {
    if (currentMillis - previousMillis > interval)
    {
      previousMillis = currentMillis;
      Serial.print ("SetB");
      Serial.print ("\n");
    }
  }
}

void withResponde() // växla diod 6 och 7 när host programmet svarar att uppdaterad bredd tagits emot.
{
  if (ledStateWith == false)
  {
    module1.setLED(TM1638_COLOR_GREEN, 7);
    module1.setLED(TM1638_COLOR_NONE, 6);
    ledStateWith = true;
  }
  else
  {
    if (ledStateWith == true)
    {
      module1.setLED(TM1638_COLOR_NONE, 7);
      module1.setLED(TM1638_COLOR_GREEN, 6);
      ledStateWith = false;
    }
  }
}

void SetAResponde()
{
  if (ledStateA == false)
  {
    module1.setLED(TM1638_COLOR_GREEN, 0);
    module1.setLED(TM1638_COLOR_NONE, 1);
    ledStateA = true;
  }
  else
  {
    module1.setLED(TM1638_COLOR_NONE, 0);
    module1.setLED(TM1638_COLOR_GREEN, 1);
    ledStateA = false;
  }
}

void SetBResponde()
{
  if (ledStateB == false)
  {
    module1.setLED(TM1638_COLOR_GREEN, 2);
    module1.setLED(TM1638_COLOR_NONE, 3);
    ledStateB = true;
  }
  else
  {
    module1.setLED(TM1638_COLOR_NONE, 2);
    module1.setLED(TM1638_COLOR_GREEN, 3);
    ledStateB = false;
  }
}

void statusBlink()
{
  if (ledStateStatus == false)
  {
    module1.setLED(TM1638_COLOR_GREEN, 4);
    ledStateStatus = true;
  }
  else
  {
    module1.setLED(TM1638_COLOR_RED, 4);
    ledStateStatus = false;
  }
} 
pyagri.ino
pyagri.zip
Har lite dåligt med kommentarer i koden men den borde gå att läsa.
Det vore kul att höra lite hur det går för era projekt med gps också.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
hvfan
Inlägg: 6
Blev medlem: 23 december 2012, 18:22:53

Re: RTK-GPS och autostyrning

Inlägg av hvfan »

Hej

Har kommit igång med en LEA4 på balkongen o en som jag flyttar runt för att testa.
PPP static har används efter 4 tim. Har precis kommit igång med att test o flytta den andra LEA4 mellan 2 ställen.
Inte helt nöjd med resultatet sä här långt.
Kör med 2Hz o det går bättre men inte helt nöjd.
Eftersom jag ställer tillbaka LEA4 nbr 2 på samma ställe så förväntar jag mig att få samma lat o lon mellan flytten.
När den står på samma plats så räknar jag ut avståndet som jag flyttar o det ändras hela tiden, jag använder samma grop
i snön så den står på cm på samma ställe.
mh
Användarvisningsbild
rjl11
Inlägg: 371
Blev medlem: 1 november 2010, 18:25:27
Ort: Herrljunga

Re: RTK-GPS och autostyrning

Inlägg av rjl11 »

Hej och välkommen till forumet.

Några frågor:
Har basen och rover fri sikt till satelliterna? Du behöver ha minst 4 staplar som är gröna.
Vad för typ av låsning får du? single, sbas, float eller fix? Fix är full rtk låsning, float så är det nästan bra.
version av rtklib?

Här är de inställningar jag kör med på rtklib_2.4.2 b11.
setting1.PNG
setting2.PNG
Testa med dessa och se om det är någon skillnad.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
hvfan
Inlägg: 6
Blev medlem: 23 december 2012, 18:22:53

Re: RTK-GPS och autostyrning

Inlägg av hvfan »

Hej
tack för feedback; blir bättre o bättre
4 gröna o fix kommer snabbt med ditt förslag.
Kör på senaste b11
skall försöka få med en bild nedan får se om det lyckas [img][\\img]
Skärmklipp.PNG
Kommer att flytta tilbaka LEA4 nbr 2 nu o se vad jag får fär värde på lat o lon i morgon.
Det kommer mycket felmeddelande som är svåra att förstå.

update efter förnyad mätning:
LEA4 nbr2 flyttas mellan 2 fasta platser 2,2 m emellan.
10 mätningar ger 4,5 m i snitt sdn(m) sde(m) sdu(m) är alla mindre än 0,02.
hade förväntat mig ett mycket bättre värde.

hittade info om fel meddelande: http://lists.osgeo.org/pipermail/foss-g ... 00759.html

Vad har ni sett ?
Hur bra kan det bli ?
Har jag missat något viktigt som leder till att avståndsmätningen inte stämmer ?

mvh Ulf
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av hvfan 18 mars 2013, 17:10:30, redigerad totalt 1 gång.
Användarvisningsbild
rjl11
Inlägg: 371
Blev medlem: 1 november 2010, 18:25:27
Ort: Herrljunga

Re: RTK-GPS och autostyrning

Inlägg av rjl11 »

felmedelanden på japanska ignorerar jag för tillfället, senaste versionen är ju en beta, skarp version är på gång.
Kul att det blir bättre.

edit:
Det jag kan tänka mig är att positionen på basen skulle gå att få noggrannare.
Börja med att logga rå-data från mottagaren minst 6h och gärna hög frekvens, jag körde 10Hz och 230400 baud.
Med rå-data kan man efterberäkna och labba med inställningar utan att vänta igen.
Starta rtknavi och välj under "L" Log streams att spara data från basen som en fil med namnet ubx.raw

rå filen öppnas med rtkconv först för att konverteras till rinex och sedan trycker man på process för att komma till rtkpost.
efter konverteringen i rtkconv så kan man trycka på plot för att få fram en skyplot på satelliterna. Du får gärna infoga en bild med en skyplot så man kan se om du har problem med hinder för signalen.
skall se om jag kan skriva ihop med lite bilder.

4,5 meter i snitt när det skall vara 2,2 meter låter som utrymme för förbättring.
När jag testade i lördags så var positionen inom 10cm i sidled när jag gick runt på åkern med patch antenn i handen och följde en linje.
Man får tänka på att positionen försämras fort om man har träd och hus som skymmer signalen.
hvfan
Inlägg: 6
Blev medlem: 23 december 2012, 18:22:53

Re: RTK-GPS och autostyrning

Inlägg av hvfan »

Hej
Här kommer två skyplots
basen
skyplot base 5 hours.PNG
och samma tid rovern
skyplot rover 5 hours.PNG

Man kan se att LEA 4 står på olika sidor om huset. Basen sitter på balkongen dvs en bit upp o
rovern står på marken runt knuten
Båda är körda med 10Hz 115200;
Fick problem med minnet därför har jag bara kört konvertering i 5 tim.
mvh
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
rjl11
Inlägg: 371
Blev medlem: 1 november 2010, 18:25:27
Ort: Herrljunga

Re: RTK-GPS och autostyrning

Inlägg av rjl11 »

Problemet borde inte ligga i fri sikt till satelliterna.
Du kar kommit så långt att du har konverterat bas observationen till rinex med rtkconv.
Tryck på "Process..." och sedan i rtkpost trycker du på options och ställer in enligt bild.
rtkpost setting 1.PNG
rtkpost setting 2.PNG
rtkpost output.PNG
Tryck Execute.
öppna .pos filen som proggrammet skapade och skriv in lat/lon och höjd i rtknavi och testa om det blev bättre.

I rtkpost kan man även köra rtk i kinematic läget, så om du loggade både bas och rover kan du ställa in som du gjorde i rtknavi och välja rover obs filen överst och under den
välja bas obs filen.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
hvfan
Inlägg: 6
Blev medlem: 23 december 2012, 18:22:53

Re: RTK-GPS och autostyrning

Inlägg av hvfan »

Hej

Har gjort om min mätning o mina beräkningar.
Körde också igenom med ditt prg men tyvärr så hittar jag inte några uppenbara räknefel.

Vad som förbryllar mig är att om jag tar stdev på lat o lon o height så blir det ca 10 gånger sämre än det som
rtknavi redovisar. Man ser ju lätt på "höjdmätaren" att den flukturerar mycket mer än den stdev som solution redovisar.
"The estimated standard deviations of the solution assuming a priori
error model and error parameters by the positioning options.
The sdn, sde or sdu means N (north), E (east) or U (up)
component of the standard deviations in m."
[/i]

Höjden ser man ju direkt utan några omräkningar därför är det enklast att kolla den parametern.
Det skulle vara OK om man fick tillbaka samma position inom stdev men det blir det inte vilket gör att jag inte har något hopp om att kunna bearbeta positionen i en dator.


Det verkar som att jag på något sätt inte har rätt setting t.ex. i u-blox.
Vilka ändringar har du gjort utöver
MSG: raw,sfrb
RATE:100ms
PRT: protocol out UBX;Baudrate "så högt som möjligt" i mitt fall 115200
SBAS: ?? enable ??
något annat ?

mvh
Användarvisningsbild
rjl11
Inlägg: 371
Blev medlem: 1 november 2010, 18:25:27
Ort: Herrljunga

Re: RTK-GPS och autostyrning

Inlägg av rjl11 »

Du har rätt inställningar i ublox.
Jag skall ta och testa några fler inställningar ikväll och så om det är något som jag missat.
Kör du med maxrad antennerna?

Testa att minska "Slip Thres (m)" något, standard värdet är 0.050
Öka "Number of filter Iteration" i steg uppåt och testa.
hvfan
Inlägg: 6
Blev medlem: 23 december 2012, 18:22:53

Re: RTK-GPS och autostyrning

Inlägg av hvfan »

Hej

Kör med MAXRAD.

testar med de föreslagna justeringarna. Använder "Baseline" för då ser jag om det blir bättre ller sämre. Jag vet ju hur antennerna sitter.



Skall skaffa en avståndsmätare så jag vet exact vilket avstånd det är.

kör en långtidstest i natt så får jag se hur det ser ut. De mätningar som jag nu har gjort har tagit 5min per mätning.
mvh
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: RTK-GPS och autostyrning

Inlägg av blueint »

Har delat tråden ang oilpress:s utrustning till: RTK-GPS och autostyrning [delad-oilpress]
hvfan
Inlägg: 6
Blev medlem: 23 december 2012, 18:22:53

Re: RTK-GPS och autostyrning

Inlägg av hvfan »

Hej
återigen tacksam för feedback som jag fått
"Testa att minska "Slip Thres (m)" något, standard värdet är 0.050
Öka "Number of filter Iteration" i steg uppåt och testa."
Tyvärr så får jag inte fram något stabilt värde skall labba runt lite i excel o pivot tabell o snurra runt lite med den data som jag har fått så här ser det ut.
Avståndet mellan basen i rover är 8,7m. yaw är ung 240gr.
stdev är över 1000 mätningar; avg är över 1000 mätningar o yaw är från avg av dessa 1000 mätningar.
enl http://www.rtklib.com/ skall det komma en ny version nu. Får avvakta tills den kommer o provar sedan med den o ser om det blir dramatiskt bättre.

mvh
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
rjl11
Inlägg: 371
Blev medlem: 1 november 2010, 18:25:27
Ort: Herrljunga

Re: RTK-GPS och autostyrning

Inlägg av rjl11 »

Jag har efter helgens tester gått tillbaka till version 2.4.1 med patch 7 då den verkar vara stabilare och inga felmeddelanden på japanska.
Defult inställningar förutom snr mask på 40

Missade att nämna att i U-center så har jag konfigurerat mottagarna under RXM(receiver manager) till gps mode 2-High sensitivity

Det jag kom fram till i helgen är:
Finns det hinder som signalen kan studsa emot, så kallad multipath, så försämras precisionen kraftigt.
Satellit signalerna behöver ha ett signal to noise ratio på minst 40.
Helst 7 satelliter eller mer låsta.
Bas positionens noggrannhet påverkar.
Öppna ytor är att föredra.

För att få en stabil basstation med bra värden för kommande projekt har jag beställt en geodetisk gps antenn. Kan bli kul att jämföra mot de antenner jag har nu.

Hvfan:
Testa att få upp antennerna så att de inte tar emot studsade signaler, basen helst på taknocken.

edit:
Mätte upp antenn matningen och den ger bara 2,75 volt, Maxrad antennen vill ha minst 3,3 volt.
Skall se om det går att konstruera ett tilläggs kort att sätta ovanpå med antenn matning, ftdi krets och backup batteri.
Joe
Inlägg: 1803
Blev medlem: 3 mars 2006, 17:00:50
Ort: Södermanland

Re: RTK-GPS och autostyrning

Inlägg av Joe »

En bild på hur en geodetisk antenn fungerar:
Bild

Vilken antenntyp blev det? Och blir det så mycket bättre om man bara har en L1 mottagare?
Hittade ingen av dome-typ på ebay..

Stöder rtklib kalibrering av Phase Center Variation?

Tänkte montera min antenn på taknocken men läste lite om det och tex så ska en GPS antenn inte monteras för nära en UHF antenn (Digital-tv via marknätet)
Hittade denna sida med ett Kanadensiskt sätt att montera en antenn, jag har berg på tomten men tyvärr så ligger det för lågt mot skogen. Blir kanske en tripod lösning..

Pin 1 på ublox LEA-4T kortet kan matas med upp till 6VDC, det går via L1, C1, R3, C2 och C3 till pin19 V_ANT Samt att LEA-4T behöver konfigureras för extern matning (P15)
Så enklast är att ta USB 5V till pin 1.
Användarvisningsbild
rjl11
Inlägg: 371
Blev medlem: 1 november 2010, 18:25:27
Ort: Herrljunga

Re: RTK-GPS och autostyrning

Inlägg av rjl11 »

Det blev en Novatel gps-600 L1/L2
Här är en länk med beskrivning av antenn typen.
Rtklib stödjer phasecenter calibration.

Jag skall montera den först på taknocken på bostadshuset i motsatt ände av antennen.
Det blir ca 8 meter från tv-antennnen som är riktad bortåt. Funkar inte detta så sätter jag upp den på ladugårds taket.
Skriv svar