栈板识别的思考

news2024/11/15 21:39:51

0.啰嗦几句

最近公司又变动了,所以又做了一个关于视觉的项目。简单说就是栈板定位,主要应用在AGV叉车上,当然这一套流程基本适用于所有的视觉项目。主要是看算法的设计和一些人为的经验。

1.结果图

在这里插入图片描述
在这里插入图片描述
可以看到在图像上3个托盘都分割出来了,然后现在的数据是栈板中心点的x、y、z、含有栈板插取面的倾斜角rotx、栈板识别的时间、栈板识别的置信度、还有一个栈板水平的倾角

2.视觉项目的流程

2.1 取图

获取图像是最重要的一步,毕竟巧妇难为无米之炊。一个视觉的项目做的好不好或者能不能做,80%的原因就在于数据的获取。
这次的数据是是用了sick 的visionary-t mini 。这个相机可以获取2种数据,一个是强度图一个是深度图。深度图可以转为点云图。所以这就意味着我们可以使用3种数据去完成栈板的识别。那么选择哪一个?或者怎么组合才是最好用的呢。

经过我的猜测和测试,我使用的是强度图和深度图相与,然后经过4分位获取的图像数据去训练模型。

2.2 训练

训练这一步没啥好说的,首先根据项目的要求,(包括检测的时间、精度、部署的设备、后期的更新和维护等),找到对应的baseline。我这里就直接使用yolov7(因为yolov8的协议要求使用yolov8的代码要开源)。

2.3推理

其实我第一个版本使用的是paddle 的 fastdeploy推理框架。首先是真的简单,易安装易使用。但是模型更新后也是真的难改,而且再把训练好的模型转为onnx,然后再推理框架推理的时候,效果总是比pytorch原版差很多。期间我还使用了mmdetec的推理框架,在win下也是很难用。
最后还是老老实实的的用yolov7的源代码,就用pytorch。别整那么多幺蛾子了。

2.4 软件开发

软件开发的主线是,
AGV小车给触发信号,软件收到触发信号,然后获取相机的一帧数据,然后使用模型推理,获取数据中栈板的位置,再通过坐标转化,转为AGV小车的位置信息
重点:
1.和AGV小车通讯是把软件作为tcp server 。和相机通讯是把软件作为tcp client。
2.获取相机的图片数据并把数据展示在软件上要使用多线程。
3.相机坐标系下的数据要和AGV小车的坐标系做标定

其他还有一些软件的功能就不再介绍,总之把握好主线就行。

3.一些思考和一些问题

3.1数据

其实相机获取的数据是没办法直接训练的,不管是强度图还是深度图。要不就是数据的范围太大,比如强度图从0-200000。如果直接映射到0-255  势必导致很多信息丢失。要不就是数据相似没有边缘特征,比如深度图,栈板和物体在相机下基本一致。栈板和地板上的数据也基本一致。而且客户要求的检测范围1.5m到3m 。把1500 映射到0-255也是会导致很多信息丢失。
我现在的做法是
1.把深度图做一个过滤,把小于1500变成0  大于也3000的变成0
2.使用强度图和深度图相与。这样就过滤掉一部分强度数据
3.取强度图的4分位数据,原因是看数据的直方图
![在这里插入图片描述](https://img-blog.csdnimg.cn/af7145020b134dbd9c76516e4b42bd58.png)

在这里插入图片描述
我们可以看到数据其实大部分在一个区间范围的,而且这个范围没有0-2000000那么大。大概可以看出来物体远一点就在0-255
物体近一点就在0-500左右。
所以我使用4分位获取 90%数据在那个范围。然后把数据裁剪到这个范围内再去做映射就会获得更好的效果。
最后在用一个直方图均衡保证图像的亮度均匀。
todo
这个还没有实际测试,所以在实验室效果还不错

3.2 结果

3.2.1 平面拟合

可以看到客户要求的结果还是挺多的,其中rotx是我们通过模型无法算出来的结果。
所以,我才用了平面拟合算法。获取栈板的平面法向量,然后用这个法向量作为栈板的倾斜角。
其中平面拟合算法,弄了好久。因为一开始使用的最小二乘法。这个算法有个优点就是快,但是缺点也很明显,对数据要求高。如果拟合平面的点是错误的,那么拟合的平面也是错误的。所以我们思考了好久怎么选取正确的点。后来发现怎么选择都是错的,因为这个算法就不适应。所以后面换成了使用RANSAC算法拟合平面。效果也是出奇的好。

3.2.2 直线拟合

客户还要栈板平面是否平整的判断,我只能说,虽然难,但是难不倒我。
我直接用模型推理的结果,然后做一个直线拟合,这样就可以把矩形框倾斜了。当然也获得了对应的倾斜角。
在这里插入图片描述

4.总结一下

对于视觉的项目,要多积极的思考。没有一个万能的模型。
我们可以通过数据,通过传统的机器视觉,通过统计学习。综合的思考才能完成项目
byd 数字图像处理(冈萨雷斯)真是太棒了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

青少年机器人技术一级核心知识点:机械结构及模型(三)

随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…

2024考研408-计算机组成原理第七章-输入输出系统学习笔记

文章目录 前言一、IO系统基本概念1.1、输入/输出系统基本概念1.1.1、现代计算机的结构1.1.2、常见的I/O设备1.1.3、主机与I/O设备如何进行交互?(认识I/O接口)1.1.4、I/O系统的基本组成(I/O硬件、I/O软件)本节回顾 1.2、…

标配8155,智驾延续「高低配」,小鹏G6能否挽回颜面?

对于小鹏汽车来说,G6就是最后的尊严。 高工智能汽车研究院监测数据显示,2023年1-5月,小鹏汽车交付量为3.22万辆,同比上年同期下滑39.81%,是「蔚小理」三家新势力中唯一下滑的一家。 去年上市的G9(何小鹏口中…

基于声音信号的工业设备异常检测

异常检测主要目标是将异常事件与正常事件区分开来,因此才有了“异常”一词。本文将介绍基于声音信号的工业机械异常检测,使用的数据集是MIMII声音数据集,该数据集很容易在网上获得。 异常检测的任务可以通过多种方式实现。其中最简单的一种方…

Hadoop基础——HDFS知识点梳理

HDFS基础知识 1. 介绍一下HDFS组成架构? 组成部分: HDFS Client,NameNode,DataNodeSecondary NameNode( HA模式下是 StandBy NameNode) Client: 客户端 文件切分,文件上传HDFS时,client将文件切分成一个一个的block&#xff0…

玩转中文AI模型攻略——ModaHub魔搭社区攻略

目录 1. 注册和登录: 2. 浏览和搜索: 3. ModaHub排行榜: 4. AI应用导航: 5. 向量数据库: 6. 企业Chatbot: ModaHub魔搭社区是一个中文AI模型开源社区,旨在为开发者和研究者提供一个交流、…

抓住出海中东热潮,茄子科技(海外SHAREit Group)有效助力游戏企业出海

近年来,随着国际形势的紧张,不少中国出海企业在海外市场营收受到了不同程度的影响。为摆脱这一困境,大家开始将目光瞄准了海外新兴市场,其中中东以其高速的增长,量利双收的回报赢得了不少中国出海企业的青睐。 与此同…

FastDDS源码剖析:源码结构分析

include: 包含Fast-DDS的头文件。这些头文件定义了库使用的公共API和数据结构。 src: 包含Fast-DDS库的源代码文件。这包括各种组件的实现,例如发布者、订阅者、主题和RTPS协议。 cpp: c实现Fast-DDS的主要源代码。 pcp -fastdds: Fast-DDS公共API的实现。 rtps: …

【AI】清华开源中英双语对话模型ChatGLM2-6B本地安装笔记

清华开源中英双语对话模型ChatGLM2-6B本地安装笔记 首先,直接上资源,网盘中是ChatGLM2-6B源码及模型文件: 链接:https://pan.baidu.com/s/1DciporsVT-eSiVIAeU-YmQ 提取码:cssa 官方的Readme已经很详尽了&#xff0…

Unreal Engine游戏引擎

Unreal Engine(下文简称为UE),是一款由Epic Games开发的游戏引擎,用于创建电子游戏、虚拟现实和增强现实应用、数字孪生等内容。UE支持实时渲染、高品质的图形效果和物理模拟、可扩展的蓝图视觉脚本语言,以及跨平台和多…

Appium Server GUI + Appium Inspector 定位UI元素

Appium Server GUI 下载 Appium Server GUI 安装包并完成安装,完成安装后启动,点击 startServer 快速启动 Appium 服务。 Appium Inspector 下载 Appium Inspector 安装包并完成安装,完成安装后启动,填入以下内容。 Remote Hos…

蓝牙运动耳机推荐、最好用的蓝牙运动耳机排名

在现代快节奏的生活中,健康和锻炼成为越来越多人追求的目标。无论是户外跑步、健身房锻炼,还是徒步旅行,一个好的运动耳机是不可或缺的伴侣。它能为您提供高品质的音乐享受,同时保持舒适的佩戴体验,让您在运动中时刻保…

基于Python和MD5算法的公寓管理系统设计与实现-计算机毕设 附源码77723

基于Python和MD5算法的公寓管理系统设计与实现 摘 要 本论文主要论述了如何使用Python开发一个公寓管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述公寓管理系统的当前背景以及…

jetson nano如何读取pwm波信号?通过编码器读取车速,使用sbus串口读取,解决方案

jetson nano如何读取pwm波信号? 通常我们采用的是通过gpio读取,但是linux系统的时钟特别的不准导致计算的不对。 所以我推荐用sbus 用外围硬件,有pwm转sbus设备, 这个设备可以将pwm波转换位串口数据,我们只需要将输出的…

GPT上车只为人车交互?车企还在憋大招

ChatGPT改造汽车的序幕已经拉开,奔驰率先出手。 不久前,梅赛德斯-奔驰将ChatGPT集成到了车机上,开启了为期三个月的测试,结果显示,它的语音助手不仅可以完成简单地指令,还能进行连续多轮对话,理…

CSS 高阶小技巧 - 角向渐变的妙用!

本文将介绍一个角向渐变的一个非常有意思的小技巧! 我们尝试使用 CSS 绘制如下图形: 在之前,类似的图案,其实我们有尝试过,在 单标签实现复杂的棋盘布局 一文中,我们用单标签实现了这样一个棋盘布局&#x…

从0到1:一对一交友app开发的步骤和技巧

今天与大家分享一下一对一交友app开发的步骤和技巧。 步骤 步骤一:确定目标用户群 在开发一对一交友app之前,首先需要确定目标用户群。这是非常重要的一步,因为只有了解目标用户的需求和偏好,才能更好地开发出一款满足他们需求…

C# 元组

文章目录 C# 元组Tuple 类ValueTuple 类ValueTuple 与 Tuple的区别System.ValueTuple 类型的值是可变的System.Tuple 类型的值是不可变的System.ValueTuple 类型的数据成员是字段 System.ValueTuple 与匿名类在使用Linq查询时,如何权衡使用元组还是匿名类权衡主要区…

爆肝整理,性能测试-测试工具选型(各个对比)卷起来...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试和功能测…

cf 比赛 04

2021.04.30 训练地址 B. The Number of Pairs 令 u g c d ( a , b ) u gcd(a, b) ugcd(a,b),设 l c m ( a , b ) k ∗ u lcm(a, b) k * u lcm(a,b)k∗u,则原式可写为 u ∗ ( k ∗ c − d ) x u * (k * c - d) x u∗(k∗c−d)x,那么…