@@ -884,7 +884,6 @@ hardware_interface::return_type IgnitionSystem::write(
884
884
}
885
885
}
886
886
887
-
888
887
// set values of all mimic joints with respect to mimicked joint
889
888
for (const auto & mimic_joint : this ->dataPtr ->mimic_joints_ ) {
890
889
for (const auto & mimic_interface : mimic_joint.interfaces_to_mimic ) {
@@ -899,55 +898,55 @@ hardware_interface::return_type IgnitionSystem::write(
899
898
900
899
if (mimic_interface == " position" ) {
901
900
// Get the joint position
902
-
903
- double position_mimicked_joint =
901
+ const auto * jp_mimicked =
904
902
this ->dataPtr ->ecm ->Component <ignition::gazebo::components::JointPosition>(
905
- this ->dataPtr ->joints_ [mimic_joint.mimicked_joint_index ].sim_joint )->Data ()[0 ];
903
+ this ->dataPtr ->joints_ [mimic_joint.mimicked_joint_index ].sim_joint );
904
+ double position_mimicked_joint = jp_mimicked->Data ()[0 ];
906
905
907
- double position_mimic_joint =
906
+ const auto * jp_mimic =
908
907
this ->dataPtr ->ecm ->Component <ignition::gazebo::components::JointPosition>(
909
- this ->dataPtr ->joints_ [mimic_joint.joint_index ].sim_joint )->Data ()[0 ];
908
+ this ->dataPtr ->joints_ [mimic_joint.joint_index ].sim_joint );
909
+ double position_mimic_joint = jp_mimic->Data ()[0 ];
910
910
911
911
// calculate error with clamped position command
912
- double position_error =
913
- position_mimic_joint - std::clamp (
914
- position_mimicked_joint * mimic_joint.multiplier ,
915
- jointAxis->Data ().Lower (), jointAxis->Data ().Upper ());
912
+ double position_error = position_mimic_joint - position_mimicked_joint *
913
+ mimic_joint.multiplier ;
916
914
917
- position_error = copysign (1.0 , position_error) * std::clamp (
918
- std::abs (
919
- position_error), 0.0 , std::abs (jointAxis->Data ().Upper () - jointAxis->Data ().Lower ()));
915
+ double velocity_sp = (-1.0 ) * position_error * (*this ->dataPtr ->update_rate );
920
916
921
917
// calculate target velocity - output of outer pid - input to inner pid
922
918
double target_vel = this ->dataPtr ->joints_ [mimic_joint.joint_index ].pid_pos .Update (
923
919
position_error, std::chrono::duration<double >(
924
920
period.to_chrono <std::chrono::nanoseconds>()));
925
921
926
- // double velocity_error = this->dataPtr->joints_[mimic_joint.joint_index].joint_velocity -
927
- // std::clamp (
928
- // target_vel, -1.0 * jointAxis->Data().MaxVelocity(),
929
- // jointAxis ->Data().MaxVelocity()) ;
922
+ const auto * jv_mimic =
923
+ this -> dataPtr -> ecm -> Component <ignition::gazebo::components::JointVelocity> (
924
+ this -> dataPtr -> joints_ [mimic_joint. joint_index ]. sim_joint );
925
+ double velocity_mimic_joint = jv_mimic ->Data ()[ 0 ] ;
930
926
931
- double velocity_error = this ->dataPtr ->joints_ [mimic_joint.joint_index ].joint_velocity -
932
- target_vel;
927
+ double velocity_error = velocity_mimic_joint - target_vel;
933
928
934
929
// calculate target force/torque - output of inner pid
935
930
double target_force = this ->dataPtr ->joints_ [mimic_joint.joint_index ].pid_vel .Update (
936
931
velocity_error, std::chrono::duration<double >(
937
932
period.to_chrono <std::chrono::nanoseconds>()));
938
933
934
+ igndbg << " [" << this ->dataPtr ->joints_ [mimic_joint.joint_index ].name << " ]\t " <<
935
+ position_mimicked_joint << " \t " << position_mimic_joint << " \t " << target_force <<
936
+ " \n " ;
937
+
939
938
auto forceCmd =
940
939
this ->dataPtr ->ecm ->Component <ignition::gazebo::components::JointForceCmd>(
941
940
this ->dataPtr ->joints_ [mimic_joint.joint_index ].sim_joint );
942
941
943
- // if (forceCmd == nullptr) {
944
- // this->dataPtr->ecm->CreateComponent(
945
- // this->dataPtr->joints_[mimic_joint.joint_index].sim_joint,
946
- // ignition::gazebo::components::JointForceCmd({target_force}));
947
- // } else {
948
- // *forceCmd = ignition::gazebo::components::JointForceCmd(
949
- // {target_force});
950
- // }
942
+ if (forceCmd == nullptr ) {
943
+ this ->dataPtr ->ecm ->CreateComponent (
944
+ this ->dataPtr ->joints_ [mimic_joint.joint_index ].sim_joint ,
945
+ ignition::gazebo::components::JointForceCmd ({target_force}));
946
+ } else {
947
+ *forceCmd = ignition::gazebo::components::JointForceCmd (
948
+ {target_force});
949
+ }
951
950
}
952
951
/*
953
952
if (mimic_interface == "velocity") {
0 commit comments