정보통신기술(ICT)

물류창고 이동식 로봇 상하좌우

해머슴 2024. 11. 17. 10:08
import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib import rcParams
import matplotlib.font_manager as fm

# 한글 폰트 설정
font_path = "C:/Windows/Fonts/malgun.ttf"  # Windows의 맑은 고딕 폰트 경로
font_prop = fm.FontProperties(fname=font_path)
rcParams['font.family'] = font_prop.get_name()

class RobotMovementApp:
    def __init__(self, root):
        self.root = root
        self.root.title("이동식 로봇 경로 표시")
       
        self.position = [0, 0]  # 로봇의 초기 위치
        self.positions = [[0, 0]]  # 이동 기록
       
        # GUI 구성
        self.setup_gui()
       
    def setup_gui(self):
        # 이동 명령 입력
        ttk.Label(self.root, text="명령 입력 (상, 하, 좌, 우):").grid(row=0, column=0, padx=10, pady=5)
        self.command_entry = ttk.Entry(self.root, width=20)
        self.command_entry.grid(row=0, column=1, padx=10, pady=5)
       
        # 버튼
        self.move_button = ttk.Button(self.root, text="이동", command=self.move_robot)
        self.move_button.grid(row=0, column=2, padx=10, pady=5)
       
        # 그래프 표시 영역
        self.figure, self.ax = plt.subplots(figsize=(5, 5))
        self.ax.set_xlim(-10, 10)
        self.ax.set_ylim(-10, 10)
        self.ax.set_title("로봇 이동 경로", fontsize=14)
        self.ax.grid(True)
        self.plot_graph()
       
        self.canvas = FigureCanvasTkAgg(self.figure, self.root)
        self.canvas_widget = self.canvas.get_tk_widget()
        self.canvas_widget.grid(row=1, column=0, columnspan=3, padx=10, pady=10)
       
    def move_robot(self):
        command = self.command_entry.get().strip()
        dx, dy = 0, 0
       
        if command == "상":
            dy = 1
        elif command == "하":
            dy = -1
        elif command == "좌":
            dx = -1
        elif command == "우":
            dx = 1
        else:
            tk.messagebox.showerror("오류", "잘못된 명령입니다. 상, 하, 좌, 우 중 하나를 입력하세요.")
            return
       
        # 위치 갱신
        self.position[0] += dx
        self.position[1] += dy
        self.positions.append(self.position[:])
       
        # 그래프 업데이트
        self.plot_graph()
        self.canvas.draw()
       
    def plot_graph(self):
        self.ax.clear()
        self.ax.set_xlim(-10, 10)
        self.ax.set_ylim(-10, 10)
        self.ax.set_title("로봇 이동 경로", fontsize=14)
        self.ax.grid(True)
        x, y = zip(*self.positions)
        self.ax.plot(x, y, marker="o", linestyle="-", color="blue")
        self.ax.text(self.position[0], self.position[1], "현재 위치", color="red", fontsize=12, fontproperties=font_prop)

if __name__ == "__main__":
    root = tk.Tk()
    app = RobotMovementApp(root)
    root.mainloop()