简单的研究了一下运动控制中的两条直线之间的圆弧过渡的情况,在运动控制中,按照两条成角度的直线走插补,一般的控制卡在没有开启速度前瞻之时,会在拐角处减速至0,以减小因为速度方向的改变所造成的冲击。如果发生冲击不仅会对运动的精度造成影响,同时也会损伤电机或者机械传动部分,这种影响在精度要求比较高的机床系统更为明显,因为高精度的机床系统对所处环境中的震动十分敏感。
在没有开启速度前瞻的情况下,存在直线转角衔接点时,其速度曲线大概如下:

图一:运动轨迹

图二:未开启速度前瞻时的速度与加速
(注:以上两图取自博文:基于S型曲线的连续多段曲线插补平滑过渡的规划算法(Matlab))
由上图可见这种冲击还是比较明显的。所以必须予以消除,也就是要开启速度前瞻功能,在两条线段相交的拐角处使用曲线或者圆弧来过渡。
具体示例:
设定两条线段,第一条线段起点(0,0),终点(100,100).
第二条线段起点(100,100),终点(110,90)。
这两条线段之间的夹角为90度。
以这两条线段为运动轨迹,明显的会在点(100,100)处形成速度的冲击点。所以可以使用一个圆弧在两条直线之间进行过渡。为了叙述方便,相关的公式不一一描述,只给一个参考的网址:https://blog.youkuaiyun.com/qq_26565435/article/details/98789361?ops_request_misc=%7B%22request%5Fid%22%3A%22158311037219195162559136%22%2C%22scm%22%3A%2220140713.130056874…%22%7D&request_id=158311037219195162559136&biz_id=0&utm_source=distribute.pc_search_result.none-task
上文中有对相关公式的简单描述,也并不麻烦。
我使用的是一个半径为0.5*√2的圆弧,其C++的求的圆弧的过程如下。
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <math.h>
#include <Windows.h>
using namespace std;
double x[100];
double y[100]; //100个点用来缓存数据
double specx;
double specy;
double endx=100;
double endy=100;
double startx;
double starty;
double interval=0.005; //插补的间隔
double tempRadius=0.5*sqrt(float(2)); //圆弧半径
double tempspecx;
double Plan(double radiu) //开始处理点
{
double temp;
temp=endx-radiu/(interval*sqrt(float(2)))*interval;

本文探讨了运动控制中两条直线间采用圆弧过渡减少冲击的方法,详细介绍了未开启速度前瞻时速度曲线的冲击问题,并通过C++代码示例展示了如何在90度转角实施圆弧过渡。
最低0.47元/天 解锁文章
2890





