数控技术-直线插补 - 逐点比较法

前言:还有5天要考《数控技术》了,开始(复习)预习时发现,考点之一是直线插补。这个知识点不是我上个学期的课程设计——运动控制卡的主要功能之一吗。我当时对直线插补的理解还是很简单的:一边两点取中间打折,使线段更加平滑。现在看了理论实现后发现,可以说不是一个东西了,所以甚是感觉有趣。

排除掉要应付大学考试,直线插补这个知识点还是很主要的。特地写篇笔记记录,防止以后忘记。

  • 推荐视频:《逐点比较法-478-机床数控系统综合设计-远程教育|夜大|面授|函授|家里蹲大学|宅在家|在家宅_哔哩哔哩_bilibili》北京理工大学老师讲解,up主应该是转载或代传。

1.解释

  • 逐点比较法,顾名思义,逐个点比较。每次进给都会得到一个点,然后再和目标线段比较误差。根据误差决定下一次进给的方向,循环反复。
  • 该方法有个重要定义:只适用于两轴决定的平面,每次进给都只能沿轴方向,必须且只能选一个轴方向。

数学定义很重要,嗯……

  • 下面直接看效果图,图源自网络 。实践时,XY轴就是电机控制,每次移动一定单位量。

2.过程步骤

  • 根据视频教程的总结,可访分为5步:①得出偏差函数;②偏差判别;③坐标进给;④新的偏差计算;⑤终点判别,如果没到就重复②,循环反复;

(0)符号

  • 为下面的内容做些规定,用符号代替名词,方便阅读。
  1. 原点 O

(xs,ys)(x_s,y_s) (xs​,ys​)

  1. 终点 E

(xe,ye)(x_e,y_e) (xe​,ye​)

  1. 中间点 P;(ij表示各轴进给的次数)

(xi,yj)(x_i,y_j) (xi​,yj​)

(1)公式由来

  • 因为进给是单位量,所以得到的中间点P会出现3种情况:在线段上方,在线段中,在线段下方。
  • 逐点比较法的重点是 比较偏差 ,为了方便,定义用斜率比较偏差。

下面公式例子 部分 只列举一种情况,排版原因不穷举了。

  • 用线段OP的斜率与OE比较:斜率,在线段上方;斜率 相等 ,在线段中;斜率,在线段下方。

yjxi>yexe\frac{y_j}{x_i} > \frac{y_e}{x_e} xi​yj​​>xe​ye​​

  • 数学式子要漂亮,为了方便计算,化简成与零作比较。

yi∗xe−ye∗xi>0y_i*x_e - y_e*x_i >0 yi​∗xe​−ye​∗xi​>0

  • 这个式子就定义为偏差函数,决定了进给方向。

F=xe∗yj−xi∗ye>0F = x_e*y_j - x_i*y_e > 0 F=xe​∗yj​−xi​∗ye​>0

  • 结合第一象限的图,点P位于线段下方时,进给就要 向上 ,靠近线段;位于线段上方时,进给就要 向前 ,靠近线段。即分别沿y轴正方向,x轴正方向进给。同时规定,在线段中时,也属于线段上方,沿x轴进给。

(+Δx)(+ \Delta x) (+Δx)

  • 计算新的偏差函数,然后整理化简可得,新的偏差就等于,上一个偏差减去点E的y轴坐标,或上一个偏差加上点E的x轴坐标。

F1=xe∗yj−(xi+1)∗ye=(xe∗yj−xi∗ye)−ye=F−yeF1=xe∗(yj+1)−xi∗ye=(xe∗yj−xi∗ye)+xe=F+xeF_1 = x_e*y_j - (x_i+1)*y_e = (x_e*y_j - x_i*y_e) - y_e = F - y_e \\ F_1 = x_e*(y_j+1) - x_i*y_e = (x_e*y_j - x_i*y_e) + x_e = F + x_e F1​=xe​∗yj​−(xi​+1)∗ye​=(xe​∗yj​−xi​∗ye​)−ye​=F−ye​F1​=xe​∗(yj​+1)−xi​∗ye​=(xe​∗yj​−xi​∗ye​)+xe​=F+xe​

  • 到这里就很明朗了,我只需计算初始的偏差函数,然后每次新的偏差函数根据终点E坐标和进给方向计算。无须在意中间点P的坐标。巧妙啊

F1=F−yeF1=F+xeF_1 = F - y_e \\ F_1 = F + x_e F1​=F−ye​F1​=F+xe​

  • 关于终点的判别,有2种方法:总步长法、总坐标法。原理都一样,其实得到轨迹图后分开xy轴,会发现就是在走 三角形 。比如走到点(x_s,y_e)再走到点(x_e,y_e),所以,其实只要总步数够了一定能到达终点。

N=∣xe∣+∣ye∣N = |x_e| + |y_e| N=∣xe​∣+∣ye​∣

  • 又或者,只要三角形的最长边已经走完了,也代表已经走到终点了。

3.例题

最后还是要做个题目练练手,不能转头就忘记了。

题目:加工第一象限直线OE,起点为坐标原点,终点坐标为E(6,3),试用逐点比较法对该段直线进行插补,并画出插补轨迹。

  1. 偏差函数

F=xe∗yi−xi∗ye=6∗0−0∗3=0F = x_e*y_i - x_i*y_e = 6*0 - 0*3 = 0 F=xe​∗yi​−xi​∗ye​=6∗0−0∗3=0

  1. 偏差判别

F=0F = 0 F=0

  1. 坐标进给

(+Δx)(+ \Delta x) (+Δx)

  1. 偏差计算

F1=F−ye=−3F_1 = F - y_e = -3 F1​=F−ye​=−3

  1. 终点判别,等于零时代表结束。

n=∣xe∣+∣ye∣−1=9−1=8n = |x_e| + |y_e| - 1 = 9 - 1 = 8 n=∣xe​∣+∣ye​∣−1=9−1=8

  1. 循环第二步。
脉冲 偏差判别 进给方向 偏差计算 终点判别
0 0,(6,3) 9
1 0=0 +x 0-3=-3 8
2 -3<0 +y -3+6=3 7
3 3>0 +x 3-3=0 6
4 0=0 +x 0-3=-3 5
5 -3<0 +y -3+6=3 4
6 3>0 +x 3-3=0 3
7 0=0 +x 0-3=-3 2
8 -3<0 +y -3+6=3 1
9 3>0 +x 3-3=0 0
  • 可以发现,第一个偏差和最后一个偏差 总是 为0的。这是因为起点和终点肯定都在线段上,这个点也在坐标轴的 整值 上。

4.补充

(1)其他象限的线段

  • 当线段的 朝向 是其他象限时,情况和第一象限类似。下面介绍2种方法,需要注意的是,下面两种方法得到的结果是 不一样 的,这就很奇葩了……
  • 可以选择从偏差函数重新推导一遍得到结果,也就是视频中提到的 分别处理法 ,不常用,需要记多个公式。
  • 可以采用相对进给的方法,将坐标取绝对值计算,即将线段转为第一象限。计算出的结果是远离坐标轴还是靠近坐标轴,根据结果相对得到原本的进给方向。为 坐标变化法 ,一般也常用这个,好用。

(2)坐标轴上的线段

  • 这个更加简单了,只需要沿一个坐标轴进给就好了。另一个坐标轴一直不用进给。

数控技术 - 直线插补 - 逐点比较法相关推荐

  1. MATLAB实现数控加工中的逐点比较法直线插补(四个象限,动态显示)

    逐点比较法就是刀具每走一步都要和给定轨迹上的坐标值做比较,从而决定下一步的进给方向.一般有直线插补和圆弧插补.简单的说就是,如果起始位置在给定轨迹的下方,下一步就向轨迹的上方走.如果起始位置在给定轨迹 ...

  2. 逐点比较法直线插补MATLAB(四个象限分开)

    现在还是只能分开运行,还在研究怎么合在一起 第一象限 Xs = input('请输入起点横坐标XIn X0= '); Ys = input('请输入起点纵坐标YIn Y0= '); Xe = inpu ...

  3. 插补、直线插补、联动与插补

    转自:http://blog.gkong.com/218hty_27393.ashx 什么是插补? 试由直线的逐点比较工作节拍说明其插补过程: 答:插补是在组成轨迹的直线段或曲线段的起点和终点之间,按 ...

  4. matlab程序 直线插补,无聊写matlab仿真直线插补算法

    本帖最后由 CK345 于 2016-6-24 17:16 编辑 X0 = input('请输入起点横坐标 X\n X0 = '); Y0 = input('请输入起点纵坐标 Y\n Y0 = '); ...

  5. c语言直线插补原理程序,直线插补算法

    直线插补算法,就是刀具或绘笔每走一步都要和给定的数据进行比对,看该点在次点的上方或者是下方,从而决定下一步该怎么走. 即机床数控系统依照一定方法确定刀具运动轨迹的过程.也可以说,已知曲线上的某些数据, ...

  6. 机械臂控制软件,上位机软件 此机器人上位软件。 运动采用通用G代码指令编程,具有G5三维的空间圆弧插补,空间直线插补功能

    机械臂控制软件,上位机软件 此机器人上位软件. 运动采用通用G代码指令编程,具有G5三维的空间圆弧插补,空间直线插补功能,子程序编程功能,逻辑判断语句功能,示教编程功能(支持手柄),变量位置编程功能, ...

  7. 用C语言代码实现布雷森汉姆直线插补

    布雷森汉姆直线插补是计算机图形学中常见的直线插补算法.以下是用C语言实现布雷森汉姆直线插补的代码示例: #include <stdio.h> #include <math.h> ...

  8. matlab六轴直线插补代码

    针对已有点位,通过matlab编程进行直线插补,插补逻辑是将X.Y.Z.A.B.C先分成XY,ZA和BC三部分,给定直线轴插补步长LStep和旋转轴插补步长RStep.先计算要插补的两行代码各个轴所要 ...

  9. 基于带约束S型加减速曲线的空间直线插补与空间圆弧插补算法(Matlab)

    写在前面 学习代码都记录在个人github上,欢迎关注~ Matlab机器人工具箱版本9.10 在前面的博文中: 基于抛物线过渡(梯形加减速)的空间直线插补算法与空间圆弧插补算法(Matlab) 基于 ...

  10. 用c++模拟直线插补和圆弧插补

    C++模拟直线插补(不带图形) http://download.csdn.net/detail/z893345329/7358097 运行结果: C++模拟圆弧插补(不带图形) http://down ...

最新文章

  1. Data Science | 数据分析
  2. AttributeError: module ‘tensorflow‘ has no attribute ‘app‘
  3. jovi智慧场景运动步怎么是零_Jovi智慧场景,赛事直播提前提醒,让你不错过任何一刻的精彩...
  4. JavaScript基础学习(七)—BOM
  5. javascript面试_在编码面试中需要注意的3个JavaScript问题
  6. jupyter怎么安装jieba_AI工具:Anaconda中Jupyter不能import已安装module问题解决
  7. 此计算机到未能识别网络连接,本地连接显示“未识别的网络”
  8. transtion-transform
  9. SQL Server中的bcp实用工具(批量复制程序)简介
  10. java遍历jsonarray数组_java-JSON-遍历JSONArray
  11. 功能强大的Server.Transfer
  12. RSA加密算法流程图
  13. APP版本更新通知流程图
  14. Excel如何批量添加批注
  15. 使用Qt常见报错及解决方案
  16. 从执行计划的预估行数看执行计划是否正确
  17. 关于Office 365 显示语言的设置(注册开通时的语言选择及注册开通后的语言显示修改)
  18. java(jdk 1.8 64位)连接中控考勤机
  19. 认识世界的基础——系统概述-1
  20. 服务器网站后门检测软件,服务器安全工具

热门文章

  1. 全志V3s 荔枝派WiFi RTL8723BS 连接
  2. QCC302X/QCC303X蓝牙对讲与蓝牙扩音器
  3. 最简单的STM32入门教程----闪烁LED
  4. Java生成随机数的方法
  5. oracle sqlldr decode,SQLLDR应用举例
  6. access vba代码全部丢失_Access2016由于无法读取数据库中所含的VBA工程,因此无法打开此数据库。只有先删除VBA工程,然后才能打开数据库...
  7. vmware linux虚拟机网络配置
  8. 基于JAVA大学生旅游拼团网站计算机毕业设计源码+系统+数据库+lw文档+部署
  9. Java编一个收银小票_Java编程打印购物小票实现代码
  10. Apple M1 开启HiDPI的新方法,无需关闭SIP,无需SwitchResX