参考链接:https://www.cnblogs.com/21207-iHome/p/8316030.html

简介

KDL(Kinematics and Dynamics Library)中定义了一个树来代表机器人的运动学和动力学参数,ROS中的kdl_parser提供了工具能将机器人描述文件URDF转换为KDL tree.

Kinematic Trees: 链或树形结构。已经有多种方式来定义机构的运动学结构,KDL使用图论中的术语来定义:

  • A closed-loop mechanism is a graph, 闭链机构是一幅图
  • an open-loop mechanism is a tree,  开链机构是一棵树
  • an unbranched tree is a chain. 没有分支的树是一个运动链

  KDL Chain和KDL Tree都由最基本的KDL Segments元素串接而成,Segment可以理解为机构运动链上的一个运动部件。如下图所示KDL Segment包含关节KDL Joint 以及部件的质量/惯性属性KDL RigidBodyInertia,并且定义了一个参考坐标系Freference和末端坐标系Ftip

末端到关节坐标系的转换由Ttip描述。在一个运动链或树中,子部件会被添加到父部件的末端,因此上一个部件的Ftip就是下一个部件的参考坐标系Freference (tip frame of parent = reference frame of the child). 通常Fjoint和Freference是重合的,但是也可以存在偏移。

C++中创建KDL tree  

为了使用KDL parser需要在package.xml中添加相关依赖项:

<package>...<build_depend>kdl_parser</build_depend>...<exec_depend>kdl_parser</exec_depend>...</package>

如下图:

另外还需要在C++程序中加入相关的头文件:

#include <kdl_parser/kdl_parser.hpp>

下面有多种从urdf创建KDL tree的方式:

1. From a file

KDL::Tree my_tree;if (!kdl_parser::treeFromFile("filename", my_tree)){ROS_ERROR("Failed to construct kdl tree");return false;}

演示:

可以看到我这个工作空间下有一些urdf文件:

我们编辑test.cpp代码测试一下:

#include "ros/ros.h"
#include <kdl_parser/kdl_parser.hpp>int main(int argc, char** argv)
{ros::init(argc, argv, "ik_test_node");ros::NodeHandle n;KDL::Tree my_tree;if (!kdl_parser::treeFromFile("/home/zhitong/catkin_ws_serial/src/quadruped_9g-master/urdf/leg.urdf", my_tree)){ROS_ERROR("Failed to construct kdl tree");return false;}elseROS_INFO("Successfull!");}

如下图:

编译运行成功:

修改源码里文件为不存在的leg1.urdf:

 保存——编译——运行:

出现如下错误,说明工作机制正常。

ROS创建KDL tree相关推荐

  1. ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)

    ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点-python版本 rosed msg和srv 创建msg 使用rosmsg 创建srv 使用rossrv 重新make一下软 ...

  2. ubuntu ROS 创建项目

    ubuntu ROS 创建项目 打开Termianl 创建工作空间 创建功能包 打开Termianl Ctrl+Alt+t 创建工作空间 mkdir -p catkin_testmarker/src ...

  3. ros创建功能包和编译过程问题处理

    文章目录 1. 创建工作空间和功能包 2.新建cpp文件 3.修改CMakeLists.txt 4.编译问题 4.1 Could NOT find rospy (missing: rospy_DIR) ...

  4. mysql 怎么创建B Tree索引_MySQL为什么选择B+Tree做索引

    MySQL为什么选择B+Tree? 首先理解MySQL索引的几个原则 是为了加速对表中数据行的检索而创建的一种分散存储的数据结构. 工作机制 如上图:以id创建索引,索引数据结构里存储了索引键(关键字 ...

  5. ros创建工作空间_ROS入门学习之七Moveit机械臂控制

    1.MoveIt!系统架构 MoveIt是什么: 一个易于使用的集成化开发平台 由一系列移动操作的功能包组成:运动规划.操作控制.3D感知.运动学.控制与导航算法 提供友好的GUI 可应用于工业.商业 ...

  6. 【RK3399Pro学习笔记】四、ROS 创建工作空间与功能包

    目录 创建工作空间 编译工作空间 功能包 创建功能包 编译功能包 设置环境变量 检查环境变量 平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本:Tinker_Edge_R ...

  7. ros创建工作空间_ROS 初级 - 安装和配置 ROS 环境

    这个 ROS 系列教程主要来自 ROS Wiki,加上自己学习过程中踩过的一些坑和个人理解. 1.安装 ROS 在配置 ROS 环境前要完全安装 ROS,参看之前的安装 ROS 的文章:Ubuntu ...

  8. ROS学习|Behavoir Tree(BT树)--c++实现

    系列文章目录 Behavoir Tree(BT树)–基本概念 Behavoir Tree(BT树)–c++实现 Behavoir Tree(BT树)–c++实现第二节 目录 系列文章目录 创建行为树 ...

  9. 使用AnyGantt创建Word Tree

    AnyGantt是基于JavaScript的高级解决方案,用于构建复杂且信息丰富的甘特图.它完全跨浏览器和跨平台,可用于ASP.NET.ASP.PHP.JSP.ColdFusion.Ruby on R ...

  10. ROS学习(11)使用ROS创建地图

    文章目录 前言 一.创建编译功能包 二.更新启动文件 三.启动模型 四.保存地图 五.加载地图 六.总结 前言 创建地图是一件比较复杂的工作,ROS利用map_server地图服务器,借助激光雷达和机 ...

最新文章

  1. Kylin集群部署和cube使用
  2. IT编辑推荐:广通Broadview IT运维管理平台
  3. 字符串的全排列和组合算法
  4. Get busy living or get busy dying
  5. 吴晓灵:尽快制定“个人信息保护法”
  6. Java入门超简单程序Song List
  7. Hystrix解决雪崩问题的两种手段
  8. 心态很容易受别人影响_阳光心态的句子,句句动人心弦,送给追梦路上的你
  9. 数字模拟信号 单双信道传输
  10. C# 实现将网络资源保存到本地
  11. Windows Mobile下使用Native C++开发日志类
  12. 苹果手机的隔空投送怎么使用?
  13. SpringBoot 整合swagger3.X
  14. openresty lua集成kafka
  15. 同时起两个mysql 起不了_两大龙头同时提价,6月起下游订单V字反转,份额都倾向这两家...
  16. HTML弹窗上下一步,JS实现从网页顶部掉下弹出层效果的方法
  17. 密码字典生成工具crunch的简单使用
  18. 适合APP的开发模式——敏捷开发
  19. Qt Quick简单教程
  20. Protel DXP 使用教程 - 自定义集成库

热门文章

  1. 全国第三届SLAM技术会议记录
  2. Openwrt 下 L2TP搭建
  3. 计算机快捷键英语,计算机快捷键(国外英语资料).doc
  4. PCIe 设备树详细讲解
  5. 图的遍历 —— 广度优先遍历
  6. 2020moectf—flower
  7. 量化投资之股票统计套利:基于BP神经网络
  8. bean named 'transactionManager' available: No matching PlatformTransactionManager bean found for qua
  9. 【课程设计】基于图像处理的一维条形码识别-含matlab源码
  10. 计算机的硬盘 u盘启动,设置U盘启动和硬盘启动两种差别教程步骤