ROS学习(二十一)--tf/增加一个框架frame
来源:互联网 发布:交大慧谷 数据库培训 编辑:程序博客网 时间:2024/04/20 10:59
为什么要增加框架
因为在自己的坐标系里比较容易处理数据,比如在一个扫描器的中心建立坐标系,并处理数据,会比在其他地方建立坐标系简单。tf允许我们给每个传感器建立一个本地坐标系。然后tf会处理每个单独的坐标系的变化信息。
在哪里添加框架
作为已有框架的的子框架
增加框架
先切换目录
roscd learning_tf
在src下新建frame_tf_broadcaster.cpp
#include <ros/ros.h>#include <tf/transform_broadcaster.h>int main(int argc, char** argv){ ros::init(argc, argv, "my_tf_broadcaster"); ros::NodeHandle node; tf::TransformBroadcaster br; tf::Transform transform; ros::Rate rate(10.0); while (node.ok()){ transform.setOrigin( tf::Vector3(0.0, 2.0, 0.0) ); transform.setRotation( tf::Quaternion(0, 0, 0, 1) ); br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "turtle1", "carrot1")); rate.sleep(); } return 0;};
解释:
transform.setOrigin( tf::Vector3(0.0, 2.0, 0.0) ); 14 transform.setRotation( tf::Quaternion(0, 0, 0, 1) ); 15 br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "turtle1", "carrot1"));
这里我们创建了一个新的从turtle1到carrot1的transform,carrot1在turtle1左边两米的地方
运行frame broadcaster
将下面代码贴在CMakeLists.txt下
add_excutable(frame_tf_broadcaster src/frame_tf_broadcaster.cpp)target_link_libraries(frame_tf_broadcaster ${catkin_LIBRARIES})
catkin_make
如果bin文件夹中出现较frame_tf_broadcaster的二进制文件,打开start_demo.launch,加入下面代码
<node pkg="learning_tf" type="frame_tf_broadcaster" name="broadcaster_frame" />
运行
roslaunch learning_tf start_demo.launch
运行后我们发现让一只乌龟运动,另一只乌龟的行动并没有什么变化。这是因为turtle2的活动轨迹是由listener决定的。而我们没有改变listener的内容。
打开turtle_tf_listener.cpp。找到下面代码。将”/turtle1”改成”/carrot”
listener.lookupTransform("/turtle2", "/carrot1", ros::Time(0), transform);
重新运行launch文件
catkin_makeroslaunch learning_tf start_demo.launch
发现turlte2不再跟着turtle1,而是跟着carrot1. 虽然carrot1在屏幕上没有表示出来,但是它是在carrot1的左边两米,所以我们看到carrot2朝着那个方向前进。
最后。我们这里的carrot1是一个固定的框架。没有随着时间的变化而变化。如果我们想让carrot1岁时间变化。
transform.setOrigin( tf::Vector3(2.0*sin(ros::Time::now().toSec()), 2.0*cos(ros::Time::now().toSec()), 0.0) ); transform.setRotation( tf::Quaternion(0, 0, 0, 1) );
重新catkin_make,运行launch 就可以看到turtle2自己运动了。了
0 0
- ROS学习(二十一)--tf/增加一个框架frame
- ROS的学习(二十一)使用时间和TF
- ROS学习笔记:tf的学习和使用(二)
- ROS进二阶学习笔记(1) TF 学习笔记3 -- TF Listener 编写 (Python)and Adding frame(Python)
- ROS学习(二十)--tf/写broadcaster和listener
- 学习ROS笔记之TF——learning tf(二)
- 学习ROS笔记之TF——learning tf(二)
- ROS(8) tf 坐标框架
- ROS学习(十一):ROS URDF->model
- ROS--TF学习--介绍
- ROS-TF学习-欧拉角
- ROS进二阶学习笔记(1) TF 学习笔记1:TF介绍 + tf工具
- ROS:关于tf的探索(3)Adding a frame(Python)
- ROS之tf空间坐标变换浅析 (二)
- ROS学习--轻松使用tf
- ROS学习--轻松使用tf
- 【ROS学习】(十一)常见问题及解决方案
- ROS的学习(十一)ROS的msg和srv
- 原型模式
- LeetCode 112 Path Sum(路径和)(BT、DP)(*)
- 获取工程路径
- java 回文 判断
- ScrollView ,ResizeLayout extends RelativeLayout 搭配处理了listview 和 屏幕中提示文字的排版问题
- ROS学习(二十一)--tf/增加一个框架frame
- 解决web应用用户退出系统后浏览器后退问题
- android SD卡检测及容量读取
- 2016蓝桥杯假期任务之《带分数》
- Ubuntu 两种方式结束进程
- Cocos2D中Action的进阶使用技巧(二)
- ThinkPHP使用经验积累
- HUD 2818
- [转]OpenGL 2D纹理