伺服系统使用S曲线

news2024/10/1 1:16:09

在之前文章《S形曲线规划方式汇总》 介绍过贝塞尔曲线方式,并且在Marlin开源工程中也有贝塞尔曲线步进系统的实现方式。本篇介绍伺服系统中基于时间分割法实现的贝塞尔S曲线。

1 贝塞尔曲线路程规划

上文中推导过贝塞尔曲线,本文直接用结论:

对于初速度为V0,末速度为Ve,总加速时间为T的加速过程,其在x*T(0<=x<=1)时刻的6点式贝塞尔曲线速度可以表示为:

v(t)=A*x^5 + B*x^4 + C*x^3 + F

其中:A=6*(Ve-V0)        B=15*(V0-Ve)         C=10*(Ve-V0)        F=V0

则从0试刻走到x*T时刻的总路程S为:

2 Python算法仿真

import matplotlib.pyplot as plt
import math

a = 200000 #加速度
d = 200000 #减速度

#T型速度规划函数
def move_line(len,speed):
    max_speed = speed
    acc_steps = max_speed*max_speed/(2*a)
    dec_steps = max_speed*max_speed/(2*d)
    p = len-acc_steps-dec_steps
    if p<0:
        acc_steps = len*d/(d+a)
        p = 0
        max_speed = math.sqrt(2*a*acc_steps)
    acc_time = float(max_speed)/a
    dec_time = float(max_speed)/d
    cru_time = float(p)/max_speed
    acc_until = acc_steps
    acc_after = acc_steps + p
    return acc_time,dec_time,cru_time,acc_until,acc_after,max_speed

acc_time,dec_time,cru_time,acc_until,acc_after,vm = move_line(8000,20000)

t = 0
Ta = acc_time
Tb = acc_time+cru_time
Tc = acc_time+dec_time+cru_time

#T型速度规划
timeArr = []
posArr = []
speedArr=[]
posPre = 0
while t<Tc:
    t = t+0.001
    if t<Ta:
        pos = 0.5*a*t*t
    elif t < Tb:
        pos = acc_until+vm*(t-Ta)
    else:
        pos = acc_after+vm*(t-Tb)-0.5*d*(t-Tb)*(t-Tb)
    speed = (pos-posPre)*1000
    posPre = pos
    timeArr.append(t)
    posArr.append(pos)
    speedArr.append(speed)

#Bezier曲线规划
#加速阶段贝塞尔曲线参数
v0 = 0
ve = vm
A1 = 6*(ve-v0)/6
B1 = 15*(v0-ve)/5
C1 = 10*(ve-v0)/4
F1 = v0

#减速阶段贝塞尔曲线参数
v0 = vm
ve = 0
A2 = 6*(ve-v0)/6
B2 = 15*(v0-ve)/5
C2 = 10*(ve-v0)/4
F2 = v0

t = 0
posPre = 0
timeArr2 = []
posArr2 = []
speedArr2 = []
while t<Tc:
    t = t+0.001
    if t<Ta:#加速阶段
        x = t/Ta
        pos = Ta*(A1*math.pow(x,6)+B1*math.pow(x,5)+C1*math.pow(x,4)+F1*x)
    elif t<Tb:#匀速阶段
        pos = acc_until+vm*(t-Ta)
    else:#减速阶段
        x = (t-Tb)/(Tc-Tb)
        pos = acc_after+(Tc-Tb)*(A2*math.pow(x,6)+B2*math.pow(x,5)+C2*math.pow(x,4)+F2*x)
    speed = (pos-posPre)*1000
    posPre = pos
    timeArr2.append(t)
    posArr2.append(pos)
    speedArr2.append(speed)

fig1 = plt.figure()
fig1.suptitle('Bezier-pos')
plt.plot(timeArr,posArr)
plt.plot(timeArr2,posArr2,'r')  

fig4 = plt.figure()
fig4.suptitle('Bezier-speed')
plt.plot(timeArr,speedArr)
plt.plot(timeArr2,speedArr2,'r')

plt.show()

 运行结果:

 可以看到在加减速阶段Bezier规划的速度曲线相比T型曲线更柔和。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享一下如何使用echarts绘制散点图

文章目录 散点图源码地址 散点图 今天我来分享一下如何使用echarts绘制散点图 首先&#xff0c;我们需要引入echarts库。可以通过以下代码在HTML文件中引入&#xff1a; <script src"https://cdn.jsdelivr.net/npm/echarts5.2.0/dist/echarts.min.js"></s…

整合SSM(Spring + SpringMVC + Mybatis)

7、整合SSM 7.1、环境要求7.2、数据库环境7.3、基本环境搭建7.4、Mybatis层编写7.5、Spring层7.6、SpringMVC层7.7、小结及展望 7.1、环境要求 环境&#xff1a; IDEA MySQL 5.7.19 Tomcat 9 Maven 3.6 要求&#xff1a; 需要熟练掌握MySQL数据库&#xff0c;Spring&#…

FMT ICF5实时仿真,不止于飞控

基于ICF5的实时仿真 作为FMT的首款自研的国产开源飞控硬件平台&#xff0c;ICF5不仅功能强大&#xff0c;而且高颜值和高性价比获得了用户的一致好评。 FMT ICF5飞控 ICF5购买链接​item.taobao.com/item.htm?id705459383848&ali_refida3_430620_1006:1123834906:N:O3mc…

常见的主流自动化测试框架,这5种真的帮助巨大

今天我们要向大家介绍的是常见5种主流自动化测试框架&#xff0c;包括优缺点等内容&#xff0c;供大家参考学习。 1.ATF 自动化测试框架AutoTestFramework是B/S架构框架&#xff0c;可实现Selenium等多种自动化测试全流程、团队化管理的高级框架平台&#xff0c;通过集成自动化…

Zookeeper+消息队列Kafka

一、Zookeeper 概述 官方下载地址&#xff1a;Index of /dist/zookeeper 1.1 Zookeeper 定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 1.2 Zookeeper 工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设…

PyCharm配置Opencv(多人亲测可用)

23/5/29更新&#xff1a; 之前由于只安装opencv-python-contrib这个包&#xff0c;导致Opencv版本过高&#xff0c;有些算法无法使用&#xff0c; 所以这里更新安装opencv-contrib-python这个包&#xff0c;具体如下配置。 ————————————————————————…

【C++】map和set的使用及其模拟实现

文章目录 一、map和set的使用1. 关联式容器2. 键值对3. 关联式容器的使用3.1 set3.2 multiset3.3 map3.4 multimap 二、map和set的模拟实现1. 红黑树的实现(封装map和set版本)1.1 节点的实现1.2 KeyOfT(仿函数)1.3 红黑树的插入Insert1.4 迭代器iterator 2. set的模拟实现3. ma…

【分布式】分片存储服务器

完成了配置路由服务器之后&#xff0c;我们来到了对存储服务器的重构 在我们加入配置服务器组之后&#xff0c;我们发现我们的kvserver&#xff0c;也就是存储服务器还是单点的&#xff1a; 同样&#xff0c;我们可以借助之前实现的raft对单点进行拓展&#xff0c;我们可以设置…

【LeetCode热题100】打卡第7天:盛最多水的容器

文章目录 盛最多水的容器⛅前言&#x1f512;题目&#x1f511;题解 盛最多水的容器 ⛅前言 大家好&#xff0c;我是知识汲取者&#xff0c;欢迎来到我的LeetCode热题100刷题专栏&#xff01; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合…

自制Arduino 风格开发板 - HK32F030MF4P6 紧凑开发板

模仿Arduino Nano 做一个HK32F030M 的紧凑开发板&#xff0c;排针间距和Arduino Nano 相同&#xff0c;整体尺寸略小&#xff0c;适合插在面包板上。兼容HK32F030MF4P6 和0301M&#xff0c;板载CH340N 串口和DS1307 时钟模块。开源工程地址&#xff1a;HK32F030MF4P6 紧凑开发板…

Python学习36:文本分析与加密

类型&#xff1a;字符串‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述‪‬‪…

测试百科:白盒测试用例的设计

正文 语句覆盖&#xff1a;每条语句至少执行一次。判定覆盖&#xff1a;每个判定的所有可能结果至少出现一次。&#xff08;又称“分支覆盖”&#xff09;条件覆盖&#xff1a;每个条件的所有可能结果至少执行一次。判定/条件覆盖&#xff1a;一个判定中的每个条件的所有可能结…

PyTorch-网络模型的保存和读取

1. 模型的保存 方法一&#xff1a;保存模型的结构模型的参数 陷阱&#xff1a;需要让文件访问到你自己的模型定义方式&#xff0c;可以用import的方式引入先前的模型定义。 model_save.py import torch import torchvisionvgg16 torchvision.models.vgg16(weightsNone) # …

Linux— 网络编程套接字

目录 预备知识 认识端口号 理解源端口号和目的端口号 认识TCP协议 认识UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 sockaddr 结构​编辑 sockaddr_in 结构 in_addr结构 地址转换函数 简单的UDP网络程序 实现一个简单的英译汉的功能 简易的远程…

注解-反射-XML配置原理

java刚开始原本是直接在方法中创建对象执行程序等&#xff0c;部分代码重复率高&#xff0c;后来就发展成方法封装调用&#xff0c;再后来出现的像spring框架等&#xff0c;引入了XML配置&#xff0c;使得程序更加简洁&#xff0c;方便等&#xff0c;其中XML配置也是基于java反…

java 线程安全和多线程

文章目录 前言一、ThreadLocal是什么&#xff1f;二、synchronized 和 ReentrantLock 都是 Java 中提供的可重入锁&#xff0c;二者的主要区别有以下 5 个&#xff1a;三、线程安全的集合类有哪些&#xff1f;四、说一下你对CompletableFuture的理解四、项目中是如何创建线程池…

R语言生物群落(生态)数据统计分析与绘图(从数据整理到分析结果展示)

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线&#xff0c;通过多个来自经典…

C++类和对象三

文章目录 类和对象三初始化列表用途与特性 explicit关键字再谈构造函数static成员static的特性 友元友元函数友元函数特性 友元类友元类特性 内部类概念特性 匿名对象拷贝对象时的一些编译器优化 类和对象三 初始化列表 初始化列表&#xff1a;以一个冒号开始&#xff0c;接着…

【源码解析】Spring Bean生命周期源码解析

Spring启动核心 AbstractApplicationContext#refresh&#xff0c;Spring刷新容器的核心方法。最关键的就是 AbstractApplicationContext#invokeBeanFactoryPostProcessors&#xff0c;扫描BeanAbstractApplicationContext#finishBeanFactoryInitialization&#xff0c;生成Be…

【MySql】InnoDB一棵B+树可以存放多少行数据?

文章目录 背景一、怎么得到InnoDB主键索引B树的高度&#xff1f;二、小结三、最后回顾一道面试题总结参考资料 背景 InnoDB一棵B树可以存放多少行数据&#xff1f;这个问题的简单回答是&#xff1a;约2千万。为什么是这么多呢&#xff1f;因为这是可以算出来的&#xff0c;要搞…