• 19.ROS编程学习:节点关闭与多种日志输出


    参考学习资料:B站赵虚左的ROS课程

    节点关闭

    C++

    节点关闭api

    ros::shutdown()

     修改之前的pub.cpp

    1. ros::Publisher pub = n.advertise("chongfu",1000,true);
    2. std_msgs::String msg;
    3. ros::Rate rate(1);
    4. int count = 0;
    5. while (ros::ok())
    6. {
    7. count++;
    8. std::stringstream ss;
    9. ss << "hello -->" << count;
    10. msg.data = ss.str();
    11. if(count <= 10)
    12. {
    13. pub.publish(msg);
    14. ROS_INFO("发布数据:%s", msg.data.c_str());
    15. rate.sleep();
    16. }
    17. else
    18. {
    19. ros::shutdown();
    20. }
    21. // pub.publish(msg);
    22. // ROS_INFO("发布数据:%s", msg.data.c_str());
    23. // rate.sleep();
    24. ros::spinOnce();
    25. // ROS_INFO("实验:看看这行代码运行情况");
    26. }
    27. return 0;
    28. }

    注意的点:

    while循环的条件时ros节点是否运行,如果ros节点停止while停止循环,所以之前的操作是在控制台终端ctrl+c退出。

     while (ros::ok())

    修改之后,当计数大于10,就会将ros节点关闭,无需再用ctrl+c关闭。

    1. if(count <= 10)
    2. {
    3. pub.publish(msg);
    4. ROS_INFO("发布数据:%s", msg.data.c_str());
    5. rate.sleep();
    6. }
    7. else
    8. {
    9. ros::shutdown();
    10. }

    运行结果: 

    1. rosmelodic@rosmelodic-virtual-machine:~/catkin_ws$ rosrun sub_pub pub
    2. [ INFO] [1667198596.265939436]: 发布数据:hello -->1
    3. [ INFO] [1667198597.266422801]: 发布数据:hello -->2
    4. [ INFO] [1667198598.266515382]: 发布数据:hello -->3
    5. [ INFO] [1667198599.266077031]: 发布数据:hello -->4
    6. [ INFO] [1667198600.266574903]: 发布数据:hello -->5
    7. [ INFO] [1667198601.266281487]: 发布数据:hello -->6
    8. [ INFO] [1667198602.266431555]: 发布数据:hello -->7
    9. [ INFO] [1667198603.266338400]: 发布数据:hello -->8
    10. [ INFO] [1667198604.266157405]: 发布数据:hello -->9
    11. [ INFO] [1667198605.266765773]: 发布数据:hello -->10

    python

    节点关闭api

    rospy.signal_shutdown("string")

    修改之前的pub_p.py

    1. #! /usr/bin/env python
    2. # -*- coding: UTF-8 -*-
    3. import rospy
    4. from std_msgs.msg import String
    5. if __name__ == "__main__":
    6. rospy.init_node("pub_py")
    7. pub = rospy.Publisher ("chongfu_py", String, queue_size=10)
    8. msg = String()
    9. rate = rospy.Rate(1)
    10. count = 0
    11. rospy.sleep(3)
    12. while not rospy.is_shutdown():
    13. count += 1
    14. if(count <= 10):
    15. msg.data = "hello" + str(count)
    16. pub.publish(msg)
    17. rospy.loginfo("发布数据:%s", msg.data)
    18. else:
    19. rospy.signal_shutdown("退出循环")
    20. rate.sleep()

    注意的点!!!在调用节点关闭api时,是必须要给人类可读的原因,同时以字符串的形式给定。(@param reason: human-readable shutdown reason, if applicable @type  reason: str)

    不然报错:

    1. Traceback (most recent call last):
    2. File "/home/rosmelodic/catkin_ws/src/sub_pub/scripts/pub_p.py", line 21, in
    3. rospy.signal_shutdown()
    4. TypeError: signal_shutdown() takes exactly 1 argument (0 given)

    运行结果:

    1. rosmelodic@rosmelodic-virtual-machine:~/catkin_ws$ rosrun sub_pub pub_p.py
    2. [INFO] [1667199573.878112]: 发布数据:hello1
    3. [INFO] [1667199573.879684]: 发布数据:hello2
    4. [INFO] [1667199574.881232]: 发布数据:hello3
    5. [INFO] [1667199575.881403]: 发布数据:hello4
    6. [INFO] [1667199576.881529]: 发布数据:hello5
    7. [INFO] [1667199577.881721]: 发布数据:hello6
    8. [INFO] [1667199578.881504]: 发布数据:hello7
    9. [INFO] [1667199579.881090]: 发布数据:hello8
    10. [INFO] [1667199580.881624]: 发布数据:hello9
    11. [INFO] [1667199581.881889]: 发布数据:hello10

    总结

    c++与python编程中通过加入节点关闭api代替了控制台终端的ctrl+c的关闭方式。

    多种日志输出

    C++

    之前多用ROS_INFO("");

    现在由严重程度给出了更多的日志输出方式。

    1. ROS_DEBUG("hello,DEBUG"); //不会输出
    2. ROS_INFO("hello,INFO"); //默认白色字体
    3. ROS_WARN("Hello,WARN"); //默认黄色字体
    4. ROS_ERROR("hello,ERROR");//默认红色字体
    5. ROS_FATAL("hello,FATAL");//默认红色字体

    python

    之前多用rospy.loginfo("hello,info") 

    现在由严重程度给出了更多的日志输出方式。

    1. rospy.logdebug("hello,debug") #不会输出
    2. rospy.loginfo("hello,info") #默认白色字体
    3. rospy.logwarn("hello,warn") #默认黄色字体
    4. rospy.logerr("hello,error") #默认红色字体
    5. rospy.logfatal("hello,fatal") #默认红色字体

  • 相关阅读:
    中学数学建模书籍及相关的视频等(2022.08.09)
    ConfigurationProperties注解详解
    2021 CCPC 哈尔滨 J. Local Minimum (思维题)
    数据结构与算法-第八章 交换排序
    REDIS00_SpringBoot整合redis、RedisTemplate使用、工具类的抽取
    Git:Git的一些基本操作
    信息系统项目管理师-成本管理论文提纲
    Maven3.9.2 bug IDEA指定配置文件不生效
    C++编程笔记(GPU并行编程-2)
    [车联网安全自学篇] 五十八. Android安全之APK内存敏感信息泄露挖掘【静态分析】
  • 原文地址:https://blog.csdn.net/wzfafabga/article/details/127615191