qt creator 接收ros topic
时间: 2025-04-25 20:34:39 浏览: 22
### 如何在 Qt Creator 中订阅和处理 ROS Topic
为了实现Qt应用程序能够接收来自ROS的话题,在`QNode`类中初始化时声明要订阅的话题名称,并设置回调函数来处理接收到的消息。下面是一个具体的例子,展示如何订阅名为`chatter`的标准字符串话题。
#### 修改 QNode 类头文件 qnode.h
增加私有成员变量用于存储订阅者对象以及对应的槽函数原型:
```cpp
#ifndef QNODE_H
#define QNODE_H
#include <ros/ros.h>
#include <std_msgs/String.h>
class QNode : public QObject {
Q_OBJECT
public:
explicit QNode(QObject* parent = nullptr);
~QNode();
private slots:
void chatterCallback(const std_msgs::StringConstPtr& msg);
private:
ros::Subscriber sub_chatter;
};
#endif // QNODE_H
```
#### 实现 QNode 构造函数与订阅逻辑 src/qnode.cpp
在构造器内部调用 `subscribe()` 方法完成订阅动作;同时关联信号到槽以便后续处理传入的数据包。
```cpp
#include "qnode.hpp"
QNode::QNode(QObject* parent) :
QObject(parent),
ros::init(ros::MultiThreadedSpinner()),
nh_("~") {
sub_chatter = nh_.subscribe<std_msgs::String>("chatter", 10, &QNode::chatterCallback, this);
}
void QNode::chatterCallback(const std_msgs::StringConstPtr& msg){
qDebug()<<"Received message:"<<msg->data.c_str();
}
```
上述代码片段展示了如何创建一个简单的ROS节点,该节点会监听由其他进程发布的标准字符串消息并将它们打印出来[^3]。
当启动此应用后,每当有新的消息被发送至`/chatter`主题上时,都会触发相应的回调函数执行,从而可以在图形界面或其他地方进一步解析这些信息。
阅读全文
相关推荐















