@@ -15,56 +15,56 @@ namespace robotic {
1515 EigenState&& ViewFiltering::update(const RobotModel<number_of_joints>& iiwa, EigenState&& state, Eigen::Matrix<double ,Eigen::Dynamic,Eigen::Dynamic>& composed_task_jacobians){
1616 using vector_type = curan::robotic::RobotModel<curan::robotic::number_of_joints>::vector_type;
1717 static double currentTime = 0.0 ;
18- /*
19- We remove some energy from the system whilst moving the robot in free space. Thus we guarantee that the system is passive
20- */
21-
22- state.cmd_tau = -iiwa. mass () * iiwa. velocities ();
18+
19+ // We remove some energy from the system whilst moving the robot in free space. Thus we guarantee that the system is passive
20+
21+ // state.cmd_tau = -iiwa.mass() * iiwa.velocities();
22+ state.cmd_tau = vector_type::Zero ();
2323 vector_type raw_filtered_torque = vector_type::Zero ();
24- vector_type partial_derivative_torque = vector_type::Zero ();
24+ vector_type raw_deriv_filtered_torque = vector_type::Zero ();
25+
2526 if (filtering_mechanism.is_first )
2627 previous_q = iiwa.joints ();
27-
28- double fastest_velocity_found = std::numeric_limits<double >::min ();
29- size_t offset_fastest_filter = 0 ;
3028
31- for (size_t joint_i = 0 ; joint_i < curan::robotic::number_of_joints; ++joint_i)
32- {
33- const curan::robotic::ripple::Observation obser_i_j{iiwa.velocities ()[joint_i], iiwa.joints ()[joint_i] - previous_q[joint_i]};
34- ripple::update_filter_properties (first_harmonic[joint_i], obser_i_j);
35- ripple::update_filter_properties (second_harmonic[joint_i], obser_i_j);
36- ripple::update_filter_properties (third_harmonic[joint_i], obser_i_j);
37- double vel_modulus_i = std::abs (iiwa.velocities ()[joint_i]);
38- if (fastest_velocity_found < vel_modulus_i)
39- {
40- fastest_velocity_found = vel_modulus_i;
41- offset_fastest_filter = joint_i;
42- }
43- }
29+ static vector_type init_q = iiwa.joints ();
30+ static vector_type prev_tau = iiwa.measured_torque ();
31+
32+ damper.compute <curan::robotic::number_of_joints>(iiwa.velocities (),iiwa.sample_time ());
4433 previous_q = iiwa.joints ();
4534
4635 for (size_t j = 0 ; j < curan::robotic::number_of_joints; ++j)
4736 {
48- double filtered_torque_value = iiwa.measured_state ()->tau [j];
49- ripple::shift_filter_data (joint_data_first_harmonic[j], 0.0 );
50- ripple::update_filter_data (joint_data_first_harmonic[j], filtered_torque_value);
51- auto [filtered_harm_1,partial_derivative_1] = ripple::execute (first_harmonic[offset_fastest_filter], joint_data_first_harmonic[j]);
37+ double filtered_torque_value = iiwa.measured_torque ()[j];
38+ double deriv_filtered_torque_value = (iiwa.measured_torque ()[j]-prev_tau[j])/(iiwa.sample_time ());
39+ curan::robotic::ripple::shift_filter_data (joint_data_first_harmonic[j]);
40+ curan::robotic::ripple::update_filter_data (joint_data_first_harmonic[j], filtered_torque_value,deriv_filtered_torque_value);
41+ auto [filtered_harm_1,partial_derivative_1] = curan::robotic::ripple::execute (first_harmonic[j],damper, joint_data_first_harmonic[j]);
5242 filtered_torque_value -= filtered_harm_1;
53- ripple::shift_filter_data (joint_data_second_harmonic[j], 0.0 );
54- ripple::update_filter_data (joint_data_second_harmonic[j], filtered_torque_value);
55- auto [filtered_harm_2,partial_derivative_2]= ripple::execute (second_harmonic[offset_fastest_filter], joint_data_second_harmonic[j]);
43+ deriv_filtered_torque_value -= partial_derivative_1;
44+ curan::robotic::ripple::shift_filter_data (joint_data_second_harmonic[j]);
45+ curan::robotic::ripple::update_filter_data (joint_data_second_harmonic[j], filtered_torque_value,deriv_filtered_torque_value);
46+ auto [filtered_harm_2,partial_derivative_2]= curan::robotic::ripple::execute (second_harmonic[j],damper, joint_data_second_harmonic[j]);
5647 filtered_torque_value -= filtered_harm_2;
57- ripple::shift_filter_data (joint_data_third_harmonic[j], 0.0 ) ;
58- ripple::update_filter_data (joint_data_third_harmonic[j], filtered_torque_value );
59- auto [ filtered_harm_3,partial_derivative_3] = ripple::execute (third_harmonic[offset_fastest_filter], joint_data_third_harmonic[j]);
60- partial_derivative_torque[j ] = partial_derivative_1 + partial_derivative_2 +partial_derivative_3 ;
48+ deriv_filtered_torque_value -= partial_derivative_2 ;
49+ curan::robotic:: ripple::shift_filter_data (joint_data_third_harmonic[j]);
50+ curan::robotic:: ripple::update_filter_data ( joint_data_third_harmonic[j], filtered_torque_value,deriv_filtered_torque_value );
51+ auto [ filtered_harm_3,partial_derivative_3 ] = curan::robotic::ripple::execute (third_harmonic[j],damper, joint_data_third_harmonic[j]) ;
6152 filtered_torque_value -= filtered_harm_3;
53+ deriv_filtered_torque_value -= partial_derivative_3;
6254 raw_filtered_torque[j] = -filtered_torque_value - iiwa.gravity ()[j] - iiwa.coriolis ()[j];
55+ raw_deriv_filtered_torque[j] = -deriv_filtered_torque_value;
6356 }
6457
65- const auto & [filtered_torque, filtered_torque_derivative] = filtering_mechanism.update (raw_filtered_torque,partial_derivative_torque,iiwa.sample_time ());
66- state.cmd_q = iiwa.joints () + Eigen::Matrix<double ,number_of_joints,1 >::Constant (0.5 / 180.0 * M_PI * sin (2 * M_PI * 10 * currentTime));
58+ prev_tau = iiwa.measured_torque ();
6759
60+ // const auto& [filtered_torque, filtered_torque_derivative] = filtering_mechanism.update(raw_filtered_torque,partial_derivative_torque,iiwa.sample_time());
61+ const auto & [filtered_torque, filtered_torque_derivative] = filtering_mechanism.update (raw_filtered_torque,raw_deriv_filtered_torque,iiwa.sample_time ());
62+ // state.cmd_q = iiwa.joints() + Eigen::Matrix<double,curan::robotic::number_of_joints,1>::Constant(0.5 / 180.0 * M_PI * sin(2 * M_PI * 10 * currentTime));
63+ state.cmd_q = init_q;
64+ state.cmd_q [0 ] = iiwa.joints ()[0 ]+ (0.5 / 180.0 * M_PI * sin (2 * M_PI * 10 * currentTime));
65+ state.user_defined = raw_filtered_torque;
66+ state.user_defined2 = filtered_torque_derivative;
67+ state.user_defined4 = (iiwa.measured_torque ()-prev_tau)/iiwa.sample_time ();
6868 currentTime += iiwa.sample_time ();
6969 return std::move (state);
7070 }
0 commit comments