ROS的学习(二十一)使用时间和TF

来源:互联网 发布:php 关闭错误提示 编辑:程序博客网 时间:2024/04/26 10:18
     rosserial_arduino这个包,包括了可以在arduino上产生时间戳的一个库,这个时间和运行roscore实例的PC或者是平板上的时间是同步的。下面使用一个例子来演示一下如何访问时间,并且发布一个TF变换。打开一个终端,运行arduino IDE:
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


原创粉丝点击