动力学姿态变换

前言

        采取QT与Eigen矩阵库实现反对称矩阵、有限转动张量计算以及常见姿态表示间转换:方向余弦阵、有限转动四元数、欧拉四元数、欧拉角、卡尔丹角。

        各种姿态转变间都通过方向余弦阵作为中介。

        方向余弦阵---四元数:利用到有限转动张量

        方向余弦阵--欧拉角、卡尔丹角:利用三次旋转矩阵传递


        反算三角函数值存在多值问题;反算除余弦阵外姿态表示存在奇异问题。

        三角函数值多值问题采取 sin、cos值正负找到角度所在象限,利用自定义DATN2方法实现。

 

代码如下:

getAttitudeCoods() 获得全部姿态结果的结构体
showAttitudeCoods() 控制台显示
isMeetConstraint() 检验结果有效性,余弦阵正交性,四元数归一性

#ifndef ATTITUDETRANS_H
#define ATTITUDETRANS_H

#include <Geometry>
#include <Dense>
#include <Eigenvalues>
#include <QDebug>
#include <iostream>
#include <QMatrix4x4>
using namespace Eigen;
using namespace std;

#define PI 3.1415926

struct AttitudeCoors{
    Matrix3d DirectCosMat; //方向余弦矩阵
    Vector4d FiniteRotQuaternions1; //有限转动四元数
    Vector4d FiniteRotQuaternions2; //有限转动四元数
    Vector4d EulerQuaternion; //欧拉四元数
    Vector3d EulerAngle; //欧拉角
    Vector3d CarlDanAngle;//卡尔丹角
};

class AttitudeTrans
{
public:
    //传入 当前模型矩阵  及其 基准的模型矩阵
    AttitudeTrans(QMatrix4x4 model, QMatrix4x4 modelStand);

    Matrix3d SkewSymMatrix(VectorXd P);//反对称矩阵
    Matrix3d tensor_FiniteRotation(VectorXd P, double Rot_theta); //有限转动张量
    double DATN2(double s, double c); //由sin cos 计算出θ

    AttitudeCoors getAttitudeCoods(Matrix3d DirectCosMat);
    void showAttitudeCoods(AttitudeCoors coods);

    void isMeetConstraint(AttitudeCoors coods);//检验约束完备性

    //其他表示 转为 方向余弦 阵
    Matrix3d FiniteRotQuaternionsTo(Vector4d fRotQ);
    Matrix3d EulerQuaternionTo(Vector4d eQ);
    Matrix3d EulerAngleTo(Vector3d eA);
    Matrix3d CarlDanAngleTo(Vector3d cDA);

    //方向余弦阵 转其他的表示
    Vector4d toFiniteRotQuaternions1(Matrix3d directCosMat); //有限转动四元数 算法一
    Vector4d toFiniteRotQuaternions2(Matrix3d directCosMat); //有限转动四元数 算法二
    Vector4d toEulerQuaternion(Matrix3d directCosMat); //欧拉四元数
    Vector3d toEulerAngle(Matrix3d directCosMat); //欧拉角
    Vector3d toCarlDanAngle(Matrix3d directCosMat); //卡尔丹角

public:
    AttitudeCoors Coors;

};

#endif // COORTRANS_H

        

#include "AttitudeTrans.h"

AttitudeTrans::AttitudeTrans(QMatrix4x4 model, QMatrix4x4 modelStand)
{
    Matrix3d DirectCosMat;
    for (int i = 0; i<3; i++) {
        for (int j = 0;j<3;j++) {
            DirectCosMat(i,j) = model(i,j);
        }
    }

    Matrix3d DirectCosMatStand;
    for (int i = 0; i<3; i++) {
        for (int j = 0;j<3;j++) {
            DirectCosMatStand(i,j) = modelStand(i,j);
        }
    }
    std::cout<<DirectCosMat<<std::endl;
    DirectCosMat = DirectCosMat * DirectCosMatStand.inverse();
    std::cout<<DirectCosMat<<std::endl;

    Coors = getAttitudeCoods(DirectCosMat);
    isMeetConstraint(Coors);
    //showAttitudeCoods(Coors);
}

Matrix3d AttitudeTrans::SkewSymMatrix(VectorXd P)
{
    //Skew-symmetric Matrix 反对称矩
    int pSize = P.size();
    Matrix3d SsMat(pSize,pSize);

    SsMat(0,0) = 0;
    SsMat(0,1) = -P(2);
    SsMat(0,2) = P(1);
    SsMat(1,0) = P(2);
    SsMat(1,1) = 0;
    SsMat(1,2) = -P(0);
    SsMat(2,0) = -P(1);
    SsMat(2
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MATLAB移动机器人动力学模型是指在MATLAB环境下对移动机器人进行动力学建模和分析。动力学模型的目的是描述机器人的运动学和力学特性,以便进行运动规划、轨迹生成、控制算法设计等工作。 MATLAB提供了强大的数学计算和仿真工具,因此可以利用其编程和仿真功能来实现移动机器人动力学模型。首先,需要定义机器人的连杆结构和关节类型。连杆结构由关节连接起来,关节类型包括旋转关节和平移关节。利用MATLAB提供的变量和数组功能,可以轻松地定义机器人的各个连杆和关节参数。 接下来,在MATLAB中可以使用欧拉角、四元数等方式来描述机器人的姿态姿态描述了机器人在三维空间中的位置和方向。利用MATLAB的矩阵运算和变换函数,可以方便地计算机器人的位姿变换。 然后,根据机器人连杆和关节的几何参数以及运动学特性,可以推导出机器人的速度和加速度关系。这些关系可以建立在欧拉角、四元数或坐标变换的基础上。通过MATLAB中提供的运动学求解函数,可以方便地计算出机器人的速度和加速度。 最后,可以利用MATLAB的动力学仿真工具来进行机器人的动力学分析。通过输入机器人的动力学参数,可以得到机器人在不同条件下的运动响应,例如力或力矩。这样可以对机器人的性能进行评估,同时也可以用于移动机器人控制算法的设计和调试。 总之,MATLAB移动机器人动力学模型提供了一种方便、灵活和高效的方式来对移动机器人的动力学特性进行建模和分析。通过使用MATLAB的工具和功能,可以方便地进行机器人系统设计、动力学仿真和控制算法开发。 ### 回答2: Matlab是一种常用的科学计算软件平台,它可以方便地对移动机器人的动力学模型进行建模和仿真。移动机器人的动力学模型描述了机器人在不同状态下的运动行为,包括位置、速度、加速度等信息。 在Matlab中,可以通过定义机器人的运动方程以及约束条件来建立动力学模型。机器人的运动方程通常采用牛顿-欧拉方程来描述,即机器人的动力学模型可以通过运动学方程和动力学方程相结合得到。运动学方程描述了机器人各个运动关节之间的关系,而动力学方程则描述了机器人受到的各种力和力矩的作用下的运动行为。 在Matlab中,可以使用符号计算工具箱来处理机器人的运动学和动力学方程。通过定义机器人的动力学参数、关节间的连接关系以及运动方程的形式,可以使用Matlab的符号计算工具箱来求解机器人的运动学和动力学方程。这样可以得到机器人在不同状态下的位置、速度、加速度等信息,从而对机器人的运动行为进行仿真和分析。 此外,在Matlab中还有一些机器人相关的工具箱和函数库,如机器人工具箱和运动学函数库,可以进一步简化机器人动力学模型的建立和仿真过程。这些工具箱和函数库提供了一些预定义的机器人模型和函数,可以直接使用和调用,从而方便地进行机器人动力学建模和仿真。 因此,通过Matlab可以方便地建立移动机器人的动力学模型,并进行仿真和分析。这样可以帮助研究人员和工程师更好地理解和控制移动机器人的运动行为,为机器人的设计和控制提供有效的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值