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

#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

说明:.cpp 文件都是放在工作包里面的src目录下的,所以要先进入到工作包里面的src目录才能新建.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、给定一个线速度与角速度值,小海龟便能动起来

在这里插入图片描述

12、补充几个常用快捷键

1)Tab

用来补全命令或者文件夹名、节点名等

2)Ctrl+C

结束节点/命令的运行

3)Ctrl+L

清屏,相当于“clear”。但是不是删除,滑动鼠标滚轮还是可以找到之前输入的内容

4)Ctrl+Alt+T

打开一个新的终端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值