diff --git a/conf/modules/mavlink.xml b/conf/modules/mavlink.xml index acaf631218..da106e7152 100644 --- a/conf/modules/mavlink.xml +++ b/conf/modules/mavlink.xml @@ -11,7 +11,7 @@ - + diff --git a/sw/airborne/modules/datalink/mavlink.c b/sw/airborne/modules/datalink/mavlink.c index e248fe848e..0047084503 100644 --- a/sw/airborne/modules/datalink/mavlink.c +++ b/sw/airborne/modules/datalink/mavlink.c @@ -44,6 +44,8 @@ static char mavlink_params[NB_SETTING][16] = SETTINGS; /**< Transmitting paramet static inline void mavlink_send_heartbeat(void); static inline void mavlink_send_sys_status(void); static inline void mavlink_send_attitude(void); +static inline void mavlink_send_local_position_ned(void); +static inline void mavlink_send_global_position_int(void); static inline void mavlink_send_params(void); //TODO FIXME @@ -63,10 +65,12 @@ void mavlink_init(void) */ void mavlink_periodic(void) { - RunOnceEvery(MODULES_FREQUENCY / 2, mavlink_send_heartbeat()); - RunOnceEvery(MODULES_FREQUENCY / 10, mavlink_send_sys_status()); - RunOnceEvery(MODULES_FREQUENCY / 10, mavlink_send_attitude()); - RunOnceEvery(MODULES_FREQUENCY / 10, mavlink_send_params()); + RunOnceEvery(2, mavlink_send_heartbeat()); + RunOnceEvery(5, mavlink_send_sys_status()); + RunOnceEvery(5, mavlink_send_attitude()); + RunOnceEvery(5, mavlink_send_params()); + RunOnceEvery(5, mavlink_send_local_position_ned()); + RunOnceEvery(5, mavlink_send_global_position_int()); } /** @@ -220,6 +224,38 @@ static inline void mavlink_send_attitude(void) MAVLink(SendMessage()); } +static inline void mavlink_send_local_position_ned(void) +{ + mavlink_msg_local_position_ned_send(MAVLINK_COMM_0, + get_sys_time_msec(), + stateGetPositionNed_f()->x, + stateGetPositionNed_f()->y, + stateGetPositionNed_f()->z, + stateGetSpeedNed_f()->x, + stateGetSpeedNed_f()->y, + stateGetSpeedNed_f()->z); + MAVLink(SendMessage()); +} + +static inline void mavlink_send_global_position_int(void) +{ + float heading = DegOfRad(stateGetNedToBodyEulers_f()->psi); + if (heading < 0.) { + heading += 360; + } + uint16_t compass_heading = heading * 100; + int32_t relative_alt = stateGetPositionLla_i()->alt - state.ned_origin_f.hmsl; + mavlink_msg_global_position_int_send(MAVLINK_COMM_0, + get_sys_time_msec(), + stateGetPositionLla_i()->lat, + stateGetPositionLla_i()->lon, + stateGetPositionLla_i()->alt, + relative_alt, + 0,0,0, // velocity in lla? + compass_heading); + MAVLink(SendMessage()); +} + /** * Send the parameters */