aboutsummaryrefslogtreecommitdiff
path: root/src/modules/navigator
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/navigator')
-rw-r--r--src/modules/navigator/offboard.cpp77
1 files changed, 45 insertions, 32 deletions
diff --git a/src/modules/navigator/offboard.cpp b/src/modules/navigator/offboard.cpp
index dcb5c6000..fc4d183cd 100644
--- a/src/modules/navigator/offboard.cpp
+++ b/src/modules/navigator/offboard.cpp
@@ -68,11 +68,6 @@ Offboard::~Offboard()
}
void
-Offboard::on_inactive()
-{
-}
-
-void
Offboard::on_activation()
{
}
@@ -89,37 +84,55 @@ Offboard::on_active()
}
/* copy offboard setpoints to the corresponding topics */
- if (_navigator->get_control_mode()->flag_control_position_enabled
- && _offboard_control_sp.mode == OFFBOARD_CONTROL_MODE_DIRECT_POSITION) {
- /* position control */
- pos_sp_triplet->current.x = _offboard_control_sp.p1;
- pos_sp_triplet->current.y = _offboard_control_sp.p2;
- pos_sp_triplet->current.yaw = _offboard_control_sp.p3;
- pos_sp_triplet->current.z = -_offboard_control_sp.p4;
-
- pos_sp_triplet->current.type = SETPOINT_TYPE_OFFBOARD;
- pos_sp_triplet->current.valid = true;
- pos_sp_triplet->current.position_valid = true;
-
- _navigator->set_position_setpoint_triplet_updated();
-
- } else if (_navigator->get_control_mode()->flag_control_velocity_enabled
- && _offboard_control_sp.mode == OFFBOARD_CONTROL_MODE_DIRECT_VELOCITY) {
- /* velocity control */
- pos_sp_triplet->current.vx = _offboard_control_sp.p2;
- pos_sp_triplet->current.vy = _offboard_control_sp.p1;
- pos_sp_triplet->current.yawspeed = _offboard_control_sp.p3;
- pos_sp_triplet->current.vz = _offboard_control_sp.p4;
-
- pos_sp_triplet->current.type = SETPOINT_TYPE_OFFBOARD;
- pos_sp_triplet->current.valid = true;
- pos_sp_triplet->current.velocity_valid = true;
-
- _navigator->set_position_setpoint_triplet_updated();
+ if (_offboard_control_sp.mode == OFFBOARD_CONTROL_MODE_DIRECT_LOCAL_NED) {
+ /* We accept position control only if none of the directions is ignored (as pos_sp_triplet does not
+ * support deactivation of individual directions) */
+ if (_navigator->get_control_mode()->flag_control_position_enabled &&
+ (!offboard_control_sp_ignore_position(_offboard_control_sp, 0) &&
+ !offboard_control_sp_ignore_position(_offboard_control_sp, 1) &&
+ !offboard_control_sp_ignore_position(_offboard_control_sp, 2))) {
+ /* position control */
+ pos_sp_triplet->current.x = _offboard_control_sp.position[0];
+ pos_sp_triplet->current.y = _offboard_control_sp.position[1];
+ //pos_sp_triplet->current.yaw = _offboard_control_sp.position[2];
+ //XXX: copy yaw
+ pos_sp_triplet->current.z = -_offboard_control_sp.position[2];
+
+ pos_sp_triplet->current.type = SETPOINT_TYPE_OFFBOARD;
+ pos_sp_triplet->current.valid = true;
+ pos_sp_triplet->current.position_valid = true;
+
+ _navigator->set_position_setpoint_triplet_updated();
+ }
+ /* We accept velocity control only if none of the directions is ignored (as pos_sp_triplet does not
+ * support deactivation of individual directions) */
+ if (_navigator->get_control_mode()->flag_control_velocity_enabled &&
+ (!offboard_control_sp_ignore_velocity(_offboard_control_sp, 0) &&
+ !offboard_control_sp_ignore_velocity(_offboard_control_sp, 1) &&
+ !offboard_control_sp_ignore_velocity(_offboard_control_sp, 2))) {
+ /* velocity control */
+ pos_sp_triplet->current.vx = _offboard_control_sp.velocity[0];
+ pos_sp_triplet->current.vy = _offboard_control_sp.velocity[1];
+// pos_sp_triplet->current.yawspeed = _offboard_control_sp.velocity[;
+// //XXX: copy yaw speed
+ pos_sp_triplet->current.vz = _offboard_control_sp.velocity[2];
+
+ pos_sp_triplet->current.type = SETPOINT_TYPE_OFFBOARD;
+ pos_sp_triplet->current.valid = true;
+ pos_sp_triplet->current.velocity_valid = true;
+
+ _navigator->set_position_setpoint_triplet_updated();
+ }
+
+ //XXX: map acceleration setpoint once supported in setpoint triplet
}
}
+void
+Offboard::on_inactive()
+{
+}
void
Offboard::update_offboard_control_setpoint()