From b726d8df0d516a74494c2ffd2e95281011d8638c Mon Sep 17 00:00:00 2001
From: bresch <brescianimathieu@gmail.com>
Date: Tue, 14 May 2019 08:49:39 +0200
Subject: [PATCH] Add jerk parameter for auto mode MPC_JERK_AUTO. Specify when
 a parameter is only used in a certain manual or auto mode

---
 .../FlightTaskAutoLineSmoothVel.cpp           |  6 ++--
 .../FlightTaskAutoLineSmoothVel.hpp           |  2 +-
 .../mc_pos_control/mc_pos_control_params.c    | 33 ++++++++++++++++---
 3 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.cpp b/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.cpp
index ae1ac19f69..d6ed9994ec 100644
--- a/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.cpp
+++ b/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.cpp
@@ -201,9 +201,9 @@ void FlightTaskAutoLineSmoothVel::_updateTrajConstraints()
 	_trajectory[1].setMaxAccel(_param_mpc_acc_hor_max.get());
 	_trajectory[0].setMaxVel(_param_mpc_xy_vel_max.get());
 	_trajectory[1].setMaxVel(_param_mpc_xy_vel_max.get());
-	_trajectory[0].setMaxJerk(_param_mpc_jerk_min.get()); // TODO : Should be computed using heading
-	_trajectory[1].setMaxJerk(_param_mpc_jerk_min.get());
-	_trajectory[2].setMaxJerk(_param_mpc_jerk_min.get());
+	_trajectory[0].setMaxJerk(_param_mpc_jerk_auto.get()); // TODO : Should be computed using heading
+	_trajectory[1].setMaxJerk(_param_mpc_jerk_auto.get());
+	_trajectory[2].setMaxJerk(_param_mpc_jerk_auto.get());
 
 	if (_velocity_setpoint(2) < 0.f) { // up
 		_trajectory[2].setMaxAccel(_param_mpc_acc_up_max.get());
diff --git a/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.hpp b/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.hpp
index 151140250b..e3fd4055ce 100644
--- a/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.hpp
+++ b/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.hpp
@@ -60,7 +60,7 @@ protected:
 					(ParamFloat<px4::params::MPC_ACC_UP_MAX>) _param_mpc_acc_up_max,
 					(ParamFloat<px4::params::MPC_ACC_DOWN_MAX>) _param_mpc_acc_down_max,
 					(ParamFloat<px4::params::MPC_ACC_HOR_MAX>) _param_mpc_acc_hor_max,
-					(ParamFloat<px4::params::MPC_JERK_MIN>) _param_mpc_jerk_min,
+					(ParamFloat<px4::params::MPC_JERK_AUTO>) _param_mpc_jerk_auto,
 					(ParamFloat<px4::params::MPC_XY_TRAJ_P>) _param_mpc_xy_traj_p,
 					(ParamFloat<px4::params::MPC_Z_TRAJ_P>) _param_mpc_z_traj_p
 				       );
diff --git a/src/modules/mc_pos_control/mc_pos_control_params.c b/src/modules/mc_pos_control/mc_pos_control_params.c
index 746f930964..e7e3ebfba2 100644
--- a/src/modules/mc_pos_control/mc_pos_control_params.c
+++ b/src/modules/mc_pos_control/mc_pos_control_params.c
@@ -87,7 +87,7 @@ PARAM_DEFINE_FLOAT(MPC_THR_HOVER, 0.5f);
  * (e.g. if hover thrust is set to 20%, 80% of the upper thrust range is squeezed into the
  * upper half of the stick range).
  *
- * Note: in case MPC_THR_HOVER is set to 50%, the modes 0 and 1 are the same.
+ * Note: In case MPC_THR_HOVER is set to 50%, the modes 0 and 1 are the same.
  *
  * @value 0 Rescale to hover thrust
  * @value 1 No Rescale
@@ -427,7 +427,10 @@ PARAM_DEFINE_FLOAT(MPC_HOLD_MAX_Z, 0.6f);
 PARAM_DEFINE_FLOAT(MPC_VELD_LP, 5.0f);
 
 /**
- * Maximum horizontal acceleration for auto mode and maximum deceleration for manual mode
+ * Maximum horizontal acceleration for auto mode and for manual mode
+ *
+ * Manual mode: Maximum deceleration for MPC_POS_MODE 1 and 2. Maximum acceleration and deceleration for MPC_POS_MODE 3.
+ * Auto mode: Used with MPC_AUTO_MODE 0 only. For MPC_AUTO_MODE 1, MPC_ACC_HOR is always used.
  *
  * @unit m/s/s
  * @min 2.0
@@ -441,6 +444,8 @@ PARAM_DEFINE_FLOAT(MPC_ACC_HOR_MAX, 10.0f);
 /**
  * Acceleration for auto and for manual
  *
+ * Note: In manual, this parameter is only used in MPC_POS_MODE 1 and 2
+ *
  * @unit m/s/s
  * @min 2.0
  * @max 15.0
@@ -454,6 +459,8 @@ PARAM_DEFINE_FLOAT(MPC_ACC_HOR, 5.0f);
 /**
  * Slow horizontal manual deceleration for manual mode
  *
+ * Note: This is only used when MPC_POS_MODE is set to 1 or 2.
+ *
  * @unit m/s/s
  * @min 0.5
  * @max 10.0
@@ -511,7 +518,7 @@ PARAM_DEFINE_FLOAT(MPC_ACC_DOWN_MAX, 10.0f);
  *
  * Setting this to the maximum value essentially disables the limit.
  *
- * Note: this is only used when MPC_POS_MODE is set to a smoothing mode.
+ * Note: This is only used when MPC_POS_MODE is set to a smoothing mode.
  *
  * @unit m/s/s/s
  * @min 0.5
@@ -534,7 +541,7 @@ PARAM_DEFINE_FLOAT(MPC_JERK_MAX, 20.0f);
  *
  * Set this to zero to use a fixed maximum jerk limit (MPC_JERK_MAX).
  *
- * Note: this is only used when MPC_POS_MODE is set to a smoothing mode.
+ * Note: This is only used when MPC_POS_MODE is set to 1 or 2.
  *
  * @unit m/s/s/s
  * @min 0
@@ -545,6 +552,24 @@ PARAM_DEFINE_FLOAT(MPC_JERK_MAX, 20.0f);
  */
 PARAM_DEFINE_FLOAT(MPC_JERK_MIN, 8.0f);
 
+/**
+ * Jerk limit in auto mode
+ *
+ * Limit the maximum jerk of the vehicle (how fast the acceleration can change).
+ * A lower value leads to smoother vehicle motions, but it also limits its
+ * agility.
+ *
+ * Note: This is only used in jerk-limited trajectory mode (MPC_AUTO_MODE 1)
+ *
+ * @unit m/s/s/s
+ * @min 5.0
+ * @max 80.0
+ * @increment 1
+ * @decimal 1
+ * @group Multicopter Position Control
+ */
+PARAM_DEFINE_FLOAT(MPC_JERK_AUTO, 8.0f);
+
 /**
  * Altitude control mode.
  *
-- 
GitLab