#include "rclcpp/rclcpp.hpp" using namespace std::chrono_literals; int main(int argc, char * argv[]) { rclcpp::init(argc, argv); auto node = rclcpp::Node::make_shared("logger_node"); rclcpp::Rate loop_rate(500ms); int counter = 0; while (rclcpp::ok()) { RCLCPP_INFO(node->get_logger(), "Hello %d", counter++); rclcpp::spin_some(node); loop_rate.sleep(); } rclcpp::shutdown(); return 0; }
rclcpp::Rate 可以控制循环的速度,当前面的程序执行完后,可以外加适当的延迟以达到我们选择的速度500msrclcpp::spin_some 立刻处理回调,没有任务后结束该指令,与spin 不同,spin 在没有指令的情况下会使代码停滞运行,直到有新命令为止RCLCPP_INFO 可以类比于printf ,可以将信息打印出来,并发布到话题/rosout 上get_logger() 可以获得要记录的节点对象,直接在节点创建的时候就建立的logger对象,有默认的名字,get_node_logger(const rcl_node_t * node); 给我一个名字,如果不存在,我给你创建一个日志记录器对象,存在则返回对应的对象
编译并运行后,可以得到如下结果,可以看到消息的类型,节点的名字以及时间、发布的内容
tao@tao-virtual-machine:~/Documents/bookros_ws$ ros2 run br2_basics logger [INFO] [1683337358.786960921] [logger_node]: Hello 0 [INFO] [1683337359.287385198] [logger_node]: Hello 1
使用该命令可以查看该话题的相关信息
ros2 topic echo /rosout
stamp: sec: 1683338436 nanosec: 287431041 level: 20 name: logger_node msg: Hello 2155 file: /home/tao/Documents/bookros_ws/src/br2_basics/src/logger.cpp function: main line: 47 --- stamp: sec: 1683338436 nanosec: 787051397 level: 20
接下来我们启动一个节点,来订阅节点
ros2 run rqt_console rqt_console
使用面向对象编程,使用类继承
#include "rclcpp/rclcpp.hpp" using namespace std::chrono_literals; class LoggerNode : public rclcpp::Node { public: LoggerNode() : Node("logger_node") { counter_ = 0; timer_ = create_wall_timer( 500ms, std::bind(&LoggerNode::timer_callback, this)); } void timer_callback() { RCLCPP_INFO(get_logger(), "Hello %d", counter_++); } private: rclcpp::TimerBase::SharedPtr timer_; int counter_; }; int main(int argc, char * argv[]) { rclcpp::init(argc, argv); auto node = std::make_shared<LoggerNode>(); rclcpp::spin(node); rclcpp::shutdown(); return 0; }
tao@tao-virtual-machine:~/Documents/bookros_ws$ ros2 run br2_basics logger_class [INFO] [1683377550.915089556] [logger_node]: Hello 0 [INFO] [1683377551.415162220] [logger_node]: Hello 1 [INFO] [1683377551.914849522] [logger_node]: Hello 2 [INFO] [1683377552.415050848] [logger_node]: Hello 3 [INFO] [1683377552.915133830] [logger_node]: Hello 4 [INFO] [1683377553.415104382] [logger_node]: Hello 5 [INFO] [1683377553.914778350] [logger_node]: Hello 6
通过继承
创建一个