两个相似的位姿具有较大的相对欧拉角

2023-12-27

欧拉角表示的相似位姿有两种:

s_euler_angle_o1:
0.000549608
    -3.1334
    1.23193
s_euler_angle_o2:
0.0222646
 -3.10948
  1.31032

但 Eigen 计算出的相对欧拉角为

o1_euler_angle_o2:
 3.11182
-3.12907
-3.06258

欧拉约定是ZYX。 我计算 o1_euler_angle_o2 的代码如下:

#include <iostream>
#include <vector>
#include "sophus/se3.h"
#include "sophus/so3.h"
#include <Eigen/Core>
Sophus::SE3 EulerTranslatetoSE3(Eigen::Vector3d euler_angle, Eigen::Vector3d translate){
        Eigen::Matrix3d o1_R_on = (Eigen::AngleAxisd(euler_angle[0],Eigen::Vector3d::UnitZ())*Eigen::AngleAxisd(euler_angle[1],Eigen::Vector3d::UnitY())*Eigen::AngleAxisd(euler_angle[2],Eigen::Vector3d::UnitX())).matrix();
        Sophus::SE3 o1_T_on_sop(o1_R_on,translate);
        return o1_T_on_sop;

    }
int main() {
    Eigen::Vector3d s_euler_angle_o1 = Eigen::Vector3d(0.000549608,-3.1334,1.23193);
    Eigen::Vector3d s_euler_angle_o2 = Eigen::Vector3d(0.0222646,-3.10948,1.31032);
    Eigen::Vector3d s_t_o1 = Eigen::Vector3d(0.0148442,0.0453362,0.342611);
    Eigen::Vector3d s_t_o2 = Eigen::Vector3d(0.0213847,0.0488918,0.341841);

    Sophus::SE3 s_T_o1 = EulerTranslatetoSE3(s_euler_angle_o1,s_t_o1);
    Sophus::SE3 s_T_o2 = EulerTranslatetoSE3(s_euler_angle_o2,s_t_o2);
    Sophus::SE3 o1_T_o2 = s_T_o1.inverse() * s_T_o2;
    Eigen::Matrix3d o1_R_o2 = o1_T_o2.rotation_matrix();
    Eigen::Vector3d o1_euler_angle_o2 = o1_R_o2.eulerAngles(2,1,0);
    std::cout<<"o1_euler_angle_o2:\n"<<o1_euler_angle_o2<<std::endl;
    return 0;
}

CMakelist.txt 如下:

cmake_minimum_required(VERSION 3.14)
project(test)

set(CMAKE_CXX_STANDARD 14)
#sophus
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})
add_executable(test main.cpp)
# Eigen
include_directories("/usr/include/eigen3" )
target_link_libraries(test PRIVATE
        ${DEPENDENCIES}
        ${Sophus_LIBRARIES}
        )

我使用欧拉角,因为欧拉角是三维的。遗传算法更容易实现。

这个相对姿势是唯一的结果吗?如果没有,是否有一个结果可以用欧拉角反映小相对位姿?


结果是完全有效的。但通过的文档.eulerAngles() http://eigen.tuxfamily.org/dox/group__Geometry__Module.html#ga17994d2e81b723295f5bc3b1f862ed3b返回角的范围是[0:pi]x[-pi:pi]x[-pi:pi]。在您的情况下,这是不幸的,因为会有一个较小的表示,但需要第一个角度为负值。

如果您确实需要欧拉角,您可以尝试不支持的欧拉角模块 https://eigen.tuxfamily.org/dox-devel/unsupported/group__EulerAngles__Module.htmlEigen,它允许对输出进行更多配置。

但如果你只需要一个好的 SO3->R^3 映射,我强烈建议使用与李群相关的对数映射(这就是Sophus::SO3::log应该是计算)。另外,我将无耻地插入一篇关于该主题的论文:“通过流形封装将通用传感器融合算法与声音状态表示集成”(在网上应该不难找到)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个相似的位姿具有较大的相对欧拉角 的相关文章

随机推荐

  • Heroku:“https://git.heroku.com”的用户名:git

    我正在尝试检查 heroku 上的 git 远程 heroku auth logout Local credentials cleared heroku auth login Enter your Heroku credentials Em
  • 如何查找特定 Subversion 用户所做的修订?

    使用命令行 我想查看特定用户所做的所有更改集 这可能吗 我查看了文档svn log但不知道如何做到这一点 我不知道有什么方法可以使用纯 Subversion 来做到这一点 但你可以做到with sed http svn haxx se us
  • PHP - preg_replace - 文本链接作为可点击链接

    我使用此 preg replace 将文本 url 更改为可在脚本中单击 将文本链接替换为带有 preg replace 的链接 https stackoverflow com questions 13105960 replacing te
  • jQuery element.data() 语法。我怎么知道`$(this)`是什么?

    我有以下 jQuery 变量 var confirmbox div div data defaultText This action cannot be reversed Are you sure you wish to do this d
  • intellij idea中设置tomcat的问题

    我正在尝试使用 intellij idea 创建一个简单的测试 Restful Web 服务 我正在关注这个教程 https medium com jamsesso starting out with jersey apache tomca
  • 当您克隆 Backbone.Collection 时,模型引用是否完好无损?

    我正在 clone ing 一个集合 以便我可以在其上使用拼接循环而不干扰原始集合 克隆阵列中的模型是原件还是副本 我需要的是包含原始模型的数组的副本 感谢您提供任何信息 您将获得与包装在相同类型的新集合中的源集合相同的模型 这是colle
  • 拖动元素时滚动 div 而不移动鼠标

    我开发了一个代码 其中包括一个表格 其中所有单元格都是可删除的 表格容器是具有固定高度和滚动条的 div 我想将一个元素 在我的示例中为黄色方块 拖到表格底部的最后一个表格单元格中 一切正常 但要在拖动元素时激活 div 容器的滚动条 我必
  • 如何绑定到 Style.Resource 中的附加属性?

    我正在尝试使用附加属性在 TextBox 的背景中创建提示文本标签 但无法解析样式资源中文本标题的绑定 风格定义
  • Postgres 数据库已锁定:查询永远运行

    我的一个 python 脚本在 Postgres 数据库上运行了一些 ALTER TABLE 查询 发生了一些问题 桌子被锁了 当我对这些表中的任何一个运行任何查询时 它告诉我查询正在运行 但什么也没有发生 目前 我只能通过关闭系统并重新启
  • iOS 5.0 用户代理字符串是什么?

    是什么iOS 5 0用户代理字符串 这里是iOS 4 0用户代理 iPhone 4 用户代理是什么 https stackoverflow com q 3105555 836407 iPhone Mozilla 5 0 iPhone CPU
  • KIF 输出:AX Exchange 错误:错误域=辅助功能代码=0“远程服务不响应 _accessibilityMachPort”

    在使用 iOS 8 1 3 的设备上运行 KIF 集成测试时 我收到大量以下类型的诊断消息作为控制台输出 AX Exchange 错误 错误域 辅助功能代码 0 远程服务 不响应 accessibilityMachPort UserInfo
  • 将文件读入数组 - Java

    我正在练习java 并在网上查看练习 然而 我陷入了我需要的地步 Read the file again and initialise the elements of the array Task 将表示成员列表的类 Members 编写为
  • file_exists() 的 PHP 不区分大小写版本

    我试图想出在 PHP 中实现不区分大小写的 file exists 函数的最快方法 我最好的选择是枚举目录中的文件并进行 strtolower 与 strtolower 比较 直到找到匹配项 我使用评论中的源代码来创建这个函数 如果找到则返
  • Firebase Auth UI 的电子邮件验证

    我在用firebase auth UI FirebaseUI Android https github com firebase FirebaseUI Android blob master auth README md 在 Android
  • django 迁移 - 具有多个开发分支的工作流程

    我很好奇其他 django 开发人员如何通过迁移来管理多个代码分支 例如在 git 中 我的问题如下 我们在 git 中有多个功能分支 其中一些带有 django 迁移 其中一些更改字段 或完全删除它们 当我切换分支时 git checko
  • 将 jQuery 与 SQL Server 数据库连接

    我正在尝试构建一个 jQuery 功能 其场景如下所示 假设用户单击网站中的图像 页面上会弹出一个 jQuery 对话框 该对话框有一个文本字段 用于输入图像的 替代文本 当用户单击提交按钮时 该页面的文本应与图像的 URL 一起保存到我的
  • Hive 日期/时间戳列

    我在 HDFS 上有一些数据 我正在尝试将其设置为通过 hive 进行查询 数据采用逗号分隔文本文件的形式 文件中的一列是日期 时间列 如下所示 Wed Aug 29 16 16 58 CDT 2018 当我尝试读取使用以下脚本创建的 Hi
  • Auth 过滤器重定向回 Laravel 中的原始 POST 请求

    看来 Redirect guest login 只适用于 GET 请求 IE 它会将经过身份验证的用户重定向到原始预期 URL GET 在存在 POST 请求的情况下 是否有办法让身份验证过滤器在用户成功登录后继续 POST 到 URL 一
  • 如何避免 Linux/X11 上的 pygame 撕裂

    我一直在玩 pygame 在 Debian Lenny 上 它似乎工作得很好 除了烦人的位图撕裂 全屏或窗口模式 我正在使用默认的 SDL X11 驱动程序 谷歌搜索表明 X11 不提供垂直同步功能 这是 SDL 的一个已知问题 即使使用使
  • 两个相似的位姿具有较大的相对欧拉角

    欧拉角表示的相似位姿有两种 s euler angle o1 0 000549608 3 1334 1 23193 s euler angle o2 0 0222646 3 10948 1 31032 但 Eigen 计算出的相对欧拉角为