激光SLAM学习分享--坐标转换代码
·
1.在终端通过mkdir新建一个工程文件夹,cd进入工程文件夹,新建一个src用来存放C++源文件,新建一个build文件夹用来存放编译产生的中间文件以及编译生成的可执行文件,新建一个CMakLists.txt

2.第一句为工程名称,第二句为添加子文件夹

3.进入src文件夹,新建一个CMakeLists.txt,第二句是包含Eigen库的头文件,第三句是添加生成的可执行文件

4.在src文件夹下新建c++源文件

5.在build文件夹下打开终端,通过cmake .. make命令进行编译,编译完成后可以看到生成了一系列中间文件以及一个src子文件夹,进入src文件夹可以看到生成的可执行文件,通过./可执行文件名运行。

6.代码展示
#include <iostream>
#include <Eigen/Core>
#include <Eigen/Geometry>
using namespace std;
int main(int argc, char** argv)
{
// 机器人B在坐标系O中的坐标:
Eigen::Vector3d B(3, 4, M_PI);
// 坐标系B到坐标O的转换矩阵:
Eigen::Matrix3d TOB;
TOB << cos(B(2)), -sin(B(2)), B(0),
sin(B(2)), cos(B(2)), B(1),
0, 0, 1;
// 坐标系O到坐标B的转换矩阵:
Eigen::Matrix3d TBO = TOB.inverse();
// 机器人A在坐标系O中的坐标:
Eigen::Vector3d A(1, 3, -M_PI / 2);
// 求机器人A在机器人B中的坐标:
Eigen::Vector3d BA;
// TODO 参照第一课PPT
// start your code here (5~10 lines)
Eigen::Matrix3d TOA;
TOA << cos(A(2)), -sin(A(2)), A(0),
sin(A(2)), cos(A(2)), A(1),
0, 0, 1;
Eigen::Matrix3d TBA = TBO * TOA;
BA << TBA(0,2), TBA(1,2), atan2(TBA(1,0),TBA(0,0));
// end your code here
cout << TBA << endl;
cout << BA << endl;
cout << "The right answer is BA: 2 1 1.5708" << endl;
cout << "Your answer is BA: " << BA.transpose() << endl;
return 0;
}
更多推荐
所有评论(0)