天天看點

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的按鍵控制例程

然後代碼就修改完成了。