From 5e23900a0defd5293ed024b98e53e12b87bde269 Mon Sep 17 00:00:00 2001 From: Yuki Takagi Date: Wed, 31 Jul 2024 14:06:59 +0900 Subject: [PATCH 1/8] first commit Signed-off-by: Yuki Takagi --- .../debug_values.hpp | 4 +++ .../pid_longitudinal_controller.hpp | 8 +++-- .../src/pid_longitudinal_controller.cpp | 30 +++++++++++++++++-- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/debug_values.hpp b/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/debug_values.hpp index e8834665de3ec..a0bceda625b21 100644 --- a/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/debug_values.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/debug_values.hpp @@ -58,6 +58,10 @@ class DebugValues STOP_DIST = 28, FF_SCALE = 29, ACC_CMD_FF = 30, + ERROR_ACC = 31, + ERROR_ACC_FILTERED = 32, + ACC_CMD_ACC_FB_APPLIED = 33, + SIZE // this is the number of enum elements }; diff --git a/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp b/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp index 57999372dceed..95fa9904f4d2a 100644 --- a/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp @@ -169,7 +169,7 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro // drive PIDController m_pid_vel; - std::shared_ptr m_lpf_vel_error{nullptr}; + std::unique_ptr m_lpf_vel_error{nullptr}; bool m_enable_integration_at_low_speed; double m_current_vel_threshold_pid_integrate; double m_time_threshold_before_pid_integrate; @@ -196,6 +196,10 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro }; EmergencyStateParams m_emergency_state_params; + // acc feedback + double m_acc_feedback_gain; + std::unique_ptr m_lpf_acc_error{nullptr}; + // acceleration limit double m_max_acc; double m_min_acc; @@ -209,7 +213,7 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro enum class SlopeSource { RAW_PITCH = 0, TRAJECTORY_PITCH, TRAJECTORY_ADAPTIVE }; SlopeSource m_slope_source{SlopeSource::RAW_PITCH}; double m_adaptive_trajectory_velocity_th; - std::shared_ptr m_lpf_pitch{nullptr}; + std::unique_ptr m_lpf_pitch{nullptr}; double m_max_pitch_rad; double m_min_pitch_rad; diff --git a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp index 9190c065eca3c..5a1c39ffb9092 100644 --- a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp +++ b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp @@ -104,7 +104,7 @@ PidLongitudinalController::PidLongitudinalController( // set lowpass filter for vel error and pitch const double lpf_vel_error_gain{node.declare_parameter("lpf_vel_error_gain")}; - m_lpf_vel_error = std::make_shared(0.0, lpf_vel_error_gain); + m_lpf_vel_error = std::make_unique(0.0, lpf_vel_error_gain); m_enable_integration_at_low_speed = node.declare_parameter("enable_integration_at_low_speed"); @@ -164,6 +164,13 @@ PidLongitudinalController::PidLongitudinalController( p.jerk = node.declare_parameter("emergency_jerk"); // [m/s^3] } + // parameters for acc feedback + { + const double lpf_acc_error_gain{node.declare_parameter("lpf_acc_error_gain")}; + m_lpf_acc_error = std::make_unique(0.0, lpf_acc_error_gain); + m_acc_feedback_gain = node.declare_parameter("acc_feedback_gain"); + } + // parameters for acceleration limit m_max_acc = node.declare_parameter("max_acc"); // [m/s^2] m_min_acc = node.declare_parameter("min_acc"); // [m/s^2] @@ -177,7 +184,7 @@ PidLongitudinalController::PidLongitudinalController( m_adaptive_trajectory_velocity_th = node.declare_parameter("adaptive_trajectory_velocity_th"); // [m/s^2] const double lpf_pitch_gain{node.declare_parameter("lpf_pitch_gain")}; - m_lpf_pitch = std::make_shared(0.0, lpf_pitch_gain); + m_lpf_pitch = std::make_unique(0.0, lpf_pitch_gain); m_max_pitch_rad = node.declare_parameter("max_pitch_rad"); // [rad] m_min_pitch_rad = node.declare_parameter("min_pitch_rad"); // [rad] @@ -365,6 +372,9 @@ rcl_interfaces::msg::SetParametersResult PidLongitudinalController::paramCallbac update_param("emergency_jerk", p.jerk); } + // acceleration limit + update_param("acc_feedback_gain", m_acc_feedback_gain); + // acceleration limit update_param("min_acc", m_min_acc); @@ -844,8 +854,22 @@ PidLongitudinalController::Motion PidLongitudinalController::calcCtrlCmd( // store acceleration without slope compensation m_prev_raw_ctrl_cmd = raw_ctrl_cmd; + // calc acc feedback + const double acc_err = control_data.current_motion.acc - raw_ctrl_cmd.acc; + m_debug_values.setValues(DebugValues::TYPE::ERROR_ACC, acc_err); + m_lpf_acc_error->filter(acc_err); + m_debug_values.setValues(DebugValues::TYPE::ERROR_ACC_FILTERED, m_lpf_acc_error->getValue()); + + const double acc_cmd = raw_ctrl_cmd.acc - m_lpf_acc_error->getValue() * m_acc_feedback_gain; + m_debug_values.setValues(DebugValues::TYPE::ACC_CMD_ACC_FB_APPLIED, acc_cmd); + RCLCPP_DEBUG( + logger_, + "[acc feedback]: raw_ctrl_cmd.acc: %1.3f, control_data.current_motion.acc: %1.3f, " + "m_lpf_acc_error.getValue(): %1.3f, acc_cmd: %1.3f", + raw_ctrl_cmd.acc, control_data.current_motion.acc, 0.0, acc_cmd); + ctrl_cmd_as_pedal_pos.acc = - applySlopeCompensation(raw_ctrl_cmd.acc, control_data.slope_angle, control_data.shift); + applySlopeCompensation(acc_cmd, control_data.slope_angle, control_data.shift); m_debug_values.setValues(DebugValues::TYPE::ACC_CMD_SLOPE_APPLIED, ctrl_cmd_as_pedal_pos.acc); ctrl_cmd_as_pedal_pos.vel = raw_ctrl_cmd.vel; } From 870e50cfb587e8a794e4f8eeefcd94c15aebb7db Mon Sep 17 00:00:00 2001 From: Yuki Takagi Date: Fri, 2 Aug 2024 00:58:50 +0900 Subject: [PATCH 2/8] acc fb: add lpf reset Signed-off-by: Yuki Takagi --- .../src/pid_longitudinal_controller.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp index 5a1c39ffb9092..a51165a9d12df 100644 --- a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp +++ b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp @@ -763,6 +763,7 @@ void PidLongitudinalController::updateControlState(const ControlData & control_d m_pid_vel.reset(); m_lpf_vel_error->reset(0.0); + m_lpf_acc_error->reset(0.0); return changeState(ControlState::DRIVE); } From 64c78a9393c365af3785a4521b213b3ae90f85df Mon Sep 17 00:00:00 2001 From: Yuki Takagi Date: Fri, 2 Aug 2024 01:07:34 +0900 Subject: [PATCH 3/8] add new plotjuggler setting Signed-off-by: Yuki Takagi --- ...plot_juggler_trajectory_follower_accfb.xml | 298 ++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower_accfb.xml diff --git a/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower_accfb.xml b/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower_accfb.xml new file mode 100644 index 0000000000000..d5ab47a3c16fa --- /dev/null +++ b/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower_accfb.xml @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c709252a711cf81c956f07ea042eba20100111b7 Mon Sep 17 00:00:00 2001 From: Yuki Takagi Date: Fri, 9 Aug 2024 20:48:23 +0900 Subject: [PATCH 4/8] add update_param Signed-off-by: Yuki Takagi --- .../pid_longitudinal_controller/lowpass_filter.hpp | 2 ++ .../src/pid_longitudinal_controller.cpp | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/lowpass_filter.hpp b/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/lowpass_filter.hpp index 081e78e2de214..1ec43282ca4d3 100644 --- a/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/lowpass_filter.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/lowpass_filter.hpp @@ -61,6 +61,8 @@ class LowpassFilter1d m_x = ret; return ret; } + + void setGain(const double g) { m_gain = g; } }; } // namespace autoware::motion::control::pid_longitudinal_controller #endif // AUTOWARE__PID_LONGITUDINAL_CONTROLLER__LOWPASS_FILTER_HPP_ diff --git a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp index a51165a9d12df..4f8ed3b7560c6 100644 --- a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp +++ b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp @@ -298,6 +298,10 @@ rcl_interfaces::msg::SetParametersResult PidLongitudinalController::paramCallbac update_param("kd", kd); m_pid_vel.setGains(kp, ki, kd); + double lpf_vel_error_gain{node_parameters_->get_parameter("lpf_vel_error_gain").as_double()}; + update_param("lpf_vel_error_gain", lpf_vel_error_gain); + m_lpf_vel_error->setGain(lpf_vel_error_gain); + double max_pid{node_parameters_->get_parameter("max_out").as_double()}; double min_pid{node_parameters_->get_parameter("min_out").as_double()}; double max_p{node_parameters_->get_parameter("max_p_effort").as_double()}; @@ -372,8 +376,11 @@ rcl_interfaces::msg::SetParametersResult PidLongitudinalController::paramCallbac update_param("emergency_jerk", p.jerk); } - // acceleration limit + // acceleration feedback update_param("acc_feedback_gain", m_acc_feedback_gain); + double lpf_acc_error_gain{node_parameters_->get_parameter("lpf_acc_error_gain").as_double()}; + update_param("lpf_acc_error_gain", lpf_acc_error_gain); + m_lpf_acc_error->setGain(lpf_acc_error_gain); // acceleration limit update_param("min_acc", m_min_acc); From 15b1796d0c7521fc39cafdae0b681018d2e4dc8a Mon Sep 17 00:00:00 2001 From: Yuki Takagi Date: Fri, 23 Aug 2024 17:55:04 +0900 Subject: [PATCH 5/8] add param Signed-off-by: Yuki Takagi --- .../param/longitudinal/pid.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/control/autoware_trajectory_follower_node/param/longitudinal/pid.param.yaml b/control/autoware_trajectory_follower_node/param/longitudinal/pid.param.yaml index 5027c94afe7c1..68fb172b19d2a 100644 --- a/control/autoware_trajectory_follower_node/param/longitudinal/pid.param.yaml +++ b/control/autoware_trajectory_follower_node/param/longitudinal/pid.param.yaml @@ -60,6 +60,10 @@ emergency_acc: -5.0 # denotes acceleration emergency_jerk: -3.0 + # acceleration feedback + lpf_acc_error_gain: 0.98 + acc_feedback_gain: 0.0 + # acceleration limit max_acc: 3.0 min_acc: -5.0 From 626b1df74902f10f44be0168559d7eb10643bceb Mon Sep 17 00:00:00 2001 From: Yuki Takagi Date: Mon, 26 Aug 2024 16:16:51 +0900 Subject: [PATCH 6/8] po Signed-off-by: Yuki Takagi --- .../pid_longitudinal_controller.hpp | 6 +- .../src/pid_longitudinal_controller.cpp | 12 +- .../plot_juggler_trajectory_follower.xml | 249 ++++++++------- ...plot_juggler_trajectory_follower_accfb.xml | 298 ------------------ 4 files changed, 140 insertions(+), 425 deletions(-) delete mode 100644 control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower_accfb.xml diff --git a/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp b/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp index 95fa9904f4d2a..1d4192d51d98d 100644 --- a/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp @@ -169,7 +169,7 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro // drive PIDController m_pid_vel; - std::unique_ptr m_lpf_vel_error{nullptr}; + std::shared_ptr m_lpf_vel_error{nullptr}; bool m_enable_integration_at_low_speed; double m_current_vel_threshold_pid_integrate; double m_time_threshold_before_pid_integrate; @@ -198,7 +198,7 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro // acc feedback double m_acc_feedback_gain; - std::unique_ptr m_lpf_acc_error{nullptr}; + std::shared_ptr m_lpf_acc_error{nullptr}; // acceleration limit double m_max_acc; @@ -213,7 +213,7 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro enum class SlopeSource { RAW_PITCH = 0, TRAJECTORY_PITCH, TRAJECTORY_ADAPTIVE }; SlopeSource m_slope_source{SlopeSource::RAW_PITCH}; double m_adaptive_trajectory_velocity_th; - std::unique_ptr m_lpf_pitch{nullptr}; + std::shared_ptr m_lpf_pitch{nullptr}; double m_max_pitch_rad; double m_min_pitch_rad; diff --git a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp index 4f8ed3b7560c6..96e2796a91d22 100644 --- a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp +++ b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp @@ -104,7 +104,7 @@ PidLongitudinalController::PidLongitudinalController( // set lowpass filter for vel error and pitch const double lpf_vel_error_gain{node.declare_parameter("lpf_vel_error_gain")}; - m_lpf_vel_error = std::make_unique(0.0, lpf_vel_error_gain); + m_lpf_vel_error = std::make_shared(0.0, lpf_vel_error_gain); m_enable_integration_at_low_speed = node.declare_parameter("enable_integration_at_low_speed"); @@ -167,7 +167,7 @@ PidLongitudinalController::PidLongitudinalController( // parameters for acc feedback { const double lpf_acc_error_gain{node.declare_parameter("lpf_acc_error_gain")}; - m_lpf_acc_error = std::make_unique(0.0, lpf_acc_error_gain); + m_lpf_acc_error = std::make_shared(0.0, lpf_acc_error_gain); m_acc_feedback_gain = node.declare_parameter("acc_feedback_gain"); } @@ -184,7 +184,7 @@ PidLongitudinalController::PidLongitudinalController( m_adaptive_trajectory_velocity_th = node.declare_parameter("adaptive_trajectory_velocity_th"); // [m/s^2] const double lpf_pitch_gain{node.declare_parameter("lpf_pitch_gain")}; - m_lpf_pitch = std::make_unique(0.0, lpf_pitch_gain); + m_lpf_pitch = std::make_shared(0.0, lpf_pitch_gain); m_max_pitch_rad = node.declare_parameter("max_pitch_rad"); // [rad] m_min_pitch_rad = node.declare_parameter("min_pitch_rad"); // [rad] @@ -872,9 +872,9 @@ PidLongitudinalController::Motion PidLongitudinalController::calcCtrlCmd( m_debug_values.setValues(DebugValues::TYPE::ACC_CMD_ACC_FB_APPLIED, acc_cmd); RCLCPP_DEBUG( logger_, - "[acc feedback]: raw_ctrl_cmd.acc: %1.3f, control_data.current_motion.acc: %1.3f, " - "m_lpf_acc_error.getValue(): %1.3f, acc_cmd: %1.3f", - raw_ctrl_cmd.acc, control_data.current_motion.acc, 0.0, acc_cmd); + "[acc feedback]: raw_ctrl_cmd.acc: %1.3f, control_data.current_motion.acc: %1.3f, acc_cmd: " + "%1.3f", + raw_ctrl_cmd.acc, control_data.current_motion.acc, acc_cmd); ctrl_cmd_as_pedal_pos.acc = applySlopeCompensation(acc_cmd, control_data.slope_angle, control_data.shift); diff --git a/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower.xml b/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower.xml index ab127c2d47b97..e458edaf6c471 100644 --- a/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower.xml +++ b/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower.xml @@ -1,130 +1,130 @@ - - + + - - + + - - + + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + - - + + - + - + - + - + - - + + - + - + - - + + @@ -133,100 +133,114 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -234,17 +248,17 @@ - + - + - + @@ -254,13 +268,13 @@ - + - + @@ -272,11 +286,10 @@ - + - diff --git a/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower_accfb.xml b/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower_accfb.xml deleted file mode 100644 index d5ab47a3c16fa..0000000000000 --- a/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower_accfb.xml +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 833e02bd9660ac318908c0da90409c769f5f8b23 Mon Sep 17 00:00:00 2001 From: Yuki Takagi Date: Mon, 26 Aug 2024 18:29:49 +0900 Subject: [PATCH 7/8] po Signed-off-by: Yuki Takagi --- .../config/autoware_pid_longitudinal_controller.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/control/autoware_pid_longitudinal_controller/config/autoware_pid_longitudinal_controller.param.yaml b/control/autoware_pid_longitudinal_controller/config/autoware_pid_longitudinal_controller.param.yaml index f683d8b4f0736..6d9b93ab98870 100644 --- a/control/autoware_pid_longitudinal_controller/config/autoware_pid_longitudinal_controller.param.yaml +++ b/control/autoware_pid_longitudinal_controller/config/autoware_pid_longitudinal_controller.param.yaml @@ -61,6 +61,10 @@ emergency_acc: -5.0 # denotes acceleration emergency_jerk: -3.0 + # acceleration feedback + lpf_acc_error_gain: 0.98 + acc_feedback_gain: 0.0 + # acceleration limit max_acc: 3.0 min_acc: -5.0 From ac5ebfe759b7d8d876f838b99bedc2ad8a71d6e7 Mon Sep 17 00:00:00 2001 From: Yuki Takagi Date: Mon, 26 Aug 2024 18:37:30 +0900 Subject: [PATCH 8/8] po Signed-off-by: Yuki Takagi --- .../autoware_pid_longitudinal_controller.schema.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/control/autoware_pid_longitudinal_controller/schema/autoware_pid_longitudinal_controller.schema.json b/control/autoware_pid_longitudinal_controller/schema/autoware_pid_longitudinal_controller.schema.json index fbbd2dfc7a59f..ef1272582e52b 100644 --- a/control/autoware_pid_longitudinal_controller/schema/autoware_pid_longitudinal_controller.schema.json +++ b/control/autoware_pid_longitudinal_controller/schema/autoware_pid_longitudinal_controller.schema.json @@ -251,6 +251,16 @@ "description": "target jerk in an EMERGENCY state [m/s^3]", "default": "-3.0" }, + "lpf_acc_error_gain": { + "type": "number", + "description": "gain of low-pass filter for acceleration", + "default": "0.98" + }, + "acc_feedback_gain": { + "type": "number", + "description": "acceleration feedback gain", + "default": "0.0" + }, "max_acc": { "type": "number", "description": "max value of output acceleration [m/s^2]",