声明:本插件依赖于更新的qt5.9,不需安装qt,安装插件自行安装qt。详情见点击打开链接

1、创建工程

最后点击完成即可。

2,建好后右键点击src,打开Terminal,执行指令建包catkin_create_qt_pkg btn

(预先安装建包工具,指令:sudo apt-get install ros-indigo-qt-ros)

这就建立

这就建好一个包了,点击左下角小锤子编译一下,通过。

3、然后点击project->run,添加节点如图:

4,在UI界面拖放几个按钮,并改名字,右击按钮转到槽,在主窗口cpp文件中写入qnode.up();(因为qnode里面定义的是up和left),另一按钮同理。

5主要的是qnode.cpp文件,首先在头文件中定义

然后写qnode.cpp文件

/*** @file /src/qnode.cpp** @brief Ros communication central!** @date February 2011**//*****************************************************************************
** Includes
*****************************************************************************/#include <ros/ros.h>
#include <ros/network.h>
#include <string>#include <std_msgs/String.h>
#include <geometry_msgs/Twist.h>#include <sstream>
#include "../include/btn/qnode.hpp"/*****************************************************************************
** Namespaces
*****************************************************************************/namespace btn {/*****************************************************************************
** Implementation
*****************************************************************************/QNode::QNode(int argc, char** argv ) :init_argc(argc),init_argv(argv){}QNode::~QNode() {if(ros::isStarted()) {ros::shutdown(); // explicitly needed since we use ros::start();ros::waitForShutdown();}wait();
}bool QNode::init() {ros::init(init_argc,init_argv,"btn");if ( ! ros::master::check() ) {return false;}ros::start(); // explicitly needed since our nodehandle is going out of scope.ros::NodeHandle n;// Add your ros communications here.chatter_publisher = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 1000);start();return true;
}bool QNode::init(const std::string &master_url, const std::string &host_url) {std::map<std::string,std::string> remappings;remappings["__master"] = master_url;remappings["__hostname"] = host_url;ros::init(remappings,"btn");if ( ! ros::master::check() ) {return false;}ros::start(); // explicitly needed since our nodehandle is going out of scope.ros::NodeHandle n;// Add your ros communications here.chatter_publisher = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 1000);start();return true;
}/*void QNode::run() {ros::Rate loop_rate(1);int count = 0;while ( ros::ok() ){geometry_msgs::Twist msg;msg.linear.x = 1.0;msg.angular.z = 0.0;chatter_publisher.publish(msg);//        log(Info, msg.linear.x);//        log(Info, msg.angular.z);logging_model.insertRows(logging_model.rowCount(),1);std::stringstream logging_model_msg;logging_model_msg << "[DEBUG] [" << ros::Time::now() << "]: " <<"linear = "<< msg.linear.x<<" angular = "<<msg.angular.z;QVariant new_row(QString(logging_model_msg.str().c_str()));logging_model.setData(logging_model.index(logging_model.rowCount()-1),new_row);Q_EMIT loggingUpdated(); // used to readjust the scrollbarros::spinOnce();loop_rate.sleep();++count;}*/void QNode::up() {ros::Rate loop_rate(1);if( ros::ok() ){geometry_msgs::Twist msg;msg.linear.x = 1.0;msg.angular.z = 0.0;chatter_publisher.publish(msg);ros::spinOnce();loop_rate.sleep();}
}void QNode::left() {ros::Rate loop_rate(1);if ( ros::ok() ){geometry_msgs::Twist msg;msg.linear.x = 0.0;msg.angular.z = 1.0;chatter_publisher.publish(msg);ros::spinOnce();loop_rate.sleep();}//std::cout << "Ros shutdown, proceeding to close the gui." << std::endl;//Q_EMIT rosShutdown(); // used to signal the gui for a shutdown (useful to roslaunch)
}void QNode::log( const LogLevel &level, const std::string &msg) {logging_model.insertRows(logging_model.rowCount(),1);std::stringstream logging_model_msg;switch ( level ) {case(Debug) : {ROS_DEBUG_STREAM(msg);logging_model_msg << "[DEBUG] [" << ros::Time::now() << "]: " << msg;break;}case(Info) : {ROS_INFO_STREAM(msg);logging_model_msg << "[INFO] [" << ros::Time::now() << "]: " << msg;break;}case(Warn) : {ROS_WARN_STREAM(msg);logging_model_msg << "[INFO] [" << ros::Time::now() << "]: " << msg;break;}case(Error) : {ROS_ERROR_STREAM(msg);logging_model_msg << "[ERROR] [" << ros::Time::now() << "]: " << msg;break;}case(Fatal) : {ROS_FATAL_STREAM(msg);logging_model_msg << "[FATAL] [" << ros::Time::now() << "]: " << msg;break;}}QVariant new_row(QString(logging_model_msg.str().c_str()));logging_model.setData(logging_model.index(logging_model.rowCount()-1),new_row);Q_EMIT loggingUpdated(); // used to readjust the scrollbar
}}  // namespace btn

最后,编译运行就可以了,(首先加入turtlesim小乌龟的节点,然后启动roscore欧)。点击connect连接,就可以按键控制了。


PS:1、头文件包含问题:

用插件创建或导入ROS package之后还需要修改.workspace文件,

<IncludePaths>标签下加入下面这行

<Directory>/opt/ros/indigo/include</Directory>
  • 1

这样就可以使得Qt找到ros头文件,比如<ros/ros.h>

2,connect前一定要、一定要在use environment variable前打钩或者输入ROS IP。

在此非常感谢我的小伙伴的帮助。

借鉴自:

1、http://blog.csdn.net/yaked/article/details/45342137

2、http://blog.csdn.net/u013453604/article/details/52186375

3、http://blog.csdn.net/qq_30460905/article/details/79034633

Qt-ros插件:创建工程,编译实现操控小乌龟(二)相关推荐

  1. Windows Java JavaFX IntelliJ IDEA 开发环境搭建 创建工程 编译运行 打包分发 自定义运行时

    博文目录 文章目录 本文说明 JavaFX 简单说明 JavaFX 版本说明 JavaFX 与 JDK 的关系 JavaFX 与 JDK Modular (JDK 9 模块化系统) JavaFX 模块 ...

  2. arm qt mysql插件_Ubuntu下编译ARM平台Qt的MySQL插件

    最近需要将一个程序移植到arm平台上,程序调用了MySQL数据库,所以就牵扯到将MySQL数据库移植到ARM平台上面,所以在网上大量查阅资料.在baidu文库发现了一篇文档,是wlzxlc上传的文档名 ...

  3. 【inpho精品教程】02 创建工程

    [inpho精品教程]02 创建工程 本文讲解利用ApplicationsMaster 8.0创建无人机获取的影像工程,包括相机的创建,影像数据.POS信息.控制点数据的导入,航带的创建等相关内容. ...

  4. 【Metashape精品教程2】创建工程

    [Metashape精品教程2]创建工程 文章目录 [Metashape精品教程2]创建工程 前言 一.导入照片 二.导入pos 三.设置相机参数(没有可不设置,让软件反算相机参数) 四.导入控制点 ...

  5. x86架构与ARM架构(AGX、TX2、NX等)下配置带ROS插件的QtCreator(Qt+ROS+ubuntu18)(源码编译安装方式)

    在之前的一篇文章里面提到了Qt+ROS+ubuntu18环境的搭建,但是那种方法不适用于arm架构的电脑,原因是x86架构和arm架构的cpu指令集不一样,导致下载下来的可执行文件只能在x86架构运行 ...

  6. 第1章 Qt概述和下载安装及创建工程

    目录 1.1 什么是Qt 1.2 Qt的下载及安装 1.3 开发界面及创建工程介绍 1.1 什么是Qt 学习一项技能,首先要了解一下这项技能能做什么,那Qt到底是什么,能用它做什么呢? Qt是什么?简 ...

  7. Qt_Window@Qt Command Prompt从命令行创建工程

    #include <QApplication> #include <QLabel>int main(int argc, char *argv[]) {QApplication ...

  8. ROS: catkin和rosmake创建和编译功能包、执行节点

    ROS: catkin和rosmake创建和编译功能包 1.编译功能包 在工作空间的根目录下执行编译才行,比如我工作空间根目录是/home/kandi/catkin_ws 2.编译生成目标文件 这里以 ...

  9. Android NDK工程创建与编译运行

    首发地址:http://www.eoeandroid.com/thread-201993-1-1.html 一. 工程创建 1. 创建一个Android工程 配置好开发环境并加载好对应版本sdk后,选 ...

最新文章

  1. 中南大学计算机有网络安全,中南大学2019年大学生网络安全知识竞赛(复赛)成功举行...
  2. html与css项目,项目六HTML与CSS基础.doc
  3. ios应用,64位问题,Missing 64-bit support
  4. ajax和jsonp
  5. QT下 cannot find -IGL的解决办法
  6. 判断网页pdf还是html,html5 – 如何知道PDF.JS是否完成渲染?
  7. python中return返回值为函数名_Python函数返回值
  8. IOS 为UILabel添加长按复制功能
  9. LeetCode:2. 两数相加(中等)
  10. mesos,marthon集群部署详细步骤
  11. BZOJ 2756: [SCOI2012]奇怪的游戏
  12. 邮箱是互联网的个人中心
  13. 入驻就有收益的自媒体平台:趣头条
  14. linux unip命令
  15. 使用jstack排查java应用占用内存过高问题
  16. html插入腾讯视频自动播放,腾讯视频代码在哪里 腾讯视频嵌入网页的方法
  17. 去掉word中的页眉
  18. 程序员面试金典(第 6 版)
  19. 【PTC Thingworx(三)】连接和监控工厂设备
  20. LaTex算法代码排版-algorithm2e

热门文章

  1. 如何保持空域与频域滤波结果的一致性
  2. 使用word完成毕业论文的所有详细步骤
  3. makefile文件的一些解读
  4. 十四、“沥沥雨丝如落泪,麻麻密密总为愁。”(2021.5.2)
  5. 12 月机器学习新书:《可解释机器学习方法的局限》,免费下载!
  6. pyecharts line_base绘图只有坐标轴,数据不再数轴上显示
  7. vue手机端回退_vue移动端弹框组件,vue-layer-mobile
  8. Windows下配置环境变量和需不需要重启?
  9. 我也聊聊串口通信协议:用户层通信协议的编制
  10. Linux中su命令详解