ROS-TF-广播
前言:将海龟的坐标系变换广播到TF。
URDF文件的描述是在相对坐标上进行的,运动起来就需要考虑机器人各个连杆的相对位置关系。TF的诞生就是为了自动管理这些相对关系下的坐标变换的,而我们需要做的就是给出连杆之间的相对位置关系,剩下的在运动中的坐标变换,速度关系,位置等信息就都由TF功能包自动处理完成。更直观的描述请参考:http://www.guyuehome.com/355
坐标标签有:位置坐标x,y,z和旋转角roll,pitch,yaw。例如如果只在平面移动,则只需要x,y,yaw即可。
一、新建功能包
在工作空间中新建功能包learning_tf tf roscpp rospy turtlesim
二、新建cpp文件
新建turtle_tf_broadcaster.cpp文件,文件内容如下:
#include <ros/ros.h>
#include <tf/transform_broadcaster.h>
#include <turtlesim/Pose.h>
std::string turtle_name;
void poseCallback(const turtlesim::PoseConstPtr& msg){
static tf::TransformBroadcaster br;
tf::Transform transform;//定义存放转换信息(平动,转动)的变量
transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) );//设置坐标原点
//定义旋转
tf::Quaternion q;
q.setRPY(, , msg->theta);
transform.setRotation(q);
br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name));//新建坐标系turtle_name,父坐标系为world,坐标系相对位置为transform
}
int main(int argc, char** argv){
ros::init(argc, argv, "my_tf_broadcaster");
){ROS_ERROR(;};
turtle_name = argv[];
ros::NodeHandle node;
ros::Subscriber sub = node.subscribe(turtle_name+, &poseCallback);
ros::spin();
;
};
----------------------------------------
代码解释:
大概思路是:接收turtle1的位置话题(/turtle1/pose),此时调用回调函数,将位置信息发布到tf
#include <tf/transform_broadcaster.h>,TF功能包提供了一个广播工具TransformBroadcaster,这个类需要引用<tf/transform_broadcaster.h>头文件
tf::Transform transform; transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) ); tf::Quaternion q; q.setRPY(, , msg->theta);
这里创建了一个变换实例,并将2D位姿信息转化为3D位姿信息。
transform.setRotation(q);
这里设置了旋转
br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name));
使用TransformBroadcaster发送TF变换需要四个参数:
- 变换本身
- 时间戳
- 提供连杆的父框架,这里是world
- 提供连杆的子框架,即自身,这里是乌龟本身。
三、新建launch文件
新建start_demo.launch文件,文件内容如下:
<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
<!-- Axes -->
<param name="scale_linear" value="2" type="double"/>
<param name="scale_angular" value="2" type="double"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster"
args="/turtle1" name="turtle1_tf_broadcaster" />
</launch>
运行launch文件
roslaunch learning_tf start_demo.launch
四、查看广播
rosrun tf tf_echo /world /turtle1

参考自:http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20broadcaster%20%28C%2B%2B%29
ROS-TF-广播的更多相关文章
- ROS tf广播编写
博客参考:https://www.ncnynl.com/archives/201702/1310.html ROS与C++入门教程-tf-编写tf broadcaster(广播) 说明: 介绍如何广播 ...
- ROS tf
一.节点中使用(cpp,python) 1. ros wiki 提供的tutorials 2. https://blog.csdn.net/start_from_scratch/article/det ...
- ROS TF——learning tf
在机器人的控制中,坐标系统是非常重要的,在ROS使用tf软件库进行坐标转换. 相关链接:http://www.ros.org/wiki/tf/Tutorials#Learning_tf 一.tf简介 ...
- ROS tf监听编写
博客转载自:https://www.ncnynl.com/archives/201702/1311.html ROS与C++入门教程-tf-编写tf listener(监听) 说明: 介绍如何使用tf ...
- ROS tf基础使用知识
博客参考:https://www.ncnynl.com/archives/201702/1306.html ROS与C++入门教程-tf-坐标变换 说明: 介绍在c++实现TF的坐标变换 概念: Co ...
- ROS tf 两个常用的函数
/** \brief Get the transform between two frames by frame ID. * \param target_frame The frame to wh ...
- ROS tf 编程指南
ROS (Robot Operating System, 机器人操作系统)是最知名的机器人操作系统,广泛应用于无人驾驶和机器人,tf(transforms,坐标系转换)是ROS下的一个常用的工具库.r ...
- ros之tf坐标系广播与监听的编程实现
创建功能包-learning_tf $ cd ~/catkin_ws/src $ catkin_create_pkg learning_tf roscpp rospy tf turtlesim 如何创 ...
- ROS 机器人技术 - 广播与接收 TF 坐标
上次我们学习了 TF 的基本概念和如何发布静态的 TF 坐标: ROS 机器人技术 - TF 坐标系统基本概念 ROS 机器人技术 - 静态 TF 坐标帧 这次来总结下如何发布一个自定义的 TF 坐标 ...
- ROS探索总结(十八)——重读tf
在之前的博客中,有讲解tf的相关内容,本篇博客重新整理了tf的介绍和学习内容,对tf的认识会更加系统. 1 tf简介 1.1 什么是tf tf是一个让用户随时间跟踪多个参考系的功能包,它使用一种树型数 ...
随机推荐
- C#自动缩进排列代码的快捷键 c# 代码重新排版 变整齐
C#自动缩进排列代码的快捷键: ctrl + k + d 1.小技巧, 可以把最后一个}去掉, 重新写下,就可以达到排版的效果. 2.快捷键:编辑-高级-设置文档的格式 快捷键Ctrl+E,D,设置 ...
- OpenCV中IplImage/CvMat/Mat转化关系
原文链接:http://www.cnblogs.com/summerRQ/articles/2406109.html 如对内容和版权有何疑问,请拜访原作者或者通知本人. opencv中常见的与图像操作 ...
- NDK 使用STL
参考链接:Android中使用STL 1. 在 Application.mk 中添加代码"APP_STL:= gnustl_static"后, 文件中的内容如下: APP_ABI ...
- react基础篇五
再看JSX 本质上来讲,JSX 只是为 React.createElement(component, props, ...children) 方法提供的语法糖.比如下面的代码: <MyButto ...
- Everything is a file
"Everything is a file" describes one of the defining features of Unix, and its derivatives ...
- MySQL--增删改查分页存储过程以及事务
添加和修改写在一起了 可以用id判断添加和修改 和事务在一起编码 可以让代码更严谨 在这里简单的说一下事务的四大特性 事务四大特性之原子性:原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都 ...
- python项目开发:ftp server开发
程序要求: 1.用户加密认证 (对用户名密码进行MD5验证)2.允许同时多用户登陆 (使用socket server方法,为每个用户都创建一个信息文件)3.每个用户有自己的家目录,且只能访问自己的家目 ...
- 2013 - lost connection to mysql server at 'reading initial communication packet' 连接mysql报错
早上刚到公司,启动项目发现连接池初始化报错,于是我打开本地mysql管理工具,测试是否可以连接.报错2013代码: 现已解决. 重启服务器mysql服务就好. 因为我连接的是本地windows系统,所 ...
- 使用idea搭建maven项目时 java目录下的xml文件没有加载的解决方法
今天在idea集成开发环境下 使用maven搭建了ssm项目,遇到了3个问题 首先我们先复习一下知识点: 第一步:在web.xml中配置spring监听器 <!-- spring监听器 加载sp ...
- JAVA反映机制A
以下这个URL讲得不错,可以把概念和用途结合起来, 练练手: http://blog.csdn.net/xiaohai798/article/details/11640427 import java. ...