ros2使用一个main函数C++同时启动多个节点
时间: 2024-09-28 09:06:51 浏览: 36
stan-head:Stan大脑使用的ROS2节点
在ROS 2(Robot Operating System version 2)中,如果你想在C++中使用`main()`函数同时启动多个节点,你可以通过`rclcpp::init`和`rclcpp::spin`函数配合`Node`类来实现。以下是一个简单的示例:
```cpp
#include <rclcpp/rclcpp.hpp>
#include <iostream>
class MyNode : public rclcpp::Node
{
public:
explicit MyNode(const std::string & node_name)
: Node(node_name),
timer_(this->create_wall_timer(1000, // 每秒触发一次
[] (const rclcpp::TimerEvent & event) {
this->do_something();
}))
{}
private:
void do_something()
{
RCLCPP_INFO(get_logger(), "Doing something in Node %s", get_node_base_name());
}
rclcpp::WallTimerBaseSharedPtr timer_;
};
int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
auto node1 = std::make_shared<MyNode>("node1");
auto node2 = std::make_shared<MyNode>("node2");
rclcpp::spin_some(node1); // 开始轮询第一个节点
rclcpp::spin_some(node2); // 同时开始轮询第二个节点
while (rclcpp::ok()) {
rclcpp::spin_some(node1);
rclcpp::spin_some(node2);
}
rclcpp::shutdown();
return 0;
}
```
在这个例子中,我们创建了两个名为`node1`和`node2`的节点实例,并分别调用`rclcpp::spin_some()`来启动它们的事件循环。这样,两个节点就会交替执行任务。
阅读全文