编写一个tf listener
2017-11-03 21:47
204 查看
listerner
1 #include <ros/ros.h> 2 #include <tf/transform_listener.h> 3 #include <geometry_msgs/Twist.h> 4 #include <turtlesim/Spawn.h> 5 6 int main(int argc, char** argv){ 7 ros::init(argc, argv, "my_tf_listener"); 8 9 ros::NodeHandle node; 10 11 ros::service::waitForService("spawn"); 12 ros::ServiceClient add_turtle = 13 node.serviceClient<turtlesim::Spawn>("spawn"); 14 turtlesim::Spawn srv; 15 add_turtle.call(srv); 16 17 ros::Publisher turtle_vel = 18 node.advertise<geometry_msgs::Twist>("turtle2/cmd_vel", 10); 19 20 tf::TransformListener listener; 21 22 ros::Rate rate(10.0); 23 while (node.ok()){ 24 tf::StampedTransform transform; 25 try{ 26 listener.lookupTransform("/turtle2", "/turtle1", 27 ros::Time(0), transform); 28 } //我们向侦听器查询一个特定的转换。我们来看看四个参数:我们希望从frame / turtle1到frame / turtle2的转换。
我们想要改变的时间。提供ros :: Time(0)只会为我们提供最新的可用转换。
我们存储结果变换的对象。
29 catch (tf::TransformException &ex) {
30 ROS_ERROR("%s",ex.what());
31 ros::Duration(1.0).sleep();
32 continue;
33 }
34
35 geometry_msgs::Twist vel_msg;
36 vel_msg.angular.z = 4.0 * atan2(transform.getOrigin().y(),
37 transform.getOrigin().x());
38 vel_msg.linear.x = 0.5 * sqrt(pow(transform.getOrigin().x(), 2) +
39 pow(transform.getOrigin().y(), 2));
40 turtle_vel.publish(vel_msg);
41
//在这里,变换用于计算turtle2的新的线性和角速度,基于它与turtle1的距离和角度。新的速度在主题“turtle2 / cmd_vel”中发布,sim将使用它来更新turtle2的移动。
42 rate.sleep();
43 }
44 return 0;
45 };
CMakeLists.txt与launch文件里比较类似
相关文章推荐
- ROS进二阶学习笔记(1) TF 学习笔记3 -- TF Listener 编写 (Python)and Adding frame(Python)
- ROS Learning-015 learning_tf(编程) 编写一个监听器程序 (Python版)
- 编写一个tf广播
- ROS Learning-015 learning_tf(编程) 编写一个监听器程序 (Python版)
- 【C语言】编写一个程序,从标准输入读取C源代码,验证所有的花括号都正确的成对出现
- 如何编写一个能读取Powerbuilder的数据窗口中数据的程序
- 使用nodejs、ejsExcel、express、vuejs编写一个excel转json的工具——第一步:创建vuejs项目并搭建开发环境
- 编写一个程序 提示用户输入三个数集,每个包括5个数 实现以下功能 (图)
- 使用ATL编写一个简单的COM服务器
- 用 C 语言编写一个简单的垃圾回收器
- 5-1 编写一个代表地址的Address类
- 编写一个标准类—Box
- 编写一个函数,从一个字符串中提取一个子字符串
- 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转
- Win32汇编教程四:编写一个简单的窗口
- 如何编写一个gulp插件
- 编写一个函数,实现两个字符串的比较,即自己写一个strcmp函数(考察指针传参)
- 如何编写一个Qt桌面
- 编写一个简单的COM组件
- 请编写一个递归函数,用来输出n个元素的所有子集。例如,三个元素{a,b,c}的所有子集是:{},{a},{b},{c},{a,c},{ac},{b,c},{a,b,c}.