def ping(self, timeout=10): """Ping ABB robot controller. Parameters ---------- client : :class:`compas_rrc.AbbClient` Client connected to controller. timeout : :class:`float`, optional Timeout for reply. Defaults to ``10``. Raises ------ :exc:`TimeoutError` If no reply is returned before timeout. """ self.send_and_wait(Noop(feedback_level=FeedbackLevel.DONE), timeout=timeout)
def ping(client, timeout=10): """Ping ABB robot controller. Parameters ---------- client : :class:`compas_rrc.AbbClient` Client connected to controller. timeout : :class:`float`, optional Timeout for reply. Defaults to ``10``. Raises ------ :exc:`TimeoutError` If no reply is returned before timeout. """ feedback = client.send(Noop(feedback_level=FeedbackLevel.DONE)) try: return feedback.result(timeout=timeout) except Exception as e: if e.args[0] == "Timeout: future result not available": raise TimeoutError(e.args) else: raise
def std_move_to_frame( frame, tool="tool0", wobj="wobj0", motion_type=Motion.LINEAR, speed=200, accel=100, zone=Zone.FINE, timeout=None, ): """Move robot arm to target or targets. Parameters ---------- frame : :class:`compas.geometry.Frame` or :obj:`list` of :class:`compas.geometry.Frame` Target frame or frames. tool : :obj:`str` Name of tool as named in RAPID code on controller to use for TCP data. wobj : :obj:`str` Name of work object as named in RAPID code on controller to use for coordinate system. motion_type : :class:`compas_rrc.Motion` Motion type, either linear (:class:`~compas_rrc.Motion.LINEAR`) or joint (:class:`~compas_rrc.Motion.JOINT`). speed : :obj:`float` TCP speed in mm/s. Limited by hard coded max speed in this function as well as safety systems on controller. accel : :obj:`float` Acceleration in percentage of standard acceleration. zone : :class:`compas_rrc.Zone` Set zone value of movement, (acceptable deviation from target). timeout : :obj:`float` Time to wait for indication of finished movement. If not defined no feedback will be requested. """ # noqa: E501 if not isinstance(frame, Sequence): frames = [frame] else: frames = frame with RosClient() as ros: # Create ABB Client abb = AbbClient(ros) abb.run(timeout=5) abb.send(SetTool(tool)) abb.send(SetWorkObject(wobj)) # Set acceleration data ramp = 100 # % Higher values makes the acceleration ramp longer abb.send(SetAcceleration(accel, ramp)) # Set speed override and max speed speed_override = 100 # % max_tcp_speed = 500 # mm/s abb.send(SetMaxSpeed(speed_override, max_tcp_speed)) # Move to Frame for f in frames: abb.send( PrintText(" Moving to {:.3f}, {:.3f}, {:.3f}.".format( *f.point.data))) abb.send(MoveToFrame(f, speed, zone, motion_type)) if timeout: abb.send_and_wait(Noop(), timeout=timeout)