关于运动控制中圆弧过渡的简单演示(C++实现)(速度前瞻一)

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

简单的研究了一下运动控制中的两条直线之间的圆弧过渡的情况,在运动控制中,按照两条成角度的直线走插补,一般的控制卡在没有开启速度前瞻之时,会在拐角处减速至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;  
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值