ros2 使用create_timer的完整案例
时间: 2024-10-16 21:21:02 浏览: 7
在ROS 2(Robot Operating System version 2)中,`create_timer`通常用于创建一个定期运行的回调函数。下面是一个简单的ROS 2 C++客户端的例子,展示了如何使用`create_timer`:
```cpp
#include <rclcpp/rclcpp.hpp>
#include <rclcpp/time.hpp>
#include <rclcpp/executors/timerexecutor.hpp>
class MySubscriber : public rclcpp::Node
{
public:
explicit MySubscriber(rclcpp::NodeOptions options)
: Node("my_subscriber", options)
{
// 创建一个基于系统时间的周期性定时器
auto timer = this->create_wall_timer(
rclcpp::Duration::from_seconds(1), // 每隔1秒触发
[this](const std_msgs::msg::String::SharedPtr msg) {
RCLCPP_INFO(get_logger(), "Received message: %s", msg->data.c_str());
process_message(*msg);
});
// 初始化回调计数
count_ = 0;
}
private:
void process_message(const std_msgs::msg::String& msg)
{
++count_;
if (count_ == 5) {
RCLCPP_INFO(get_logger(), "Stopped after receiving 5 messages");
timer.shutdown();
}
}
unsigned int count_{};
};
int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
auto node = MySubscriber::make_shared();
rclcpp::spin(node); // 进入主循环等待事件处理
rclcpp::shutdown(); // 关闭节点和ROS 2环境
return 0;
}
```
在这个例子中,我们创建了一个名为"MySubscriber"的节点,并设置了一个每秒执行一次的定时器。每当定时器触发时,会调用内部的一个lambda表达式,该表达式接收并处理收到的消息。当接收到5条消息后,我们关闭定时器。
阅读全文