Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
OPENMV
【24嵌入式设计大赛】基于RT_Thread Vision Board的光伏板清理机器人
发布于 2024-09-14 23:56:27 浏览:289
订阅该版
[tocm] ##1.前言 随着全球对可再生能源需求的日益增长,光伏发电作为一种清洁、可持续的能源形式,在能源结构中的地位逐渐提高。然而,光伏板的发电效率极易受到外部环境的影响,尤其是灰尘、污垢、鸟粪等遮挡物的积累,会显著降低光伏系统的能量输出。研究表明,光伏板表面附着的灰尘和污垢会导致发电效率下降5%至30%,甚至更高。因此,光伏板的定期清洁对于维持其高效运行至关重要。同时避免了人力维护成本高,投入时间长,部分难操作等情况。结合当前人工智能技术,有个能自动进行光伏板灰尘清理的机器人是个值得研究的方向。 ## 2.总体框架 总体的设计思想,通过RA8D1控制器搭载的RT-Thread操作系统,与TensorFlow Lite ,OpenMV实现光伏板上灰尘,障碍识别,然后对障碍物,灰尘等进行清理。实现发电效率最大化,以下是总体的设计结构。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/fc37be2ac5e58082ff25c218f8b3d41b.png) 清洁光伏板的前端,通过两个圆形的洗刷工具,自带电机,只需要给控制命令,不需要精确的控制。同时洗刷工具也接了导水管,给控制命令后即可开始清洗工作。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/07ed2e8e0ef70d0874837e4fadbef953.png.webp) ## 3.开发配置 下载Vision Board相关资料,包括SDK,Openmv软件等,进入Vision Board\SDK\sdk-bsp-ra8d1-vision-board\projects\vision_board_openmv下,将library文件夹和rt-thread 文件夹复制到此路径。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/654a0c2a4df7dc1e043e6856b32beee0.png.webp) 右击工程空白的地方,使用ENV打开 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/450fb106905986d93cb493610f24250b.png.webp) 输入menuconfig打开配置界面,Enable OpenMV for RT-Thread—>目录下,打开Enable tflite support功能,然后保存。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/19485cc4d66726ccef1578328534759d.png.webp) 输入scons —target=mdk5重新生成mdk工程 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/4478d67e1a76e7ad5733008b08790bad.png) 点击新生产的工程文件,编辑,烧录 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/fa2367008cc4ea109f514629a5cf4ddd.png.webp) ## 4.模型训练 本次使用的是Edge impluse,需要先注册账号,然后新建project,依次点击Dashboard->Add existing data->Upload data。这里的素材需要提前准备好,以及图片的大小需要先处理好,选择相关文件后选择上传即可。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/2df92c80cd2c4bcb3b21c63507cdad21.png) 保存后点击左侧Impulse design->Create Impulse,依次点击Add a processing block、Add a learning block进行输入数据对象、训练模型的选择,并点击保存,为了生成特征 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/fcfb4e6b40f539e474cd974be88472d9.png.webp) 接下来点击左侧Image,Color depth选择RGB,点击保存。接下来会自动跳转到生成特征界面,点击生成特征按钮,等待特征生成。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/b0fd32fd477244fbab4b49044b799851.png.webp) 本次生成的特征如下: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/b1b77763597cc811225718ebabd3ec05.png) 接下来开始训练,这里主要是提供的训练数据原因,导致的训练结果异常,这里可以通过调整参数来进行训练,直到达到自己想要的效果,下面是第一次训练 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/0e2fffcef822d714d0e6a1bd4c531f64.png.webp) 调整参数后: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/8e9dd9d97e0cf90a32823a639f88582c.png.webp) ## 5.模型部署 如下图所示,点击部署,选择openmv库,生成压缩包 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/9d196ff867d9235878e675ede4c6aac7.png) 以下是解压后的估计,标签,训练模型以及代码 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/d6d76748c1fa025dbd41967167f70e82.png) 将代码重命名,且将这几个拷贝在内存卡里面即可 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/2def84eacfb2c4ea4ee652c4cf485b0c.png) 打开Openmv软件,连接开发板,打开main.py,同时可以打开终端看识别效果,当然代码自己做了调整,已经根据自己的需求进行调整。 ```c # Edge Impulse - OpenMV Object Detection Example import sensor, image, time, os, tf, math, uos, gc sensor.reset() # Reset and initialize the sensor. sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE) sensor.set_framesize(sensor.QVGA) # Set frame size to QVGA (320x240) sensor.set_windowing((240, 240)) # Set 240x240 window. sensor.skip_frames(time=2000) # Let the camera adjust. net = None labels = None min_confidence = 0.5 try: # load the model, alloc the model file on the heap if we have at least 64K free after loading net = tf.load("trained.tflite", load_to_fb=uos.stat('trained.tflite')[6] > (gc.mem_free() - (64*1024))) except Exception as e: raise Exception('Failed to load "trained.tflite", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(e) + ')') try: labels = [line.rstrip('\n') for line in open("labels.txt")] except Exception as e: raise Exception('Failed to load "labels.txt", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(e) + ')') colors = [ # Add more colors if you are detecting more than 7 types of classes at once. (255, 0, 0), ( 0, 255, 0), (255, 255, 0), ( 0, 0, 255), (255, 0, 255), ( 0, 255, 255), (255, 255, 255), ] clock = time.clock() while(True): clock.tick() img = sensor.snapshot() # detect() returns all objects found in the image (splitted out per class already) # we skip class index 0, as that is the background, and then draw circles of the center # of our objects for i, detection_list in enumerate(net.detect(img, thresholds=[(math.ceil(min_confidence * 255), 255)])): if (i == 0): continue # background class if (len(detection_list) == 0): continue # no detections for this class? print("********** %s **********" % labels[i]) for d in detection_list: [x, y, w, h] = d.rect() center_x = math.floor(x + (w / 2)) center_y = math.floor(y + (h / 2)) print('x %d\ty %d' % (center_x, center_y)) img.draw_circle((center_x, center_y, 12), color=colors[i], thickness=2) print(clock.fps(), "fps", end="\n\n") ``` ## 6.效果 光伏板上的障碍物检测效果: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240914/2f3948ec0db8c210d4252df574ff3b83.png.webp) [演示.zip](https://club.rt-thread.org/file_download/3b1071982b2c8001)
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Zght
这家伙很懒,什么也没写!
文章
7
回答
1
被采纳
0
关注TA
发私信
相关文章
1
OPENMV软件包怎么使用
2
OPENMV STM32H7 编译失败
3
openMV+micropy与RT1064的一个尝试
4
Vision Board连接不上OpenMV IDE
5
Vision Board使用openmv无法下载脚本
6
在visonboard开发中尝试在openmv中加载个人训练的YOLOv5模型,报错,超出内存
7
Vision Board 的openmv如何部署socket 模块
8
Vison Board 如何在openmv 、main.py脚本中实现和其它线程通信?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部