Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rqt ROS Python中的线程_Python_Multithreading_Ros_Rqt - Fatal编程技术网

rqt ROS Python中的线程

rqt ROS Python中的线程,python,multithreading,ros,rqt,Python,Multithreading,Ros,Rqt,我正在使用python为robot inside设计一个UI插件。基本上,有一个按钮被称为“转到主页”按钮。单击此按钮后,我想移动机器人。请注意,每当我单击此按钮时,机器人都会移动,但GUI会有一段时间没有响应,从编写代码的方式可以明显看出这一点。请参阅下面的代码片段: import rospy from robot_controller import RobotController from qt_gui.plugin import Plugin from python_qt_binding

我正在使用python为robot inside设计一个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)

我想在这里实现一个线程。更精确地说,如何调用
self.\u robot。使用rqt中的线程将\u移动到\u关节角度(self.\u关节角度)
。请注意,我正在Ubuntu 14.04 LTS PC上使用ROS Indigo中的Python 2.7。

我找到了一个解决方法。请参阅下面的代码片段:

import thread
thread.start_new_thread(self._robot.move_to_joint_angles, (self.home_pose,))

有更好的方法吗?

我找到了一个解决办法。请参阅下面的代码片段:

import thread
thread.start_new_thread(self._robot.move_to_joint_angles, (self.home_pose,))
有更好的方法吗?

更适合这样做

但是,在某些情况下,如果服务需要很长时间才能执行,用户可能希望能够在执行期间取消请求,或者获得关于请求进展情况的定期反馈。actionlib包提供了创建服务器的工具,这些服务器执行可抢占的长期目标。它还提供了一个客户端接口,以便向服务器发送请求

这样更合适

但是,在某些情况下,如果服务需要很长时间才能执行,用户可能希望能够在执行期间取消请求,或者获得关于请求进展情况的定期反馈。actionlib包提供了创建服务器的工具,这些服务器执行可抢占的长期目标。它还提供了一个客户端接口,以便向服务器发送请求