目录
1.qnode.hpp文件
2.qnode.cpp源码文件
3.main_window.hpp头文件
4.main_window.cpp源代码:
5.在qnode.hpp声明一个发布者:
首先,我用了这里自带的ros UI例程,基于这个例程,我们继续编辑。
这个例程运行起来的时候是如下这个样子:
我们在白色编辑框里面添加一个按钮,来进行相关控制,例如发布一个消息等。
我们这里添加一个按钮,当点击按钮时,在“xiaoche”话题上发布一个表示小车状态的消息xiaoche_status。
好的添加好UI按钮之后我们现在过去编码:
1.qnode.hpp文件
public:
void Callback(const std_msgs::StringConstPtr &submsg);
void sent_cmd();
private:
ros::Publisher xiaoche_publisher;
如下图所示:
2.qnode.cpp源码文件
bool QNode::init()
{
xiaoche_publisher = n.advertise<std_msgs::String>("xiaoche", 1000);
}
bool QNode::init(const std::string &master_url, const std::string &host_url)
{
xiaoche_publisher = n.advertise<std_msgs::String>("xiaoche", 1000);
}
void QNode::Callback1(const std_msgs::StringConstPtr &submsg)
{
log_sub(Info, std::string("Success sub:")+submsg->data.c_str());
}
void QNode::sent_cmd1()
{
if(ros::ok())
{
std_msgs::String xiaoche_status;
xiaoche_status.data = "hello";
xiaoche_publisher.publish(xiaoche_status);
log(Info,std::string("I sent: ")+xiaoche_status.data);
ros::spinOnce();
}
}
3.main_window.hpp头文件
public Q_SLOTS:
void pub_cmd1();
private:
QNode qnode;
如下图:
4.main_window.cpp源代码:
MainWindow::MainWindow(int argc, char** argv, QWidget *parent)
: QMainWindow(parent)
, qnode(argc,argv)
{
QObject::connect(ui.fabu, SIGNAL(clicked()), this, SLOT(pub_cmd1()));
}
void MainWindow::pub_cmd1()
{
qnode.sent_cmd1();
}
如下图:
5.在qnode.hpp声明一个发布者:
ros::Publisher xiaoche_publisher;
如下图:
然后代码就修改完成了。