当前位置: 首页 > news >正文

关于凸轮的相位角计算

需求:计算凸轮相位角误差

关于凸轮的相位角误差计算直接需求是求取凸轮的实际最大升程点与理论最大升程点的角度误差,所以写出了下面的程序

def calculate_phase_error(self):"""计算实际曲线与理论曲线的相位角误差"""if self.theory_r is None or self.r is None:return# 找到实际曲线和理论曲线的最大升程点actual_max_idx = np.argmax(self.r)theory_max_idx = np.argmax(self.theory_r)# 获取对应的角度actual_max_angle = self.theta[actual_max_idx]theory_max_angle = self.theory_theta[theory_max_idx]# 计算相位角误差(转换为度)self.phase_error = (actual_max_angle - theory_max_angle) * 180 / np.pi# 确保误差在 -180 到 180 度之间while self.phase_error > 180:self.phase_error -= 360while self.phase_error < -180:self.phase_error += 360

这种方法通过比较实际曲线和理论曲线的最大升程点对应的角度来计算相位角误差,但是这种方法的局限性在于:

  1. 仅依赖于单个点(最大升程点)的位置,对噪声和局部偏差敏感

  2. 如果实际凸轮存在磨损或加工误差,最大升程点可能不是最具代表性的特征点

  3. 没有考虑整个凸轮轮廓的相位关系,仅关注峰值位置

考虑一些相对专业的相位角计算方法

在凸轮分析中相位角误差可以通过以下几种方法计算:

  1. 特征点匹配法:除了最大升程点外,还可以考虑缓冲段起点、工作段起点等特征点的角度偏差,然后取平均值或加权平均

  2. 曲线对齐法:使用优化算法将实际曲线与理论曲线在角度域上进行最佳对齐,计算所需的旋转角度

  3. 傅里叶分析法:将凸轮轮廓转换到频域,比较实际曲线和理论曲线的相位谱差异

综合考虑选择了第二种方式(加权比较均衡):实际上就是曲线计算的最佳拟合通过形状拟合反向找到旋转角度,如下图:

def minimize_normal_error(x_ref, y_ref, x_actual, y_actual):# 目标函数:最小化法向误差def objective(params):tx, ty, angle = paramsx_transformed, y_transformed = transform_points(x_actual, y_actual, tx, ty, angle)return compute_normal_least_squares_error(x_ref, y_ref, x_transformed, y_transformed)# 初始猜测:基于质心的平移和零旋转center_ref = (np.mean(x_ref), np.mean(y_ref))center_actual = (np.mean(x_actual), np.mean(y_actual))tx_initial = center_ref[0] - center_actual[0]ty_initial = center_ref[1] - center_actual[1]angle_initial = 0initial_guess = [tx_initial, ty_initial, angle_initial]# 优化result = minimize(objective, initial_guess, method='SLSQP')if result.success:tx, ty, angle = result.xmin_error = result.funreturn tx, ty, angle, min_errorelse:raise ValueError("法向误差最小化失败")

http://www.xdnf.cn/news/1031905.html

相关文章:

  • 16 celery集成其他工具
  • Blender 案例及基础知识点
  • LIN通信错误 CSError( invalid checksum)
  • Element Plus 去除下拉菜单周黑边
  • 34-Oracle 23 ai 示例数据库部署指南、脚本获取、验证与实操(兼容19c)
  • 嵌入式开发中fmacro-prefix-map选项解析
  • evo工具
  • linux驱动开发(9)- 信号量
  • 《Elasticsearch 分布式搜索在聊天记录检索中的深度优化》
  • 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接,
  • 【Elasticsearch】分词机制详解(含实战案例)
  • [学习] FIR多项滤波器的数学原理详解:从多相分解到高效实现(完整仿真代码)
  • 【FineDance】训练:accelerate config 的作用
  • tshark命令行语法详解
  • 量化面试绿皮书:13. 贴错标签的袋子
  • Python爬虫实战:研究simpleq相关技术
  • 同步与异步编程范式全景研究——从CPU时钟周期到云原生架构的范式演进
  • Windows平台进程加速方案研究:以网盘下载优化为例
  • 再参数化视角下的批量归一化:缩放平移操作的本质意义
  • ESP32-S3 学习之旅开篇:课程与芯片基础全解析
  • php 数学公式转成SVG,并下载到服务器本地
  • 查看哪些IP在向kafka的broker生产消息
  • 智能穿戴平台与医疗AI融合发展路径研究
  • 基于springboot+servlet、jsp的潮服购物商城系统的设计与实现,论文7000字
  • Linux免驱使用slcan,使用方法以Ubuntu为例
  • Zookeeper 3.8.4 安装部署帮助手册
  • 数据库管理员密码重置指南:MySQL, Oracle, PostgreSQL
  • 【Flutter】性能优化总结
  • Flutter 与原生技术(Objective-C/Swift,java)的关系
  • Java-46 深入浅出 Tomcat 核心架构 Catalina 容器全解析 启动流程 线程机制