IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 捷联惯导算法与组合导航原理学习——等效旋转矢量和姿态阵转换(一) -> 正文阅读

[数据结构与算法]捷联惯导算法与组合导航原理学习——等效旋转矢量和姿态阵转换(一)

等效旋转矢量和姿态阵转换

学习资料参考:

[1] 严恭敏,翁浚. 捷联惯导算法与组合导航原理[M]. 西安: 西北工业大学出版社, 2019.8.

EquRotationVec.h

#pragma once
#include <Eigen/Core>
#include <Eigen/Geometry>

Eigen::Matrix3d VecToSkewSymmeticMat(const Eigen::Vector3d &vec);
Eigen::Vector3d SkewSymmeticMatToVec(const Eigen::Matrix3d &mat);

// 一些实验性的代码,Eigen库中有更好的实现
class EquivalentRotationVector
{
public:
    double          mAngle;
    Eigen::Vector3d mVec;

    Eigen::Matrix3d toDCM() const;

    void fromDCM(const Eigen::Matrix3d &dcm);
};

EquRotationVec.cpp

// [1] 严恭敏,翁浚. 捷联惯导算法与组合导航原理[M]. 西安: 西北工业大学出版社, 2019.8.

#include "EquRotationVec.h"

#include <Eigen/Core>
#include <Eigen/Geometry>
#include <iostream>

using namespace Eigen;
using namespace std;

const double ARC_TO_DEG = 57.29577951308238;
const double DEG_TO_ARC = 0.0174532925199433;

// [1] 等效旋转矢量 -> 方向余弦阵, 参考公式: 2.2.22
// NOTE! 式中 u 为单位矢量
Eigen::Matrix3d EquivalentRotationVector::toDCM() const
{
    Matrix3d u_mat = VecToSkewSymmeticMat(mVec) / mVec.norm();

    Matrix3d dcm;
    dcm = Matrix3d::Identity() +
          sin(mAngle) * u_mat +
          (1 - cos(mAngle)) * u_mat * u_mat;
    return dcm;
}

// [1] 方向余弦阵 -> 等效旋转矢量,参考公式: 2.2.28
// NOTE! 式中结果 phi 不是单位矢量,这里算出来的是单位矢量
void EquivalentRotationVector::fromDCM(const Eigen::Matrix3d &dcm)
{
    mAngle            = acos((dcm.trace() - 1) / 2.0);
    Matrix3d skew_mat = 1.0 / (2 * sin(mAngle)) * (dcm - dcm.transpose());
    mVec              = SkewSymmeticMatToVec(skew_mat);
}

Eigen::Matrix3d VecToSkewSymmeticMat(const Eigen::Vector3d &vec)
{
    Matrix3d skew_mat;
    // clang-format off
    skew_mat << 0,		-vec[2], vec[1],
				vec[2],  0,		-vec[0],
			   -vec[1],  vec[0], 0;
    // clang-format on
    return skew_mat;
}

Eigen::Vector3d SkewSymmeticMatToVec(const Eigen::Matrix3d &mat)
{
    return Eigen::Vector3d(mat(1, 1), mat(0, 2), mat(1, 0));
}

main.cpp

#include "EquRotationVec.h"

#include <Eigen/Core>
#include <Eigen/Geometry>
#include <iostream>

using namespace Eigen;
using namespace std;

    int main(int argc, char*argv[])
    {
        cout << "----- 自行实现的算法和 Eigen 中的算法比较 -----" << endl;

        EquRotationVec vec1;
        vec1.mAngle = 30 * DEG_TO_ARC;
        vec1.mVec   = {2, 0, 0};

        auto dcm_mat0 = vec1.toDCM();

        cout << "旋转角度(度):" << vec1.mAngle * ARC_TO_DEG << "\n转轴方向(单位化):\n"
             << vec1.mVec / vec1.mVec.norm() << endl;

        EquRotationVec vec2;
        vec2.fromDCM(dcm_mat0);

        cout << "dcm_mat0: \n"
             << dcm_mat0 << endl
             << "angle: " << vec2.mAngle << endl
             << "axis: \n"
             << vec2.mVec << endl;

        AngleAxisd angleAxis(vec1.mAngle, vec1.mVec / vec1.mVec.norm());   // 注意在使用AngleAxisd 时转轴必须单位化
        auto       dcm_mat1 = angleAxis.toRotationMatrix();
        AngleAxisd angleAxis1(dcm_mat1);
        cout << "dcm_mat1: \n"
             << dcm_mat1 << endl
             << "angle: " << angleAxis1.angle() << endl
             << "axis: \n"
             << angleAxis1.axis() << endl;
        return 0;
    }

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:09:15  更:2022-01-24 11:09:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:26:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码