mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-10 06:59:54 +08:00
Merge pull request #2188 from paparazzi/remote_gps_local
[gps] add support for REMOTE_GPS_LOCAL
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
<periodic fun="gps_datalink_periodic_check()" freq="1." autorun="TRUE"/>
|
||||
<datalink message="REMOTE_GPS" fun="gps_datalink_parse_REMOTE_GPS()"/>
|
||||
<datalink message="REMOTE_GPS_SMALL" fun="gps_datalink_parse_REMOTE_GPS_SMALL()"/>
|
||||
<datalink message="REMOTE_GPS_LOCAL" fun="gps_datalink_parse_REMOTE_GPS_LOCAL()"/>
|
||||
<makefile target="ap|fbw">
|
||||
<file name="gps_datalink.c" dir="subsystems/gps"/>
|
||||
<raw>
|
||||
|
||||
@@ -173,6 +173,60 @@ static void parse_gps_datalink(uint8_t numsv, int32_t ecef_x, int32_t ecef_y, in
|
||||
AbiSendMsgGPS(GPS_DATALINK_ID, now_ts, &gps_datalink);
|
||||
}
|
||||
|
||||
/** Parse the REMOTE_GPS_LOCAL datalink packet */
|
||||
static void parse_gps_datalink_local(float enu_x, float enu_y, float enu_z,
|
||||
float enu_xd, float enu_yd, float enu_zd,
|
||||
uint32_t tow, float course)
|
||||
{
|
||||
|
||||
struct EnuCoor_i enu_pos, enu_speed;
|
||||
|
||||
// Position in ENU coordinates
|
||||
enu_pos.x = (int32_t)CM_OF_M(enu_x);
|
||||
enu_pos.y = (int32_t)CM_OF_M(enu_y);
|
||||
enu_pos.z = (int32_t)CM_OF_M(enu_z);
|
||||
|
||||
// Convert the ENU coordinates to ECEF
|
||||
ecef_of_enu_point_i(&gps_datalink.ecef_pos, <p_def, &enu_pos);
|
||||
SetBit(gps_datalink.valid_fields, GPS_VALID_POS_ECEF_BIT);
|
||||
|
||||
lla_of_ecef_i(&gps_datalink.lla_pos, &gps_datalink.ecef_pos);
|
||||
SetBit(gps_datalink.valid_fields, GPS_VALID_POS_LLA_BIT);
|
||||
|
||||
enu_speed.x = (int32_t)CM_OF_M(enu_xd);
|
||||
enu_speed.y = (int32_t)CM_OF_M(enu_yd);
|
||||
enu_speed.z = (int32_t)CM_OF_M(enu_zd);
|
||||
|
||||
VECT3_NED_OF_ENU(gps_datalink.ned_vel, enu_speed);
|
||||
SetBit(gps_datalink.valid_fields, GPS_VALID_VEL_NED_BIT);
|
||||
|
||||
ecef_of_enu_vect_i(&gps_datalink.ecef_vel , <p_def , &enu_speed);
|
||||
SetBit(gps_datalink.valid_fields, GPS_VALID_VEL_ECEF_BIT);
|
||||
|
||||
gps_datalink.gspeed = (int16_t)FLOAT_VECT2_NORM(enu_speed);
|
||||
gps_datalink.speed_3d = (int16_t)FLOAT_VECT3_NORM(enu_speed);
|
||||
|
||||
gps_datalink.hmsl = ltp_def.hmsl + enu_pos.z * 10;
|
||||
SetBit(gps_datalink.valid_fields, GPS_VALID_HMSL_BIT);
|
||||
|
||||
gps_datalink.course = (int32_t)(RadOfDeg(course)*1e7);
|
||||
SetBit(gps_datalink.valid_fields, GPS_VALID_COURSE_BIT);
|
||||
|
||||
gps_datalink.num_sv = 7;
|
||||
gps_datalink.tow = tow;
|
||||
gps_datalink.fix = GPS_FIX_3D; // set 3D fix to true
|
||||
|
||||
// set gps msg time
|
||||
gps_datalink.last_msg_ticks = sys_time.nb_sec_rem;
|
||||
gps_datalink.last_msg_time = sys_time.nb_sec;
|
||||
|
||||
gps_datalink.last_3dfix_ticks = sys_time.nb_sec_rem;
|
||||
gps_datalink.last_3dfix_time = sys_time.nb_sec;
|
||||
|
||||
// publish new GPS data
|
||||
uint32_t now_ts = get_sys_time_usec();
|
||||
AbiSendMsgGPS(GPS_DATALINK_ID, now_ts, &gps_datalink);
|
||||
}
|
||||
|
||||
void gps_datalink_parse_REMOTE_GPS(void)
|
||||
{
|
||||
@@ -202,3 +256,17 @@ void gps_datalink_parse_REMOTE_GPS_SMALL(void)
|
||||
DL_REMOTE_GPS_SMALL_speed_xyz(dl_buffer),
|
||||
DL_REMOTE_GPS_SMALL_tow(dl_buffer));
|
||||
}
|
||||
|
||||
void gps_datalink_parse_REMOTE_GPS_LOCAL(void)
|
||||
{
|
||||
if (DL_REMOTE_GPS_LOCAL_ac_id(dl_buffer) != AC_ID) { return; } // not for this aircraft
|
||||
|
||||
parse_gps_datalink_local(DL_REMOTE_GPS_LOCAL_enu_x(dl_buffer),
|
||||
DL_REMOTE_GPS_LOCAL_enu_y(dl_buffer),
|
||||
DL_REMOTE_GPS_LOCAL_enu_z(dl_buffer),
|
||||
DL_REMOTE_GPS_LOCAL_enu_xd(dl_buffer),
|
||||
DL_REMOTE_GPS_LOCAL_enu_yd(dl_buffer),
|
||||
DL_REMOTE_GPS_LOCAL_enu_zd(dl_buffer),
|
||||
DL_REMOTE_GPS_LOCAL_tow(dl_buffer),
|
||||
DL_REMOTE_GPS_LOCAL_course(dl_buffer));
|
||||
}
|
||||
|
||||
@@ -46,5 +46,6 @@ extern void gps_datalink_init(void);
|
||||
|
||||
extern void gps_datalink_parse_REMOTE_GPS(void);
|
||||
extern void gps_datalink_parse_REMOTE_GPS_SMALL(void);
|
||||
extern void gps_datalink_parse_REMOTE_GPS_LOCAL(void);
|
||||
|
||||
#endif /* GPS_DATALINK_H */
|
||||
|
||||
+1
-1
Submodule sw/ext/pprzlink updated: 9525de7663...7dcd0843a1
Reference in New Issue
Block a user