mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-30 06:23:35 +08:00
Bottle_drop: Store WPs in datamanager
This commit is contained in:
@@ -55,6 +55,7 @@
|
|||||||
#include <systemlib/param/param.h>
|
#include <systemlib/param/param.h>
|
||||||
|
|
||||||
#include <geo/geo.h>
|
#include <geo/geo.h>
|
||||||
|
#include <dataman/dataman.h>
|
||||||
|
|
||||||
#include <uORB/uORB.h>
|
#include <uORB/uORB.h>
|
||||||
#include <uORB/topics/actuator_controls.h>
|
#include <uORB/topics/actuator_controls.h>
|
||||||
@@ -271,22 +272,21 @@ int bottle_drop_thread_main(int argc, char *argv[]) {
|
|||||||
struct actuator_controls_s actuators;
|
struct actuator_controls_s actuators;
|
||||||
memset(&actuators, 0, sizeof(actuators));
|
memset(&actuators, 0, sizeof(actuators));
|
||||||
orb_advert_t actuator_pub = orb_advertise(ORB_ID(actuator_controls_1), &actuators);
|
orb_advert_t actuator_pub = orb_advertise(ORB_ID(actuator_controls_1), &actuators);
|
||||||
|
|
||||||
// struct mission_s onboard_mission;
|
|
||||||
// memset(&onboard_mission, 0, sizeof(onboard_mission));
|
|
||||||
// onboard_mission.items = (struct mission_item_s*)malloc(sizeof(struct mission_item_s) * 2);
|
|
||||||
|
|
||||||
struct mission_item_s *flight_vector_s = NULL;//&onboard_mission.items[0];
|
struct mission_item_s flight_vector_s;
|
||||||
struct mission_item_s *flight_vector_e = NULL;//&onboard_mission.items[1];
|
struct mission_item_s flight_vector_e;
|
||||||
|
|
||||||
// flight_vector_s->nav_cmd = NAV_CMD_WAYPOINT;
|
flight_vector_s.nav_cmd = NAV_CMD_WAYPOINT;
|
||||||
// flight_vector_s->radius = 50; // TODO: make parameter
|
flight_vector_s.radius = 50; // TODO: make parameter
|
||||||
// flight_vector_s->autocontinue = true;
|
flight_vector_s.autocontinue = true;
|
||||||
// flight_vector_e->nav_cmd = NAV_CMD_WAYPOINT;
|
flight_vector_e.nav_cmd = NAV_CMD_WAYPOINT;
|
||||||
// flight_vector_e->radius = 50; // TODO: make parameter
|
flight_vector_e.radius = 50; // TODO: make parameter
|
||||||
// flight_vector_e->autocontinue = true;
|
flight_vector_e.autocontinue = true;
|
||||||
|
|
||||||
// orb_advert_t onboard_mission_pub = orb_advertise(ORB_ID(onboard_mission), &onboard_mission);
|
struct mission_s onboard_mission;
|
||||||
|
memset(&onboard_mission, 0, sizeof(onboard_mission));
|
||||||
|
|
||||||
|
orb_advert_t onboard_mission_pub = orb_advertise(ORB_ID(onboard_mission), &onboard_mission);
|
||||||
|
|
||||||
struct pollfd fds[] = {
|
struct pollfd fds[] = {
|
||||||
{ .fd = vehicle_attitude_sub, .events = POLLIN }
|
{ .fd = vehicle_attitude_sub, .events = POLLIN }
|
||||||
@@ -420,10 +420,10 @@ int bottle_drop_thread_main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
|
|
||||||
// Compute flight vector
|
// Compute flight vector
|
||||||
map_projection_reproject(x_drop + 2*turn_radius*wind_speed.vx/vr, y_drop + 2*turn_radius*wind_speed.vy/vr, &(flight_vector_s->lat), &(flight_vector_s->lon));
|
map_projection_reproject(x_drop + 2*turn_radius*wind_speed.vx/vr, y_drop + 2*turn_radius*wind_speed.vy/vr, &(flight_vector_s.lat), &(flight_vector_s.lon));
|
||||||
flight_vector_s->altitude = height;
|
flight_vector_s.altitude = height;
|
||||||
map_projection_reproject(x_drop - turn_radius*wind_speed.vx/vr, y_drop - turn_radius*wind_speed.vy/vr, &(flight_vector_e)->lat, &(flight_vector_e)->lon);
|
map_projection_reproject(x_drop - turn_radius*wind_speed.vx/vr, y_drop - turn_radius*wind_speed.vy/vr, &flight_vector_e.lat, &flight_vector_e.lon);
|
||||||
flight_vector_e->altitude = height;
|
flight_vector_e.altitude = height;
|
||||||
//warnx("Flight vector: starting point = %.7f %.7f , end point = %.7f %.7f", flight_vector_s.lat,flight_vector_s.lon,flight_vector_e.lat,flight_vector_e.lon); //////////////////////////////////////////////////////////////////// DEBUGGING
|
//warnx("Flight vector: starting point = %.7f %.7f , end point = %.7f %.7f", flight_vector_s.lat,flight_vector_s.lon,flight_vector_e.lat,flight_vector_e.lon); //////////////////////////////////////////////////////////////////// DEBUGGING
|
||||||
|
|
||||||
// Drop Cancellation if terms are not met
|
// Drop Cancellation if terms are not met
|
||||||
@@ -448,18 +448,29 @@ int bottle_drop_thread_main(int argc, char *argv[]) {
|
|||||||
// warnx("future_distance: %.2f, precision: %.2f", future_distance, precision);
|
// warnx("future_distance: %.2f, precision: %.2f", future_distance, precision);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// onboard_mission.count = 2;
|
/* Save WPs in datamanager */
|
||||||
|
const size_t len = sizeof(struct mission_item_s);
|
||||||
|
|
||||||
// if (state_run && !state_drop) {
|
if (dm_write(DM_KEY_WAYPOINTS_ONBOARD, 0, DM_PERSIST_IN_FLIGHT_RESET, &flight_vector_s, len) != len) {
|
||||||
// onboard_mission.current_index = 0;
|
warnx("ERROR: could not save onboard WP");
|
||||||
// } else {
|
}
|
||||||
// onboard_mission.current_index = -1;
|
|
||||||
// }
|
if (dm_write(DM_KEY_WAYPOINTS_ONBOARD, 1, DM_PERSIST_IN_FLIGHT_RESET, &flight_vector_e, len) != len) {
|
||||||
|
warnx("ERROR: could not save onboard WP");
|
||||||
|
}
|
||||||
|
|
||||||
|
onboard_mission.count = 2;
|
||||||
|
|
||||||
|
if (state_run && !state_drop) {
|
||||||
|
onboard_mission.current_index = 0;
|
||||||
|
} else {
|
||||||
|
onboard_mission.current_index = -1;
|
||||||
|
}
|
||||||
|
|
||||||
// if (counter % 10 ==0)
|
if (counter % 10 ==0)
|
||||||
// warnx("Distance real: %.2f, distance_open_door: %.2f, angle to wind: %.2f", distance_real, distance_open_door, fabsf(_wrap_pi(globalpos.yaw-atan2f(wind_speed.vy,wind_speed.vx)+M_PI_F)));
|
warnx("Distance real: %.2f, distance_open_door: %.2f, angle to wind: %.2f", distance_real, distance_open_door, fabsf(_wrap_pi(globalpos.yaw-atan2f(wind_speed.vy,wind_speed.vx)+M_PI_F)));
|
||||||
|
|
||||||
// orb_publish(ORB_ID(onboard_mission), onboard_mission_pub, &onboard_mission);
|
orb_publish(ORB_ID(onboard_mission), onboard_mission_pub, &onboard_mission);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user