在ros程序运行时,默认是不显示debug信息的。如果要查看debug消息,需要先运行rosrun rqt_logger_level rqt_logger_level
// 设置默认的日志级别为Debug
// 这样会打印所有调试的信息
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Debug);
如何值打印一个类型的Debug信息呢
以上图中的obstacleLayer_ywz为例:可以看出数由服务端test_costmap控制的
rosservice call /test_costmap/set_logger_level "logger: ''
level: ''"
可以填写
rosservice call /test_costmap/set_logger_level "logger: 'ros.costmap_2d.obstacleLayer_ywz'
level: 'DEBUG'"
或者在main函数中加入调用它的客户端代码:
#include <roscpp/SetLoggerLevel.h>
// 创建节点句柄
ros::NodeHandle nh;
// 创建服务客户端
ros::ServiceClient client = nh.serviceClient<roscpp::SetLoggerLevel>("/test_costmap/set_logger_level");
// 创建请求消息
roscpp::SetLoggerLevel srv;
srv.request.logger = "ros.costmap_2d.obstacleLayer_ywz";
srv.request.level = "DEBUG";
// 调用服务
if (client.call(srv))
{
ROS_INFO("Logger level set successfully");
}
else
{
ROS_ERROR("Failed to call service");
}
方法二
在代码总加入:
// ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME".""obstacleLayer_ywz", ros::console::levels::Debug);
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME".obstacleLayer_ywz", ros::console::levels::Debug);
下面是我的代码中添加的
setlocale(LC_ALL,"");
ROS_INFO_STREAM("\033[36m"<<"ROSCONSOLE_DEFAULT_NAME: " << ROSCONSOLE_DEFAULT_NAME <<" \033[0m");
// 设置obstacleLayer_ywz的日志级别为DEBUG
// ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME".""obstacleLayer_ywz", ros::console::levels::Debug);
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME".obstacleLayer_ywz", ros::console::levels::Debug);
ROS_INFO("\033[36m ObstacleLayer::onInitialize 开始 \033[0m" );
ROS_DEBUG_NAMED("obstacleLayer_ywz","\033[36m ---------yyyyyy--------- 开始\033[0m");
ROS_DEBUG_NAMED("obstacleLayer_ywz","\033[36m ---------yyyyyy--------- 开始\033[0m");
ROS_DEBUG_NAMED("obstacleLayer_ywz","\033[36m ---------yyyyyy--------- 开始\033[0m");
结果输出:
根据参数服务器参数确定,不用总是修改代码
bool ros_debug_named_info; // ywz 是否打印 ROS_DEBUG_NAMED 的调试消息
nh.param("ros_debug_named_info", ros_debug_named_info, false);
if (ros_debug_named_info)
{
ROS_INFO_STREAM("\033[36m"<<"ROSCONSOLE_DEFAULT_NAME: " << ROSCONSOLE_DEFAULT_NAME <<" \033[0m");
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME".obstacleLayer_ywz", ros::console::levels::Debug);
ROS_DEBUG_NAMED("obstacleLayer_ywz","\033[36m obstacleLayer_ywz调试打开\033[0m");
}