高翔视觉slam十四讲习题(1)

一、题目

设有小萝卜一号和小萝卜号位于世界坐标系中。
小萝卜一号的位姿为: q 1 = [0.55, 0.3, 0.2, 0.2], t 1 =[0.7, 1.1, 0.2] T (q 的第一项为实部)。这里的 q 和 t 表达的是 T cw ,也就是世界到相机的变换关系。
小萝卜二号的位姿为 q 2 = [−0.1, 0.3, −0.7, 0.2], t 2 = [−0.1, 0.4, 0.8] T 。
现在,小萝卜一号看到某个点在自身的坐标系下,坐标为 p 1 = [0.5, −0.1, 0.2] T ,求该向量在小萝卜二号坐标系下的坐标。请编程实现此事,并提交你的程序。
提示:

  1. 四元数在使用前需要归一化。
  2. 请注意 Eigen 在使用四元数时的虚部和实部顺序。
  3. 参考答案为 p 2 = [1.08228, 0.663509, 0.686957] T 。你可以用它验证程序是否正确。

二、代码

#include "iostream"
#include "ctime"
using namespace std;

#include "Eigen/Core"
// 包含几何模块,提供了各种旋转和平移的表示
#include "Eigen/Geometry"

int main(int argc, char** argv)
{
    Eigen::Quaterniond q1 = {0.55, 0.3, 0.2, 0.2};//注意coeffs的顺序是(x,y,z,w),w为实部,前三者为虚部
    //cout .precision(3);//设置输出的有效数字位数
    cout << "q1 = \n" << q1.coeffs() << endl;
    //四元数使用前须归一化
    q1.normalize();
    cout << "normalize q1 = \n" << q1.coeffs() << endl;
    //Eigen::Vector3d v_vector = {0.7, 1.1, 0.2};
    //T是单位四元数
    //Eigen::Matrix3d R1 = q1.toRotationMatrix();//旋转矩阵R1,将四元数变成旋转矩阵R
    Eigen::Isometry3d T1 = Eigen::Isometry3d::Identity();//欧式变换矩阵使用 Eigen::Isometry
    //T1.rotate(R1);//旋转
    T1.rotate(q1);
    T1.pretranslate(Eigen::Vector3d (0.7, 1.1, 0.2));//平移
    cout << T1.matrix() << endl;

    Eigen::Quaterniond q2 = {-0.1, 0.3, -0.7, 0.2};//注意coeffs的顺序是(x,y,z,w),w为实部,前三者为虚部
    cout << "q2 = \n" << q2.coeffs() << endl;
    //四元数使用前须归一化
    q2.normalize();
    cout << "normalize q2 = \n" <<q2.coeffs() << endl;
    //T是单位四元数
    //Eigen::Matrix3d R2 = q2.toRotationMatrix();//旋转矩阵R2
    Eigen::Isometry3d T2 = Eigen::Isometry3d::Identity();//欧式变换矩阵使用 Eigen::Isometry
    //T2.rotate(R2);//旋转
    T2.rotate(q2);
    T2.pretranslate(Eigen::Vector3d (-0.1, 0.4, 0.8));//平移
    cout << T2.matrix() << endl;

    Eigen::Vector4d p1 = {0.5, -0.1, 0.2, 1};
    Eigen::Vector4d pw;
    clock_t clk_time = clock();
    pw = T1.matrix().colPivHouseholderQr().solve(p1);//利用QR分解求出世界坐标
    cout << pw.transpose() << endl;
    cout <<"time use in Qr decomposition is " <<1000*  (clock() - clk_time)/(double)CLOCKS_PER_SEC <<"ms" << endl;
    Eigen::Vector4d p2;
    p2 = T2*pw;
    cout << p2.transpose() << endl;
    cout <<"time use in Qr decomposition is " <<1000*  (clock() - clk_time)/(double)CLOCKS_PER_SEC <<"ms" << endl;
    return 0;
}

三、运行结果

在这里插入图片描述

高翔视觉SLAM(Simultaneous Localization and Mapping)十四是一本关于视觉SLAM算法和实践的教材,其中包含了完整的代码实现。在这本教材中,作者提供了一个已经下载好的文件夹,里面包含了完整的代码文件,可以避免因版本不同而导致的编译错误。 如果你想查看具体的代码实现,你可以在github上找到该教材的代码仓库,其中包含了主要的代码文件。 此外,你还可以在Bilibili网站上找到高翔视觉SLAM十四的视频教程,通过观看视频来更好地理解和学习SLAM算法和实践。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [高翔视觉slam十四有完整库的代码文件](https://download.csdn.net/download/weixin_51938716/86566040)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SLAM十四 高翔](https://blog.csdn.net/shike951128/article/details/124921532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值