天天看点

ubuntu下基于QT+ROS的按键控制例程

目录

​​1.qnode.hpp文件​​

​​2.qnode.cpp源码文件​​

​​3.main_window.hpp头文件​​

​​4.main_window.cpp源代码:​​

​​5.在qnode.hpp声明一个发布者:​​

首先,我用了这里自带的ros UI例程,基于这个例程,我们继续编辑。

ubuntu下基于QT+ROS的按键控制例程

这个例程运行起来的时候是如下这个样子:

ubuntu下基于QT+ROS的按键控制例程

我们在白色编辑框里面添加一个按钮,来进行相关控制,例如发布一个消息等。

ubuntu下基于QT+ROS的按键控制例程

我们这里添加一个按钮,当点击按钮时,在“xiaoche”话题上发布一个表示小车状态的消息xiaoche_status。

好的添加好UI按钮之后我们现在过去编码:

1.qnode.hpp文件

public:
    void Callback(const std_msgs::StringConstPtr &submsg); 
    void sent_cmd();
private:
    ros::Publisher xiaoche_publisher;      

如下图所示:

ubuntu下基于QT+ROS的按键控制例程

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;      

如下图:

ubuntu下基于QT+ROS的按键控制例程

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();
}      

如下图:

ubuntu下基于QT+ROS的按键控制例程

5.在qnode.hpp声明一个发布者:

ros::Publisher xiaoche_publisher;      

如下图:

ubuntu下基于QT+ROS的按键控制例程

然后代码就修改完成了。