<div class="markdown_views">
<h1 id="1输出调试信息"><a name="t0"></a>1.输出调试信息</h1>
ROS自带了大量的能够输出调试信息的函数和宏,包括错误,警告等.它提供了如信息级别,条件触发消息和STL的流接口等方式.
直接上例子,新建catkin工程,工程名为rosdebugtest
#include <ros/ros.h>
#include <ros/console.h>
int main( int argc, char **argv )
{
ros::init( argc, argv, "rosdebug" );
ros::NodeHandle n;
ros::Rate rate( 1 );
while( ros::ok() ) {
ROS_INFO_STREAM_ONCE("loop start");
ROS_DEBUG_STREAM( "DEBUG message." );
ROS_INFO_STREAM ( "INFO message." );
ROS_WARN_STREAM ( "WARN message." );
ROS_ERROR_STREAM( "ERROR message." );
ROS_FATAL_STREAM( "FATAL message." );
ROS_INFO_STREAM_NAMED( "named_msg", "INFO named message." );
ROS_INFO_STREAM_THROTTLE( 2, "INFO throttle message." );
ros::spinOnce();
rate.sleep();
}
return 1;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
(1)调试级别c和c++用法
其中 ROS_INFO(“INFO message %d”,k),相当于c中的printf;
ROS_INFO_STREAM ( "INFO message." <<k);
相当于c++中的cout;
而调试的显示级别有5种
DEBUG
INFO
WARN
ERROR
FATAL
(2)为调试信息命名
ROS_INFO_STREAM_NAMED( "named_msg", "INFO named message." );
表示为这段信息命名,为了更容易知道这段信息来自那段代码.
(3)设置显示频率
ROS_INFO_STREAM_THROTTLE( 2, "INFO throttle message." );
- 1
THROTTLE表示节流的意思,以上代码运行两次输出一次INFO throttle message.
(4)单次显示
ros中可以在循环中让信息只输出一次
使用ROS_[_STREAM]_ONCE[_NAMED]
如
ROS_INFO_STREAM_ONCE("loop start")
- 1
2.使用rosconsole和设置显示级别
ROS的调试信息可以用rosconsole查看和设置,用法如下
(1)查看节点
rosnode list
(2)查看节点的log(节点名rosdebugtest)
rosconsole list rosdebugtest
输出如下
ros
ros.roscpp
ros.roscpp.roscpp_internal
ros.roscpp.superdebug
ros.rosdebugtest
ros.rosdebugtest.named_msg
(3)查看log显示级别
Usage: rosconsole get <node> <logger>
rosconsole get rosdebugtest ros.rosdebugtest.named_msg
(4)动态设置log的显示级别
Usage:rosconsole set <node> <logger> <level>
- 1
rosconsole set rosdebugtest ros.rosdebugtest debug
或者用图形化界面设置
启动rqt_logger_level
rosrun rqt_logger_level rqt_logger_level
- 1
(5)在编译时设置源代码的调试级别
由于编译时默认显示的是INFO级别,因此调试时为了看到Debug信息,需要在编译是设置调试级别。
在 ros::init( argc, argv, “rosdebugtest” );后加入这一句就行了
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME,ros::console::levels::Debug);
- 1
(6)设置ros默认输出级别
更改文件
$ROS_ROOT/config/rosconsole.config
文件内容如下
# Set the default ros output to warning and higher
log4j.logger.ros=WARN
- 1
- 2
- 3
- 4
http://wiki.ros.org/rosconsole