GPS 定位 得到偏差 二
void POSITION_CALCU(int long XP,int long YP,int HP)
{
int long LATI_DELTA;
int long LONGI_DELTA;
double DISTANCE_DELTA;
double DIREC_HORI_DOUB;
double DIREC_HORI_PRE;
double DIREC_VERT_DOUB;
double DISTANCE_HORI_METER;
double DISTANCE_STRA_METER;
LATI_DELTA = ACT.LATITUDE-XP;
LONGI_DELTA = (long) (ACT.LONGITUDE-YP)* cos(ACT.LATITUDE_LOCAL);
DISTANCE_DELTA = sqrt( LATI_DELTA * LATI_DELTA + LONGI_DELTA * LONGI_DELTA );
DISTANCE_HORI_METER = DISTANCE_DELTA * 1.85;
DISTANCE_STRA_METER = sqrt( DISTANCE_HORI_METER * DISTANCE_HORI_METER + HIGH_DIFF*HIGH_DIFF );
DIREC_HORI_PRE = atan2 ( LONGI_DELTA , LATI_DELTA );
DIREC_VERT_DOUB = atan2 ( DISTANCE_HORI_METER , HIGH_DIFF);
if (LATI_DELTA >0)
{
if(LONGI_DELTA>0)
{
DIREC_HORI_DOUB = DIREC_HORI_PRE;
}
else
DIREC_HORI_DOUB = PI - DIREC_HORI_PRE;
}
else
{
if(LONGI_DELTA>0)
{
DIREC_HORI_DOUB = 2*PI - DIREC_HORI_PRE;
}
else
DIREC_HORI_DOUB = PI + DIREC_HORI_PRE;
}
DIRECTION_HORI = (int) (DIREC_HORI_DOUB*57.3);
DIRECTION_VERT = (int) (DIREC_VERT_DOUB*57.3);
DISTANCE_HORI = (int) DISTANCE_HORI_METER;
DISTANCE_STRA = (int) DISTANCE_STRA_METER;
DIRECTION_DIFF = ACT.DIRECTION - DIRECTION_HORI;
HIGH_DIFF = ACT.HIGH-HP;
}
通过调用这个函数,我们可以进行返航飞行,或者其他航点飞行。你可以通过串口电台输入航点,也可以当飞机飞过某点时纪录下当前经纬度,超过2个纪录后可以在各航点间自动巡航,简单的讲,它能重复你飞过的航线。如果开发PC相应程序,可以进行鼠标指点巡航。
但是,以上这些功能必须依赖另一个重要的程序,下一节我们讲PID 航点程序。 |