首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用D-H矩阵计算正运动学

用D-H矩阵计算正运动学
EN

Stack Overflow用户
提问于 2017-10-30 17:30:52
回答 1查看 377关注 0票数 0

我有一个6自由度的机械臂模型:

robot arm structure

我想计算正向运动学,所以我使用D-H矩阵。D-H参数包括:

代码语言:javascript
运行
复制
static const std::vector<float> theta = {
0,0,90.0f,0,-90.0f,0};

// d
static const std::vector<float> d = {
380.948f,0,0,-560.18f,0,0};

// a
static const std::vector<float> a = {
-220.0f,522.331f,80.0f,0,0,94.77f};

// alpha
static const std::vector<float> alpha = {
90.0f,0,90.0f,-90.0f,-90.0f,0};

以及计算方法:

代码语言:javascript
运行
复制
glm::mat4 Robothand::armForKinematics() noexcept
{
    glm::mat4 pose(1.0f);
    float cos_theta, sin_theta, cos_alpha, sin_alpha;

    for (auto i = 0; i < 6;i++)
    {
        cos_theta = cosf(glm::radians(theta[i]));
        sin_theta = sinf(glm::radians(theta[i]));
        cos_alpha = cosf(glm::radians(alpha[i]));
        sin_alpha = sinf(glm::radians(alpha[i]));

        glm::mat4 Ai = {
cos_theta, -sin_theta * cos_alpha,sin_theta * sin_alpha, a[i] * cos_theta,      
sin_theta, cos_theta * cos_alpha, -cos_theta * sin_alpha,a[i] * sin_theta,
0,         sin_alpha,             cos_alpha,             d[i],
0,         0,                     0,                     1 };

    pose = pose * Ai;
    }

return pose;
}

我的问题是,我不能得到正确的结果,例如,我想要计算从第一个关节到第四个关节的变换矩阵,我将改变for循环i< 3,然后我可以得到姿态矩阵,我可以通过pose * (0,0,0,1).but得到第四个坐标系中的原点坐标。结果(380.948,382.331,0)似乎不正确,因为它应该沿着x轴而不是y轴移动。我读了很多关于D-H矩阵的书籍和资料,但我不知道它有什么问题。

EN

回答 1

Stack Overflow用户

发布于 2017-10-31 23:46:02

我自己已经弄明白了,真正的问题是glm::mat,glm::mat是col型,这意味着列将在行之前初始化,我更改了代码并得到了正确的结果:

代码语言:javascript
运行
复制
for (int i = 0; i < joint_num; ++i)
{
    pose = glm::rotate(pose, glm::radians(degrees[i]), glm::vec3(0, 0, 1));
    pose = glm::translate(pose,glm::vec3(0,0,d[i]));
    pose = glm::translate(pose, glm::vec3(a[i], 0, 0));
    pose = glm::rotate(pose,glm::radians(alpha[i]),glm::vec3(1,0,0));
}

然后,我可以通过以下方式获得位置:

代码语言:javascript
运行
复制
auto pos = pose * glm::vec4(x,y,z,1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47011849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档