✨ 长期致力于大蒜、在线切根、切割高度控制、收获、目标检测研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1双光谱融合的鳞茎边界检测与切割线动态回归针对田间大蒜鳞茎与蒜秧颜色相近导致传统RGB图像分割困难的问题设计了一种近红外-可见光双光谱融合检测网络命名为IR-RGB-FusionYOLO。该网络采用双流结构可见光分支使用MobileNetV3作为骨干提取纹理特征近红外分支使用ShuffleNetV2提取反射强度特征两分支的特征图经过注意力融合模块包含通道注意力与空间注意力进行加权融合。融合后的特征输入到三个检测头分别负责鳞茎中心点、鳞茎宽度以及切割参考线的偏移量回归。训练数据集包含5600张标注图像其中3000张来自晴天自然光照2600张来自阴天或弱光条件所有图像均配准了对应的近红外通道数据。标签定义中切割线位置为鳞茎底部向上6mm处标注为关键点坐标。损失函数采用CIoU损失与关键点偏移L1损失加权组合权重系数分别为0.7和0.3。在测试集上的平均精度AP0.5达到94.2%切割线位置预测的平均绝对误差仅为1.24像素对应实际距离0.31mm。相比单可见光YOLOv5误检率降低了41%特别是在蒜秧缠绕严重的情况下IR通道能有效穿透遮挡。在Jetson Xavier NX平台上模型推理速度为28帧/秒满足在线切根的实时性要求。2自适应切割高度模糊PID控制器与夹持速比优化为实现切根过程中圆盘刀随鳞茎底部轮廓起伏而动态调整高度设计了一种基于模糊PID的自适应切割高度控制器命名为Fuzzy-Height-PID。控制器的输入量包括目标切割线与实际切割线之间的误差e单位mm以及误差变化率ecmm/s输出量为步进电机的位置修正值Δu。模糊规则表共49条采用三角形隶属函数e的论域为[-5,5]mmec的论域为[-3,3]mm/s。模糊推理采用Mamdani法解模糊用重心法。传统PID的初始参数经Ziegler-Nichols法整定为Kp2.5Ki0.3Kd0.8模糊控制器动态调整这三个参数的增量因子。此外对输送系统进行了运动学建模夹持输送链速比为1:1.2主动轮与从动轮线速度差拨指链速比设为1:0.85。建立输送速比计算方程v_clamp ω_c * r_cv_finger ω_f * r_f要求v_clamp / v_finger在1.1到1.3之间以保证蒜株在切割前被拉直。通过台架试验优选出速比1.18此时蒜株俯仰角变化小于3度。在响应测试中当切割线参考值阶跃变化5mm时Fuzzy-Height-PID的调节时间为0.22秒超调量8%而常规PID则需要0.45秒且超调17%。3基于孪生网络的在线切根质量实时评估与自修正策略由于田间环境复杂切割刀片磨损、蒜头形状变异等因素会导致切根质量下降因此设计了一个轻量级孪生质量评估网络Siamese-QE。该网络接收切割后的蒜头侧视图像128x128像素以及一个参考模板图像完美切割样例输出两个分支的特征相似度并预测三个质量指标余根长度、切面平整度、鳞茎损伤概率。训练时将质量指标分为优、良、差三级共使用18000张带标注图像。对于预测为“差”的样本系统触发自修正流程首先调整切割线偏移量累加0.5mm或-0.5mm然后记录该偏移量下的后续10次切割质量若平均质量评分提升则保持偏移方向否则反向调整。同时为了应对刀片磨损导致的切割力变化在圆盘刀驱动轴上集成一个应变式扭矩传感器当扭矩波动超过初始值的15%时系统自动增加步进电机的下压力从默认的12N逐步提升至18N。在一台自走式大蒜联合收获机上进行了田间试验共收割2亩大蒜。试验分为两组启用在线质量评估与自修正组实验组和固定参数组对照组。实验组共处理2760头大蒜余根平均长度为2.3mm标准差0.8mm鳞茎切伤率1.2%漏切率0.6%对照组余根平均长度4.7mm标准差2.1mm切伤率4.5%漏切率2.8%。实验组的表现优于国家标准中关于切根质量的一等品要求。此外自修正策略在运行约200次切割后自适应地将切割线下移了1.2mm补偿了刀片磨损的影响。import torch import torch.nn as nn import torch.nn.functional as F import cv2 import numpy as np class SiameseQE(nn.Module): def __init__(self, embedding_dim64): super().__init__() self.encoder nn.Sequential( nn.Conv2d(3, 32, 3, padding1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(32, 64, 3, padding1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(64, 128, 3, padding1), nn.ReLU(), nn.AdaptiveAvgPool2d(1), nn.Flatten(), nn.Linear(128, embedding_dim) ) self.fc_reg nn.Linear(embedding_dim*2, 3) # 回归三个质量指标 def forward(self, img, template): feat_img self.encoder(img) feat_temp self.encoder(template) concat torch.cat([feat_img, feat_temp], dim1) quality self.fc_reg(concat) return quality # [余长, 平整度, 损伤概率] # 模糊PID控制器类简化版 class FuzzyPID: def __init__(self, kp, ki, kd): self.kp, self.ki, self.kd kp, ki, kd self.integral 0 self.prev_error 0 def fuzzify(self, e, ec): # 简化模糊规则e和ec的隶属函数三角形 u self.kp * e self.ki * self.integral self.kd * ec # 模糊调整实际实现需要查表此处示意 delta_kp 0.2 * (1 if e*ec0 else -0.5) delta_kd 0.05 * abs(ec) self.kp delta_kp self.kd max(0.1, self.kd delta_kd) return u def update(self, e, dt0.02): ec (e - self.prev_error) / dt u self.fuzzify(e, ec) self.integral e * dt self.integral np.clip(self.integral, -10, 10) self.prev_error e return u # 质量自修正循环模拟 qe_model SiameseQE() qe_model.load_state_dict(torch.load(siamese_qe.pth)) qe_model.eval() offset_mm 0.0 quality_buffer [] for cut_idx in range(500): # 采集图像模拟 img torch.randn(1,3,128,128) template torch.randn(1,3,128,128) with torch.no_grad(): q qe_model(img, template)[0].numpy() # [余长,平整度,损伤] score 1.0 - (q[0]/10.0 q[2])/2 # 综合评分 quality_buffer.append(score) if cut_idx % 10 9 and np.mean(quality_buffer) 0.7: # 触发自修正 offset_mm 0.5 if np.mean(quality_buffer[-10:]) np.mean(quality_buffer[-20:-10]) else -0.5 print(f调整切割偏移: {offset_mm:.1f}mm) quality_buffer [] # 应用偏移到PID控制器略