我正在使用python为rqt内部的机器人设计一个UI插件。基本上,有一个按钮被称为‘去回家’按钮。一旦这个按钮被点击,我想移动机器人。请注意,每当我单击此按钮时,机器人就会移动,但是GUI会在一段时间内失去响应,这一点从编写代码的方式来看是显而易见的。请参阅下面的代码片段:
import rospy
from robot_controller import RobotController
from qt_gui.plugin import Plugin
from python_qt_binding.QtGui import QWidget, QVBoxLayout, QPushButton
class MyPlugin(Plugin):
def __init__(self, context):
super(MyPlugin, self).__init__(context)
# Give QObjects reasonable names
self.setObjectName('MyPlugin')
# Create QWidget
self._widget = QWidget()
self._widget.setObjectName('MyPluginUi')
# Create push button and connect a function
self._goto_home_button = QPushButton('Goto Home')
self._goto_home_button.clicked.connect(self.goto_home)
self._vertical_layout = QVBoxLayout()
self._vertical_layout.addWidget(self._goto_home_button.)
self._widget.setLayout(self._vertical_layout)
context.add_widget(self._widget)
# Create robot object to move robot from GUI
self._robot = RobotController()
def goto_home(self):
self._robot.move_to_joint_angles(self._joint_angles)我想在这里实现一个线程。更精确地说,如何在rqt中使用线程调用self._robot.move_to_joint_angles(self._joint_angles)。请注意,在Ubuntu14.04LTS PC上,我在ROS Indigo上使用Python2.7。
发布于 2017-11-11 06:57:23
我找到了解决办法。请参见下面的代码片段:
import thread
thread.start_new_thread(self._robot.move_to_joint_angles, (self.home_pose,))有什么更好的方法吗?
发布于 2019-06-18 07:32:08
actions将更适合于此。
但是,在某些情况下,如果执行服务需要很长时间,用户可能希望能够在执行过程中取消请求,或者获得关于请求进展情况的定期反馈。actionlib包提供了创建服务器的工具,这些服务器可以执行可以抢占的长时间运行的目标。它还提供了一个客户端接口,以便向服务器发送请求。
https://stackoverflow.com/questions/47235177
复制相似问题