S型曲线规划

s

#include "stdio.h"typedef struct S_CTRL{
#define SSPD_BUF_LEN 100struct{float aMax;float aMin;float vMax;float J;/* 加加速度 */int t[7];int T[7];int tMax;}in;struct{float accBuf[SSPD_BUF_LEN];float decBuf[SSPD_BUF_LEN];long  S[7];long  V[7];}out;
}S_CTRL;S_CTRL sCR = {{.aMax = 1400000.0, /* R/Min^2 */.aMin = -1400000.0,/* R/Min^2 */.vMax = 3000.0,    /*   RPM   */.J = 30.0,        /* R/Min^3 */{0},{40,20,40,0,40,20,40},.tMax = 200}};#define _T(sCTRL,i) ((sCTRL).in.T[(i)-1])
#define s (sCR)
int main(){float v = 0;float pos = 0;float tao = 0;int t1 = 40;int t2 = 60;int t3 = 100;sCR.in.t[0] = sCR.in.T[0];sCR.in.t[1] = sCR.in.T[1]+sCR.in.t[0];sCR.in.t[2] = sCR.in.T[2]+sCR.in.t[1];sCR.in.t[3] = sCR.in.T[3]+sCR.in.t[2];sCR.in.t[4] = sCR.in.T[4]+sCR.in.t[3];sCR.in.t[5] = sCR.in.T[5]+sCR.in.t[4];sCR.in.t[6] = sCR.in.T[6]+sCR.in.t[5];//    sCR.in.T[0] = sCR.in.t[0]-0;
//    sCR.in.T[1] = sCR.in.t[1]-sCR.in.t[0];
//    sCR.in.T[2] = sCR.in.t[2]-sCR.in.t[1];
//    sCR.in.T[3] = sCR.in.t[3]-sCR.in.t[2];
//    sCR.in.T[4] = sCR.in.t[4]-sCR.in.t[3];
//    sCR.in.T[5] = sCR.in.t[5]-sCR.in.t[4];
//    sCR.in.T[6] = sCR.in.t[6]-sCR.in.t[5];for(int i=0;i<7;i++){printf("t[%d] = %d\n",i,sCR.in.t[i]);}float J_tmp = 0;J_tmp = -(sCR.in.J);int flag = 0;for(int time = 0;time<sCR.in.tMax;time++){if(time<sCR.in.t[0]){/* T1 */tao = time;v = (sCR.in.J)*(tao)*(tao)/2;pos = (sCR.in.J)*tao*tao*tao/6;flag = 1;}else if(time<sCR.in.t[1]){/* T2 第二段速度文档中公式是错的 */if(time == sCR.in.t[0]){sCR.out.S[0] = (sCR.in.J)*tao*tao*tao/6;sCR.out.V[0] = (sCR.in.J)*(tao)*(tao)/2;}tao = time-t1;v = (sCR.in.J)*_T(s,1)*(_T(s,1)/2+tao);pos = sCR.out.S[0] + (sCR.out.V[0])*tao + (sCR.in.J)*_T(s,1)*tao*tao/2;flag = 2;}else if(time<sCR.in.t[2]){/* T3 */if(time == sCR.in.t[1]){sCR.out.S[1] = sCR.out.S[0] + (sCR.out.V[0])*tao + (sCR.in.J)*_T(s,1)*tao*tao/2;sCR.out.V[1] = (sCR.in.J)*_T(s,1)*(_T(s,1)/2+tao);}tao = time-t2;v = (sCR.in.J)*(_T(s,1)*_T(s,2)+_T(s,1)*_T(s,1)/2+_T(s,1)*tao-tao*tao/2.0);pos = sCR.out.S[1]+sCR.out.V[1]*tao+(sCR.in.J)*_T(s,1)*tao*tao/2-(sCR.in.J)*tao*tao*tao/6;flag = 3;}else if(time<sCR.in.t[3]){/* T4 *///nothing..if(time == sCR.in.t[2]){sCR.out.S[2] =  sCR.out.S[1]+sCR.out.V[1]*tao+(sCR.in.J)*_T(s,1)*tao*tao/2-(sCR.in.J)*tao*tao*tao/6;//上个位置公式的末尾速度sCR.out.V[2] = (sCR.in.J)*(_T(s,1)*_T(s,2)+_T(s,1)*_T(s,1)/2+_T(s,1)*tao-tao*tao/2.0);//上个速度公式的末尾速度}v = (sCR.in.J)*_T(s,1)*(_T(s,1)+_T(s,2));pos = sCR.out.S[2] + sCR.out.V[2]*tao;}else if(time<sCR.in.t[4]){/* T5 */if(time == sCR.in.t[3]){/* T4 没用到,所以这里用T3的 */sCR.out.S[3] = sCR.out.S[1]+sCR.out.V[1]*tao+(sCR.in.J)*_T(s,1)*tao*tao/2-(sCR.in.J)*tao*tao*tao/6;sCR.out.V[3] = (sCR.in.J)*(_T(s,1)*_T(s,2)+_T(s,1)*_T(s,1)/2+_T(s,1)*tao-tao*tao/2.0);}tao = time-sCR.in.t[3];v = (sCR.in.J)*(_T(s,1)*_T(s,1)+_T(s,1)*_T(s,2)-tao*tao/2);pos = sCR.out.S[3]+sCR.out.V[3]*tao-(sCR.in.J)*tao*tao*tao/6;}else if(time<sCR.in.t[5]){/* T6 */if(time == sCR.in.t[4]){sCR.out.S[4] = sCR.out.S[3]+sCR.out.V[3]*tao-(sCR.in.J)*tao*tao*tao/6;sCR.out.V[4] = (sCR.in.J)*(_T(s,1)*_T(s,1)+_T(s,1)*_T(s,2)-tao*tao/2);}tao = time-sCR.in.t[4];v = (sCR.in.J)*_T(s,1)*(_T(s,2)+_T(s,1)/2-tao);pos = sCR.out.S[4] + sCR.out.V[4]*tao-(sCR.in.J)*_T(s,1)*tao*tao/2;}else if(time<sCR.in.t[6]){/* T7 最后一段速度文档中公式是错的 */if(time == sCR.in.t[5]){sCR.out.S[5] = sCR.out.S[4] + sCR.out.V[4]*tao-(sCR.in.J)*_T(s,1)*tao*tao/2;sCR.out.V[5] = (sCR.in.J)*_T(s,1)*(_T(s,2)+_T(s,1)/2-tao);}tao = time-sCR.in.t[5];
//            v = (sCR.in.J)*(T1*T2+T1*T1/2-T1*tao+tao*tao/2);v = (sCR.in.J)*(_T(s,1)*_T(s,2)+_T(s,1)*_T(s,1)/2-(_T(s,1)*_T(s,6))-_T(s,1)*tao+tao*tao/2);pos = sCR.out.S[5]+sCR.out.V[5]*tao-(sCR.in.J)*_T(s,1)*tao*tao/2+(sCR.in.J)*tao*tao*tao/6;}//        sCR.out.accBuf[time] = v;
//        printf("v[%d]%d=%f\n",time,flag,v);
//        printf("%d->%f\n",time,v);
//        printf("%f\n",v);printf("%f\n",pos);}return 0;
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4/5在蓝图细节面板中添加函数按钮(蓝图与c++的方法)

目录 在细节面板中添加按钮使用函数 蓝图的方法 事件 函数 效果 uec的方法 效果 在细节面板中添加按钮使用函数 很多时候&#xff0c;我们可以看到一些插件的actor类中&#xff0c;点击一下之后就可以实现如矩阵一样的效果。 实际上是因为其使用了函数来修改了蓝图中的数…

W5500-EVB-PICO进行UDP组播数据回环测试(九)

前言 上一章我们用我们的开发板作为UDP客户端连接服务器进行数据回环测试&#xff0c;那么本章我们进行UDP组播数据回环测试。 什么是UDP组播&#xff1f; 组播是主机间一对多的通讯模式&#xff0c; 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将…

Arduino RGBLED灯 模块学习与使用

Arduino RGBLED灯模块学习与使用 硬件原理制作衍生连接线Mixly程序Arduino程序演示视频 人生如逆旅&#xff0c;我亦是行人。 —— 苏轼江客:时荒 硬件原理 RGBLED灯三个引脚分别控制三个LED灯的亮度&#xff0c;RGB分别是red&#xff0c;green&#xff0c;blue的英文缩写&…

【校招VIP】算法考点之堆排

考点介绍&#xff1a; 排序算法属于数据结构和算法的基础内容&#xff0c;并且也是大厂笔试中的高频考点。 堆排序是使用一棵树存储序列这个课树只保证跟节点是这棵树中的最小值&#xff0c;但并不保证其他节点是按顺序的。因此他的排序是每次从堆中取得堆顶&#xff0c;取得 n…

GPU版本pytorch(Cuda12.1)安装教程

我们通过Pytorch官网安装torch的时候&#xff0c;会发现常常由于网速问题安装不成功&#xff0c;下面提供一种简单的方法可以成功安装Cuda12.1&#xff0c;亲测有效。 目录 一、常规方法 二、有效方法 2.1 创建并激活虚拟环境 2.2 添加清华源 2.3 安装torch 一、常规方法…

Mybatis学习笔记(三)——Mybatis的配置(Mybatis-config.xml)

Mybatis学习笔记&#xff08;三&#xff09;——Mybatis的配置&#xff08;Mybatis-config.xml&#xff09; 传送门&#xff1a;Mybatis中文网——配置 Mybatis配置文档的顶层结构&#xff1a; configuration&#xff08;配置&#xff09; properties&#xff08;属性&#…

【LeetCode-中等题】240. 搜索二维矩阵 II

文章目录 题目方法一&#xff1a;暴力双for查找方法二&#xff1a;二分查找&#xff0c;对每二维数组进行拆分&#xff0c;一行一行的进行二分查找方法三&#xff1a;列倒序Z字形查找 题目 方法一&#xff1a;暴力双for查找 public boolean searchMatrix(int[][] matrix, int …

本地部署 Stable Diffusion(Windows 系统)

相对于使用整合包&#xff0c;手动在 Windows 系统下本地部署 Stable Diffusion Web UI&#xff08;简称 SD-WebUI&#xff09;&#xff0c;更能让人了解一些事情的来龙去脉。 一、安装前置软件&#xff1a;Python 和 Git 1、安装 Python for windows。 下载地址 https://www.p…

无入侵接口文档smart-doc

Smart-doc优点&#xff1a; 1.非侵入式生成接口文档 2.减少接口文档的手动更新麻烦&保证了接口文档和代码的一致 3.随时可生成最新的接口文档 4.保持团队代码风格一致:smart-doc支持javadoc&#xff0c;必须按照这个才能生成有注释的接口文档 最终效果 1.导入依赖 <pl…

桌面端后台项目笔记

套用模板 vue-pure-admin 所用主要框架笔记 1. electron app const { app } require(electron) app.on(事件名, () > {} // 回调函数)常用事件 will-finish-launching 当应用程序完成基础的启动的时候触发ready&#xff1a;electron完成初始化时触发window-all-close…

java-便签

--其实最痛的。不是离别。而是离别后的那些回忆。 java length( ) javalength中文占多长 1.一个中文字符或符号 2 个字节&#xff0c;一个英文字符或符号 1 个字节。 System.out.println("abc你好&#xff0c;".getBytes("gbk").length); System.out.pr…

「Vue|网页开发|前端开发」02 从单页面到多页面网站:使用路由实现网站多个页面的展示和跳转

本文主要介绍如何使用路由控制来实现将一个单页面网站扩展成多页面网站&#xff0c;包括页面扩展的逻辑&#xff0c;vue的官方路由vue-router的基本用法以及扩展用法 文章目录 本系列前文传送门一、场景说明二、基本的页面扩展页面扩展是在扩什么创建新页面的代码&#xff0c;…