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基础教程:类--继承和方法的重写
嗨喽,大家好呀~这里是爱看美女的茜茜呐 什么是继承 继承就是让类与类之间产生父子关系,子类可以拥有父类的静态属性和方法 继承就是可以获取到另一个类中的静态属性和普通方法(并非所有成员) 在python中,新建的类可…...
Three.js提供了多种类型的灯光
Three.js提供了多种类型的灯光,包括环境光、点光源、平行光源和聚光灯。这些灯光可以用来照亮场景中的物体,使其看起来更加真实。 环境光(AmbientLight):环境光会均匀地照亮场景中的所有物体,没有方向,不能用来投射阴…...
精通Nginx(10)-负载均衡
负载均衡就是将前端过来的负载分发到两台或多台应用服务器。Nginx支持多种协议的负载均衡,包括http(s)、TCP、UDP(关于TCP、UDP负载均衡另文讲述)等。 目录 HTTP负载均衡 负载均衡策略 轮询 least_conn(最少连接) hash(通用哈希) ip_hash(IP 哈希) random(随…...

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

Maven打包引入本地依赖包
Maven打包引入本地依赖包 SpringBoot 工程,Maven 在构建项目时,如何引入本地 Jar 包? 适合场景: 引用的依赖不在 Maven 仓库第三方公司提供的 SDK 包Maven 内网离线开发引入被定制改动过的 Jar 包 解决方法: 在 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添加公共参数
在项目开发中很多时候后台都会给一些全局的公共入参,比如携带手机信息或者时间戳等字段。而我们在使用okhttp时,就需要我们单独就行二次封装处理了,对于请求全局参数,每次请求都要去写一次,那是肯定不行的。 所以就要我…...

基于SpringBoot的SSMP整合案例(开启日志与分页查询条件查询功能实现)
开启事务 导入Mybatis-Plus框架后,我们可以使用Mybatis-Plus自带的事务,只需要在配置文件中配置即可 使用配置方式开启日志,设置日志输出方式为标准输出mybatis-plus:global-config:db-config:table-prefix: tb_id-type: autoconfiguration:…...

android studio 修改图标
Android Studio 修改图标 简介 Android Studio 是一款由谷歌推出的用于开发 Android 应用程序的集成开发环境(IDE)。在开发过程中,我们可以根据自己的需求修改 Android Studio 的图标,以个性化我们的开发环境。 本文将介绍如何在…...
pytorch学习之第二课之预测温度
主要有以下几个步骤 第一:导入相应的工具包 第二:导入需要使用的数据集 第三:对导入的数据集输入进行预处理,找出特征与标签,查看数据特征的类型,判断是否需要标准化或者归一化处理 第四:构建神…...

基于Mahony互补滤波的IMU数据优化_学习笔记整理
这周自己被安排进行优化软件 IMU 姿态解算项目,之前自己只简单了解四元数,对IMU数据处理从未接触,通过这一周的学习感觉收获颇丰,在今天光棍节之际,,,用大半天的时间对这一周的收获进行整理&…...
c语言实现哈夫曼编码
要实现哈夫曼编码,需要以下步骤: 统计字符出现的频率构建哈夫曼树遍历哈夫曼树,给不同的字符赋予不同的编码将编码后的字符写入文件中 下面是一个简单的 C 语言实现: #include <stdio.h> #include <stdlib.h> #inc…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

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

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,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 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/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? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...