担路网口碑做网站好吗/湘潭seo公司

担路网口碑做网站好吗,湘潭seo公司,wordpress后台 登录,做前端网站用什么软件写代码参考博客: (1)PID双环控制(速度环和位置环) (2)PID控制(四)(单环与双环PID) (3)内外双环pid算法 0 单环PID 目标位置→系…

参考博客:
(1)PID双环控制(速度环和位置环)
(2)PID控制(四)(单环与双环PID)
(3)内外双环pid算法

0 单环PID

目标位置→系统→速度→当前位置
输入目标位置,得到输出的位置是当前位置作为反馈量,而这个输出结果的位置量是我们通过控制中间过程量速度来控制的
单环控制的是速度量

1 PID双环控制

在这里插入图片描述
位置环做为外环,速度环作为内环。外环的输出值作为内环的目标值,外环计算一次pid,根据pid公式可以知道,当离位置目标越来越近时,第一个误差(外环误差)就越来越小,以至于输出的内环目标值就越来越小,所以最终达到的效果就是,离目标值越近,速度越小。(理想情况下,要调节好pid参数,不然系统也会崩溃)

双环控制的时候,外环PID参数调节幅度不要太大,这对于整个曲线的影响很大

代码实现步骤:
PID参数结构体:定义位置、速度闭环的PID参数结构体变量

初始化PID参数:把目标值、期望值、累计偏差清零,配置PID系数
在这里插入图片描述

设置目标位置:只要设置外环的,内环的不用设置,因为内环的目标值,就是外环的输出值。

PID双环控制
在定时器中断(1ms)里,每50ms计算一次当前编码器的总计数值,并通过这个值进行外环PID
(位置环)计算,得到目标速度,要经过速度限幅(防止速度过快),然后存放到g_motor_data.motor_pwm变量(临时存放而已),根据目标速度,再进行速度环PID计算,最终得出要输出的pwm比较值,存放g_motor_data.motor_pwm变量(最终存放),然后再限制pwm比较值输出
在这里插入图片描述

3 PID双环控制详细解析

如果采用PID双环控制,控制的其实就是加速度。如果直接输入目标位置,输出当前位置,控制直接是用加速度来控制这个位置显然是不稳定的。所以我们采用双环,用外环来输出目标速度,用内环来控制加速度从而来控制位置
总体流程:目标位置→系统1→目标速度→系统2→加速度→当前位置和速度→反馈回系统1和2

外环:目标位置→系统1→目标速度→反馈给系统1

外环控制的是速度,也就是通过输入目标位置,来控制速度,从而反馈给系统,当我们把目标速度调的比较稳定后,再把此输出的目标速度当作内环的目标值传进内环中

内环:目标速度→系统2→加速度→当前位置→反馈给系统2

内环是把外环的目标速度作为目标值,根据当前的速度控制加速度从而向目标加速度靠近,最后再把输出值作为反馈值

4 双环PID控制器的C++代码实现

float outer_pid_controller(float setpoint, float input, float kp, float ki, float kd, float dt) {static float integral = 0;static float prev_error = 0;float error = setpoint - input;// 计算积分项integral += error * dt;// 计算微分项float derivative = (error - prev_error) / dt;// 计算输出float output = kp * error + ki * integral + kd * derivative;// 更新上一个误差prev_error = error;return output;
}float inner_pid_controller(float setpoint, float input, float kp, float ki, float kd, float dt) {static float integral = 0;static float prev_error = 0;float error = setpoint - input;// 计算积分项integral += error * dt;// 计算微分项float derivative = (error - prev_error) / dt;// 计算输出float output = kp * error + ki * integral + kd * derivative;// 更新上一个误差prev_error = error;return output;
}float double_pid_controller(float setpoint, float input, float outer_kp, float outer_ki, float outer_kd, float inner_kp, float inner_ki, float inner_kd, float dt) {// 计算外环控制器输出float outer_output = outer_pid_controller(setpoint, input, outer_kp, outer_ki, outer_kd, dt);// 计算内环控制器输出float inner_output = inner_pid_controller(outer_output, input, inner_kp, inner_ki, inner_kd, dt);return inner_output;
}

outer_pid_controllerinner_pid_controller分别是外环和内环PID控制器的实现函数。double_pid_controller函数则是将两个PID控制器串联起来,实现双环PID控制器。其中,setpoint是设定值,input是输入值,outer_kpouter_kiouter_kd是外环控制器的比例、积分和微分系数,inner_kpinner_kiinner_kd是内环控制器的比例、积分和微分系数,dt是采样时间。该函数返回内环PID控制器的输出值。

百度Apollo纵向控制原理如下所示,该图可以为纵向控制器的设置提供参考:
百度Apollo纵向控制框架

可以看出纵向控制是基于Frenet坐标系的,位置跟踪控制器采用P控制器实现车辆位置闭环控制,速度跟踪控制器实现速度闭环控制,根据车辆的俯仰角得出坡道加速度补偿,以及预览点的加速度实现加速度开环控制。基于加速度和定位反馈纵向速度查找油门制动标定表得到油门和刹车的控制量,从而实现车辆的纵向控制。

6 油门刹车标定表

纵向控制逻辑:油门 --> 功率 --> 转速 / 扭矩 --> 车速 / 车加速度 --> 车加速

找到油门和v,a对应的关系
在这里插入图片描述
做实验,踩不同的油门,得到不同的v,a曲线
在这里插入图片描述
对于一个throttle,不同的时间 t 得到一系列v、a点,v,a可以合并,得到v,a曲线
在这里插入图片描述
不同的throttle会得到不同的v、a曲线
在这里插入图片描述
使用不同的throttle做实验,可以得到一个三维曲面
在这里插入图片描述
通过做实验,得到大量的(v,a,throttle)的三维点,从而拟合出throttle = f(v,a)

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

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

相关文章

Promise图解,Pass

10-优化代码_哔哩哔哩_bilibili

2024年,真的别裸辞....

作为IT行业的大热岗位——软件测试,只要你付出了,就会有回报。说它作为IT热门岗位之一是完全不虚的。可能很多人回说软件测试是吃青春饭的,但放眼望去,哪个工作不是这样的呢?会有哪家公司愿意养一些闲人呢?…

数据结构 第2章:线性表

文章目录 2.1 线性表的定义和操作2.1.1 线性表的基本概念2.1.2 线性表的基本操作 2.2. 顺序表2.2.1. 顺序表的基本概念2.2.2. 顺序表的实现2.2.3. 顺序表的基本操作 2.3 链表2.3.1 单链表的基本概念2.3.2 单链表的实现2.3.3 单链表的插入2.3.4. 单链表的删除2.3.5. 单链表的查找…

mybatis-plus-generator 使用 velocity 生成前后台代码

操作步骤 1)准备mybatis-plus 生成代码的 vm文件 2)添加依赖 mybatis-plus-generator 代码生成器的依赖 3)执行工具方法生成代码 1、准备 mybatis-plus 生成代码的 vm文件 1)找vm模板 去工程的 external Libraries 找到 mybati…

Java SE入门及基础(38)

异常(Exception) 1. 概念 异常 来自官方的说明 An exception is an event, which occurs during the execution of a program, that disrupts the normal flow of the programs instructions. 异常是在程序执行期间发生的事件,该事件中断了程序指令的正常流程…

有趣的数学 毕达哥拉斯定理

随便找个学生,让他举出一位著名的数学家——如果他能想到的话,他往往会选择毕达哥拉斯。如果不是,也许他想到的是阿基米德。哪怕是杰出的艾萨克牛顿,在两位古代世界的巨星面前也只能叨陪末座了。阿基米德是一位思想巨人&#xff0…

Day18: 发送邮件、开发注册功能

在这里记一下。原来的html中的css和js路径下载不下来&#xff0c;需要换成&#xff1a; <link href"https://cdn.jsdelivr.net/npm/bootstrap5.3.3/dist/css/bootstrap.min.css" rel"stylesheet" integrity"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6Y…

Python 一步一步教你用pyglet制作汉诺塔游戏(终篇)

目录 汉诺塔游戏 完整游戏 后期展望 汉诺塔游戏 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;是一个源于印度古老传说的益智玩具。这个传说讲述了大梵天创造世界的时候&#xff0c;他做了三根金刚石柱子&#xff0c;并在其中一根柱子上从下往上按照大小顺序摞…

Unsupervised RL:METRA: Scalable Unsupervised RL with Metric-Aware Abstraction

ICLR 2024 Oral paper Intro 无监督RL旨在发现潜在的行为帮助提高下游任务效率以往方法集中于探索以及基于互信息的技能发现(skill)。然而去前者在高危复杂空间实现困难&#xff0c;后者也容易因为缺乏激励导致探索能力不足。本文提出METRA核心观点认为与其在复杂状态空间处理…

[leetcode~dfs]1261. 在受污染的二叉树中查找元素

给出一个满足下述规则的二叉树&#xff1a; root.val 0 如果 treeNode.val x 且 treeNode.left ! null&#xff0c;那么 treeNode.left.val 2 * x 1 如果 treeNode.val x 且 treeNode.right ! null&#xff0c;那么 treeNode.right.val 2 * x 2 现在这个二叉树受到「污…

Games101笔记-计算机图形学概述

光栅化&#xff1a;把三维空间的几何形体显示在屏幕上 实时&#xff1a;每秒30帧的画面 曲线和曲面&#xff1a; 如何表示一条光滑曲线&#xff0c;如何表示曲面如何用简单的曲面通过细分的方法得到更复杂的曲面在形状发生变化时&#xff0c;面要如何变化&#xff0c;如何保…

深入学习默认成员函数——c++指南

前言&#xff1a;类和对象是面向对象语言的重要概念。 c身为一门既面向过程&#xff0c;又面向对象的语言。 想要学习c&#xff0c; 首先同样要先了解类和对象。 本节就类和对象的几种构造函数相关内容进行深入的解析。 目录 类和对象的基本概念 封装 类域和类体 访问限定符…

力扣235. 二叉搜索树的最近公共祖先

思路&#xff1a;要利用好二叉搜索树的特性&#xff0c;中序遍历是有序的&#xff0c;也就是说最近的公共祖先 大小一定落在区间 [p,q] 或[q,p]。 1、当p和q都大于当前root值时&#xff0c;说明当前root值太小&#xff0c;需要更大才能让它落入区间范围&#xff0c;所以要往右子…

如何下载安装chromium浏览器

下载安装chromium浏览器去这个网站下载&#xff1a; CNPM Binaries Mirror 参考链接&#xff1a;手写 Puppeteer&#xff1a;自动下载 Chromium - 知乎

手撸nano-gpt

nano GPT 跟着youtube上AndrejKarpathy大佬复现一个简单GPT 1.数据集准备 很小的莎士比亚数据集 wget https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt 1.1简单的tokenize 数据和等下的模型较简单&#xff0c;所以这里用了个…

游戏免费下载平台模板源码

功能介绍 此游戏网站模板源码是专门为游戏下载站而设计的&#xff0c;旨在为网站开发者提供一个高效、易于维护和扩展的解决方案。 特点&#xff1a; 响应式设计&#xff1a;我们的模板可以自适应不同设备屏幕大小&#xff0c;从而为不同平台的用户提供最佳的浏览体验。 …

算法---滑动窗口练习-1(长度最小的子数组)

长度最小的子数组 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;长度最小的子数组 2. 讲解算法原理 首先&#xff0c;定义变量n为数组nums的长度&#xff0c;sum为当前子数组的和&#xff0c;len为最短子数组的长度&#xff0c;初始值为INT_MAX&am…

javascript中的structuredClone()克隆方法

前言&#xff1a; structuredClone 是 JavaScript 的方法之一&#xff0c;用于深拷贝一个对象。它的语法是 structuredClone(obj)&#xff0c;其中 obj 是要拷贝的对象。structuredClone 方法将会创建一个与原始对象完全相同但是独立的副本。 案例&#xff1a; 当使用Web Work…

Shadertoy内置函数系列 - mod 取模运算

mod函数返回x % 3的结果 先看一个挑战问题题目&#xff1a; Create a pattern of alternating black and red columns, with 9 columns of each color. Then, hide every third column that is colored red.The shader should avoid using branching or conditional statemen…

2024年最新阿里云和腾讯云云服务器价格租用对比

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器61元一年&#xff0c;2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…