askPriorityModel类的定义如下,using namespace Eigen; class TaskPriorityModel : public ModelBase { public: TaskPriorityModel() = default; TaskPriorityModel(int n, Vector3d &p_trocar, Vector3d &p_desired, double dt, MatrixXd &K, MatrixXd &D, int mode = 0); void changePositionDesired(Vector3d &p_desired); VectorXd nextStep(MatrixXd &T, MatrixXd &J, VectorXd &tau, VectorXd &q, VectorXd &dq) override; VectorXd error() override; protected: MatrixXd pinv_eigen_based(Eigen::MatrixXd & origin); private: MatrixXd m_K, m_D; Vector3d m_p_trocar, m_p_desired; VectorXd m_error; double m_dt; int m_n, m_mode; }; 下面这段代码什么意思 TaskPriorityModel model(7, p_trocar, p_desired, 0.001 * calculate_interval, K, D);
时间: 2024-03-28 17:38:12 浏览: 79
这段代码创建了一个类型为TaskPriorityModel的对象model,并且传入了7、p_trocar、p_desired、0.001 * calculate_interval、K和D这6个参数。其中,7表示机器人的自由度数,p_trocar和p_desired分别表示当前机器人的末端执行器位置和期望位置,0.001 * calculate_interval表示每个控制周期的时间间隔,K和D分别表示位置和速度的增益矩阵。通过这些参数,TaskPriorityModel对象可以计算出下一步的关节角度和速度,并且返回误差向量。
相关问题
Eigen::Vector3f eulerAngle(-det.yaw, 0.0, 0.0); Eigen::AngleAxisf rollAngle(Eigen::AngleAxisf(eulerAngle(2), Eigen::Vector3f::UnitX())); Eigen::AngleAxisf pitchAngle(Eigen::AngleAxisf(eulerAngle(1), Eigen::Vector3f::UnitY())); Eigen::AngleAxisf yawAngle(Eigen::AngleAxisf(eulerAngle(0), Eigen::Vector3f::UnitZ())); const Eigen::Quaternionf bboxQ1(yawAngle * pitchAngle * rollAngle); Eigen::Vector4f q = bboxQ1.coeffs();
这段代码使用了Eigen库中的Vector3f和Quaternionf类,用于计算欧拉角和四元数。具体来说,它将欧拉角(-det.yaw, 0.0, 0.0)分别绕x、y、z轴旋转,得到对应的三个旋转矩阵rollAngle、pitchAngle、yawAngle,再将它们按照z-y-x顺序相乘,得到最终的旋转矩阵bboxQ1。最后,将bboxQ1转换为四元数,并存储在q中。这段代码可能是用于姿态估计或者物体位姿计算等领域。
Eigen::Vector3d ea0(Eular[1] * M_PI / 180.0, Eular[0] * M_PI / 180.0, Eular[2] * M_PI / 180.0); Eigen::Matrix3d R; R = Eigen::AngleAxisd(ea0[0], ::Eigen::Vector3d::UnitX()) * Eigen::AngleAxisd(ea0[1], ::Eigen::Vector3d::UnitY()) * Eigen::AngleAxisd(ea0[2], ::Eigen::Vector3d::UnitZ()); Eigen::Quaterniond q; q = R;
这段代码是通过欧拉角计算得到旋转矩阵,然后将旋转矩阵转换为四元数。首先,通过Eular数组表示欧拉角,将角度值转换成弧度值并用Eigen::Vector3d类型的变量ea0存储。接着,通过Eigen::AngleAxisd()函数将欧拉角转换成旋转矩阵R。最后,通过Eigen::Quaterniond()函数将旋转矩阵R转换成四元数q。
阅读全文