i read the code but i think the quadcopter never do the position hold because in the code
Code: Select all
if (rcOptions[BOXGPSHOLD]) { //Position hold has priority over mission execution //But has less priority than RTH
if (f.GPS_mode == GPS_MODE_NAV)
NAV_paused_at = mission_step.number;
f.GPS_mode = GPS_MODE_HOLD;
f.GPS_BARO_MODE = false;
GPS_set_next_wp(&GPS_coord[LAT], &GPS_coord[LON],&GPS_coord[LAT], & GPS_coord[LON]); //hold at the current position
set_new_altitude(alt.EstAlt); //and current altitude
NAV_state = NAV_STATE_HOLD_INFINIT;
the f.GPS_BARO_MODE = false; is false so when this is false it never enter in this section
Code: Select all
#if BARO
#if (!defined(SUPPRESS_BARO_ALTHOLD))
#if GPS
if (GPS_conf.takeover_baro) rcOptions[BOXBARO] = (rcOptions[BOXBARO] || f.GPS_BARO_MODE);
#endif
if (rcOptions[BOXBARO]) {
if (!f.BARO_MODE) {//si vaut 0
f.BARO_MODE = 1;
AltHold = alt.EstAlt;
#if defined(ALT_HOLD_THROTTLE_MIDPOINT)
initialThrottleHold = ALT_HOLD_THROTTLE_MIDPOINT;
#else
initialThrottleHold = rcCommand[THROTTLE];
#endif
errorAltitudeI = 0;
BaroPID=0;
}
} else {
f.BARO_MODE = 0;
}
#endif
#ifdef VARIOMETER
if (rcOptions[BOXVARIO]) {
if (!f.VARIO_MODE) {
f.VARIO_MODE = 1;
}
} else {
f.VARIO_MODE = 0;
}
#endif
#endif
if (rcOptions[BOXMAG]) {
if (!f.MAG_MODE) {
f.MAG_MODE = 1;
magHold = att.heading;
}
} else {
f.MAG_MODE = 0;
}
#if defined(HEADFREE)
if (rcOptions[BOXHEADFREE]) {
if (!f.HEADFREE_MODE) {
f.HEADFREE_MODE = 1;
}
#if defined(ADVANCED_HEADFREE)
if ((f.GPS_FIX && GPS_numSat >= 5) && (GPS_distanceToHome > ADV_HEADFREE_RANGE) ) {
if (GPS_directionToHome < 180) {headFreeModeHold = GPS_directionToHome + 180;} else {headFreeModeHold = GPS_directionToHome - 180;}
}
#endif
} else {
f.HEADFREE_MODE = 0;
}
if (rcOptions[BOXHEADADJ]) {
headFreeModeHold = att.heading; // acquire new heading
}
#endif
i'm wrong ??? and if the last release do the pos hold so how it's works
thanks