KDL库在ubuntu20.04环境下的安装以及在ROS中调用方法(机器人运动学必备)

参考博客:OROCOS之KDL(1)—— Linux环境搭建篇_orocos kdl-优快云博客

KDL源码下载
https://github.com/orocos/orocos_kinematics_dynamics

git clone https://github.com/orocos/orocos_kinematics_dynamics.git
  • step1:cd到orocos_kdl目录下,新建文件夹build
  • cd orocos_kdl
  • mkdir build 
  • step2:切换到build中执行ccmake ..
  • 如果没有内容,显示page0 of 1 则按下c编译一下
  • 之后进入设置界面(cmake  ..)
  • step3:将BUILD_MODELSENABLE_EXAMPLES两项设为ON,选c选项生成配置信息,然后选e退出提示

step4:这时发现多了一个g选项,选g,然后会自动退出配置GUI界面

step5:执行如下命令

make
sudo make install

step6: 建立软连接 否则直接运行ROS功能包会报错

sudo ln -s /usr/local/lib/liborocos-kdl-models.so /usr/local/include/

最后可以自己写一段代码测试一下,注意在ROS中调用需要修改Cmakelist文件以及库函数,这里做一个说明:

Cmake调用KDL库:额外添加以下内容

find_package(Eigen3 REQUIRED CONFIG)
find_package(orocos_kdl REQUIRED)
add_executable(main src/main.cpp) #这里是自己命名的文件
target_link_libraries(main Eigen3::Eigen orocos-kdl orocos-kdl-models)#这里是自己命名的文件

cpp文件中调用:

#include <kdl/chain.hpp>
#include <kdl/chainfksolver.hpp>
#include <kdl/chainfksolverpos_recursive.hpp>
#include <kdl/frames_io.hpp>
#include <stdio.h>
#include <iostream>

using namespace KDL;

int main( int argc, char** argv )
{
    //Definition of a kinematic chain & add segments to the chain
    KDL::Chain chain;
    chain.addSegment(Segment(Joint(Joint::RotZ),Frame(Vector(0.0,0.0,1.020))));
    chain.addSegment(Segment(Joint(Joint::RotX),Frame(Vector(0.0,0.0,0.480))));
    chain.addSegment(Segment(Joint(Joint::RotX),Frame(Vector(0.0,0.0,0.645))));
    chain.addSegment(Segment(Joint(Joint::RotZ)));
    chain.addSegment(Segment(Joint(Joint::RotX),Frame(Vector(0.0,0.0,0.120))));
    chain.addSegment(Segment(Joint(Joint::RotZ)));

    // Create solver based on kinematic chain
    ChainFkSolverPos_recursive fksolver = ChainFkSolverPos_recursive(chain);

    // Create joint array
    unsigned int nj = chain.getNrOfJoints();
    KDL::JntArray jointpositions = JntArray(nj);

    // Assign some values to the joint positions
    for(unsigned int i=0;i<nj;i++){
        float myinput;
        printf ("Enter the position of joint %i: ",i);
        scanf ("%e",&myinput);
        jointpositions(i)=(double)myinput;
    }

    // Create the frame that will contain the results
    KDL::Frame cartpos;

    // Calculate forward position kinematics
    bool kinematics_status;
    kinematics_status = fksolver.JntToCart(jointpositions,cartpos);
    if(kinematics_status>=0){
        std::cout << cartpos <<std::endl;
        printf("%s \n","Succes, thanks KDL!");
    }else{
        printf("%s \n","Error: could not calculate forward kinematics :(");
    }
}

最后catkin_make测试一下就好啦 编译成功就算安装完成!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神筆&『馬良』

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值