@@ -163,13 +163,13 @@ void PInverse(const Eigen::MatrixXd& M, Eigen::MatrixXd& M_inv,
163163 M_inv = Eigen::MatrixXd (svd.matrixV () * S_inv * svd.matrixU ().transpose ());
164164}
165165
166- void TorqueSafetyGuardFn (std::array<double , 7 >& tau_d_array, double min_torque,
167- double max_torque ) {
166+ void TorqueSafetyGuardFn (std::array<double , 7 >& tau_d_array,
167+ const std::array< double , 7 >& torque_limit ) {
168168 for (size_t i = 0 ; i < tau_d_array.size (); i++) {
169- if (tau_d_array[i] < min_torque ) {
170- tau_d_array[i] = min_torque ;
171- } else if (tau_d_array[i] > max_torque ) {
172- tau_d_array[i] = max_torque ;
169+ if (tau_d_array[i] < -torque_limit[i] ) {
170+ tau_d_array[i] = -torque_limit[i] ;
171+ } else if (tau_d_array[i] > torque_limit[i] ) {
172+ tau_d_array[i] = torque_limit[i] ;
173173 }
174174 }
175175}
@@ -282,6 +282,8 @@ void Franka::stop_control_thread() {
282282
283283void Franka::osc () {
284284 franka::Model model = this ->robot .loadModel ();
285+ const Eigen::Vector3d kp_p_cfg = this ->m_cfg .kp_p ;
286+ const double kp_r_cfg = this ->m_cfg .kp_r ;
285287
286288 this ->controller_time = 0.0 ;
287289
@@ -314,9 +316,8 @@ void Franka::osc() {
314316 Eigen::Array<double , 7 , 1 > joint_min_;
315317 Eigen::Array<double , 7 , 1 > avoidance_weights_;
316318
317- // values from deoxys/config/osc-position-controller.yml
318- Kp_p.diagonal () << 150 , 150 , 150 ;
319- Kp_r.diagonal () << 250 , 250 , 250 ;
319+ Kp_p.diagonal () << kp_p_cfg;
320+ Kp_r.diagonal () << kp_r_cfg, kp_r_cfg, kp_r_cfg;
320321
321322 Kd_p << Kp_p.cwiseSqrt () * 2.0 ;
322323 Kd_r << Kp_r.cwiseSqrt () * 2.0 ;
@@ -495,9 +496,8 @@ void Franka::osc() {
495496 franka::kMaxTorqueRate , tau_d_array, robot_state.tau_J_d );
496497
497498 // deoxys/config/control_config.yml
498- double min_torque = -5 ;
499- double max_torque = 5 ;
500- TorqueSafetyGuardFn (tau_d_rate_limited, min_torque, max_torque);
499+ std::array<double , 7 > torque_limit = {5 , 5 , 5 , 5 , 5 , 5 , 5 };
500+ TorqueSafetyGuardFn (tau_d_rate_limited, torque_limit);
501501
502502 return tau_d_rate_limited;
503503 });
@@ -512,6 +512,8 @@ void Franka::osc() {
512512
513513void Franka::joint_controller () {
514514 franka::Model model = this ->robot .loadModel ();
515+ const common::Vector7d Kp = this ->m_cfg .kp ;
516+ const common::Vector7d Kd = this ->m_cfg .kd ;
515517 this ->controller_time = 0.0 ;
516518
517519 // conservative collision and impedance behavior
@@ -524,13 +526,6 @@ void Franka::joint_controller() {
524526 {{100.0 , 100.0 , 100.0 , 100.0 , 100.0 , 100.0 }},
525527 {{100.0 , 100.0 , 100.0 , 100.0 , 100.0 , 100.0 }});
526528
527- // deoxys/config/joint-impedance-controller.yml
528- common::Vector7d Kp;
529- Kp << 100 ., 100 ., 100 ., 100 ., 75 ., 150 ., 50 .;
530-
531- common::Vector7d Kd;
532- Kd << 20 ., 20 ., 20 ., 20 ., 7.5 , 15.0 , 5.0 ;
533-
534529 Eigen::Array<double , 7 , 1 > joint_max_;
535530 Eigen::Array<double , 7 , 1 > joint_min_;
536531
@@ -595,9 +590,8 @@ void Franka::joint_controller() {
595590 franka::kMaxTorqueRate , tau_d_array, robot_state.tau_J_d );
596591
597592 // deoxys/config/control_config.yml
598- double min_torque = -5 ;
599- double max_torque = 5 ;
600- TorqueSafetyGuardFn (tau_d_rate_limited, min_torque, max_torque);
593+ std::array<double , 7 > torque_limit = {5 , 5 , 5 , 5 , 5 , 5 , 5 };
594+ TorqueSafetyGuardFn (tau_d_rate_limited, torque_limit);
601595
602596 return tau_d_rate_limited;
603597 });
0 commit comments