0
点赞
收藏
分享

微信扫一扫

#QT实现UI界面控制小海龟

萨摩斯加士奇 2022-04-03 阅读 105
ubuntu

#QT实现UI界面控制小海龟

##1、启动终端(Ctrl+Alt+T),新建一个工作空间

lzw08@ubuntu:~$ mkdir -p ros_ws/src

说明:mkdir是新建一个文件夹/目录的命令,-p表示可以创建多级目录,即在文件夹”ros_ws“内再创建一个”src“文件夹。

##2、进入工作空间并对其进行编译(catkin_make)

lzw08@ubuntu:~$ cd ros_ws
lzw08@ubuntu:~/ros_ws$ catkin_make

说明:编译完成后ros_ws里面会出现两个新的文件夹devel和build,这时ros_ws才称得上是真正意义上的工作空间。
在这里插入图片描述

##3、进入src文件夹内创建工作包

lzw08@ubuntu:~/ros_ws$ cd src
lzw08@ubuntu:~/ros_ws/src$ catkin_create_pkg turtle roscpp rospy std_msgs

说明:所谓的工作包也是文件夹,它必须创建在工作空间内的src里面。catkin_create_pkg是创建工作包的命令,“turtle”是工作包的名字,后面跟的都是工作包的依赖。
在这里插入图片描述
创建完工作包后,它里面包含上图四个部分,其中,src是用来放置.cpp文件的,CMakeLists.txt里面写了很多内容,编译时根据其里面写的编译规则进行编译。

##4、新建C++代码,实现UI界面
1)新建.cpp文件

lzw08@ubuntu:~/ros_ws/src/turtle$ cd src
lzw08@ubuntu:~/ros_ws/src/turtle/src$ touch turtle_qt.cpp
2)打开.cpp文件并粘贴代码
lzw08@ubuntu:~/ros_ws/src/turtle/src$ gedit turtle_qt.cpp
#include <iostream> 
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "geometry_msgs/Twist.h"
#include <QtWidgets>
#include <QApplication>

  using namespace std;
  const ros::Publisher *publisherPtr;
  QLineEdit *editLinear;
  QLineEdit *editDegrees;
  QPushButton *btnSend;

  void btnClicked() 
  {
	double linearX = editLinear->text().toDouble();
	double angularZ = editDegrees->text().toDouble();

	//创建消息
	geometry_msgs::Twist twist;
	//填充消息
	twist.linear.x = linearX;
	twist.angular.z = angularZ * M_PI / 180;
	//发送消息
	publisherPtr->publish(twist);
  }

  int main(int argc, char **argv) 
  {
	// 创建节点
	string nodeName = "turtle_qt";
	ros::init(argc, argv, nodeName);
	ros::NodeHandle node;

	//通过节点创建发布者
	string topicName = "/turtle1/cmd_vel";
	const ros::Publisher &publisher = node.advertise<geometry_msgs::Twist>(topicName, 1000);
	publisherPtr = &publisher;

	//创建Qt Application
	QApplication app(argc, argv);
	QWidget window;

	// 设置窗体样式
	window.resize(400, 0);
	window.setWindowTitle("智能机器⼈实验室——海⻳机器⼈控制UI界⾯");

	// 设置布局
	QFormLayout *layout = new QFormLayout();
	window.setLayout(layout);
	
	editLinear = new QLineEdit();
	editLinear->setText("0.0");
	layout->addRow("线速度", editLinear);
	
	editDegrees = new QLineEdit();
	editDegrees->setText("0.0");
	layout->addRow("⻆速度", editDegrees);

	btnSend = new QPushButton("发送");
	layout->addRow(btnSend);

	//显⽰窗体
	window.show();
	
	//点击事件
	btnSend->connect(btnSend, &QPushButton::clicked, &window, btnClicked);

	return app.exec();
  }

##5、点击右上角的保存,然后关闭.cpp文件

##6、回到上级目录,即工作包里面,修改CMakeLists.txt文件

lzw08@ubuntu:~/ros_ws/src/turtle/src$ cd ..
lzw08@ubuntu:~/ros_ws/src/turtle$ gedit CMakeLists.txt 

1)把右下角的“显示行号”打开:
在这里插入图片描述
2)第24行敲回车,粘贴以下代码:

##############################################################################
# Qt Environment
##############################################################################
set(CMAKE_INCLUDE_CURRENT_DIR ON) 
set(CMAKE_AUTOMOC ON) 
find_package(Qt5 COMPONENTS Core Gui Widgets PrintSupport)
##############################################################################

在这里插入图片描述
3)第144行注释打开,改成下图:
在这里插入图片描述
说明:turtle_qt是节点名,turtle_qt.cpp即步骤4新建的C++代码。

4)第157行~163行改为下图:

   Qt5::Core 
   Qt5::Gui 
   Qt5::Widgets 
   Qt5::PrintSupport

改完之后点击右上角的保存,然后关闭。

##7、回到工作空间下编译

lzw08@ubuntu:~/ros_ws/src/turtle$ cd ~
lzw08@ubuntu:~$ cd ros_ws
lzw08@ubuntu:~/ros_ws$ catkin_make

在这里插入图片描述
编译完成没错误就可以运行了。

##8、配置环境,然后运行

运行前必须打开一个新的终端运行主节点(roscore),才能顺利运行(任何节点运行前都要先把主节点运行起来)

在这里插入图片描述

lzw08@ubuntu:~/ros_ws$ source devel/setup.bash
lzw08@ubuntu:~/ros_ws$ rosrun turtle turtle_qt 

##9、运行结果是一个UI界面
在这里插入图片描述
##10、把小海龟运行起来,就可以利用UI界面控制它动起来

lzw08@ubuntu:~$ rosrun turtlesim turtlesim_node

在这里插入图片描述
##11、给定一个线速度与角速度值,小海龟便能动起来
在这里插入图片描述

#补充几个常用快捷键
1)Tab
用来补全命令或者文件夹名、节点名等
2)Ctrl+C
结束节点/命令的运行
3)Ctrl+L
清屏,相当于“clear”。但是不是删除,滑动鼠标滚轮还是可以找到之前输入的内容
4)Ctrl+Alt+T
打开一个新的终端

举报

相关推荐

0 条评论