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

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

  • 该文主要讲述如何使用与查看rosserial的日志记录。
  • rosserial将字符串转发到标准ROS网络,并输出到rosout和其日志文件。
  • 如果您在设备连接到ROS之前尝试记录信息,则记录的信息将会丢失。
  • 请记住,对于低内存系统,这种记录非常昂贵。 在发送之前,您需要将字符串存储在内存中。 对于更多内存节约日志,尝试定义一个自定义的消息类型与你需要发送的信息。 然后,您可以使用rostopic回声来观察程序的状态。

示例中的代码如下:

/*
 * rosserial PubSub Example
 * Prints "hello world!" and toggles led
 */

#include <ros.h>                  //包含了标准ROS类的声明
#include <std_msgs/String.h>      //包含消息头文件
#include <std_msgs/Empty.h>       //包含消息头文件

ros::NodeHandle  nh;     /*(节点句柄)对象是你的程序用于和ROS系统交互的主要机制。创建此对象会将你的程序注册为ROS节点管理器的节点。最简单的方法就是在整个程序中只创建一个NodeHandle对象*/


std_msgs::String str_msg;        //定义变量str_msg且消息类型为std_msgs::String
ros::Publisher chatter("chatter", &str_msg);/*实例化一个发布,名为chatter,赋值到变量str_msg*/

char hello[13] = "hello world!";    //定义字符型数组,赋值如后


char debug[]= "debug statements";   //定义字符型数组,赋值如后
char info[] = "infos";              //定义字符型数组,赋值如后
char warn[] = "warnings";           //定义字符型数组,赋值如后
char error[] = "errors";            //定义字符型数组,赋值如后
char fatal[] = "fatalities";        //定义字符型数组,赋值如后

void setup()        //Arduino的Setup函数,用于初始化ROS节点处理,并宣告所有的发布或订阅
{
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.advertise(chatter);
}

void loop() //在Arduino的loop函数,定义发布的内容,并调用nh.spinOnce(),这样所有的ROS回调函数就会被处理。
{
  str_msg.data = hello;
  chatter.publish( &str_msg );   //发布主题

  //现在你可以发送你想要记录的所有语句适当的详细级别
  nh.logdebug(debug);
  nh.loginfo(info);
  nh.logwarn(warn);
  nh.logerror(error);
  nh.logfatal(fatal);

  nh.spinOnce();
  delay(500);
}

代码下载:

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

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

$ roscore

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

$ rosrun rosserial_python serial_node.py /dev/ttyACM0

$ rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0
  • PS:这时你应该能够看到用于运行串行节点的同一终端中的所有日志消息

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

参考链接:> http://wiki.ros.org/rosserial_arduino/Tutorials/Logging

猜你喜欢

转载自blog.csdn.net/Hacker_MAI/article/details/78666345