技術分享 | 還不來看!!! 讓ROS人機交互更加有趣--基於Qt+ROS開發

前言

相信很多做機器人人機交互界面開發的相關的人員都會接觸或使用Qt,在ros的wiki上也存在着qt_ros的使用方案,但是界面大多數都以UI文件爲主,但是有時候這並不能滿足我們的需求,我們需要開發的界面更加炫酷,或者增加一些動畫效果,這時候我們就可以使用使用QML進行混合開發,接下來我們就給大家介紹一下在Qt中開發人機交互界面中使用QML來渲染界面以便於製作更多圖形特效。

操作步驟: 1、 創建一個qt_ros功能包。

2、 修改功能包下的CMakeList.txt文件 在find_package()中添加QuickWidgets 在set()中添加Qt5::QuickWidgets 在添加Qt模塊時如果發現該模塊找不到,可以通過命令sudo apt-get install qtxxxxxxx-dev解決。

3、 創建qml文件,並且將其加入到資源文件中,然後進行qml文件的編寫。

4、 在ui設計中選擇QQuickWidget控件 可以在屬性中添加qml文件,也可以使用setSource函數進行添加。

5、 運行,這時可能會報錯 提示:module "Qtxxxxxx" is not installed 解決方案:sudo apt-get install qml-module-qtxxxxxx。

6、 然後再次進行編譯就可以發現qml文件實現在空間QQuickWidget中了。

7、 C++與QML進行交互 在這種情況下,使用信號與槽方法是可以進行交互的。 首先,在C++文件中添加頭文件

#include <QQuickItem> #include <QQuickView> QObject *root = ui->quickWidget->rootObject(); QObject::connect(this,SIGNAL(set(double,double)),root,SIGNAL(test(double,double)));//信號連接信號 QObject::connect(root,SIGNAL(clickedMap(double,double)),this,SLOT(onMap(double,double))); xx.qml

signal test(double value1,double value2); signal clickedMap(double value1,double value2); onTest:{ }

在cpp文件中觸發set(double,double)信號後會出發qml中的test信號然後調用到qml中的onTest:{} 而在qml文件中使用clickedMap(double value1,double value2)也會調用到cpp文件中綁定的槽函數。

上述操作完成即可進行交互。

案例展示: 用qml實現了一個可緩存的離線地圖,然後在通過無人機的實時經緯度在地圖上進行無人機圖標的移動和標記航線以及根據偏航角的改變對應改變地圖上無人機圖標的偏航角。 原文視頻演示: https://mp.weixin.qq.com/s?__biz=MzIwNzgxNzg0Mg==&mid=2247514202&idx=1&sn=e866fd6cceed3b604098ce305d00ae60&chksm=970e6547a079ec5176622c95a2cf2bc68c588ab3adbc803e79cd1bab4931cfa6b6f0c7ee287a&token=570123199&lang=zh_CN#rd

由於是在室內沒有gps信號,所以通過rqt來發布經緯度信息,使其存在一個具有動畫效果的移動,然後通過轉動無人機使其發佈對應偏航角然後在地圖上的無人機圖標進行相應偏航角的移動。

  • End -

技術發展的日新月異,阿木實驗室將緊跟技術的腳步,不斷把機器人行業最新的技術和硬件推薦給大家。看到經過我們培訓的學員在技術上突飛猛進,是我們培訓最大的價值。如果你在機器人行業,就請關注我們的公衆號,我們將持續發佈機器人行業最有價值的信息和技術。

阿木實驗室致力於前沿IT科技的教育和智能裝備,讓機器人研發更高效!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章