技术分享 | 还不来看!!! 让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 #include 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实现了一个可缓存的离线地图,然后在通过无人机的实时经纬度在地图上进行无人机图标的移动和标记航线以及根据偏航角的改变对应改变地图上无人机图标的偏航角。 原文视频演示: mp.weixin.qq.com/s?__biz=MzI…

由于是在室内没有gps信号,所以通过rqt来发布经纬度信息,使其存在一个具有动画效果的移动,然后通过转动无人机使其发布对应偏航角然后在地图上的无人机图标进行相应偏航角的移动。

  • End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!

猜你喜欢

转载自juejin.im/post/7039921962600103950