aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Oes <julian@oes.ch>2013-11-26 15:55:09 +0100
committerJulian Oes <julian@oes.ch>2013-11-26 15:55:09 +0100
commit972ca7db8a17feb7735700dbdd61e6f6a0dec4b6 (patch)
tree25ed63af2604c5e95b95738c804b77b1a49b9fdc
parent8e1af68bfd5db6a97289f4406beed7854b56d5bc (diff)
parent254777d38ae0ab30d7f8f75e49a3619aae592460 (diff)
downloadpx4-firmware-972ca7db8a17feb7735700dbdd61e6f6a0dec4b6.tar.gz
px4-firmware-972ca7db8a17feb7735700dbdd61e6f6a0dec4b6.tar.bz2
px4-firmware-972ca7db8a17feb7735700dbdd61e6f6a0dec4b6.zip
Merge branch 'fw_autoland_att_tecs_navigator' of https://github.com/thomasgubler/Firmware_Private into fw_autoland_att_tecs_navigator
-rw-r--r--src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp20
-rw-r--r--src/modules/navigator/navigator_main.cpp5
2 files changed, 14 insertions, 11 deletions
diff --git a/src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp b/src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp
index 7da28cbfa..d60983bce 100644
--- a/src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp
+++ b/src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp
@@ -95,8 +95,6 @@
*/
extern "C" __EXPORT int fw_pos_control_l1_main(int argc, char *argv[]);
-static int mavlink_fd;
-
class FixedwingPositionControl
{
public:
@@ -118,6 +116,7 @@ public:
int start();
private:
+ int _mavlink_fd;
bool _task_should_exit; /**< if true, sensor task should exit */
int _control_task; /**< task handle for sensor task */
@@ -377,11 +376,9 @@ FixedwingPositionControl::FixedwingPositionControl() :
land_stayonground(false),
land_motor_lim(false),
land_onslope(false),
- flare_curve_alt_last(0.0f)
+ flare_curve_alt_last(0.0f),
+ _mavlink_fd(-1)
{
-
- mavlink_fd = open(MAVLINK_LOG_DEVICE, 0);
-
/* safely initialize structs */
vehicle_attitude_s _att = {0};
vehicle_attitude_setpoint_s _att_sp = {0};
@@ -884,7 +881,7 @@ FixedwingPositionControl::control_position(const math::Vector2f &current_positio
throttle_max = math::min(throttle_max, _parameters.throttle_land_max);
if (!land_motor_lim) {
land_motor_lim = true;
- mavlink_log_info(mavlink_fd, "[POSCTRL] Landing, limit throttle");
+ mavlink_log_info(_mavlink_fd, "[POSCTRL] Landing, limit throttle");
}
}
@@ -905,7 +902,7 @@ FixedwingPositionControl::control_position(const math::Vector2f &current_positio
flare_angle_rad, math::radians(15.0f));
if (!land_noreturn_vertical) {
- mavlink_log_info(mavlink_fd, "[POSCTRL] Landing, flare");
+ mavlink_log_info(_mavlink_fd, "[POSCTRL] Landing, flare");
land_noreturn_vertical = true;
}
//warnx("Landing: flare, _global_pos.alt %.1f, flare_curve_alt %.1f, flare_curve_alt_last %.1f, flare_length %.1f, wp_distance %.1f", _global_pos.alt, flare_curve_alt, flare_curve_alt_last, flare_length, wp_distance);
@@ -924,7 +921,7 @@ FixedwingPositionControl::control_position(const math::Vector2f &current_positio
if (!land_onslope) {
- mavlink_log_info(mavlink_fd, "[POSCTRL] Landing, on slope");
+ mavlink_log_info(_mavlink_fd, "[POSCTRL] Landing, on slope");
land_onslope = true;
}
@@ -1173,6 +1170,11 @@ FixedwingPositionControl::task_main()
/* only run controller if position changed */
if (fds[1].revents & POLLIN) {
+ /* XXX Hack to get mavlink output going */
+ if (_mavlink_fd < 0) {
+ /* try to open the mavlink log device every once in a while */
+ _mavlink_fd = open(MAVLINK_LOG_DEVICE, 0);
+ }
static uint64_t last_run = 0;
float deltaT = (hrt_absolute_time() - last_run) / 1000000.0f;
diff --git a/src/modules/navigator/navigator_main.cpp b/src/modules/navigator/navigator_main.cpp
index 45bb832ea..b85c4bef9 100644
--- a/src/modules/navigator/navigator_main.cpp
+++ b/src/modules/navigator/navigator_main.cpp
@@ -963,13 +963,14 @@ Navigator::check_mission_item_reached()
uint64_t now = hrt_absolute_time();
float orbit;
- if (_mission_item_triplet.current.nav_cmd == NAV_CMD_WAYPOINT) {
+ if (_mission_item_triplet.current.nav_cmd == NAV_CMD_WAYPOINT && _mission_item_triplet.current.radius > 0.01f) {
orbit = _mission_item_triplet.current.radius;
} else if (_mission_item_triplet.current.nav_cmd == NAV_CMD_LOITER_TURN_COUNT ||
_mission_item_triplet.current.nav_cmd == NAV_CMD_LOITER_TIME_LIMIT ||
- _mission_item_triplet.current.nav_cmd == NAV_CMD_LOITER_UNLIMITED) {
+ _mission_item_triplet.current.nav_cmd == NAV_CMD_LOITER_UNLIMITED &&
+ _mission_item_triplet.current.loiter_radius > 0.01f) {
orbit = _mission_item_triplet.current.loiter_radius;
} else {