例如如下的话题回调函数
void robot_status_callback_(const example_ros2_interfaces::msg::RobotStatus::SharedPtr msg)
{
RCLCPP_INFO(this->get_logger(), "收到状态数据位置:%f 状态:%d", msg->pose ,msg->status);
}
并没有写调用 怎么会输出?
-
这里的回调函数 robot_status_callback_ 是通过 ROS 2 的回调机制被自动地调用的,而不是手动进行调用的。在该程序中,当 ROS 2 框架接收到名为 “robot_status” 的消息时,就会触发 robot_status_callback_ 回调函数,并将消息传递给该函数。
-
回调函数中的输出语句 RCLCPP_INFO(this->get_logger(), “收到状态数据位置:%f 状态:%d”, msg->pose ,msg->status); 使用了 ROS 2 的日志记录工具 RCLCPP_INFO,用于向控制台输出日志信息。在该程序中,当收到机器人状态信息时,就会通过 RCLCPP_INFO 输出当前机器人状态的位置和状态值。
-
由于 RCLCPP_INFO 函数是 ROS 2 框架提供的日志记录接口,其内部实现会将日志信息存储在缓冲区中,等待ROS 2框架将缓冲区中的日志信息输出到控制台上。因此,在程序中调用 RCLCPP_INFO 函数并不代表日志信息已经立即输出到控制台,而是需要等待 ROS 2 框架将缓冲区中的日志信息输出到控制台上才能看到输出结果。
综上所述,这段代码中的输出是通过 ROS 2 框架日志记录机制实现的,在 ROS 2 框架接收到机器人状态消息时,自动调用 robot_status_callback_ 回调函数并输出日志信息,而不是手动调用实现的。