#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
通过继承
创建一个