ros2能在定时器回调函数里发布消息吗
时间: 2024-10-12 13:05:57 浏览: 56
当然可以,ROS 2(Robot Operating System version 2)允许你在定时器回调函数中发布消息。定时器是一种常用的功能,它按照用户设定的时间间隔定期触发回调函数。在回调函数内部,你可以创建并发布消息到指定的主题(Topic),这正是ROS的一个核心功能,用于节点之间的通信。
例如,在C++中,你可以这样做:
```cpp
#include <rclcpp/rclcpp.hpp>
#include <sensor_msgs/msg/laser_scan.hpp>
class MyNode : public rclcpp::Node
{
public:
explicit MyNode(std::string name)
: Node(name),
timer_(this->create_timer(ros::Duration(1), std::bind(&MyNode::send_laser_data, this)))
{
}
private:
void send_laser_data()
{
sensor_msgs::msg::LaserScan scan_msg;
// ...填充激光扫描数据...
this->get_logger().info("Publishing laser data");
this->laser_pub_->publish(scan_msg);
}
rclcpp::TimerBase::SharedPtr timer_;
rclcpp::Publisher<sensor_msgs::msg::LaserScan>::SharedPtr laser_pub_;
};
int main(int argc, char ** argv)
{
rclcpp::init(argc, argv);
auto node = rclcpp::spin_some_node<MyNode>("node_name");
rclcpp::shutdown();
return 0;
}
```
在这个例子中,`send_laser_data`函数会被定时器每秒调用一次,然后发布`sensor_msgs/LaserScan`类型的消息。
阅读全文