Пример #1
0
 def set_zero(self):
     """
     Аппаратная установка точки начала отсчета
     """
     # something to set zero position on manipulator
     self.current_position = Point(0, 0, 0)
     print("Set zero.")
Пример #2
0
    def __init__(self):
        """
        :param host: локальный хост севера Telnet
        :param telnet_username: имя пользователя на сервере
        :param telnet_password: пароль пользователя
        :param moving_speed: начальная скорость перемещения по всем осям.
        """

        self.tx = 0
        self.ty = 0
        self.tz = 0
        self.current_position = Point(0, 0, 0)
        self.program_zero = Point(0, 0, 0)
        print("Manipulator initialisation")
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.connect(("127.0.0.1", 9105))
        sleep(1)
        t = self.socket.recv(4096)
        sleep(1)
        self.socket.sendall(b"as\n")
        sleep(1)
        t = self.socket.recv(4096)
        sleep(1)
        print("logged: " + t.decode("utf-8"))
        sleep(1)
        self.socket.sendall(b"ZPOW ON\n")
        sleep(1)
        t = self.socket.recv(4096)
        sleep(1)
Пример #3
0
 def __init__(self, host: str, telnet_username: str, telnet_password: str):
     """
     :param host: локальный хост севера Telnet
     :param telnet_username: имя пользователя на сервере
     :param telnet_password: пароль пользователя
     :param moving_speed: начальная скорость перемещения по всем осям.
     """
     self.__host = host
     self.__user_name = telnet_username
     self.__password = telnet_password
     self.current_position = Point(0, 0, 0)
     self.program_zero = Point(0, 0, 0)
     print("Manipulator initialisation")
Пример #4
0
 def __sub__(self, other: Point or Iterable or Vector):
     if type(other) == Vector:
         return Vector(self.start_point - other.start_point, self.end_point - other.end_point)
     other = Point.check_Point(other)
     start = self.start_point - other
     end = self.end_point - other
     return Vector(start, end)
Пример #5
0
 def set_length(self, new_len: float or int) -> None:
     """
     Устанавливает новую длинну вектора, сохраняя направление вектора.
     Не изменяет положение начальной точки!!!
     :param new_len: новая длина вектора.
     """
     rad = self.radius_vector()
     cof = new_len / self.length()
     rad *= cof
     if (rad.z is not None):
         vec = Vector(Point(0, 0, 0), rad)
     else:
         vec = Vector(Point(0, 0), rad)
     vec.move_to_point(self.start_point)
     # self.start_point *= cof
     self.end_point = vec.end_point
Пример #6
0
 def move_to_point(self, new_start_point: Point or Iterable) -> None:
     """
     Перемещает начало вектора к заданной точке.
     :param new_start_point: Точка куда необходимо перенести вектор.
     """
     new_start_point = Point.check_Point(new_start_point)
     dif_val = self.start_point - new_start_point
     self.start_point -= dif_val
     self.end_point -= dif_val
Пример #7
0
    def __init__(self, point1: Point or Iterable, point2: Point or Iterable = None):
        """
        Создает вектор плоскости. Если дана только одна точка, то вектор счетается радиус-вектором(начало в (0,0)).
        :param point1: Точка начала вектора относительно С.О.
        :param point2: Точка конца вектора относительно С.О.
        """
        point1 = Point.check_Point(point1)

        if type(point2) is None:
            if point1.z is None:
                self.start_point: Point = Point(0, 0)
            else:
                self.start_point: Point = Point(0, 0, 0)
            self.end_point: Point = point1
        else:
            point2 = Point.check_Point(point2)
            if (point1.z is None and point2.z is None) or (point1.z is not None and point2.z is not None):
                self.start_point: Point = point1
                self.end_point: Point = point2
            else:
                raise TypeError("Flat and 3D points used in one Vector obj.")
Пример #8
0
 def get_current_position(self):
     """
     получить текущую позицию
     """
     self.socket.sendall(b"point a = here\n")
     sleep(1)
     t = self.socket.recv(4096)
     input_data = (t.decode().split())
     x = input_data[10]
     y = input_data[11]
     z = input_data[12]
     self.x = x
     self.y = y
     self.z = z
     self.tx = input_data[13]
     self.ty = input_data[14]
     self.tz = input_data[15]
     print(self.x, self.y, self.z, self.tx, self.ty, self.tz)
     return Point(x, y, z)
Пример #9
0
class Manipulator(MovingSystem):
    def __init__(self, host: str, telnet_username: str, telnet_password: str):
        """
        :param host: локальный хост севера Telnet
        :param telnet_username: имя пользователя на сервере
        :param telnet_password: пароль пользователя
        :param moving_speed: начальная скорость перемещения по всем осям.
        """
        self.__host = host
        self.__user_name = telnet_username
        self.__password = telnet_password
        self.current_position = Point(0, 0, 0)
        self.program_zero = Point(0, 0, 0)
        print("Manipulator initialisation")

    def move_to_point(self,
                      x: float or Point = None,
                      y: float = None,
                      z: float = None,
                      tx: float = None,
                      ty: float = None,
                      tz: float = None):
        """
        Метод перемешения "головы" в звданную точку.
        :param x: Координата по X
        :param y: Координата по Y
        :param z: Координата по Z
        :param tx: Угол отклонения от оси OX
        :param ty: Угол отклонения от оси OY
        :param tz: Угол отклонения от оси OZ
        :return:
        """
        print(f'Move to point:({x}, {y}, {z})')

    def set_start_height(self):
        """
        Аппаратная установка высоты работы
        """
        pass

    def pick(self):
        """
        Реализация захвата детали (опустились, зажали, подняли)
        """
        pass

    def setup(self):
        """
        Реализация установки детали
        """
        pass

    def set_custom_angle(self):
        """
        Отклонение на нужный нам угол
        """

    def set_default_angle(self):
        """
        Задается начальный угол(параллельное столу положение)
        """
        pass

    def set_zero(self):
        """
        Аппаратная установка точки начала отсчета
        """
        # something to set zero position on manipulator
        self.current_position = Point(0, 0, 0)
        print("Set zero.")

    def set_program_zero(self):
        """
        Программная установка положения точки начала отсчета
        """
        self.program_zero = self.current_position.copy()
        print("Set zero.")

    def move_by_vector(self, point: Point or Vector):
        """
        Смещение на вектор
        """
        print(f"Move")

    def get_pos(self) -> Point:
        pass
Пример #10
0
class Manipulator(MovingSystem):
    def __init__(self):
        """
        :param host: локальный хост севера Telnet
        :param telnet_username: имя пользователя на сервере
        :param telnet_password: пароль пользователя
        :param moving_speed: начальная скорость перемещения по всем осям.
        """

        self.tx = 0
        self.ty = 0
        self.tz = 0
        self.__host = host
        self.__user_name = telnet_username
        self.__password = telnet_password
        self.port = telnet_port
        self.current_position = Point(0, 0, 0)
        self.program_zero = Point(0, 0, 0)

        self.telnet_host = tn.Telnet(self.__host, self.port)
        self.telnet_host.read_all()
        self.telnet_host.write(self.__user_name.encode() + b"\n" + b"\n")
        self.telnet_host.read_all()
        self.telnet_host.write(b"\n" + b"\n")
        self.telnet_host.read_all()
        print("Manipulator initialisation")
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.connect(("127.0.0.1", 9105))
        sleep(1)
        t = self.socket.recv(4096)
        sleep(1)
        self.socket.sendall(b"as\n")
        sleep(1)
        t = self.socket.recv(4096)
        sleep(1)
        print("logged: " + t.decode("utf-8"))
        sleep(1)
        self.socket.sendall(b"ZPOW ON\n")
        sleep(1)
        t = self.socket.recv(4096)
        sleep(1)

    def move_to_point(self,
                      x: float or Point = None,
                      y: float = None,
                      z: float = None,
                      tx: float = None,
                      ty: float = None,
                      tz: float = None):
        """
        Метод перемешения "головы" в звданную точку.
        :param x: Координата по X
        :param y: Координата по Y
        :param z: Координата по Z
        :param tx: Угол отклонения от оси OX
        :param ty: Угол отклонения от оси OY
        :param tz: Угол отклонения от оси OZ
        :return:
        """
        self.socket.sendall(b"point a\n")
        sleep(1)
        t = self.socket.recv(4096)
        sleep(1)
        command = f"{x},{y},{z},0,180,-90"
        print(command)
        self.socket.sendall(command.encode() + b"\n" + b"\n")
        sleep(1)
        print("point set: " + t.decode("utf-8"))
        sleep(1)
        self.socket.sendall(b"do jmove a\n")
        sleep(1)
        t = self.socket.recv(4096)
        sleep(1)
        print("done a move: " + t.decode("utf-8"))
        # if type(x) == Point:
        #     print(f"Moving to point -> {x}")
        #     self.current_position = x
        # else:
        #     print(f"Moving to point -> ({x}, {y}, {z})")
        #     position = Point((0, 0, 0))
        #     if x is not None:
        #         position.x = x + self.program_zero.x
        #     else:
        #         position.x = self.current_position.x + self.program_zero.x
        #     if y is not None:
        #         position.y = y + self.program_zero.y
        #     else:
        #         position.y = self.current_position.y + self.program_zero.y
        #     if z is not None:
        #         position.z = z + self.program_zero.z
        #     else:
        #         position.z = self.current_position.z - self.program_zero.z
        #     self.current_position = position

    def send_command(self, command):
        """
        отправка команды через телнет
        """
        # command1 = "point a"
        # command2 = "0,700,-400,90,180,0"
        # command3 = "do jmove a"
        # self.telnet_host.write(command1.encode() + b"\n")
        # self.telnet_host.write(command2.encode() + b"\n" + b"\n")
        self.telnet_host.write(command.encode() + b"\n")

    def set_start_height(self):
        """
        Аппаратная установка высоты работы
        """

    def pick(self):
        """
        Реализация захвата детали (опустились, зажали, подняли)
        """

    def setup(self):
        """
        Реализация установки детали
        """

    def set_custom_angle(self, angle):
        """
        Отклонение на нужный нам угол
        """
        self.get_current_position()
        command = "point a"
        self.telnet_host.write(command.encode() + b"\n")
        command = f"{self.x},{self.y},{self.z},0,180,{angle}"
        self.telnet_host.write(command.encode() + b"\n" + b"\n")
        command = f"do jmove a"
        self.telnet_host.write(command.encode() + b"\n")

    def set_default_angle(self):
        """
        Задается начальный угол(параллельное столу положение)
        """

    def set_zero(self):
        """
        Аппаратная установка точки начала отсчета
        """
        # something to set zero position on manipulator
        self.current_position = Point(0, 0, 0)
        print("Set zero.")

    def set_program_zero(self):
        """
        Программная установка положения точки начала отсчета
        """
        self.program_zero = self.current_position.copy()
        print("Set zero.")

    def move_by_vector(self, point: Point or Vector):
        """
        Смещение на вектор
        """

    def get_current_position(self):
        """
        получить текущую позицию
        """
        self.socket.sendall(b"point a = here\n")
        sleep(1)
        t = self.socket.recv(4096)
        input_data = (t.decode().split())
        x = input_data[10]
        y = input_data[11]
        z = input_data[12]
        self.x = x
        self.y = y
        self.z = z
        self.tx = input_data[13]
        self.ty = input_data[14]
        self.tz = input_data[15]
        print(self.x, self.y, self.z, self.tx, self.ty, self.tz)
        return Point(x, y, z)
Пример #11
0
    summ_y = 0
    for p in points:
        summ_x += int(p[0])
        summ_y += int(p[1])
    return summ_x / len(points), summ_y / len(points)


# Find zero and constants
while not find_zero_flag:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    corners, ids, rejectedImgPoints = aruco.detectMarkers(gray, aruco_dict, parameters=parameters)
    x_vector = None
    y_vector = None
    move_vector = None
    frame_center = Point(frame.shape[1] / 2, frame.shape[0] / 2)
    if ids is not None:
        ids_dict = {}
        ids_middle = {}
        for i in range(ids.size):
            ids_dict[int(ids[i][0])] = corners[i][0]
            ids_middle[int(ids[i][0])] = find_middle(corners[i][0])

        strg = ''
        for i in range(0, ids.size):
            strg += str(ids[i][0]) + ', '
            _id = ids[i][0]
            if _id in zero_ids:
                if _id == 0:
                    mid_zero = ids_middle[ids[i][0]]
                    ADAPTIVE_CONSTANT = Zero_marker0.size / \
Пример #12
0
    for p in points:
        summ_x += int(p[0])
        summ_y += int(p[1])
    return summ_x / len(points), summ_y / len(points)


# Find zero and constants
while not find_zero_flag:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    corners, ids, rejectedImgPoints = aruco.detectMarkers(
        gray, aruco_dict, parameters=parameters)
    x_vector = None
    y_vector = None
    move_vector = None
    frame_center = Point(frame.shape[1] / 2, frame.shape[0] / 2)
    if ids is not None:
        ids_dict = {}
        ids_middle = {}
        for i in range(ids.size):
            ids_dict[int(ids[i][0])] = corners[i][0]
            ids_middle[int(ids[i][0])] = find_middle(corners[i][0])

        strg = ''
        for i in range(0, ids.size):
            strg += str(ids[i][0]) + ', '
            _id = ids[i][0]
            if _id in zero_ids:
                if _id == 0:
                    mid_zero = ids_middle[ids[i][0]]
                    ADAPTIVE_CONSTANT = Zero_marker0.size / \