2018-12-03 01:35:32 -04:00
|
|
|
GOTO_MAXVEL = 2.5 # m/steps
|
2018-11-16 13:00:36 -04:00
|
|
|
GOTO_MAXDIST = 250 # m.
|
2018-10-19 03:34:18 -03:00
|
|
|
GOTODIST_TOL = 0.4 # m.
|
|
|
|
GOTOANG_TOL = 0.1 # rad.
|
2018-12-03 01:35:32 -04:00
|
|
|
# Geofence polygon
|
|
|
|
# CEPSUM field
|
|
|
|
#GPSlimit = {.1={.lat=45.510400, .lng=-73.610421},
|
|
|
|
# .2={.lat=45.510896, .lng=-73.608731},
|
|
|
|
# .3={.lat=45.510355, .lng=-73.608404},
|
|
|
|
# .4={.lat=45.509840, .lng=-73.610072}}
|
|
|
|
# Pangeae final site
|
|
|
|
#GPSlimit = {.1={.lat=29.067746, .lng=-13.663315},
|
|
|
|
# .2={.lat=29.068724, .lng=-13.662634},
|
|
|
|
# .3={.lat=29.068113, .lng=-13.661427},
|
|
|
|
# .4={.lat=29.067014, .lng=-13.661564}}
|
|
|
|
# Pangeae first site
|
|
|
|
GPSlimit = {.1={.lat=29.021055, .lng=-13.715155},
|
|
|
|
.2={.lat=29.021055, .lng=-13.714132},
|
|
|
|
.3={.lat=29.019470, .lng=-13.714132},
|
|
|
|
.4={.lat=29.019470, .lng=-13.715240}}
|
2018-11-16 13:00:36 -04:00
|
|
|
|
2018-10-18 23:18:12 -03:00
|
|
|
# Core naviguation function to travel to a GPS target location.
|
|
|
|
function goto_gps(transf) {
|
2018-11-09 15:25:58 -04:00
|
|
|
m_navigation = vec_from_gps(cur_goal.latitude, cur_goal.longitude, 0)
|
|
|
|
#print(" has to move ", math.vec2.length(m_navigation), math.vec2.angle(m_navigation))
|
|
|
|
if(math.vec2.length(m_navigation)>GOTO_MAXDIST)
|
|
|
|
log("Sorry this is too far (", math.vec2.length(m_navigation), " / ", GOTO_MAXDIST, " )")
|
|
|
|
else if(math.vec2.length(m_navigation) < GOTODIST_TOL and math.vec2.angle(m_navigation) < GOTOANG_TOL){ # reached destination
|
|
|
|
transf()
|
|
|
|
} else {
|
|
|
|
m_navigation = LimitSpeed(m_navigation, 1.0)
|
2018-12-03 01:35:32 -04:00
|
|
|
gf = {.0=m_navigation, .1=vec_from_gps(GPSlimit[1].lat, GPSlimit[1].lng, 0), .2=vec_from_gps(GPSlimit[2].lat, GPSlimit[2].lng, 0), .3=vec_from_gps(GPSlimit[3].lat, GPSlimit[3].lng, 0), .4=vec_from_gps(GPSlimit[4].lat, GPSlimit[4].lng, 0)}
|
2018-11-12 19:04:56 -04:00
|
|
|
geofence(gf)
|
2018-11-09 15:25:58 -04:00
|
|
|
#m_navigation = LCA(m_navigation)
|
|
|
|
goto_abs(m_navigation.x, m_navigation.y, cur_goal.altitude - pose.position.altitude, 0.0)
|
|
|
|
}
|
2018-10-18 23:18:12 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
function LimitSpeed(vel_vec, factor){
|
|
|
|
if(math.vec2.length(vel_vec)>GOTO_MAXVEL*factor)
|
|
|
|
vel_vec = math.vec2.scale(vel_vec, GOTO_MAXVEL*factor/math.vec2.length(vel_vec))
|
|
|
|
return vel_vec
|
2018-11-19 06:16:10 -04:00
|
|
|
}
|