rosserial_arduino学习笔记5《Logging in rosserial》

1 Logging

与任何ROS节点一样,您可以在适当的详细级别记录消息。rosserial将字符串转发到标准ROS网络并输出到rosout及其日志文件。

如果您尝试在设备连接到ROS之前记录信息,则记录的信息将丢失。

请记住,对于低内存系统,这种日志记录非常昂贵。在发送之前,您需要将字符串存储在内存中。要获得更多内存节省日志记录,请尝试定义一个自定义消息类型,其中包含您需要发送的信息。然后,您可以使用rostopic echo观察程序的状态。

1.1 代码

#include <ros.h>
ros::NodeHandle nh;

void setup()
{
  nh.initNode();
}

void loop()
{
  //wait until you are actually connected
  while (!nh.connected())
  {
    nh.spinOnce();
  }
 
  //Now you can send all of the statements you want
  //to be logged at the appropriate verbosity level
  nh.logdebug("Debug Statement");
  nh.loginfo("Program info");
  nh.logwarn("Warnings.");
  nh.logerror("Errors..");
  nh.logfatal("Fatalities!");
  delay(5000);
}

1.2 上传代码

要将代码上传到Arduino,请使用Arduino IDE中的上传功能。这与上传任何其他sketch没有什么不同。

1.3 运行代码

现在,在新的终端窗口中启动roscore

roscore

接下来,运行rosserial客户端应用程序,将Arduino消息转发给ROS的其余部分。确保使用正确的串口:

rosrun rosserial_python serial_node.py /dev/ttyACM0

您应该能够在用于运行串行节点的同一终端中查看所有日志消息。

2 进一步阅读

有关发布者和订阅者的详细信息,请参阅rosserial / Overview。另请参阅有关更复杂数据类型的信息的限制

3 补充程序

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

#include <ros.h>
#include <std_msgs/String.h>
#include <std_msgs/Empty.h>

ros::NodeHandle  nh;


std_msgs::String str_msg;
ros::Publisher chatter("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()
{
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.advertise(chatter);
}

void loop()
{
  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);
}

程序不再解释,程序运行结果如下:

猜你喜欢

转载自blog.csdn.net/qq_27806947/article/details/83037647