ROS创建KDL tree
参考链接: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相关推荐
- ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)
ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点-python版本 rosed msg和srv 创建msg 使用rosmsg 创建srv 使用rossrv 重新make一下软 ...
- ubuntu ROS 创建项目
ubuntu ROS 创建项目 打开Termianl 创建工作空间 创建功能包 打开Termianl Ctrl+Alt+t 创建工作空间 mkdir -p catkin_testmarker/src ...
- ros创建功能包和编译过程问题处理
文章目录 1. 创建工作空间和功能包 2.新建cpp文件 3.修改CMakeLists.txt 4.编译问题 4.1 Could NOT find rospy (missing: rospy_DIR) ...
- mysql 怎么创建B Tree索引_MySQL为什么选择B+Tree做索引
MySQL为什么选择B+Tree? 首先理解MySQL索引的几个原则 是为了加速对表中数据行的检索而创建的一种分散存储的数据结构. 工作机制 如上图:以id创建索引,索引数据结构里存储了索引键(关键字 ...
- ros创建工作空间_ROS入门学习之七Moveit机械臂控制
1.MoveIt!系统架构 MoveIt是什么: 一个易于使用的集成化开发平台 由一系列移动操作的功能包组成:运动规划.操作控制.3D感知.运动学.控制与导航算法 提供友好的GUI 可应用于工业.商业 ...
- 【RK3399Pro学习笔记】四、ROS 创建工作空间与功能包
目录 创建工作空间 编译工作空间 功能包 创建功能包 编译功能包 设置环境变量 检查环境变量 平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本:Tinker_Edge_R ...
- ros创建工作空间_ROS 初级 - 安装和配置 ROS 环境
这个 ROS 系列教程主要来自 ROS Wiki,加上自己学习过程中踩过的一些坑和个人理解. 1.安装 ROS 在配置 ROS 环境前要完全安装 ROS,参看之前的安装 ROS 的文章:Ubuntu ...
- ROS学习|Behavoir Tree(BT树)--c++实现
系列文章目录 Behavoir Tree(BT树)–基本概念 Behavoir Tree(BT树)–c++实现 Behavoir Tree(BT树)–c++实现第二节 目录 系列文章目录 创建行为树 ...
- 使用AnyGantt创建Word Tree
AnyGantt是基于JavaScript的高级解决方案,用于构建复杂且信息丰富的甘特图.它完全跨浏览器和跨平台,可用于ASP.NET.ASP.PHP.JSP.ColdFusion.Ruby on R ...
- ROS学习(11)使用ROS创建地图
文章目录 前言 一.创建编译功能包 二.更新启动文件 三.启动模型 四.保存地图 五.加载地图 六.总结 前言 创建地图是一件比较复杂的工作,ROS利用map_server地图服务器,借助激光雷达和机 ...
最新文章
- Kylin集群部署和cube使用
- IT编辑推荐:广通Broadview IT运维管理平台
- 字符串的全排列和组合算法
- Get busy living or get busy dying
- 吴晓灵:尽快制定“个人信息保护法”
- Java入门超简单程序Song List
- Hystrix解决雪崩问题的两种手段
- 心态很容易受别人影响_阳光心态的句子,句句动人心弦,送给追梦路上的你
- 数字模拟信号 单双信道传输
- C# 实现将网络资源保存到本地
- Windows Mobile下使用Native C++开发日志类
- 苹果手机的隔空投送怎么使用?
- SpringBoot 整合swagger3.X
- openresty lua集成kafka
- 同时起两个mysql 起不了_两大龙头同时提价,6月起下游订单V字反转,份额都倾向这两家...
- HTML弹窗上下一步,JS实现从网页顶部掉下弹出层效果的方法
- 密码字典生成工具crunch的简单使用
- 适合APP的开发模式——敏捷开发
- Qt Quick简单教程
- Protel DXP 使用教程 - 自定义集成库
热门文章
- 全国第三届SLAM技术会议记录
- Openwrt 下 L2TP搭建
- 计算机快捷键英语,计算机快捷键(国外英语资料).doc
- PCIe 设备树详细讲解
- 图的遍历 —— 广度优先遍历
- 2020moectf—flower
- 量化投资之股票统计套利:基于BP神经网络
- bean named 'transactionManager' available: No matching PlatformTransactionManager bean found for qua
- 【课程设计】基于图像处理的一维条形码识别-含matlab源码
- 计算机的硬盘 u盘启动,设置U盘启动和硬盘启动两种差别教程步骤