OROCOS之KDL(1)—— windows环境搭建篇





注意:以下配置有缺陷,非完美支持,留坑待填,请绕道


0. 说明

  • IDE环境:Qt 5.12
  • 编译器:MinGW
  • 系统:Windows 10

之前有网友说这个框架只适合在ubuntu下玩,我不太同意这个观点,这就是个C++库嘛,能正常编译不就行了吗?

1. 依赖库的版本查看

KDL库是依赖与Eigen库的,不多赘述,直接通过KDL库中的CMakeList文件查看Eigen的版本信息。

在这里插入图片描述
在这里插入图片描述

既然文件里说了,Eigen3的版本为3.1.2及更高,保险起见,就用3.1.2的版本。

下载完,解压文件夹,待用。

2. 环境配置

CMake的配置方式太麻烦,新手容易出问题,我们直接上个简单粗暴的方法(当然,简单粗暴也就意味着可能会存在一些问题),使用qmake进行配置。

直接在*.pro文件中加入:

# 注意:根据自己的实际情况修改

INCLUDEPATH += G:\CodeBase\eigen_3_1_2
INCLUDEPATH += G:\CodeBase\orocos_kdl

3. 测试

#include <iostream>
#include <Eigen/Dense>
#include <src/frames.hpp>

using namespace Eigen;
using namespace KDL;
using namespace std;

int main()
{
//--------   Eigen测试 ---------
    Matrix2d a;
    a << 1, 2,
    3, 4;

    MatrixXd b(2,2);
    b << 2, 3,
    1, 4;

    std::cout << "a + b =\n" << a + b << std::endl;
//------------ KDL测试 -----------
//    Vector v = Vector(1,2,3);
    KDL::Vector v1(1,2,3); //隐式创建对象
    for(int i=0; i<3; ++i){
        cout<<v1[i]<<";";
    }

    cout<<"\n";
    KDL::Vector v0 = KDL::Vector::Zero(); //显式创建对象
    KDL::Vector vec; //隐式创建对象,调用默认构造函数,成员数据被初始化为0
    cout<<vec.x()<<";"<<vec.y()<<";"<<vec.z()<<"\n";
//    std::cout<<v.data[0]<<std::endl; //获取数组的第一个元素
    for(int i=0; i<3; ++i){
        cout<<v0(i)<<" "; //循环输出数组的元素
    }
    cout<<"\n";
    cout<<v0.x()<<" "; //获取数组的第一个元素
    cout<<v0[0]; //获取数组的第一个元素

    return 0;
}

在这里插入图片描述
可以看到程序正常运行,环境搭建问题解决√

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 CPP 中使用 Orocos KDLKDL Parser,需要先安装 Orocos KDL KDL Parser 。下面是安装步骤: 1. 安装 Orocos KDL : ``` sudo apt-get install liborocos-kdl-dev ``` 2. 安装 KDL Parser : ``` sudo apt-get install libkdl-parser-dev ``` 安装完成后,可以在 CPP 中使用这两个。使用 Orocos KDLKDL Parser 的示例代码如下: ```cpp #include <kdl/chain.hpp> #include <kdl/chainfksolver.hpp> #include <kdl/chainfksolverpos_recursive.hpp> #include <kdl/chainjnttojacsolver.hpp> #include <kdl_parser/kdl_parser.hpp> int main(int argc, char** argv) { // Load the robot description from the parameter server. std::string robot_description; ros::param::get("robot_description", robot_description); // Parse the robot description into a KDL tree. KDL::Tree robot_kdl; if (!kdl_parser::treeFromString(robot_description, robot_kdl)) { ROS_ERROR("Failed to construct KDL tree from robot description."); return 1; } // Create a solver for computing the forward kinematics of the robot. KDL::Chain robot_chain; robot_kdl.getChain("base_link", "end_effector_link", robot_chain); KDL::ChainFkSolverPos_recursive fk_solver(robot_chain); // Compute the forward kinematics of the robot for a given joint configuration. KDL::JntArray joint_positions(robot_chain.getNrOfJoints()); for (size_t i = 0; i < robot_chain.getNrOfJoints(); ++i) { joint_positions(i) = i * 0.1; } KDL::Frame end_effector_pose; fk_solver.JntToCart(joint_positions, end_effector_pose); // Create a solver for computing the Jacobian of the robot. KDL::ChainJntToJacSolver jac_solver(robot_chain); // Compute the Jacobian of the robot for a given joint configuration. KDL::Jacobian jacobian; jac_solver.JntToJac(joint_positions, jacobian); return 0; } ``` 这段代码演示了如何使用 Orocos KDLKDL Parser 实现机器人的正运动学和雅克比矩阵计算。需要注意的是,这段代码是在 ROS 中编写的,如果在其他环境中使用,需要根据需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值