RTK-GPS och autostyrning

Berätta om dina pågående projekt.
Joe
Inlägg: 1800
Blev medlem: 3 mars 2006, 17:00:50
Ort: Södermanland

Re: RTK-GPS och autostyrning

Inlägg av Joe »

Håller på och funderar på ett kort med NVC08-csm då den stöds i RTKLIB 2.4.2
Den har dubbla uart och det kändes lite omständigt att ta dubbla FT232RL och nån USB hubb, FT2232H finns förvisso men behöver extern spänningsreglering. Känns onödigt då USB är på 5V....

Sen funderade jag på en uc med USB och dubbla uarts - Jag hittade AT32UC3B som har 3 uarts, men man kan inte använda alla och har man 48 pins kapsling så blir det bara en uart ledig om man extern kristall....
Fördelen med en uc är om man tex vill skicka vidare datan med tex radiolänk direkt (Man kan enkelt lägga till någon form av övervakning eller handskakning..)
Praktisk om mottagaren sitter direkt på antennen och allt är monterat på taket eller i mast.

Vad tror ni? Vad behövs på ett kort förutom mottagaren?
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: RTK-GPS och autostyrning

Inlägg av blueint »

Kravspecifikationen för mottagaren är oklar. Dvs vad måste den klara av och vad är bra om den klarar av.
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 »

Angående NVC08-csm så kolla på http://www.onetalent-gnss.com/ideas/usb ... rs/denga10
För rtklib behöver du bara en uart.

på lea-4t modulen finns det också två serieportar, fast den ena är en usb port direkt i chippet,
där behövs bara en anslutning.

två anslutningar kan vara bra om man t.ex har en radiomodul bå en uart kanal och ett ftdi chip på den andra.

Att tänka på är att glonass har en annan frekvens än gps L1 som de flesta antenner är för.

det jag kommer på just nu är att det kan vara bra med backup batteri eller supercap så att modulen startar fortare, bra om det glappar i strömförsörjningen.
Christer
Inlägg: 11
Blev medlem: 23 juni 2011, 09:23:45
Ort: Borås

Re: RTK-GPS och autostyrning

Inlägg av Christer »

Hej,
var fick du tag på smb hane/hona rg 174.
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 »

Denna : ebay , säljaren på semester till 14 feb.

För övrigt så är mjukvaran i bakgrunden klar, Håller på med att skapa ett användarinterface som är lätt att hantera och som ryms på en sån här, DX
Håller även på och designar ett hus till allt, är tänkt att likna Trimble EZ-Guide 250
EZGuide250.JPG
Fast med vandal säkra knappar och skottsäkert glas framför displayen, håller det inte att köras över så håller det inte i jordbruket.

Bara några månader till praktiska tester i vårbruket :D
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Christer
Inlägg: 11
Blev medlem: 23 juni 2011, 09:23:45
Ort: Borås

Re: RTK-GPS och autostyrning

Inlägg av Christer »

Blir riktigt proffsigt, använer du något speciellt program för att lägga in körkordinater på åkrarna, som jag skulle kunna använda för att rita in körprogram för gräsklipparen i trädgården.
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 »

Än har jag bara en rutin som beräknar körspår baserat på redskaps bredd, punkt a och punkt b.
Du som skall köra autonomt kolla på http://code.google.com/p/ardupilot-mega ... ionPlanner

Edit: långt inlägg
Här kommer all kod hittills, fritt att använda och modifiera, kul även om ni delar med er av ändringar och tillägg.
Tillsät bara pyserial.
main.py

Kod: Markera allt

# -*- coding: utf-8 -*-
#Importera gps biblioteket.
import gps
#Importera nmea parser med serial input
#import sernmea
import tcpgps

from math import pi
import time

import serial

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

#Skapa variabler
latA = 58.9000
lonA = 12.9000
latB = 58.2000
lonB = 12.2000

global latD
global lonD
latD = 58.2000 # för att inte rikting skall få spratt vid uppstart
lonD = 12.1000
#port och baud till styrning
ser2 = serial.Serial('com2',9600)
ser2.setDTR(level=False)
time.sleep(2)


'''
skriver ut avståndet till linjen i meter.
Positivt så är vi på höger sida, negativt på vänster sida, på A mot B
'''

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å 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
    

    

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)
    
        
        ser2.write(pos)
        
        
        
        
        
       
        
        
gps.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()
tcpgps.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 = 5005 # 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


        

pyagri.ino

Kod: Markera allt

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

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

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 = 10; // glapp i mitten
int buff;    // buffer

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()
{
  if (Serial.available()) // kolla om det finns något inkommande
  {
    buff = Serial.parseInt(); // om sant läs
    Serial.flush(); // Töm buffer.
    
    if (buff > 0) // Om parseInt returnerar ett värde större än noll
    {
      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
  {
    left();
    delay(150);
    Serial.write("Vanster");
  }
 
  else if (vinkel() > ska + ded) // Sväng höger
  {
    right();
    delay(150);
    Serial.write("Hoger");
  }    

  
  else
  {
    brake(); // not break.
    Serial.write("Broms");
    delay(150);
  }
}

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);
}
Senast redigerad av rjl11 11 februari 2013, 20:28:22, redigerad totalt 2 gånger.
Christer
Inlägg: 11
Blev medlem: 23 juni 2011, 09:23:45
Ort: Borås

Re: RTK-GPS och autostyrning

Inlägg av Christer »

Tack för tipset skall titta lite närmare när jag har tid över.
danei
EF Sponsor
Inlägg: 27313
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: RTK-GPS och autostyrning

Inlägg av danei »

Man blir ju sugen på att bygga en skalatraktor som kan sköta gräsmattan...
oilpress
Inlägg: 19
Blev medlem: 2 mars 2013, 08:35:42

Re: RTK-GPS och autostyrning

Inlägg av oilpress »

Hej Alla GPS intresserade för styrning av gräsklippare till traktorer mm

http://www.farmergps.com/buyUS.htm

Hittade på nätet

Säljer GPS för hembyggare
Program till XP och nyare http://www.farmergps.com/download.htm

De rekommenderar Leica antenn som tillverkas....
(ovanstående är det som finns kvar av detta inlägg från kopia i annan tråd //blueint)
Senast redigerad av oilpress 3 mars 2013, 13:45:06, redigerad totalt 3 gånger.
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 »

Var vänlig och gör inte reklam för dina produkter i denna tråd.
Att göra reklam för något i sitt första inlägg ger inget seriöst intryck :tumner:
Joe
Inlägg: 1800
Blev medlem: 3 mars 2006, 17:00:50
Ort: Södermanland

Re: RTK-GPS och autostyrning

Inlägg av Joe »

Att köpa en färdig "Autostyrning med RTK för 104 000:-SEK+moms+frakt" för att sen plocka isär, det gör nog inga små företag.
För det är RTK-GPS och autostyrning tråden handlar om.
Du skriver ju själv på din företagssida: "För att få RTK säkerhet 2.5 cm spår vid spår fungerer inte med Leica mojomini utan då är det Leica Mojo 3D man använder (Går att uppgradera för auto styrning)"
Då är det plötsligt inga 8300:-SEK+moms
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 »

Nu finns det en manual till version 2.4.2 ute http://www.rtklib.com/prog/manual_2.4.2.pdf
Senaste versionen är rtklib_2.4.2b11 , inga patchar behöver hämtas efter uppackning av zip-filen
oilpress
Inlägg: 19
Blev medlem: 2 mars 2013, 08:35:42

Re: RTK-GPS och autostyrning

Inlägg av oilpress »

Till Joe

Vad jag menade var att man inte behövde köpa för 1400 USD + frakt från http://www.farmergps.com/buy.htm

Man får inte en motsvarande enhet för det priset som man får när man köper Trimble som exempel. Jag säljer inte Trimble Så därför nämner jag det märket vid namn .
Idag får man bättre saker för billigare pengar.

Nu är det så att man inte förstör alla saker bara för man tar isär saker som man köper dyrt.
Så det betyder inte att man är dum om man skruvar isär saker man köper nytt.
Jag har ofta lärt mig mycket när man lossar några skruvar för att se hur det fungerar.

Display rattmotor Twist lutnings korrektion, GPS, motagare GLONESS och EGNAS finns redan billigt.

Det som är dyrt är SWEPOS mottagare från 3D mobilnätet . Enbart denna del är för dyr idag.

De som håller på med utveckling är det denna del som bör komma ner i pris.

Om någon som kan detta kunde sälja en sådan utrustning vore fantastiskt .
Tips om sådan utrustning. Utvecklingen går fort idag . Toppen.

Edit: Pris korrigerat 2000 -> 1400 USD per PM //blueint 4 mars
oilpress
Inlägg: 19
Blev medlem: 2 mars 2013, 08:35:42

Re: RTK-GPS och autostyrning

Inlägg av oilpress »

(bortklippt //blueint)

Det finns billiga GPS styrningar som har både GPS USA satelliter och EGOS EU + övrig teknik och de ryska GLONASS med alla dessa signaler i ett nät kommer man riktigt nära RTK 2.5 cm Man tar bort lite av den dyra RTK tekniken som är på gång ut ur marknaden Det går att framföra stora tunga fordon automatiskt redan nu med en säkerhet som är helt godkända med vanliga GPS, EGNOS, GLONASS, Integrerad L1 GPS-mottagare med Glide
Förbättrad drag till drag noggrannhet med Glide teknologi. Det är också tiden som är avgörande. Återkommer man till nästa drag vid plöjning eller sådd inom 10 minuter har inte linjen flyttat sig mycket kanske 2 cm samma som RTK. Men är det så att man åker hem för att fylla såmaskinen och åker ut på fältet igen så ställer man sig i spåret och kalibrerar med ett knapptryck så hoppar kör linjen rätt på mm när.

Alla dessa system utvecklas i rasande fart. RTK minskar i intresse och det är krångligt och dyrt . Alla vill ifrån detta med kostnader med marksändare som blir störda och går sönder i naturen av regn och djur mm . RTK kommer inte att vara lönsamt i framtiden. Vanliga GPS EGNOS GLONASS klarar ensamma om det gratis för kunden. .
Ni vill göra era egna RTK . Det tycker jag är både intressant och roligt och lärorikt. Men man ska också komma ihåg att det finns billiga färdiga lösningar redan idag som är bra

(bortklippt //blueint)

Hälsning Bengt Jonsson http://www.gpsjordbruk.se sales@oilpress.com 019-228005 Information vem jag är, inte reklam .
Skriv svar