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;
}

 

Logo

聚焦RDK与具身智能,汇集机器人开发教程、开源案例和技术交流

更多推荐