位置: IT常识 - 正文

2021年电赛F题智能送药小车(国二)开源分享(20年电赛c题)

编辑:rootadmin
2021年电赛F题智能送药小车(国二)开源分享 文章目录题目任务前言(闲话)一、团队分工介绍二、题目分析、破题1.要点分析2.系统方案三、电控部分1、主控拓展电路2、步进电机驱动信号整合板PCB设计分析四、视觉部分神经网络的训练:运行代码:五、机械部分总结附件
题目任务

推荐整理分享2021年电赛F题智能送药小车(国二)开源分享(20年电赛c题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:电赛赛题,2021年电赛题目,2021年电赛清单,电赛2020c题,2021 电赛,电赛i题,2021年电赛题目,2021年电赛题目,内容如对您有帮助,希望把文章链接给更多的朋友!

设计并制作智能送药小车,模拟完成在医院药房与病房间药品的送取作业。 院区结构示意如图1所示。院区走廊两侧的墙体由黑实线表示。走廊地面上画有 居中的红实线,并放置标识病房号的黑色数字可移动纸张。药房和近端病房号(1、2 号)如图1所示位置固定不变,中部病房和远端病房号(3-8号)测试时随机设定。 工作过程:参赛者手动将小车摆放在药房处(车头投影在门口区域内,面向 病房),手持数字标号纸张由小车识别病房号,将约 200g 药品一次性装载到送药小车上;小车检测到药品装载完成后自动开始运送;小车根据走廊上的标识信 息自动识别、寻径将药品送到指定病房(车头投影在门口区域内),点亮红色指示灯,等待卸载药品;病房处人工卸载药品后,小车自动熄灭红色指示灯,开始返回;小车自动返回到药房(车头投影在门口区域内,面向药房)后,点亮绿色指示灯。


前言(闲话)

这次比赛因为疫情延期了,给了我们更多的准备(摸鱼)时间,比赛四天三夜,占用了有课的周五(刚好碰上了实习,打铁贼累 还得熬夜。。。) 因为太过摸鱼本以为能那个省三就不错了,没想到冲了个国二,圆梦电赛了,打破了学校十年的记录。所以说竞赛这方面还得坚持,万一破纪录了呢。 我本人是负责视觉方面的,将详细写实现方法,保姆级教程,包括神经网络训练。


一、团队分工介绍

由队长赵嘉辉(电控编程)、队员陈为骞(视觉识别)和吴金颖(机械设计)组成,其中两个大四,一个大三。

//两位光电专业、一位机械的hhh

二、题目分析、破题1.要点分析

任务可简单分为3个: (1)巡线移动。完成最基础的移动功能,是所有功能的基础。本作品采用灰度传感器循迹和步进电机的巡线移动方案。 (2)识别病房号数字。可采用openmv、k210、树莓派等视觉单片机识别。由于没有提前准备k210,且树莓派大小、功耗较大,因此采用最常见的openmv。为保证性能足够,采用openmv4plus。 (3)双机通信。本作品采用蓝牙双机通信,实现数据共享。 完成以上3个任务后,就是对小车代码逻辑的构思和想法。后面的就是多调试代码,修bug即可。

2.系统方案

1、单片机选择

采用ArduinoMEGA2560单片机作主控。由于其代码开源性,代码简易,适合新手使用。强大的库函数能极大减少开发时间。且对于该题目,运算速度足够,因此采用。

2、运动系统

采用42步进电机。该款电机转动精确度高,扭力大,额定电流2A以下,且控制简单,不会因为不同驱动的电压而导致转动步数的偏差,无需使用闭环控制即能走出非常好的直线,不易走歪,短距离内可精准控制运动位移。驱动采用TB6600 H桥双极恒相流驱动。驱动及电机采用淘宝成品套件,设置驱动细分数为800。由于驱动体积较大,且42步进电机运行时电流较小,因此可以拆除该驱动模块的金属外壳(散热器),从而达到极大缩小体积和重量。

前轮采用牛眼轮进行支撑。牛眼轮的选择最好选摩擦力小的。本作品用的牛眼轮摩擦力较大,使得电机的速度不能提得太高,否则摩擦力会将车的运动姿态扰乱,走起来一抖一抖的。

3、循迹系统

采用八路灰度传感器(实际只用了4路)。调节好阈值,能精准分辨红白色。推荐使用下图的灰度传感器。用非常简单的数字逻辑检测循迹代码即能完成循迹功能。

4、视觉系统

手持病房号采用模板匹配识别,原因是手持病房号可动态调整远近、角度,模板匹配也能很快识别成功。

地面上的病房号数字采用OpenMV4 H7 Plus神经网络方法识别。对比模板匹配,识别成功率极高,高达90%以上。由于性能受限,运行时图像仅有2~3帧,需要在病房号前停下零点几秒让其图像稳定下来识别数字。

5、通信系统

采用HM-10蓝牙模块进行双机通信。主蓝牙仅能接收从蓝牙的信息,不能传信息给从蓝牙。因此从蓝牙接1号车,主蓝牙接2号车。2号车只需要接收1号车指令即可完成所有任务。注意:需提前AT指令设置主从模式和自动连接蓝牙的操作。

6、其他

采用了oled屏幕显示本次读取病房号是否成功,及实时显示一些小车运行状态,方便调试。设置红绿黄指示灯、蜂鸣器提示等功能。

采用双边自复位按钮作复位键。由于主控单片机和OpenMV工作电平不一致,复位引脚不能接入同一按键上,因此使用此按键可一键复位两个单片机。

药物检测采用简单的红外避障模块检测高低电平即可。

三、电控部分

电控部分已在立创开源平台发布!比赛准备的全部工程都有!点这里!! 也可以访问:https://oshwhub.com/AngleLeon/gong-ke-sai-xin-hao-zheng-ge-ban_copy 电控代码也在里面。

1、主控拓展电路

(1)单片机及其引脚外接

其中arduino的D2-D5作为IO口接入电机驱动模块,驱动两个步进电机(每个步进电机由DIR和PUL控制),D23-D37的其中一些引脚接灰度传感器的8个数字信号口。

(2)电源输入、输出

12V从圆孔DC5.5系列接口输入,一路直出给步进电机驱动和步进电机供电,领一路经过5V稳压模块给单片机等其他模块供电。引出8组5V电源接口,方便扩展。

(3)其他 其他多余的接口没有特别定义,只是单纯引出,备用。

2、步进电机驱动信号整合板

两个步进电机需要两个驱动板,需要较多信号线和电源线,会导致接线较乱、易松。为了稳定性更好,制作了这块信号整合板,并使用了XH2.54红白排插线,连接不易松,且易拔插。

(1)原理图

分为12V电源输入输出,布线配合单片机扩展板的IO分布。

2021年电赛F题智能送药小车(国二)开源分享(20年电赛c题)

(2)PCB及仿真图

印丝层加入了对应的IO口数字号,标注了步进电机驱动细分数对应的拨码器状态。且该pcb孔位、大小完全适配拆了散热外壳后的步进电机驱动模块,能直接安装在驱动上,省空间。

PCB设计分析

由于主要难度在电控编程上,因此对于PCB的布线难度较小,有一定基础即可,没有需要特别注意的地方。

四、视觉部分

很多人觉得视觉难,是因为没办法搭建深度学习的训练环境,巧合的是,本人主持的大创项目正好的关于视觉神经网络的,对于懂的人识别数字十分简单,但是要在嵌入式上载入模型,对于小白来说还是有难度的。我这里只介绍一种极简方法,不需要懂神经网络内涵,手把手小白入门教学。 本人比赛使用的是OpenMv4 Plus,这是支持神经网络最低配的一款,当然K210、树莓派等都可以吊打Openmv,但是由于比赛没有准备其他两款,只能选择普普通通的Openmv了。 先上结果:

神经网络的训练:

//大神请忽略此部分~~~ 在线端训练网站:https://studio.edgeimpulse.com

1、使用Opemv采集数据

打开 工具-数据集编辑器-新数据集 创建相应数字的文件夹 通过helloworld.py例程来采集图像,需要把画质改为QQVGA 多加sensor.set_windowing(20,76,40,40) #框选位置,左右都需要

import sensor, image, timesensor.reset() # Reset and initialize the sensor.sensor.set_pixformat(sensor.GRAYSCALE) # Set pixel format to RGB565 (or GRAYSCALE)sensor.set_framesize(sensor.QQVGA) # Set frame size to QVGA (320x240)sensor.set_windowing(20,76,40,40) #框选位置自己修改成合适的sensor.skip_frames(time = 2000) # Wait for settings take effect.clock = time.clock() # Create a clock object to track the FPS.while(True): clock.tick() # Update the FPS clock. img = sensor.snapshot() # Take a picture and return the image. print(clock.fps()) # Note: OpenMV Cam runs about half as fast when connected # to the IDE. The FPS should increase once disconnected.

然后开始采集,将数字放在左右两边,两边都要采集大概几十到一百张。

2、在网站导入图像(Create impulse)

从openmv IDE通过API密匙上传采集到的数据集。

3、调整图像(Image)

按默认设置就好了。

4、迁移学习(Transfer learning)

参数也是按默认就行。

5、保存模型(Versioning)

及时做好备份,这是云端的,防止多次采集训练后效果还没以前某一次好。

6、导出模型

下载神经网络后解压导入Openmv,完成。

运行代码:

下面是Openmv端运行代码,代码含模板匹配,移步星瞳官网文档,写得比我好。 Openmv端程序框图:

主程序:

import time, sensor, image,os,tffrom image import SEARCH_EX, SEARCH_DSfrom pyb import UART#从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX,#SEARCH_DS两个需要的部分,而不把image模块全部引入。uart = UART(3, 9600)# Reset sensorsensor.reset()# Set sensor settings# Max resolution for template matching with SEARCH_EX is QQVGAsensor.set_framesize(sensor.QQVGA) #推荐QQVGA,能提高识别速度# You can set windowing to reduce the search image.#sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60))sensor.set_pixformat(sensor.GRAYSCALE)net = "trained.tflite" #导入神经网络labels = [line.rstrip('\n') for line in open("labels.txt")] #导入模板# Load template.# Template should be a small (eg. 32x32 pixels) grayscale image.template1 = ["/1.pgm"]template2 = ["/2.pgm"]template3 = ["/3.pgm","/3a.pgm","/3b.pgm"]template4 = ["/4.pgm","/4a.pgm","/4b.pgm"]template5 = ["/5.pgm","/5a.pgm","/5b.pgm"]template6 = ["/6.pgm","/6a.pgm","/6b.pgm"]template7 = ["/7.pgm","/7a.pgm","/7b.pgm"]template8 = ["/8.pgm","/8a.pgm","/8b.pgm"]A0=1A9=1B0=1A1=0A2=0A3=0A4=0A5=0A6=0A7=0A8=0B0=1C0=1C1=0C2=1D0=1D1=1#加载模板图片clock = time.clock()# Run template matchingwhile (True): clock.tick() img = sensor.snapshot() while(A0): #开始模板匹配识别手持数字 clock.tick() img = sensor.snapshot() t1 = image.Image(template1[0]) r1 = img.find_template(t1, 0.80, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r1: img.draw_rectangle(r1) A1=1 A0=0 t2 = image.Image(template2[0]) r2 = img.find_template(t2, 0.80, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r2: img.draw_rectangle(r2) A2=1 A0=0 t3 = image.Image(template3[0]) r3 = img.find_template(t3, 0.85, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r3: img.draw_rectangle(r3) print('3') #打印模板名字 A3=1 A0=0 t4 = image.Image(template4[0]) r4 = img.find_template(t4, 0.80, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r4: img.draw_rectangle(r4) print('4') #打印模板名字 A4=1 A0=0 t5 = image.Image(template5[0]) r5 = img.find_template(t5, 0.80, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r5: img.draw_rectangle(r5) print('5') #打印模板名字 A5=1 A0=0 t6 = image.Image(template6[0]) r6 = img.find_template(t6, 0.80, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r6: img.draw_rectangle(r6) print('6') #打印模板名字 A6=1 A0=0 t7 = image.Image(template7[0]) r7 = img.find_template(t7, 0.80, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r7: img.draw_rectangle(r7) print('7') #打印模板名字 A7=1 A0=0 t8 = image.Image(template8[0]) r8 = img.find_template(t8, 0.85, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60)) if r8: img.draw_rectangle(r8) print('8') #打印模板名字 A8=1 A0=0 while(A9): #识别到数字,发送指令给主控 if A1==1: uart.write('1') print('1') #打印模板名字 num=1 A9=0 if A2==1: uart.write('2') print('2') #打印模板名字 num=2 A9=0 if A3==1: uart.write('3') print('3') num=3 A9=0 if A4==1: uart.write('4') print('4') num=4 A9=0 if A5==1: uart.write('5') print('5') num=5 A9=0 if A6==1: uart.write('6') print('6') num=6 A9=0 if A7==1: uart.write('7') print('7') num=7 A9=0 if A8==1: uart.write('8') print('8') num=8 A9=0 while(True): #接受到主控指令,可以进行识别数字 while(B0): if (uart.any()): B = uart.read() print(B) if B==b'1': print("1") B0=0 C0=1 while(C0): img = sensor.snapshot() #神经网络识别右边数字 roiL=(20,76,40,40) for obj in tf.classify(net, img, roiL,min_scale=1, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5): print("**********\nPredictions at [x=%d,y=%d,w=%d,h=%d]" % obj.rect()) img.draw_rectangle(obj.rect()) predictions_list = list(zip(labels, obj.output())) for i in range(len(predictions_list)): print("%s = %f" % (predictions_list[i][0], predictions_list[i][1])) num1=ord(predictions_list[i][0])-48 if predictions_list[i][1]>0.7 and num1==num: uart.write('1') print('11') C1=1 C0=0 roiR=(89,77,40,40) #神经网络识别左边数字 for obj in tf.classify(net, img, roiR,min_scale=1, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5): print("**********\nPredictions2 at [x=%d,y=%d,w=%d,h=%d]" % obj.rect()) img.draw_rectangle(obj.rect()) predictions_list2 = list(zip(labels, obj.output())) for p in range(len(predictions_list2)): print("%s = %f" % (predictions_list2[p][0], predictions_list2[p][1])) num2=ord(predictions_list2[p][0])-48 if predictions_list2[p][1]>0.7 and num2 == num: uart.write('2') print("22") C1=1 C0=0 if C1==0: uart.write('0') print("00") print(clock.fps(), "fps")五、机械部分

1、整车模型

如图为小车机械结构3D图。前轮采用两个牛眼轮进行辅助支撑,后轮为步进电机驱动的动力轮。长21cm、宽19.5cm、高24.5cm。 图中1为牛眼轮,2为八路灰度传感器模块,3为小车底板,4为六角铜柱,5为单片机和PCB扩展板,6为摄像头支架固定底座,7为OpenMV摄像头,8为药品,9为药仓,10为红外对射模块,11为步进电机驱动板,12为普通轮子,13为步进电机,14为12V锂电池,15为支撑座。

2、车底盘图

如图为车底盘CAD图,使用激光切割亚克力制成。厚度4mm左右。

最终成品图:

总结

1.选择自己最擅长的方案。不要去尝试其他不熟悉的方案,因为4天3页时间真的很紧急。打算做控制类一定要把通用代码准备好,如PID,视觉双机通信等。

2.作为队长要根据每个队员的优势长处设定任务,队长要担任起进度规划的重任,经常是“单核多线程”工作。每个队员都要有强烈的责任感,在选队员上是关键。例如我们队伍有一个机械,负责车组装和3d建模打印等操作,效率极高,半天时间就设计完,一天不到就组装出第一台车,为我们队伍节省了非常多宝贵的调试时间。

3.运气也是实力的一部分。本次比赛的题目非常符合我们队伍阵容,车控电控、神经网络、机械,完美适配我们三人的优势,也许这些都是命中注定。

4.颁奖典礼时听王越院士说到:建议电赛以后的题目越来越多的人工智能,现在机器学习、深度学习实在太火了,掌握深度学习这项技能十分重要,如果不懂视觉,这次的电赛可能就没办法打了。

附件

B站演示视频:https://www.bilibili.com/video/BV1Qb4y1i7Sn/

主控电路工程:https://oshwhub.com/AngleLeon/gong-ke-sai-xin-hao-zheng-ge-ban_copy#P5

主控代码:https://download.csdn.net/download/weixin_45902201/76727241

Openmv端代码:https://download.csdn.net/download/weixin_45902201/76727631

想白嫖代码请访问立创开源平台,不想麻烦可以直接下载

本文链接地址:https://www.jiuchutong.com/zhishi/298391.html 转载请保留说明!

上一篇:【真相】ChatGPT和OpenAI的API KEY(真相 百科)

下一篇:从零开始,打造属于你的 ChatGPT 机器人!(从零开始打造神级文明)

  • java decimal(java decimal转换成string)

    java decimal(java decimal转换成string)

  • vivox70怎么开5g(vivoy70s怎么开5g)

    vivox70怎么开5g(vivoy70s怎么开5g)

  • 华为mate40epro怎么调节声音(华为Mate40epro怎么清理运行)

    华为mate40epro怎么调节声音(华为Mate40epro怎么清理运行)

  • 苹果照片上怎么显示地点和时间(苹果照片上怎么写字)

    苹果照片上怎么显示地点和时间(苹果照片上怎么写字)

  • 注销陌陌出现余额未结清(陌陌注销账号里面有余额怎么办)

    注销陌陌出现余额未结清(陌陌注销账号里面有余额怎么办)

  • 微信聊天背景尺寸大小是多少(微信聊天背景尺寸是几比几)

    微信聊天背景尺寸大小是多少(微信聊天背景尺寸是几比几)

  • 苹果7呼叫转移一直转圈(苹果7呼叫转移一直转圈怎么弄)

    苹果7呼叫转移一直转圈(苹果7呼叫转移一直转圈怎么弄)

  • 怎么没有撤销退款申请(为什么找不到撤销退货退款申请)

    怎么没有撤销退款申请(为什么找不到撤销退货退款申请)

  • 后置tof镜头有什么用(镜头后置是真实的自己吗)

    后置tof镜头有什么用(镜头后置是真实的自己吗)

  • 顶级域名和一级域名的区别(顶级域名一级域名二级域名三级域名什么区别?)

    顶级域名和一级域名的区别(顶级域名一级域名二级域名三级域名什么区别?)

  • 描述文件是什么意思(配置描述文件是什么)

    描述文件是什么意思(配置描述文件是什么)

  • 怎么让拼多多好友看不到我买的东西(怎么让拼多多好友看不见自己的订单)

    怎么让拼多多好友看不到我买的东西(怎么让拼多多好友看不见自己的订单)

  • iphone11 64g够用吗

    iphone11 64g够用吗

  • 微信解封没有收到验证码是怎么回事(微信解封没有收到好友的邀请)

    微信解封没有收到验证码是怎么回事(微信解封没有收到好友的邀请)

  • 快手更新后私信在哪(快手最新版本私信没了)

    快手更新后私信在哪(快手最新版本私信没了)

  • 路由器ac1200什么意思(路由器的ac1200)

    路由器ac1200什么意思(路由器的ac1200)

  • 电脑的平板模式是什么意思(电脑的平板模式怎么开启)

    电脑的平板模式是什么意思(电脑的平板模式怎么开启)

  • netware是网络操作系统吗(netsh network)

    netware是网络操作系统吗(netsh network)

  • 大数据的核心能力是什么(大数据的核心技术是什么)

    大数据的核心能力是什么(大数据的核心技术是什么)

  • windows系统中的桌面是指

    windows系统中的桌面是指

  • IPAD如何强制解锁(ipad强制解锁教程)

    IPAD如何强制解锁(ipad强制解锁教程)

  • 怎么用vue给视频加图片(vue视屏)

    怎么用vue给视频加图片(vue视屏)

  • 手机下载管理器在哪里打开(手机自带浏览器下载安装)

    手机下载管理器在哪里打开(手机自带浏览器下载安装)

  • vivoy3是哪年出的(vivoy3什么时候出的)

    vivoy3是哪年出的(vivoy3什么时候出的)

  • x27怎么开视频美颜(x27怎么开视频美颜相机)

    x27怎么开视频美颜(x27怎么开视频美颜相机)

  • QQ邮箱怎么登录(qq邮箱怎么登录网易邮箱账号)

    QQ邮箱怎么登录(qq邮箱怎么登录网易邮箱账号)

  • 手机自带监控功能怎么开启(手机自带监控功能都是啥)

    手机自带监控功能怎么开启(手机自带监控功能都是啥)

  • 最优化理论笔记及期末复习(《数值最优化》——高立)(最优化理论pdf)

    最优化理论笔记及期末复习(《数值最优化》——高立)(最优化理论pdf)

  • python模块的搜索路径和顺序(python模块的搜索路径)

    python模块的搜索路径和顺序(python模块的搜索路径)

  • 金税盘证书密码被锁死
  • 税务免抵调库是什么意思
  • 2021城建税
  • 培训学校可以不可以用燃气取暖炉
  • 个人专项扣除需要扣税吗
  • 印花税销售额的多少
  • 社保缴费回单怎么查
  • 委托付款税务认可吗
  • 非盈利组织收到投资款如何做账
  • 进项税额转出怎么算
  • 技术成果投资入股企业所得税递延纳税备案表
  • 单位投资非盈利性组织怎样核算
  • 出口退税申报流程视频
  • 中小微企业优惠政策落实措施
  • 融资租赁的服务费的标准
  • 购买国税金税卡年费应该怎么做账务处理?
  • 新会计准则要求
  • 软件企业增值税退税的账务处理
  • 税号里面有字母吗
  • 房地产企业不可能没有合同台账
  • 如何确定旧机器的折旧年限?
  • 统借统还的所得税政策
  • 房地产预收房款怎么开票
  • 未分配利润期末余额怎么算出来
  • 公司老板垫付的钱怎么做账
  • 公司销售二手车怎么做账
  • 现金日记账如何结账
  • 会计谨慎性原则是指
  • 销售商品包装材料怎么做
  • 局域网的工作模式及特点
  • 申报高新企业的当年一定要研发费用加计扣除吗
  • 加班费如何做账
  • php教程 ftp 函数
  • 游泳耳朵进水怎么办
  • php显示文件目录及路径
  • 企业购买预付卡送人分录
  • uniapp传值
  • ts基础类型
  • 长期应付款项目的列示金额
  • 企业在什么情况下会被列入经营异常
  • win11开机后开始菜单没反应
  • 应收账款和应付账款都是负数
  • 国税网如何下载申报后的财务报表
  • 分期收款销售产品
  • java默认访问权限修饰符
  • js在数组中查找指定元素
  • mongodb从入门到商业实战
  • 个体户核定征收超过了怎么办
  • c#窗体类属性和方法
  • 收回上年度拨款怎么做账
  • 应收账款和应付账款属于什么科目
  • 以个人名义汇货要交税吗
  • 水利基金和印花税的计税依据一样吗
  • 其他应付款贷方正数表示什么意思
  • 小规模纳税人利润如何缴税
  • 递延所得税资产怎么计算
  • 应交个人所得税借方余额表示什么
  • 国内旅客运输票据可以抵扣进项税吗
  • 不开票收入怎么做账
  • 明细分类账怎么打印
  • mysql5.5安装配置教程
  • 用心一也的一是什么词类活用
  • 苹果macOS 14 正式发布
  • Win10 Mobile 10572预览版新增中文简体五笔输入法
  • macbookpro4399小游戏
  • win10系统收不到wifi信号
  • linux创建目录函数
  • 安卓查看安装包
  • 不宜用于
  • 微信jssdk vue
  • javascript取随机数
  • unity learning
  • 浏览器判断手机品牌
  • django返回json数据
  • 容易混淆的词汇
  • pycharm flask框架
  • 贵州省税务网上缴费平台
  • 提高税务管理水平,降低税务风险
  • 税务局与税务所工资哪个高
  • 小店区国税地税局地址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设