百度云链接失效了,上传了github:https://github.com/1508912767/ros_car 和https://github.com/1508912767/ros_car_py
每次做实验的时候,手动rosrun,roslaunch太过麻烦,通过 ui界面的话,只需要点点按钮就可以啦
ros_car_py包括运动,建图,导航,ui界面的程序全部打包上传,相互依赖关系见ros_car_py包。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import os
import paramiko
# 控制小车运动,启动服务器线程
class WorkThread(QThread):
"""
使用 pyqtsignalo函数创建信号时,信号可以传递多个参数,并指定信号传递参
数的类型,参数类型是标准的 Python数据类型(字符串、日期、布尔类型、数字、
列表、元组和字典)
"""
# 写在这里是有讲究的,类外也用到了这个trigger
trigger = pyqtSignal()
def __int__(self):
super(WorkThread, self).__init__()
def run(self):
os.system(
"gnome-terminal -x bash -c 'source ~/catkin_ws/devel/setup.bash; roslaunch ros_car_py car_running.launch'"
)
# 循环完毕后发出信号
self.trigger.emit()
# 使用ssh连接板子,启动客户端线程
class WorkThreadA(QThread):
trigger = pyqtSignal()
def __int__(self):
super(WorkThreadA, self).__init__()
self.hostname = "192.168.7.2"
self.port = 22
self.username = "root"
self.password = ""
self.execmd = "python"
def run(self):
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname=self.hostname, port=self.port, username=self.username, password=self.password)
stdin, stdout, stderr = s.exec_command(self.execmd)
stdin.write("Y") # Generally speaking, the first connection, need a simple interaction.
# print(stdout.read())
s.close()
# 循环完毕后发出信号
self.trigger.emit()
# 启动建图线程
class WorkThreadB(QThread):
trigger = pyqtSignal()
def __int__(self):
super(WorkThreadB, self).__init__()
def run(self):
os.system(
"gnome-terminal -x bash -c 'source ~/catkin_ws/devel/setup.bash; roslaunch ros_car_py car_gmapping.launch'"
)
# 循环完毕后发出信号
self.trigger.emit()
# 启动导航线程
class WorkThreadC(QThread):
trigger = pyqtSignal()
def __int__(self):
super(WorkThreadC, self).__init__()
def run(self):
os.system(
"gnome-terminal -x bash -c 'source ~/catkin_ws/devel/setup.bash; roslaunch ros_car_py car_navigation.launch'"
)
# 循环完毕后发出信号
self.trigger.emit()
# 显示小车状态,速度信息窗口
class ThirdWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("小车的速度状态")
self.resize(600, 300)
self.center()
# 实例化指针
self.pointer = QPixmap()