Ubuntu16.04LTS 下ros(kinetic)的arduino应用(五)

来源:互联网 发布:mastercam三维编程步骤 编辑:程序博客网 时间:2024/05/22 10:33

Ubuntu 16.04下arduino示例ros_lib例程TimeTF
介绍:

  • 该文主要讲述如何使用ros::Time和TF在Arduino上创建tf publisher
  • 使用历程为应用(一)中Arduino IDE 文件->示例->ros_lib->TimeTF

示例中的代码如下:

/*  * rosserial Time and TF Example * Publishes a transform at current time */#include <ros.h>       //包含了标准ROS类的声明#include <ros/time.h>  //包含ros库中的时间库文件#include <tf/transform_broadcaster.h>   //包含transform broadcaster头文件ros::NodeHandle  nh;  /*(节点句柄)对象是你的程序用于和ROS系统交互的主要机制。创建此对象会将你的程序注册为ROS节点管理器的节点。最简单的方法就是在整个程序中只创建一个NodeHandle对象*/geometry_msgs::TransformStamped t;       //实例化TransformStamped消息类tf::TransformBroadcaster broadcaster;    //实例化broadcaster类char base_link[] = "/base_link"; //定义字符型数组,指定需要进行转换的参考系名称/base_link/odomchar odom[] = "/odom";           //定义字符型数组,指定需要进行转换的参考系名称/odomvoid setup()        /*Arduino的Setup函数,用于初始化ROS节点处理,初始化节点处理类,初始化broadcaster类,使用节点处理类作为参数*/{  nh.initNode();  broadcaster.init(nh);}void loop()    /*在Arduino的loop函数,转化相关参数,并调用nh.spinOnce(),这样所有的ROS回调函数就会被处理*/{    //设置不同参考系的名称,及转换的值内容  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();     /*调用nh.now(),返回当前的时间。作为ros::Time 的实例,就像使用 roscpp's ros::Time::now().**/    /*发布转换,调用spinOnce之后,需要等待一会,在循环。*/    /*转换都是按正常速率发布*/    /*数据字段将从实际数据中填充*/  broadcaster.sendTransform(t);  nh.spinOnce();  delay(10);}

代码下载:

  • 将arduino开发板通过串口与电脑连接,点击Arduino IDE 文件->下载

运行代码:
1.打开终端,输入如下:

$ roscore

2.打开另一个终端,输入如下:

$ rosrun rosserial_python serial_node.py /dev/ttyACM0

$ rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0

3.打开另一个终端,输入如下代码,检查是否成功:

$ rosrun tf tf_echo odom base_link

$ rosrun tf view_frames

上述内容为本人参考下方链接并结合自身操作所遇问题,对前者进行了相关补充,由于编者水平有限,如有错误,还请指出。

参考链接:> http://wiki.ros.org/rosserial_arduino/Tutorials/Time%20and%20TF