diff --git a/src/quadarm_task_priority_ctrl.cpp b/src/quadarm_task_priority_ctrl.cpp index 47ef9d9c72fd13b94114584ce45cd83eeccbc54e..92a33700033e7a3c8bd43209ccbeeb73068c904f 100644 --- a/src/quadarm_task_priority_ctrl.cpp +++ b/src/quadarm_task_priority_ctrl.cpp @@ -314,6 +314,18 @@ void CQuadarm_Task_Priority_Ctrl::uam_control(){ this->uam_.vel = MatrixXd::Zero(6+this->arm_.nj,1); this->uam_.vel.block(0,0,3,1) = Vtotal.block(0,0,3,1); this->uam_.vel.block(5,0,1+this->arm_.nj,1) = Vtotal.block(3,0,1+this->arm_.nj,1); + + // Eigenvalues check: Singular values (the positive square roots of the nonzero eigenvalues of the corresponding matrix J^T*J) + MatrixXd Jvssq = JVS.transpose()*JVS; + MatrixXd Jgsq = JG.transpose()*JG; + MatrixXd Jlsq = JL.transpose()*JL; + this->eig_values_.vs = Jvssq.eigenvalues(); + this->eig_values_.cog = Jgsq.eigenvalues(); + this->eig_values_.jl = Jgsq.eigenvalues(); + // std::cout << "***********" << std::endl << std::endl; + // std::cout << "VS eigenvalues:" << std::endl << Jvssq.eigenvalues() << std::endl; + // std::cout << "CoG eigenvalues:" << std::endl << Jgsq.eigenvalues()*1e6 << std::endl; + // std::cout << "JL eigenvalues:" << std::endl << Jlsq.eigenvalues() << std::endl; } void CQuadarm_Task_Priority_Ctrl::task_infrad(MatrixXd& JIR,MatrixXd& JIR_pseudo,MatrixXd& sigmaIR) { diff --git a/src/quadarm_task_priority_ctrl.h b/src/quadarm_task_priority_ctrl.h index dcf60fa426126e8ad59417b07cb710e1648aafd0..bee41f0341e0b4d1c4c8480db8ba1da2731dbd33 100644 --- a/src/quadarm_task_priority_ctrl.h +++ b/src/quadarm_task_priority_ctrl.h @@ -116,27 +116,33 @@ typedef struct{ MatrixXd arm_cog; // Arm CoG coordinates w.r.t. arm base link; }cog_data; +typedef struct{ + VectorXcd vs; + VectorXcd cog; + VectorXcd jl; +}eig_values; + class CQuadarm_Task_Priority_Ctrl { private: - uam uam_; // Unmanned Aerial Manipulator + uam uam_; // Unmanned Aerial Manipulator. - arm arm_; // Arm + arm arm_; // Arm. - quadrotor quad_; // Quadrotor + quadrotor quad_; // Quadrotor. ctrl_params ctrl_params_; // Control Law parameters. - ht T_; // Homogeneous Transforms + ht T_; // Homogeneous Transforms. - MatrixXd cam_vel_; // Camera velocities + MatrixXd cam_vel_; // Camera velocities. double target_dist_; // Euclidean distance to target. double quad_height_; // Quadrotor ground distance. - string datetime_; // Initial date and time + string datetime_; // Initial date and time. /** * \brief Get date and time @@ -250,6 +256,9 @@ class CQuadarm_Task_Priority_Ctrl // they must be private and set get functions created. cog_data arm_cog_data_; // Arm CoG data to debug in higher levels. + eig_values eig_values_; // Task jacobian eigenvalues. + + /** * \brief Constructor *