# ros-log-document **Repository Path**: lixuejiangit/ros-log-document ## Basic Information - **Project Name**: ros-log-document - **Description**: 机器人操作系统文档介绍 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-04-23 - **Last Updated**: 2021-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RosLog使用文档 ## 介绍 基于web与ros开发的ros日志系统存储、实时显示、回滚可视化平台。 ## 安装教程 1. 克隆工程 ```shell git clone http://10.55.16.230/sangxin/ros-log.git --recursive ``` 2. 安装 - melodic ``` chmod a+x install_roslog_melodic.sh ./install_roslog_melodic.sh ``` - kinetic ``` chmod a+x install_roslog_kinetic.sh ./install_roslog_kinetic.sh ``` 1. 运行节点 ``` roscore ``` 2. 打开浏览器,输入主机IP:8847即可访问 ## 如何使用 ### ROS日志介绍 #### 日志级别 在ros中日志按照严重程度分为:DEBUG ,INFO ,WARN ,ERROR ,FATAL。 各级别对应含义为: | 级别 | 描述 | 样例 | | ------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | | DEBUG调试) | 不需要通过这些信息判断系统是否正常工作 | “收到来自主题X的消息” 、“发送了20个字节的信息给 xxx” | | INFO (信息) | 一些少量的,可能是有用的信息 | “节点初始化” 、"Starting turtlesim with node name /turtlesim" 、“创建了一个新的发布者” “新订阅的主题X:Y” | | WARN(警告) | 用户可能会看到报警、影响程序正常输出,但聪明的你已经把算在系统预期工作的信息 | “小乌龟撞墙了”,“机器人遇到障碍物停止了”,“任务执行失败了” | | ERROR(错误) | 一些严重的,已经错了的信息 | "未接收到里程计信息"、"tf转换中收到空值"、“紧急停止被按下了” | | FATAL(致命) | 直接可以去人事领离职登记表 | “电机烧坏了” 、“雷达碰坏了”、“(借的)机械臂发生了严重碰撞了” | **打印日志时应严格按照以上定义,系统默认对INFO及以上的信息进行存储,切勿将大量且不重要的信息使用以上INFO以上日志等级打印。** ### 日志打印 注意:系统默认不显示DEBUG级别信息,后面版本中将在web界面增加日志级别控制功能。目前如果想手动设置节点日志级别,可以使用以下命令。 **python:** ``` rospy.init_node('my_node', log_level=rospy.DEBUG) ``` **c++:** ``` #include if( ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Debug) ) { ros::console::notifyLoggerLevelsChanged(); } ``` #### C++打印 **基本使用:** ``` ROS_DEBUG("Hello %s", "World"); //C方法 格式化输出 ROS_DEBUG_STREAM("Hello " << "World"); //C++ 方式 ``` **示例:** ```c++ #include #include "ros/ros.h" #include "std_msgs/String.h" int main(int argc, char **argv) { ros::init(argc, argv, "talker"); ros::NodeHandle n; ros::Publisher log_send = n.advertise("log_send", 1000); ros::Rate loop_rate(10); int count = 0; while (ros::ok()) { std_msgs::String msg; std::stringstream ss; ss << "welcome to ros-log " << count; msg.data = ss.str(); ROS_DEBUG("%s %d","welcome to ros-log ",2021); ROS_INFO("%s", msg.data.c_str()); ROS_WARN("%s","welcome to ros-log warn"); ROS_ERROR("%s","welcome to ros-log error"); ROS_FATAL("%s","welcome to ros-log fatal"); ROS_INFO_STREAM(msg.data.c_str()<<" a"<<12); ROS_DEBUG_STREAM(msg.data.c_str()<<" a"<<12); ROS_WARN_STREAM(msg.data.c_str()<<" a"<<12); ROS_ERROR_STREAM(msg.data.c_str()<<" a"<<12); ROS_FATAL_STREAM(msg.data.c_str()<<" a"<<12); log_send.publish(msg); ros::spinOnce(); loop_rate.sleep(); ++count; } return 0; } ``` #### Python打印 每个日志级别都有相对应的函数,函数定义如下: ``` rospy.logdebug(msg, *args) rospy.logwarn(msg, *args) rospy.loginfo(msg, *args) rospy.logerr(msg, *args) rospy.logfatal(msg, *args) ``` 示例: ```c++ #!/usr/bin/env python2 # -*- coding: UTF-8 -*- import rospy import sys if __name__ == "__main__": rospy.init_node("roslog_test", argv=sys.argv, anonymous=True,log_level=rospy.DEBUG) loop_id = 1 while not rospy.is_shutdown(): rospy.loginfo("roslog info"); rospy.logdebug("roslog debug"); rospy.logfatal("roslog fatal"); rospy.logwarn("roslog warn"); rospy.logerr("roslog err") loop_id += 1 ``` ## 更新日志 - 2021-01-07 更新V1.0文档信息,介绍日志打印方法。 ## 鸣谢 ### 贡献 - sangxin ### 开源代码 - websocket-server - docsify - vue - element-ui - spdlog