当前位置: 首页 > news >正文

AGV系统控制位置管理功能

# ファイル: agv_locattion.py
# 説明: AGV (Automated Guided Vehicle) の位置情報を管理し、UDPサーバーとして動作するGUIアプリケーションです。

# 必要なライブラリをインポート
import tkinter as tk
import socket
import threading

def AGV_handle_submit(canvas, start_photo, x_entry, y_entry, submit_button):
    """UDPサーバーアプリケーションのGUIを作成します。

    Args:
        canvas:tk.Canvas,
        start_photo (ImageTk.PhotoImage):
        x_entry (tk.Entry):
        y_entry (tk.Entry):
        submit_button (tk.Button): 
    """
    
    
    # 以下の関数内で使う変数を初期化
    HOST = '127.0.0.1'  # ホストIPアドレス
    PORT = 8080  # ポート番号
    server_socket = None  # グローバル変数としてサーバーソケットを定義

    def start_server():
        """UDPサーバーの待機とメッセージの受信を行います。"""
        nonlocal server_socket  # ローカル変数ではなく外側の変数を参照するためのnonlocal宣言

        # ソケットを作成し、ホストとポートにバインド
        server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        server_socket.bind((HOST, PORT))

        update_message_label("サーバーを開始しました。")

        while True:
            # データを受信する
            try:
                data, client_address = server_socket.recvfrom(1024)
            except OSError as e:
                print("ソケットの受信エラー:", e)
                break
            data = data.decode()
            update_message_label(f"クライアントからのメッセージ: {data}")

            # ドロップダウンメニューにデータを追加
            add_data_to_drop_menu(data)

            # クライアントにメッセージを送信する
            message = "サーバーからのメッセージ: データが送信できました!"
            server_socket.sendto(message.encode(), client_address)

    def start_server_thread():
        """サーバースレッドを開始します。"""
        threading.Thread(target=start_server).start()

    def close_connection():
        """サーバーソケットを閉じます。"""
        nonlocal server_socket
        if server_socket:
            server_socket.close()
            update_message_label("接続を閉じました。")
            server_socket = None  # サーバーソケットをリセット
            
    def end_window():
        nonlocal server_socket
        if server_socket:
            server_socket.close()
            update_message_label("接続を閉じました。")
            server_socket = None  # サーバーソケットをリセット
        window.destroy()
        
    def add_data_to_drop_menu(data):
        """ドロップダウンメニューにデータを追加します。

        Args:
            data (str): ドロップダウンメニューに追加するデータ
        """
        
        """""""""""""""""""""""""""""""""""""""""""""""
        ここに受信したマイクからのデータを処理して座標を割り出す位置推定プログラム関数を記述し、そのデータをdataに格納する。
        するとドロップボックスに値が追加される。なおdataは[座標,座標]形式の文字列で。
        関数例:
        data = position_estimation(data)
        """""""""""""""""""""""""""""""""""""""""""""""
        drop_menu['menu'].add_command(label=data, command=lambda value=data: selected_data.set(value))
        
    def on_decision_button_click():
        """決定ボタンがクリックされたときの処理を行います。"""
        data = selected_data.get()
        # この例では、選択された項目をラベルに表示するだけ
        data_list = data.split(',')
        num1 = int(data_list[0])
        num2 = int(data_list[1])
        
        # 選択された値に応じて任意の処理を追加することができます
        # x_entryの内容を削除
        x_entry.delete(0, tk.END)

        # y_entryの内容を削除
        y_entry.delete(0, tk.END)
        
        #選択した座標を入力欄に入れる
        x_entry.insert(0, num1)  # ここでx座標の初期値を設定
        y_entry.insert(0, num2)  # ここでy座標の初期値を設定
        
        # ボタンをプログラムからクリック
        submit_button.invoke()
        
    def on_selection_change(*args):
        """ドロップダウンメニューの選択が変更されたときの処理を行います。"""
        selected_value = selected_data.get()
        # 選択された項目の処理を行う
        data = selected_value  # 例として与えられたデータ

        # カンマでデータを分割してint型に変換
        data_list = data.split(',')
        num1 = int(data_list[0])
        num2 = int(data_list[1])
        
        # キャンバス上の選択用オブジェクトを更新
        canvas.delete("select")
        if start_photo:
            canvas.create_image(num1, num2, anchor=tk.CENTER, image=start_photo, tag="select")
            
        # この例では、選択したデータをラベルに表示するだけ
        update_message_label(f"選択したデータ: {selected_value}")
    

    # ウィンドウを作成
    window = tk.Tk()
    window.title("UDPサーバー")

    # 接続待機ボタンを作成
    start_button = tk.Button(window, text="接続待機", command=start_server_thread)
    start_button.pack(pady=10)

    # 接続を閉じるボタンを作成
    close_button = tk.Button(window, text="接続を閉じる", command=close_connection)
    close_button.pack(pady=5)

    # ラベルを作成してウィンドウに配置
    message_label = tk.Label(window, text="サーバーが待機中です。", font=("Helvetica", 12))
    message_label.pack(pady=10)

    def update_message_label(new_message):
        """メッセージ表示ラベルを更新する関数"""
        message_label.config(text=new_message)

    # ドロップダウンメニューに表示される選択肢リストを管理する変数
    selected_data = tk.StringVar(window)
    selected_data.set("選択したデータ")
    
    # 選択されたタイミングで動作する関数を登録
    selected_data.trace("w", on_selection_change)

    # ドロップダウンメニューを作成
    drop_menu = tk.OptionMenu(window, selected_data, "選択したデータ")
    drop_menu.pack(pady=5)
    
    # 決定ボタンを作成
    decision_button = tk.Button(window, text="決定", command=on_decision_button_click)
    decision_button.pack(pady=5)
    
    # protocolメソッドを追加してウィンドウが閉じられた際にclose_connection関数を呼び出す
    window.protocol("WM_DELETE_WINDOW", end_window)

    # ウィンドウを表示してイベントループを開始
    window.mainloop()

相关文章:

AGV系统控制位置管理功能

# ファイル: agv_locattion.py # 説明: AGV (Automated Guided Vehicle) の位置情報を管理し、UDPサーバーとして動作するGUIアプリケーションです。 # 必要なライブラリをインポート import tkinter as tk import socket import threading def AGV_handle_submit(canvas, st…...

JavaScript从入门到精通系列第三十三篇:详解正则表达式语法(二)

文章目录 一:正则表达式 1: 检查一个字符串中是否有. 2:第二种关键表达 3:第三种关键表达 ​编辑4:第四种关键表达 5:第五种关键表达 6:第六种关键表达 二:核心表达二 1&am…...

由于找不到 d3dx9_43.dll,无法继续执行代码。重新安装程序可能会解决此问题

电脑出现d3dx9_43.dll缺失的问题,通常是由于DirectX组件未安装或损坏导致的。为了解决这个问题,我为您提供了以下四个解决方法: d3dx9_43.dll解决方法1. 使用dll修复程序修复 首先,使用系统文件程序dll进行修复操作非常简单&…...

AI全栈大模型工程师(二十一)LangChain和SemanticKernel怎么选

LangChain 和 Semantic Kernel 怎么选? #%% md 划重点: 两者都值得学C#、JavaScript 和 Java 现在没得选做原型,首选 LangChain。功能多,开发快做产品,还是 SK 长期更可依赖建议只用 SK 的 Connectors 和 Plugins 能力…...

npm install 报错 chromedriver 安装失败的解决办法

npm install chromedriver --chromedriver_cdnurlhttp://cdn.npm.taobao.org/dist/chromedriver...

C语言--每日五道选择题--Day6

第一题 1、声明以下变量,则表达式: ch/i (f*d – i) 的结果类型为( ) char ch; int i; float f; double d; A: char B: int C: float D: double 答案及解析 D 基本数据类型的等级从低到高如下:char-> int-> long-> f…...

element-ui 封装 表格

一、封装表格组件 <template><el-table :data"list" :default-sort"{ prop: date }" style"width: 100%"><template v-for"item in tableColumn"><el-table-columnv-if"item.filters":prop"item…...

数据的使用、表关系的创建、Django框架的请求生命周期流程图

目录 一、数据的增删改查 1. 用户列表的展示 2. 修改数据的逻辑分析 3. 删除功能的分析 二、如何创建表关系 三、Django的请求生命周期流程图 一、数据的增删改查 1. 用户列表的展示 把数据表中得用户数据都给查询出来展示在页面上 查询数据 def userlist(request):&qu…...

Python基础教程:类--继承和方法的重写

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 什么是继承 继承就是让类与类之间产生父子关系&#xff0c;子类可以拥有父类的静态属性和方法 继承就是可以获取到另一个类中的静态属性和普通方法&#xff08;并非所有成员&#xff09; 在python中&#xff0c;新建的类可…...

Three.js提供了多种类型的灯光

Three.js提供了多种类型的灯光&#xff0c;包括环境光、点光源、平行光源和聚光灯。这些灯光可以用来照亮场景中的物体&#xff0c;使其看起来更加真实。 环境光(AmbientLight)&#xff1a;环境光会均匀地照亮场景中的所有物体&#xff0c;没有方向&#xff0c;不能用来投射阴…...

精通Nginx(10)-负载均衡

负载均衡就是将前端过来的负载分发到两台或多台应用服务器。Nginx支持多种协议的负载均衡,包括http(s)、TCP、UDP(关于TCP、UDP负载均衡另文讲述)等。 目录 HTTP负载均衡 负载均衡策略 轮询 least_conn(最少连接) hash(通用哈希) ip_hash(IP 哈希) random(随…...

Hls学习(一)

1&#xff1a;CPU、DSP、GPU都算软件可编程的硬件 2&#xff1a;dsp在递归方面有所减弱&#xff0c;在递归方面有所增强&#xff0c;比如递归啊等&#xff0c;GPU可以同时处理多个进程&#xff0c;对于大块数据&#xff0c;流处理比较适用 3&#xff1a;为了提高运算量处理更多…...

Maven打包引入本地依赖包

Maven打包引入本地依赖包 SpringBoot 工程&#xff0c;Maven 在构建项目时&#xff0c;如何引入本地 Jar 包&#xff1f; 适合场景&#xff1a; 引用的依赖不在 Maven 仓库第三方公司提供的 SDK 包Maven 内网离线开发引入被定制改动过的 Jar 包 解决方法&#xff1a; 在 I…...

Docker常用命令及部署微服务项目

Docker常用命令及部署微服务项目 1、Docker常用命令 1、设置Yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2、安装docker yum -y install docker-ce 3、启动docker service docker start 4、验证 docker version 5…...

okhttp添加公共参数

在项目开发中很多时候后台都会给一些全局的公共入参&#xff0c;比如携带手机信息或者时间戳等字段。而我们在使用okhttp时&#xff0c;就需要我们单独就行二次封装处理了&#xff0c;对于请求全局参数&#xff0c;每次请求都要去写一次&#xff0c;那是肯定不行的。 所以就要我…...

基于SpringBoot的SSMP整合案例(开启日志与分页查询条件查询功能实现)

开启事务 导入Mybatis-Plus框架后&#xff0c;我们可以使用Mybatis-Plus自带的事务&#xff0c;只需要在配置文件中配置即可 使用配置方式开启日志&#xff0c;设置日志输出方式为标准输出mybatis-plus:global-config:db-config:table-prefix: tb_id-type: autoconfiguration:…...

android studio 修改图标

Android Studio 修改图标 简介 Android Studio 是一款由谷歌推出的用于开发 Android 应用程序的集成开发环境&#xff08;IDE&#xff09;。在开发过程中&#xff0c;我们可以根据自己的需求修改 Android Studio 的图标&#xff0c;以个性化我们的开发环境。 本文将介绍如何在…...

pytorch学习之第二课之预测温度

主要有以下几个步骤 第一&#xff1a;导入相应的工具包 第二&#xff1a;导入需要使用的数据集 第三&#xff1a;对导入的数据集输入进行预处理&#xff0c;找出特征与标签&#xff0c;查看数据特征的类型&#xff0c;判断是否需要标准化或者归一化处理 第四&#xff1a;构建神…...

基于Mahony互补滤波的IMU数据优化_学习笔记整理

这周自己被安排进行优化软件 IMU 姿态解算项目&#xff0c;之前自己只简单了解四元数&#xff0c;对IMU数据处理从未接触&#xff0c;通过这一周的学习感觉收获颇丰&#xff0c;在今天光棍节之际&#xff0c;&#xff0c;&#xff0c;用大半天的时间对这一周的收获进行整理&…...

c语言实现哈夫曼编码

要实现哈夫曼编码&#xff0c;需要以下步骤&#xff1a; 统计字符出现的频率构建哈夫曼树遍历哈夫曼树&#xff0c;给不同的字符赋予不同的编码将编码后的字符写入文件中 下面是一个简单的 C 语言实现&#xff1a; #include <stdio.h> #include <stdlib.h> #inc…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...