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/odom
char odom[] = "/odom"; //定义字符型数组,指定需要进行转换的参考系名称/odom
void 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