#include <iostream>
#include <Eigen/Dense>
// 定义 DH 参数结构体
struct DHParam {
double a;
double alpha;
double d;
double theta;
};
// 计算单个关节的雅可比矩阵列
Eigen::Matrix<double, 6, 1> calculateJacobianColumn(const DHParam& dh, double jointAngle) {
double sTheta = std::sin(jointAngle);
double cTheta = std::cos(jointAngle);
double sAlpha = std::sin(dh.alpha);
double cAlpha = std::cos(dh.alpha);
Eigen::Matrix<double, 6, 1> column;
column << (-sAlpha * sTheta * dh.a - cAlpha * cTheta * dh.d),
(cAlpha * sTheta * dh.a - sAlpha * cTheta * dh.d),
(cTheta * dh.d + sTheta * dh.a * cAlpha),
(cAlpha * cTheta),
(sAlpha * cTheta),
(-sTheta);
return column;
}
// 计算六轴机械臂的雅可比矩阵
Eigen::Matrix<double, 6, 6> calculateJacobianMatrix(const std::vector<DHParam>& dhParams, const std::vector<double>& jointAngles) {
Eigen::Matrix<double, 6, 6> jacobian;
for (int i = 0; i < 6; ++i) {
jacobian.col(i) = calculateJacobianColumn(dhParams[i], jointAngles[i]);
}
return jacobian;
}
int main() {
std::vector<DHParam> dhParams = {
{1.0, 0.0, 0.0, 0.0},
{1.0, -M_PI_2, 0.0, 0.0},
{1.0, 0.0, 0.0, 0.0},
{1.0, -M_PI_2, 0.0, 0.0},
{1.0, 0.0, 0.0, 0.0},
{1.0, -M_PI_2, 0.0, 0.0}
};
std::vector<double> jointAngles = {0.5, 1.0, 0.8, 1.2, 0.6, 0.9};
Eigen::Matrix<double, 6, 6> jacobian = calculateJacobianMatrix(dhParams, jointAngles);
std::cout << "Jacobian Matrix:\n" << jacobian << std::endl;
return 0;
}
计算机械臂雅可比矩阵代码,c++实现
于 2024-08-09 09:29:05 首次发布