Exemple #1
0
    def call(self, client, request, callback, errback):
        def inner_handler(response_msg):
            if not compas.PY3:
                # IronPython sometimes decides it's a good idea to use an old-style class
                # to pass the response_msg around, so we need to make sure we turn it into
                # a proper ServiceResponse again
                # https://github.com/compas-dev/compas_fab/issues/235
                is_old_style_class = isinstance(response_msg,
                                                types.InstanceType)
                if is_old_style_class:
                    response_msg = dict(response_msg)
            response_object = self.response_class.from_msg(response_msg)

            # Validate the response if there's a validator function assigned
            if self.validator:
                try:
                    self.validator(response_object)
                except Exception as e:
                    errback(RosValidationError(e, response_object))
                    return
            callback(response_object)

        if isinstance(request, tuple):
            request_msg = self.request_class(*request)
        else:
            request_msg = self.request_class(**request)
        srv = Service(client, self.name, self.type)
        srv.call(ServiceRequest(request_msg.msg),
                 callback=inner_handler,
                 errback=errback)
Exemple #2
0
 def run_add_angles(self, req):
     try:
         run_service = Service(self.ros_client, '/add_angles',
                               'common/AddAngles')
         run_service.call(ServiceRequest(req))
     except Exception as e:
         QMessageBox.critical(self, "错误", e.args[0])
Exemple #3
0
 def on_imu_reset(self):
     if not self.check_connect():
         return
     try:
         service = Service(self.ros_client, '/imu_reset', 'std_srvs/Empty')
         service.call(ServiceRequest({}))
     except Exception as e:
         QMessageBox.critical(self, "错误", e.args[0])
Exemple #4
0
 def on_type_changed(self, idx):
     if not self.check_connect():
         return
     try:
         service = Service(self.ros_client, '/setting/sendtype',
                           'common/SetInt')
         service.call(ServiceRequest({'number': idx}))
     except Exception as e:
         QMessageBox.critical(self, "错误", e.args[0])
Exemple #5
0
    def get_planning_scene(self, callback, components):
        """
        """
        reqmsg = GetPlanningSceneRequest(PlanningSceneComponents(components))

        def receive_message(msg):
            response = GetPlanningSceneResponse.from_msg(msg)
            callback(response)

        srv = Service(self, '/get_planning_scene',
                      'moveit_msgs/GetPlanningScene')
        request = ServiceRequest(reqmsg.msg)
        srv.call(request, receive_message, receive_message)
Exemple #6
0
    def call(self, client, request, callback, errback):
        def inner_handler(response_msg):
            callback(self.response_class.from_msg(response_msg))

        if isinstance(request, tuple):
            request_msg = self.request_class(*request)
        else:
            request_msg = self.request_class(**request)

        srv = Service(client, self.name, self.type)
        srv.call(ServiceRequest(request_msg.msg),
                 callback=inner_handler,
                 errback=errback)
def run_empty_service():
    ros_client = Ros('127.0.0.1', 9090)
    ros_client.run()

    service = Service(ros_client, '/test_empty_service', 'std_srvs/Empty')
    service.advertise(lambda req, resp: True)
    time.sleep(1)

    client = Service(ros_client, '/test_empty_service', 'std_srvs/Empty')
    client.call(ServiceRequest())

    service.unadvertise()
    time.sleep(2)
    service.ros.terminate()
Exemple #8
0
 def on_shot(self, rect: QRect):
     if not self.check_connect():
         return
     try:
         service = Service(self.ros_client, '/debug/image/snap',
                           'common/ImageSnap')
         result = service.call(
             ServiceRequest({
                 'type': self._func_combo_box.currentIndex(),
                 'info': {
                     'x': rect.topLeft().x(),
                     'y': rect.topLeft().y(),
                     'w': rect.width(),
                     'h': rect.height()
                 }
             }))
     except Exception as e:
         QMessageBox.critical(self, "错误", e.args[0])
def run_add_two_ints_service():
    ros_client = Ros('127.0.0.1', 9090)
    ros_client.run()

    def add_two_ints(request, response):
        response['sum'] = request['a'] + request['b']

        return False

    service_name = '/test_sum_service'
    service_type = 'rospy_tutorials/AddTwoInts'
    service = Service(ros_client, service_name, service_type)
    service.advertise(add_two_ints)
    time.sleep(1)

    client = Service(ros_client, service_name, service_type)
    result = client.call(ServiceRequest({'a': 2, 'b': 40}))
    assert (result['sum'] == 42)

    service.unadvertise()
    time.sleep(2)
    service.ros.terminate()
Exemple #10
0
    def call(self, client, request, callback, errback):
        def inner_handler(response_msg):
            response_object = self.response_class.from_msg(response_msg)

            # Validate the response if there's a validator function assigned
            if self.validator:
                try:
                    self.validator(response_object)
                except Exception as e:
                    errback(RosValidationError(e, response_object))
                    return

            callback(response_object)

        if isinstance(request, tuple):
            request_msg = self.request_class(*request)
        else:
            request_msg = self.request_class(**request)

        srv = Service(client, self.name, self.type)
        srv.call(ServiceRequest(request_msg.msg),
                 callback=inner_handler,
                 errback=errback)
Exemple #11
0
 def cmd_call_service(self, data):
     try:
         timeout_arg = 2.5 if data == 'date' else 36000
         dt = data + 'ukey'
         result = client_call.call(
             ServiceRequest({
                 'cmd':
                 data,
                 'md5':
                 hashlib.md5(dt.encode(encoding='utf8')).hexdigest()
             }),
             timeout=timeout_arg)  #'s'.encode(encoding='GTK')
         tmp_result = json.loads(result['result'])
         if len(tmp_result['stdout']) > 0:
             return tmp_result['stdout']
         if len(tmp_result['stderr']) > 0:
             return ["error", tmp_result['stderr']]
         # result = result['result'].split('\n')
         return tmp_result['stdout']
     except Exception as e:
         # if e.args[0] =='No service response received':
         #     return ["error", 'No service response received']
         LOGGER.info("password login ...")
Exemple #12
0
 def load_actions(self):
     self._acts_widget.clear()
     if not self.check_connect():
         return
     try:
         service = Service(self.ros_client, '/get_actions',
                           'common/GetActions')
         result = service.call(ServiceRequest({}))
         actions = result['actions']
         self._acts_widget.clear()
         for action in actions:
             litem = QListWidgetItem()
             aitem = QLabel(action)
             aitem.setFixedHeight(30)
             aitem.setStyleSheet('QLabel{margin-left: 5px;}')
             aitem.show()
             self._acts_widget.addItem(litem)
             self._acts_widget.setItemWidget(litem, aitem)
             litem.setSizeHint(
                 QSize(aitem.rect().width(),
                       aitem.rect().height()))
     except Exception as e:
         QMessageBox.critical(self, "错误", e.args[0])
Exemple #13
0
 def invoke_service():
     client = Service(ros_client, '/test_server',
                      'rospy_tutorials/AddTwoInts')
     client.call(ServiceRequest({'a': 2, 'b': 40}), check_sum, print)