si el modo de vuelo es llamado inicia ingresando al
condicional #if MODE_AUTO_ENABLED == ENABLED que es
una definicion de las librerias config.h y defines.h, para
envia mensajes mavlink a la groundstation
ejecuta las siguientes acciones
Inicia y ejecuta llamadas para el modo de vuelo automático, implementación de Land,
Waypoint navigation y Takeoff from Auto mode. El código de ejecución del comando
(es decir, command_logic.pde) debería: a) cambiar al modo de vuelo automático con la
función set_mode (). Esto provocará que se llame a auto_init b) llame a una de las tres
funciones de inicialización automática: auto_wp_start (), auto_takeoff_start (),
auto_land_start () c) llamar a una de las funciones de verificación auto_wp_verify (),
auto_takeoff_verify, auto_land_verify y repetir para verificar si el comando se ha
completado, El ciclo principal (es decir, bucle rápido) llamará a update_flight_modes (),
que a su vez llamará a auto_run () que, en función de la variable auto_mode, llamará,
corrija auto_wp_run, auto_takeoff_run o auto_land_run para implementar realmente la
característica
Metodo int() o auto_init
inicializa el auto
controller
verifica posicion y el numero
de comandos o ingnora
check que es un bolean
parametro del metodo
si se cumple alguna
condición
verifica si motores están
armados y si el dron esta
aterrizado y que la
misión no haya
comenzado con un
despegue
si se cumplen
las
condiciones
envia mensaje Mavlink
MAV_SEVERITY_CRITICAL,
"Auto: Missing Takeoff
Cmd" y retorna falso al
bolean
Si no se cumplen
verifica si modo de auto yaw sea
igual a AUTO_YAW_ROI
si se cumple la
condicion
fija el auto yaw en
AUTO_YAW_HOLD
iniciar waypoint y
controlador spline
wp_nav->wp_and_spline_init(); inicializa
controladores de punto de línea recta y
spline /// actualiza la tirada de destino, los
objetivos de pitch y los términos basados en
ángulos de inclinación del vehículo /// debe
invocarse una vez antes de utilizar el
controlador de waypoint, pero no es
necesario llamarlo antes de las
actualizaciones posteriores al destino
limpiar límites
guiados
copter.mode_guided.limit_clear()
iniciar / reanudar la misión (basado en el
parámetro MIS_RESTART)
copter.mission.start_or_resume();
start_or_resume - si
MIS_AUTORESTART = 0 esto llamará a
resume (), de lo contrario llamará a
start ()
Retorna True al Bolean
auto_run - ejecuta el controlador
automático // debería llamarse a 100hz o
más // depende de que se llame a
run_autopilot a 10hz, que maneja los
comandos relacionados con la toma de
decisiones y los comandos no relacionados
con la navegación
Metodo void
Copter::ModeAuto::run()
llama al controlador
automático correcto
desde un switch case
llamado _modo su sintaxis
es switch (_mode)
Case de _mode
case Auto_TakeOff
ejecuta el método
takeoff_run();
case Auto_WP: case
Auto_CircleMoveToEdge:
ejecuta el método
wp_run();
case Auto_Land:
ejecuta el método
land_run();
case Auto_RTL:
ejecuta el método
rtl_run();
case Auto_Circle:
circle_run();
ejecuta el método
circle_run();
case Auto_Spline:
ejecuta el método
spline_run();
case Auto_NavGuided:
if NAV_GUIDED
== ENABLED
ejecuta el método
nav_guided_run();
case Auto_Loiter:
ejecuta el método
loiter_run();
case Auto_NavPayloadPlace:
ejecuta el método
payload_place_run();
Si no se cumple
_mode = Auto_Loiter
Si no se cumple
alguna condición
Retorna Falso al Bolean
Conveniencia de las referencias para evitar el cambio de código
en la conversión: Parameters &g; ParametersG2 &g2; AC_WPNav
*&wp_nav; AC_Loiter *&loiter_nav; AC_PosControl *&pos_control;
AP_InertialNav &inertial_nav; AP_AHRS &ahrs;
AC_AttitudeControl_t *&attitude_control; MOTOR_CLASS
*&motors; RC_Channel *&channel_roll; RC_Channel
*&channel_pitch; RC_Channel *&channel_throttle; RC_Channel
*&channel_yaw; float &G_Dt; ap_t ≈ takeoff_state_t
&takeoff_state;