mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-31 12:23:23 +08:00
svinfo simul
This commit is contained in:
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
<!-- messages from modem or sim to server -->
|
<!-- messages from modem or sim to server -->
|
||||||
<class name="telemetry_ap" ID="0x40">
|
<class name="telemetry_ap" ID="0x40">
|
||||||
|
|
||||||
<message name="BOOT" ID="1">
|
<message name="BOOT" id="2">
|
||||||
<field name="version" type="uint16"></field>
|
<field name="version" type="uint16"></field>
|
||||||
</message>
|
</message>
|
||||||
|
|
||||||
|
|||||||
@@ -61,8 +61,8 @@ struct svinfo {
|
|||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
uint8_t qi;
|
uint8_t qi;
|
||||||
uint8_t cno;
|
uint8_t cno;
|
||||||
int8_t elev;
|
int8_t elev; /** deg */
|
||||||
int16_t azim;
|
int16_t azim; /** deg */
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct svinfo gps_svinfos[NB_CHANNELS];
|
extern struct svinfo gps_svinfos[NB_CHANNELS];
|
||||||
|
|||||||
@@ -529,6 +529,7 @@ void use_gps_pos( void ) {
|
|||||||
if (i == gps_nb_channels) i = 0;
|
if (i == gps_nb_channels) i = 0;
|
||||||
if (i < gps_nb_channels)
|
if (i < gps_nb_channels)
|
||||||
DOWNLINK_SEND_SVINFO(&i, &gps_svinfos[i].svid, &gps_svinfos[i].flags, &gps_svinfos[i].qi, &gps_svinfos[i].cno, &gps_svinfos[i].elev, &gps_svinfos[i].azim);
|
DOWNLINK_SEND_SVINFO(&i, &gps_svinfos[i].svid, &gps_svinfos[i].flags, &gps_svinfos[i].qi, &gps_svinfos[i].cno, &gps_svinfos[i].elev, &gps_svinfos[i].azim);
|
||||||
|
i++;
|
||||||
|
|
||||||
if (!estimator_flight_time && (estimator_hspeed_mod > MIN_SPEED_FOR_TAKEOFF)) {
|
if (!estimator_flight_time && (estimator_hspeed_mod > MIN_SPEED_FOR_TAKEOFF)) {
|
||||||
estimator_flight_time = 1;
|
estimator_flight_time = 1;
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ let log_and_parse = fun log ac_name a msg values ->
|
|||||||
azim = ivalue "Azim";
|
azim = ivalue "Azim";
|
||||||
};
|
};
|
||||||
if i = 0 then
|
if i = 0 then
|
||||||
a.svinfo_nb_channels <- a.svinfo_last_channel;
|
a.svinfo_nb_channels <- a.svinfo_last_channel + 1;
|
||||||
a.svinfo_last_channel <- i
|
a.svinfo_last_channel <- i
|
||||||
| _ -> ()
|
| _ -> ()
|
||||||
|
|
||||||
@@ -254,7 +254,7 @@ let send_cam_status = fun a ->
|
|||||||
let h = a.alt -. float (Srtm.of_utm a.pos) in
|
let h = a.alt -. float (Srtm.of_utm a.pos) in
|
||||||
let east = a.pos.utm_x +. h *. tan (a.cam.phi -. a.roll)
|
let east = a.pos.utm_x +. h *. tan (a.cam.phi -. a.roll)
|
||||||
and north = a.pos.utm_y +. h *. tan (a.cam.theta +. a.pitch) in
|
and north = a.pos.utm_y +. h *. tan (a.cam.theta +. a.pitch) in
|
||||||
let values = ["cam_east", Pprz.Float east; "cam_north", Pprz.Float north] in
|
let values = ["ac_id", Pprz.String a.id; "cam_east", Pprz.Float east; "cam_north", Pprz.Float north] in
|
||||||
Ground_Pprz.message_send my_id "CAM_STATUS" values
|
Ground_Pprz.message_send my_id "CAM_STATUS" values
|
||||||
|
|
||||||
let send_if_calib = fun a ->
|
let send_if_calib = fun a ->
|
||||||
@@ -298,8 +298,9 @@ let send_svsinfo = fun a ->
|
|||||||
concat azim a.svinfo.(i).azim
|
concat azim a.svinfo.(i).azim
|
||||||
done;
|
done;
|
||||||
let f = fun s r -> (s, Pprz.String !r) in
|
let f = fun s r -> (s, Pprz.String !r) in
|
||||||
let vs = [f "SVID" svid; f "Flags" flags; f "QI" qi;
|
let vs = ["ac_id", Pprz.String a.id;
|
||||||
f "CNO" cno; f "Elev" elev; f "Azim" azim] in
|
f "svid" svid; f "flags" flags; f "qi" qi;
|
||||||
|
f "cno" cno; f "elev" elev; f "azim" azim] in
|
||||||
Ground_Pprz.message_send my_id "SVSINFO" vs
|
Ground_Pprz.message_send my_id "SVSINFO" vs
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -345,7 +346,8 @@ let send_aircraft_msg = fun ac ->
|
|||||||
send_cam_status a;
|
send_cam_status a;
|
||||||
send_if_calib a;
|
send_if_calib a;
|
||||||
send_fbw a;
|
send_fbw a;
|
||||||
send_infrared a
|
send_infrared a;
|
||||||
|
send_svsinfo a
|
||||||
with
|
with
|
||||||
Not_found -> prerr_endline ac
|
Not_found -> prerr_endline ac
|
||||||
| x -> prerr_endline (Printexc.to_string x)
|
| x -> prerr_endline (Printexc.to_string x)
|
||||||
|
|||||||
@@ -21,9 +21,6 @@ bool_t launch;
|
|||||||
bool_t link_fbw_receive_valid;
|
bool_t link_fbw_receive_valid;
|
||||||
uint8_t gps_nb_ovrn, modem_nb_ovrn, link_fbw_fbw_nb_err, link_fbw_nb_err;
|
uint8_t gps_nb_ovrn, modem_nb_ovrn, link_fbw_fbw_nb_err, link_fbw_nb_err;
|
||||||
|
|
||||||
struct svinfo gps_svinfos[NB_CHANNELS];
|
|
||||||
uint8_t gps_nb_channels;
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t ac_id;
|
uint8_t ac_id;
|
||||||
|
|
||||||
|
|||||||
+19
-2
@@ -5,6 +5,7 @@
|
|||||||
#include "airframe.h"
|
#include "airframe.h"
|
||||||
#include "flight_plan.h"
|
#include "flight_plan.h"
|
||||||
#include "autopilot.h"
|
#include "autopilot.h"
|
||||||
|
#include "gps.h"
|
||||||
|
|
||||||
#include <caml/mlvalues.h>
|
#include <caml/mlvalues.h>
|
||||||
|
|
||||||
@@ -15,8 +16,10 @@ float gps_fspeed; /* m/s */
|
|||||||
float gps_fclimb; /* m/s */
|
float gps_fclimb; /* m/s */
|
||||||
float gps_fcourse; /* rad */
|
float gps_fcourse; /* rad */
|
||||||
int32_t gps_utm_east, gps_utm_north;
|
int32_t gps_utm_east, gps_utm_north;
|
||||||
int8_t gps_utm_zone;
|
uint8_t gps_utm_zone;
|
||||||
float gps_east, gps_north; /* m */
|
float gps_east, gps_north; /* m */
|
||||||
|
struct svinfo gps_svinfos[NB_CHANNELS];
|
||||||
|
uint8_t gps_nb_channels = 0;
|
||||||
|
|
||||||
value sim_use_gps_pos(value x, value y, value z, value c, value a, value s, value cl, value t) {
|
value sim_use_gps_pos(value x, value y, value z, value c, value a, value s, value cl, value t) {
|
||||||
gps_mode = 3;
|
gps_mode = 3;
|
||||||
@@ -31,7 +34,21 @@ value sim_use_gps_pos(value x, value y, value z, value c, value a, value s, valu
|
|||||||
|
|
||||||
gps_east = gps_utm_east / 100 - NAV_UTM_EAST0;
|
gps_east = gps_utm_east / 100 - NAV_UTM_EAST0;
|
||||||
gps_north = gps_utm_north / 100 - NAV_UTM_NORTH0;
|
gps_north = gps_utm_north / 100 - NAV_UTM_NORTH0;
|
||||||
|
|
||||||
|
/** Space vehicle info simulation */
|
||||||
|
gps_nb_channels=7;
|
||||||
|
int i;
|
||||||
|
static int time;
|
||||||
|
time++;
|
||||||
|
for(i = 0; i < gps_nb_channels; i++) {
|
||||||
|
gps_svinfos[i].svid = 7 + i;
|
||||||
|
gps_svinfos[i].elev = (cos(((100*i)+time)/100.) + 1) * 45;
|
||||||
|
gps_svinfos[i].azim = (time/gps_nb_channels + 20 * i) % 360;
|
||||||
|
gps_svinfos[i].cno = 40 + sin(time/100.) * 10.;
|
||||||
|
gps_svinfos[i].flags = 0x01;
|
||||||
|
gps_svinfos[i].qi = (int)((time / 1000.) + i) % 8;
|
||||||
|
}
|
||||||
|
|
||||||
use_gps_pos(); /* From main.c */
|
use_gps_pos(); /* From main.c */
|
||||||
return Val_unit;
|
return Val_unit;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user