def __setbutton_click(self, wait=False):
        if not self.client.is_open():
            write_log("ERROR: Not connected to client")
            return

        # writing message counter
        retval = self.__write_register(COUNTER_REGISTER_OUT, self.counter)
        if not retval:
            self.__update_gui()
            return

        # writing registers
        for address in self.register_values_widgets:
            value, widget = self.register_values_widgets[address]
            widgetvalue_int = None
            try:
                widgetvalue_int = int(widget.get())
            except ValueError:
                write_log(
                    "ERROR: Wrong input format in value entry for address: %d"
                    % address)
                continue

            if value == widgetvalue_int:
                continue

            retval = self.__write_register(address, widgetvalue_int)
            if retval:
                self.register_values_widgets[address] = (widgetvalue_int,
                                                         widget)
            else:
                self.__update_gui()
        self.refresh_values()

        # message counter wait
        if wait:
            global break_wait
            while not break_wait:
                with self.lock:
                    counter = self.client.read_input_registers(
                        COUNTER_REGISTER_IN)[0]
                if counter == self.counter:
                    break
                time.sleep(0.1)
            break_wait = False

        # counter increment
        self.counter = (self.counter + 1) % 20

        if PRINT_ALL_MEMORY_ON_WRITE:
            self.__print_memory()
            self.read_robot_pos()
コード例 #2
0
ファイル: ModbusGUIsimple.py プロジェクト: icguy/RemoteSurf
 def __connectbutton_click(self):
     if self.client.is_open():
         self.client.close()
     else:
         self.client.host(SERVER_HOST)
         self.client.port(SERVER_PORT)
         if self.client.open():
             write_log("Connection established")
             self.refresh_values()
             self.read_robot_pos()
         else:
             write_log("ERROR: Connecting failed")
     self.__update_gui()
 def __connectbutton_click(self):
     if self.client.is_open():
         self.client.close()
     else:
         self.client.host(SERVER_HOST)
         self.client.port(SERVER_PORT)
         if self.client.open():
             write_log("Connection established")
             self.refresh_values()
             self.read_robot_pos()
         else:
             write_log("ERROR: Connecting failed")
     self.__update_gui()
 def __print_memory(self):
     self.refresh_values()
     write_log("Memory dump:")
     write_log("------------")
     for address in self.register_values_widgets:
         val, widget = self.register_values_widgets[address]
         write_log("%d, %d" % (address, val))
     write_log("------------")
コード例 #5
0
ファイル: ModbusGUIsimple.py プロジェクト: icguy/RemoteSurf
 def __print_memory(self):
     self.refresh_values()
     write_log("Memory dump:")
     write_log("------------")
     for address in self.register_values_widgets:
         val, widget = self.register_values_widgets[address]
         write_log("%d, %d" % (address, val))
     write_log("------------")
コード例 #6
0
ファイル: ModbusGUIsimple.py プロジェクト: icguy/RemoteSurf
    def __setbutton_click(self, wait = False):
        if not self.client.is_open():
            write_log("ERROR: Not connected to client")
            return

        # writing message counter
        retval = self.__write_register(COUNTER_REGISTER_OUT, self.counter)
        if not retval:
            self.__update_gui()
            return

        # writing registers
        for address in self.register_values_widgets:
            value, widget = self.register_values_widgets[address]
            widgetvalue_int = None
            try:
                widgetvalue_int = int(widget.get())
            except ValueError:
                write_log("ERROR: Wrong input format in value entry for address: %d" % address)
                continue

            if value == widgetvalue_int:
                continue

            retval = self.__write_register(address, widgetvalue_int)
            if retval:
                self.register_values_widgets[address] = (widgetvalue_int, widget)
            else:
                self.__update_gui()
        self.refresh_values()

        # message counter wait
        if wait:
            global break_wait
            while not break_wait:
                with self.lock:
                    counter = self.client.read_input_registers(COUNTER_REGISTER_IN)[0]
                if counter == self.counter:
                    break
                time.sleep(0.1)
            break_wait = False

        # counter increment
        self.counter = (self.counter + 1) % 20

        if PRINT_ALL_MEMORY_ON_WRITE:
            self.__print_memory()
            self.read_robot_pos()
コード例 #7
0
ファイル: ModbusGUIsimple.py プロジェクト: icguy/RemoteSurf
 def refresh_values(self):
     for address in self.register_values_widgets:
         if self.client.is_open():
             value, widget = self.register_values_widgets[address]
             with self.lock:
                 real_val_uint = self.client.read_input_registers(address)[0]
                 real_val_holding_uint = self.client.read_holding_registers(address)[0]
             assert real_val_uint == real_val_holding_uint
             real_val_int = uintToInt16(real_val_uint)
             widget.set(str(real_val_int))
             self.register_values_widgets[address] = (real_val_int, widget)
         else:
             write_log("ERROR: Read could not be completed, client not connected.")
             self.__update_gui()
             break
     write_log("Refresh done.")
     return self.register_values_widgets
 def refresh_values(self):
     for address in self.register_values_widgets:
         if self.client.is_open():
             value, widget = self.register_values_widgets[address]
             with self.lock:
                 real_val_uint = self.client.read_input_registers(
                     address)[0]
                 real_val_holding_uint = self.client.read_holding_registers(
                     address)[0]
             assert real_val_uint == real_val_holding_uint
             real_val_int = uintToInt16(real_val_uint)
             widget.set(str(real_val_int))
             self.register_values_widgets[address] = (real_val_int, widget)
         else:
             write_log(
                 "ERROR: Read could not be completed, client not connected."
             )
             self.__update_gui()
             break
     write_log("Refresh done.")
     return self.register_values_widgets
コード例 #9
0
ファイル: ModbusGUIsimple.py プロジェクト: icguy/RemoteSurf
    def __write_register(self, address, value):
        if not (-32768 <= value <= 32767):
            write_log("ERROR: -32768 <= value <= 32767 is false for address: %d" % address)
            return False

        widgetvalue_uint = intToUint16(value)
        if self.client.is_open():
            with self.lock:
                retval = self.client.write_single_register(address, widgetvalue_uint)
            if retval:
                write_log("Register written. Address: %d, value: %d" % (address, value))
                return True
            else:
                write_log("ERROR: Write failed. Address: %d, value: %d" % (address, value))
        else:
            write_log("ERROR: client not connected.")
        return False
コード例 #10
0
ファイル: ModbusGUIsimple.py プロジェクト: icguy/RemoteSurf
 def read_robot_pos(self):
     write_log("Reading robot position:")
     posdict = {}
     for i in range(1000, 1006):
         if self.client.is_open():
             with self.lock:
                 real_val_uint = self.client.read_input_registers(i)[0]
                 real_val_holding_uint = self.client.read_holding_registers(i)[0]
             assert real_val_uint == real_val_holding_uint
             real_val_int = uintToInt16(real_val_uint)
             posdict[i] = real_val_int
             write_log("%d, %d" % (i, real_val_int))
         else:
             write_log("ERROR: Read could not be completed, client not connected.")
             self.__update_gui()
             break
     write_log("Read done.")
     return posdict
 def read_robot_pos(self):
     write_log("Reading robot position:")
     posdict = {}
     for i in range(1000, 1006):
         if self.client.is_open():
             with self.lock:
                 real_val_uint = self.client.read_input_registers(i)[0]
                 real_val_holding_uint = self.client.read_holding_registers(
                     i)[0]
             assert real_val_uint == real_val_holding_uint
             real_val_int = uintToInt16(real_val_uint)
             posdict[i] = real_val_int
             write_log("%d, %d" % (i, real_val_int))
         else:
             write_log(
                 "ERROR: Read could not be completed, client not connected."
             )
             self.__update_gui()
             break
     write_log("Read done.")
     return posdict
    def __write_register(self, address, value):
        if not (-32768 <= value <= 32767):
            write_log(
                "ERROR: -32768 <= value <= 32767 is false for address: %d" %
                address)
            return False

        widgetvalue_uint = intToUint16(value)
        if self.client.is_open():
            with self.lock:
                retval = self.client.write_single_register(
                    address, widgetvalue_uint)
            if retval:
                write_log("Register written. Address: %d, value: %d" %
                          (address, value))
                return True
            else:
                write_log("ERROR: Write failed. Address: %d, value: %d" %
                          (address, value))
        else:
            write_log("ERROR: client not connected.")
        return False
コード例 #13
0
def run(out_folder):
    global capture

    if out_folder is None:
        out_folder = logger.outputdir
    cap = cv2.VideoCapture(0)
    if not cap.isOpened():
        cap = cv2.VideoCapture(1)
    resolution = (960, 720)
    cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, resolution[0])
    cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, resolution[1])

    diff_frame = cv2.imread("out/2017_5_17__14_15_12/0000.jpg")
    diff_frame = np.zeros_like(diff_frame, dtype="uint8")

    fileIdx = getNextFileIdx(out_folder)
    if not cap.isOpened():
        write_log("ERROR: webcam open failed")
    else:
        cv2.namedWindow("frame")
        if WINDOW_POS:
            x, y = WINDOW_POS
            cv2.moveWindow("frame", x, y)

        while cap.isOpened():
            if exit:
                break

            r, frame = cap.read()
            if not r:
                continue

            if resolution[0] not in frame.shape or resolution[
                    1] not in frame.shape:
                # bad resolution
                gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                frame = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
                cv2.putText(frame, "BAD RESOLUTION: %s" % (str(gray.shape)),
                            (0, gray.shape[0] - 10), cv2.FONT_HERSHEY_SIMPLEX,
                            1, (0, 0, 255), 2)
                cv2.imshow("frame", frame)
                key = cv2.waitKey(1)
                if key != -1:
                    print "pressed key: %d" % key
                if key == 27:
                    break
                continue

            # cv2.circle(frame, (960 / 2, 720 / 2), 10, (255, 0, 0), 4)
            cv2.imshow("frame", frame)
            diff = np.uint8(np.abs(np.int16(diff_frame) - np.int16(frame)))
            cv2.imshow("frame", diff)
            # enter: 13, escape: 27, space: 32
            key = cv2.waitKey(1)
            if key == 27:
                break
            if key == 32 or capture:
                if capture: capture = False

                gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                ret, corners = cv2.findChessboardCorners(
                    gray, (9, 6),
                    flags=cv2.CALIB_CB_ADAPTIVE_THRESH
                    | cv2.CALIB_CB_NORMALIZE_IMAGE)
                if ret:
                    key = 13
                    write_log("Chessboard found")
                else:
                    if capture_if_no_chessboard:
                        key = 13
                    write_log("Chessboard not found.")

            if key == 13:
                filename = getFileName(out_folder, fileIdx)

                success = cv2.imwrite(filename, frame)
                if success:
                    write_log("Success. File saved: %s" % filename)
                    dictfile = os.path.splitext(filename)[0] + ".p"
                    dumpDict(dictfile)
                else:
                    write_log("Failed to write to: %s" % filename)
                fileIdx += 1
コード例 #14
0
ファイル: CamGrabber.py プロジェクト: icguy/RemoteSurf
def run(out_folder):
    global capture

    if out_folder is None:
        out_folder = logger.outputdir
    cap = cv2.VideoCapture(0)
    if not cap.isOpened():
        cap = cv2.VideoCapture(1)
    resolution = (960, 720)
    cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, resolution[0])
    cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, resolution[1])

    diff_frame = cv2.imread("out/2017_5_17__14_15_12/0000.jpg")
    diff_frame = np.zeros_like(diff_frame, dtype="uint8")

    fileIdx = getNextFileIdx(out_folder)
    if not cap.isOpened():
        write_log("ERROR: webcam open failed")
    else:
        cv2.namedWindow("frame")
        if WINDOW_POS:
            x, y = WINDOW_POS
            cv2.moveWindow("frame", x, y)

        while cap.isOpened():
            if exit:
                break
                
            r, frame = cap.read()
            if not r:
                continue

            if resolution[0] not in frame.shape or resolution[1] not in frame.shape:
                # bad resolution
                gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                frame = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
                cv2.putText(frame, "BAD RESOLUTION: %s" % (str(gray.shape)), (0, gray.shape[0] - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
                cv2.imshow("frame", frame)
                key = cv2.waitKey(1)
                if key != -1:
                    print "pressed key: %d" % key
                if key == 27:
                    break
                continue

            # cv2.circle(frame, (960 / 2, 720 / 2), 10, (255, 0, 0), 4)
            cv2.imshow("frame", frame)
            diff = np.uint8(np.abs(np.int16(diff_frame) - np.int16(frame)))
            cv2.imshow("frame", diff)
            # enter: 13, escape: 27, space: 32
            key = cv2.waitKey(1)
            if key == 27:
                break
            if key == 32 or capture:
                if capture: capture = False

                gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                ret, corners = cv2.findChessboardCorners(gray, (9, 6), flags=cv2.CALIB_CB_ADAPTIVE_THRESH | cv2.CALIB_CB_NORMALIZE_IMAGE)
                if ret:
                    key = 13
                    write_log("Chessboard found")
                else:
                    if capture_if_no_chessboard:
                        key = 13
                    write_log("Chessboard not found.")

            if key == 13:
                filename = getFileName(out_folder, fileIdx)

                success = cv2.imwrite(filename, frame)
                if success:
                    write_log("Success. File saved: %s" % filename)
                    dictfile = os.path.splitext(filename)[0]+".p"
                    dumpDict(dictfile)
                else:
                    write_log("Failed to write to: %s" % filename)
                fileIdx += 1
    def __find_object(self):
        import DataCache as DC
        from glob import glob
        from os.path import join
        import numpy as np
        from SFMSolver import SFMSolver, find_ext_params
        import Utils

        print "FINDING"

        np.set_printoptions(precision=3, suppress=True)

        files_dir = "out/2017_3_8__14_51_22/"
        files = glob(join(files_dir, "*.jpg"))
        masks = []
        for f in files:
            m = f.replace(".jpg", "_mask.png")
            masks.append(m)
        sfm = SFMSolver(files, masks)
        if self.obj_data is None:
            imgs, kpts, points, data = sfm.calc_data_from_files_triang_simple()
            self.obj_data = imgs, kpts, points, data
        else:
            imgs, kpts, points, data = self.obj_data

        arr_calib = DC.getData("out/%s/arrangement_calib.p" %
                               ARRANGEMENT_CALIB_DIR)
        ttc = arr_calib["ttc"]
        tor = arr_calib["tor"]
        if "cam_mtx" in arr_calib:
            print "camMtx, distcoeffs load"
            Utils.camMtx = arr_calib["cam_mtx"]
            Utils.dist_coeffs = arr_calib["dist_coeffs"]

        if self.stop_signal:
            self.stop_signal = False
            return

        for point in FIND_POINTS:
            values = {
                500: point[0],
                501: point[1],
                502: point[2],
                503: point[3],
                504: point[4],
                505: point[5],
            }
            print "set_values call"
            self.set_values(values, True)
            print "set_values return"

            time.sleep(0.5)
            CamGrabber.capture_if_no_chessboard = True
            CamGrabber.capture = True
            time.sleep(0.5)

            if self.stop_signal:
                self.stop_signal = False
                return

        find_dir = logger.outputdir
        files = glob("%s/*.jpg" % find_dir)
        print files
        # files_dir = "out/2017_4_5__15_57_20/"
        # files = glob(join(files_dir, "*.jpg"))
        files.sort()
        files = files[-len(FIND_POINTS):]
        results = []

        for f in files:
            res = find_ext_params(f, imgs, kpts, points, data, tor, ttc)
            results.append(res)
            if self.stop_signal:
                self.stop_signal = False
                return

        for i in range(len(results)):
            print i, results[i]
            write_log((i, results[i]))
        result = max(results, key=lambda x: x[2])
        write_log(result)

        values = {
            500: int(result[0][0] * 10),
            501: int(result[0][1] * 10),
            502: int(result[0][2] * 10) + 200,
            503: int(result[1][2]),
            504: int(result[1][1]),
            505: int(result[1][0]),
        }

        print "num inl: ", result[2]
        pprint(values)
        self.set_values(values, go_to_value=False)
        self.find_thread = None
コード例 #16
0
ファイル: ModbusGUIsimple.py プロジェクト: icguy/RemoteSurf
    def __find_object(self):
        import DataCache as DC
        from glob import glob
        from os.path import join
        import numpy as np
        from SFMSolver import SFMSolver, find_ext_params
        import Utils

        print "FINDING"

        np.set_printoptions(precision=3, suppress=True)

        files_dir = "out/2017_3_8__14_51_22/"
        files = glob(join(files_dir, "*.jpg"))
        masks = []
        for f in files:
            m = f.replace(".jpg", "_mask.png")
            masks.append(m)
        sfm = SFMSolver(files, masks)
        if self.obj_data is None:
            imgs, kpts, points, data = sfm.calc_data_from_files_triang_simple()
            self.obj_data = imgs, kpts, points, data
        else:
            imgs, kpts, points, data = self.obj_data

        arr_calib = DC.getData("out/%s/arrangement_calib.p" % ARRANGEMENT_CALIB_DIR)
        ttc = arr_calib["ttc"]
        tor = arr_calib["tor"]
        if "cam_mtx" in arr_calib:
            print "camMtx, distcoeffs load"
            Utils.camMtx = arr_calib["cam_mtx"]
            Utils.dist_coeffs = arr_calib["dist_coeffs"]

        if self.stop_signal:
            self.stop_signal = False
            return

        for point in FIND_POINTS:
            values = {
                500: point[0],
                501: point[1],
                502: point[2],
                503: point[3],
                504: point[4],
                505: point[5],
            }
            print "set_values call"
            self.set_values(values, True)
            print "set_values return"

            time.sleep(0.5)
            CamGrabber.capture_if_no_chessboard = True
            CamGrabber.capture = True
            time.sleep(0.5)

            if self.stop_signal:
                self.stop_signal = False
                return

        find_dir = logger.outputdir
        files = glob("%s/*.jpg" % find_dir)
        print files
        # files_dir = "out/2017_4_5__15_57_20/"
        # files = glob(join(files_dir, "*.jpg"))
        files.sort()
        files = files[-len(FIND_POINTS):]
        results = []

        for f in files:
            res = find_ext_params(f, imgs, kpts, points, data, tor, ttc)
            results.append(res)
            if self.stop_signal:
                self.stop_signal = False
                return

        for i in range(len(results)):
            print i, results[i]
            write_log((i, results[i]))
        result = max(results, key=lambda x: x[2])
        write_log(result)


        values = {
            500: int(result[0][0] * 10),
            501: int(result[0][1] * 10),
            502: int(result[0][2] * 10) + 200,
            503: int(result[1][2]),
            504: int(result[1][1]),
            505: int(result[1][0]),
        }

        print "num inl: ", result[2]
        pprint(values)
        self.set_values(values, go_to_value=False)
        self.find_thread = None