有代码例子吗?
时间: 2024-01-16 07:02:39 浏览: 22
下面是一个简单的代码例子,演示如何在ROS中实现一个C++程序生成多个节点:
```cpp
#include <ros/ros.h>
#include <thread>
// 节点1的代码
void node1_func() {
ros::NodeHandle nh("node1");
// 节点1的功能代码
// ...
}
// 节点2的代码
void node2_func() {
ros::NodeHandle nh("node2");
// 节点2的功能代码
// ...
}
int main(int argc, char** argv) {
// 初始化ROS节点
ros::init(argc, argv, "main_node");
// 创建节点1的子线程
std::thread node1_thread(node1_func);
// 创建节点2的子线程
std::thread node2_thread(node2_func);
// 等待节点1的子线程结束
node1_thread.join();
// 等待节点2的子线程结束
node2_thread.join();
return 0;
}
```
在上面的代码中,我们在`main`函数中创建了两个子线程,分别运行`node1_func`和`node2_func`函数,这两个函数分别代表两个节点的初始化和功能代码。在`node1_func`和`node2_func`函数中,我们使用`ros::NodeHandle`类来初始化ROS节点,并实现节点的功能代码。
需要注意的是,每个节点都需要有一个唯一的名称,这里我们使用了`ros::NodeHandle`构造函数的参数来指定节点的名称。在创建子线程时,我们传递的是函数名,而不是函数指针,因为C++11标准中支持使用函数名来创建线程。
在子线程结束后,我们使用`join`函数来等待子线程结束,这样可以避免子线程在主线程结束时被强制终止,导致节点无法正常退出。