ROS的学习(二十一)使用时间和TF
来源:互联网 发布:php 关闭错误提示 编辑:程序博客网 时间:2024/04/26 10:18
rosserial_arduino这个包,包括了可以在arduino上产生时间戳的一个库,这个时间和运行roscore实例的PC或者是平板上的时间是同步的。下面使用一个例子来演示一下如何访问时间,并且发布一个TF变换。打开一个终端,运行arduino IDE:
选择File->Examples->ros_lib->TimeTF,打开的代码如下所示:
下面来解释代码:
上面的代码是包括一些必须的头文件,
接下来实例化一个TransformStamped的消息和一个TransformBroadcaster的对象broadcaster,我们同样需要指出所发布变换的框架的名字。
在setup函数里面,我们调用了TransformBroadcaster的初始化函数init(),且使用节点的句柄作为一个参数。如果没有这一步,broadcaster将不能正确的发布消息。
在loop()函数中,我们填充了变换的域,各种ID都被赋予了正确的字符串类型的名字,且变换和旋转的值被正确的设置。
调用nh.now()以ros::Time实例方式返回了当前的时间,
接着运行一下rosserial客户端应用程序,它将会把arduino的消息转发给ros的其他部分,
最后可以通过以下命令来检查变换:
arduino
选择File->Examples->ros_lib->TimeTF,打开的代码如下所示:
/* * rosserial Time and TF * Publishes a transform at current time */#include <ros.h>#include <ros/time.h>#include <tf/transform_broadcaster.h>ros::NodeHandle nh;geometry_msgs::TransformStamped t;tf::TransformBroadcaster broadcaster;char base_link[] = "/base_link";char odom[] = "/odom";void setup(){ nh.initNode(); broadcaster.init(nh);}void loop(){ t.header.frame_id = odom; t.child_frame_id = base_link; t.transform.translation.x = 1.0; t.transform.rotation.x = 0.0; t.transform.rotation.y = 0.0; t.transform.rotation.z = 0.0; t.transform.rotation.w = 1.0; t.header.stamp = nh.now(); broadcaster.sendTransform(t); nh.spinOnce(); delay(10);}
下面来解释代码:
#include <ros.h>#include <ros/time.h>#include <tf/transform_broadcaster.h>
上面的代码是包括一些必须的头文件,
geometry_msgs::TransformStamped t;tf::TransformBroadcaster broadcaster;char base_link[] = "/base_link";char odom[] = "/odom";
接下来实例化一个TransformStamped的消息和一个TransformBroadcaster的对象broadcaster,我们同样需要指出所发布变换的框架的名字。
broadcaster.init(nh);
在setup函数里面,我们调用了TransformBroadcaster的初始化函数init(),且使用节点的句柄作为一个参数。如果没有这一步,broadcaster将不能正确的发布消息。
t.header.frame_id = odom; t.child_frame_id = base_link; t.transform.translation.x = 1.0; t.transform.rotation.x = 0.0; t.transform.rotation.y = 0.0; t.transform.rotation.z = 0.0; t.transform.rotation.w = 1.0;
在loop()函数中,我们填充了变换的域,各种ID都被赋予了正确的字符串类型的名字,且变换和旋转的值被正确的设置。
t.header.stamp = nh.now();
调用nh.now()以ros::Time实例方式返回了当前的时间,
broadcaster.sendTransform(t); nh.spinOnce(); delay(10);}
最后发布了变换,并且在再次发布前调用了spinOnce和延迟函数。
接下来运行程序,首先在arduino IDE中点击upload按钮。
接着接着运行roscore:
roscore
接着运行一下rosserial客户端应用程序,它将会把arduino的消息转发给ros的其他部分,
rosrun rosserial_python serial_node.py /dev/ttyACM0
最后可以通过以下命令来检查变换:
rosrun tf tf_echo odom base_link
- ROS的学习(二十一)使用时间和TF
- ROS学习(二十一)--tf/增加一个框架frame
- ROS学习笔记:tf的学习和使用(二)
- ROS学习(二十)--tf/写broadcaster和listener
- ROS的学习(十一)ROS的msg和srv
- ROS学习--(十一)创建ROS的信息和服务
- 学习ROS笔记之TF——learning tf(二)
- 学习ROS笔记之TF——learning tf(二)
- ROS学习笔记:tf的学习与使用(一)
- ROS学习(十一):ROS URDF->model
- ROS--TF学习--介绍
- ROS-TF学习-欧拉角
- ROS学习(二)server和client的编写总结
- ROS的坐标系TF
- ROS进二阶学习笔记(1) TF 学习笔记1:TF介绍 + tf工具
- ROS之tf空间坐标变换浅析 (二)
- ROS学习--轻松使用tf
- ROS学习--轻松使用tf
- 引用 头文件循环倚赖问题
- ZOJ 3528 Parterre
- [Android源码分析]hciops的初始化
- 获得新添表格的id
- 驱动文章
- ROS的学习(二十一)使用时间和TF
- 第十周
- libevent源码深度剖析一
- SqlServer中的动态Sql
- Pm2.5防护口罩十大影响力品牌排名
- 周赛 Newstar 解题
- 浅谈过载保护
- Cocos2d-X 2.2 API CHM离线手册
- 数据结构算法