Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DIY
OPENMV
RA8-M85-vision-board
【RT-Thread 全球电子设计大赛】基于vision board 的巡检除冰机器人
发布于 2024-09-12 08:27:17 浏览:916
订阅该版
[tocm] 首先,要感谢RTT的活动,让我有机会能用这个最新的板子----vision board 开发新的项目。 介绍一下这个项目的基本情况,这个项目是关于电力高架线巡检的,主要任务就是负责巡检和除冰,巡检的主要内容就是看看线路的情况,有没有比较基本的故障,比如接地短路,断线故障,或者是一些个杂物等等,有了杂物之后通过机械臂进行清楚或一些其他处理,同时需要对线网的外观进行一些检测,看看有没有一些特别明显的熔断或者破损情况,由于这个机器人是在线上行进的,所以对比传统的线下人工巡检,从细节上讲,机器人的摄像头应该能更好的更清楚的发现一些问题,除了这两种功能以外,我还打算用vision board尝试一下用它检测线路上的结冰图像,主要用的就是tflite,和openmv的开发方式,基于RT-Thread为底层的micropython固件,由于项目本身的原因,对于visionboard的使用主要集中在应用开发方面,包括线路识别,线路细节识别,杂物识别,结冰情况识别以及一些通信外设的使用,还有就是关于板子上自带的WiFi模块的图传功能,这也是项目本身需要的。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/c5489a1a1173c8fa9bf60ca1c3acf04d.png.webp) 线路识别的基础就是看摄像头能不能识别出来高架线,对于直接架在线路上的机器人来说,摄像头所捕捉到的线路还是比较大的,所以vision board 的板载摄像头应该是够的,为了简单起见,我先使用了openMV的程序,里面有比较方便的线路识别程序。 经过几次尝试,我感觉这个程序还是比较符合我的预期, ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/b9497227e5f31d71d0f744c6d3a5d659.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/9fa48df5c57a68eaea217eaed36286c0.png.webp) 线段的起始位置点坐标,在实际运行的时候,其实并不需要这些坐标,因此要把代码中的打印删除,只需要保留一个判断存在不为空的语句就可以了。 这个功能最主要的目的是用来判断线路的断线或者短路情况,有时直接看照片会比较模糊,如果加上这样的线标在图片上,有助于观察线路的情况,比如出了断线或者短路接地等纵向或者横向故障,标出来就更一目了然了。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/2e1bb64fd0024cd5d340283ea05bcf55.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/691f6138ddfa8bfa4d938cf01ca66e3a.png.webp) 经过调试,发现识别线路在0.5mm左右感觉识别的效果最好 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/ab525df997873c2162691310275912e8.png.webp) 对于整体是有很多线段那种情况,我感觉实际应用工程中,如果讲摄像头云台调转到比较近的地方,基本上不需要识别出那么多的线段,最多也就两三条,如果是多分裂导线那么也就四五条的样子, vision board 的openmv固件几乎支持所有的基本识别函数,我用了另一个识别“线”的文件或者是函数,但是发现他是用来寻找直线的,而且必须最好是那种贯穿的直线,所以对于本项目那种需要识别出线段的情况其实不是很合适,一方面场景不对,另一方面用处不太合适,但是并不是是说这个板子识别的慢,我针对这个函数特意检测了一个电脑那个屏幕那样的,发现速度还是非常可观的,足以证明只要用好这个板子,是可以胜任很多工作。 还有一个主要的功能是结冰识别和杂物识别,由于vision board 能使用Tflite这样的工具,我尝试能不能把他们放在一起进行识别,感觉这样是对芯片能力的一种考验吧。电力巡检常见的两种杂物,容易挂在线路上的,主要是塑料袋和鸟巢,因为数据集比较特殊,没有什么现成的数据集可以用,所以从百度上找了一些,看了几千张图片,发现符合我要求的并不多,感觉更对算法和芯片的能力提出了要求,因为之前我用k210弄的数字识别,相当不理想,这回看看瑞萨的怎么样(他甚至没有什么专门的神经网络硬件加速单元) 先放上点数据集的图,转换的时候有水印,但是最后发现一点也不影响。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/abff0af842cba9f1cece8142fdc1fec5.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/703c8d42663b070b7d6dc0b8124073d8.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/744625a46c2f0fcd1bb524f0d3911505.png.webp) 用的是这个网站,感觉比k210的要好的多,不用排队,功能也强很多 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/cead2495a06283828ed23302d9ad8391.png) 直接搜完注册就能用,没有什么门槛,也不收费,就是界面全是英文的,我当时是看的哔站上的这个up主的视频,我觉得非常好。 - 【【RA8D1-Vision Board】基于OpenMV 实现图像分类】 https://www.bilibili.com/video/BV1Rk7DeZETe 直接跟着操作就可以了,简直可以称得上是保姆级教程,有一点要提的是,图片的扩展名需要是一样的,我图方便就用的那种在软件商店里面下载的格式转换器,虽然有一点水印,但是最后的结果感觉几乎没有什么影响。 以下是我训练的一些配置 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/cb555a9462789beef51abdfb266937ab.png.webp) 这个部分在原来的视频当中没有出现,因为他视频里面选的是H7内核的那个,现在更新上来了,网站里已经有了配置,我是这么填的,感觉没出现什么错误,其他的都很正常。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/d71393db4255c59f93fafbc1c9b7ecfb.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/2f15822dc51190ecfd705d45449a9225.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/d5c0e97b795c71a86dfbc6f512428270.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/f0c9d81affdee4746442d15db89d237e.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/c8432d93cd6359e7c19846c7820ac5ec.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/358fe5e81770b0b4990e981f5409863d.png) 之后是测试结果 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/87dee21f0e31e144e17e8a646ef116f9.png.webp) 可以看到它在检测鸟巢的时候准确率还是很好的,整体是在80-90%左右,刷新的很快,截图的时候就恰好是这个准确度,反正k210是达不到这个效果。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/ffc0495e197e2d0234249a26fd2e731f.png.webp) 这是在识别结冰线路的时候的数据,准确度还是可以的。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/45a0bb8af139a840b4bef3b76cc65339.png.webp) 由于我想收集和训练的数据其实是那种挂在高架线上的垃圾袋,为啥电力巡检有的时候要看这个,是因为有的时候,塑料袋加上雨天,可能会导致绝缘子闪络甚至击穿,或者是那种非永久性的短路,比如一重合闸就又好了,但是这些虽然听起来离谱,但是实际上确实要处理的,否则继保一跳闸,还是得去清理。找遍了网上发现复合要求的感觉不多,陆续在几个网站上看了几千张,几乎很少有那种“标准数据集”,只好用这些“飞舞的垃圾袋”代替,准确率也是很高的。 在识别到结冰图像的时候,我在visionboard设置了一个引脚用来和电机控制板通信,之前想用串口来着,但是感觉一是不需要那么复杂的逻辑,还有就是要考虑到在高压电场和电晕放电下的对通信线路的干扰肯定会不小,所以定义了一个引脚,检测到结冰图片的时候,低电平,未检测到的时候就是默认高电平,这样抗干扰会好一些。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/f3c5e00b11c498d3df0340a009eab1aa.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/85e01a138d97579328c939c12820bc0c.png.webp) 下面是识别的完整代码 ```python # Edge Impulse - OpenMV Image Classification Example import sensor, image, time, os, tf, uos, gc from pyb import Pin 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. #定义标志位引脚 p_out = Pin(("GPIO_25",508), Pin.OUT_PP) net = None labels = None 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: print(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) + ')') clock = time.clock() while(True): clock.tick() img = sensor.snapshot() # default settings just do one detection... change them to search the image... for obj in net.classify(img, min_scale=1.0, 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()) # This combines the labels and confidence values into a list of tuples 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])) if predictions_list[2][1] >= 0.9: p_out.value(0) else: p_out.value(1) #print(clock.fps(), "fps") ``` 最后要提一点的是,这个vision board的micro python库是基于RT-Thread的mpy固件,其中一些外设是做了适配的,这需要去看原来编译固件的时候的c的代码,其中一些细节,比如GPIO的名称,里面会有。 最后完成的整体图: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/c7b69bc076581a8f1fe910cdedf3b083.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240912/33b2884efe415e26214c6ecfee751eff.png.webp)
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
单片机单片魂
这家伙很懒,什么也没写!
文章
5
回答
1
被采纳
1
关注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脚本中实现和其它线程通信?
9
小型可视化个人助理终端【鲁亮】
10
Vision Board 兩個專案編譯問題
推荐文章
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
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部