ROS URDF模型解析成KDL Tree

简介

​ KDL(Kinematics and Dynamics Library)开发了一个独立于应用程序的框架,用于对运动链进行建模和计算,例如机器人、生物力学人体模型、计算机动画人物、机床等。它为几何对象(点、框架)提供类库,线,…),各种系列的运动链(串行,人形,平行,移动,…),以及它们的运动规范和插值。

Kinematic Tree

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

Kinematic Tree是一种链或者树形结构,使用图论中的术语定义了机构和运动学结构:

  • 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是重合的,但是也可以存在偏移。


在这里插入图片描述

KDL中的定义与URDF中的定义基本是一样的:

img

KDL parser

​ KDL parser是ROS的一个功能包,提供了一种构建完整 KDL 树对象的简单方法。 从机器人的 URDF xml 描述 或 Collada xml 描述开始,kdl 解析器会自动生成 KDL 树。

building

rosdep install kdl_parser

rosmake kdl_parser

usage from a URDF model

​ 将KDL parser作为依赖项添加到您的 package.xml

  <package>
    ...
    <build_depend package="kdl_parser" />
    ...
    <run_depend package="kdl_parser" />
    ...
  </package>

usage in C++

#include <kdl_parser/kdl_parser.hpp>

KDL::Tree my_tree;
urdf::Model my_model;
if (!my_model.initXml(....)){
ROS_ERROR("Failed to parse urdf robot model");
    return false;
}
if (!kdl_parser::treeFromUrdfModel(my_model, my_tree)){
    ROS_ERROR("Failed to construct kdl tree");
     return false;
   }

后续

 喜欢的话可以关注一下我的公众号技术开发小圈,尤其是对深度学习以及计算机视觉有兴趣的朋友,我会把相关的源码以及更多资料发在上面,希望可以帮助到新入门的大家!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rosen.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值