aboutsummaryrefslogtreecommitdiff
path: root/src/modules/navigator/offboard.cpp
diff options
context:
space:
mode:
authorThomas Gubler <thomasgubler@gmail.com>2014-07-03 14:42:59 +0200
committerThomas Gubler <thomasgubler@gmail.com>2014-07-03 14:46:25 +0200
commit839710daf841a9528a58e915f8b04484bf54e7dc (patch)
tree997f95813e3a5cdf8af393323398e841f29c0fae /src/modules/navigator/offboard.cpp
parent57f707af56be0d9281a95aebf64baf63ef022267 (diff)
downloadpx4-firmware-839710daf841a9528a58e915f8b04484bf54e7dc.tar.gz
px4-firmware-839710daf841a9528a58e915f8b04484bf54e7dc.tar.bz2
px4-firmware-839710daf841a9528a58e915f8b04484bf54e7dc.zip
Update offboard control uorb topic
Work towards supporting the new external setpoint mavlink messages
Diffstat (limited to 'src/modules/navigator/offboard.cpp')
-rw-r--r--src/modules/navigator/offboard.cpp67
1 files changed, 40 insertions, 27 deletions
diff --git a/src/modules/navigator/offboard.cpp b/src/modules/navigator/offboard.cpp
index ef7d11a03..27ce46a1d 100644
--- a/src/modules/navigator/offboard.cpp
+++ b/src/modules/navigator/offboard.cpp
@@ -79,33 +79,46 @@ Offboard::on_active(struct position_setpoint_triplet_s *pos_sp_triplet)
bool changed = false;
/* 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;
-
- changed = true;
-
- } 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;
-
- changed = true;
+ 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[0] &&
+ !_offboard_control_sp.ignore[1] &&
+ !_offboard_control_sp.ignore[2])) {
+ /* 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;
+
+ changed = true;
+
+ }
+ /* 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[3] &&
+ !_offboard_control_sp.ignore[4] &&
+ !_offboard_control_sp.ignore[5])) {
+ /* 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;
+
+ changed = true;
+ }
+
+ //XXX: map acceleration setpoint once supported in setpoint triplet
}
return changed;