webots小教程-PD控制(弹簧阻尼系统)
Webots 实现PD控制
- 世界搭建
- 代码
文件已分享到我的github,欢迎交流。
效果如下
欠阻尼状态
过阻尼状态如下
临界阻尼状态如下
下面开始展示搭建过程
世界搭建
新建一个空白的世界
。
。
右键空白处选择添加新的
。
。
添加背景光源
。
。
添加地板
。
。
添加后如下
。
。
添加一个机器人
。
。
机器人位置会出现一个坐标系
。
。
在机器人子类选择添加
。
。
为机器人主体添加一个形状
。
。
添加几何形状
。
。
选择为box形状
。
。
添加后出现一个白盒子,有一半在地里面
。
。
为方便观察将尺寸改大,并将其从地里面扯出来
。
。
在机器人子类上选择新建
。
。
添加一个直线滑轨
。
。
滑轨参数
。
。
在滑轨上添加一个直线电机
。
。
在滑轨上添加一个位置传感器
。
。
划归末端添加一个固体
。
。
给此固体添加形状
。
。
依旧选为box,尺寸也一样
。
。
改变颜色,方便观察
。
。
我改好后如下
。
。
将两个方块放到一起,方便观察
。
。
为滑轨末端的固体添加质量
。
。
设置质量和密度
先设置重量再关闭密度(设为-1),下面会报个错不用理他。
。
。
给电机和传感器起名字
在程序中会根据这个"name"去匹配相应的部件
。
。
改变滑轨初始位置,使得两个方块不挨在一起
至此仿真世界建立完毕
代码
新建controller
我用的c语言来编写这个控制器
我选择用vs来写代码,反正vs2019好用还免费。用第一个也行,都一样。
。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。
。。。。。。。。。。。。。
。。。。。。。。。。。。
。。。。。。。。。。。
。。。。。。。。。。
。。。。。。。。。
。。。。。。。。
。。。。。。
。。。。。
。。。。
。。。
。。
。
程序如下
/** File: pid.c* Date: 2021.08.10* Description: PD Controller test* Author: HiYoung* Modifications: 2021.08.10*/#include <webots/robot.h>
#include <webots/motor.h>
#include <webots/position_sensor.h>#define TIME_STEP 64int main(int argc, char **argv)
{wb_robot_init();/*加载驱动*/WbDeviceTag motor = wb_robot_get_device("linear motor1");//直线电机WbDeviceTag sensor = wb_robot_get_device("position sensor1");//位置传感器wb_position_sensor_enable(sensor, TIME_STEP);//位置传感器使能double last_pos = 0;/*临界阻尼*/double kp = 100;double kd = 301;/*欠阻尼*///double kp = 100;//double kd = 200;/*过阻尼*///double kp = 100;//double kd = 400;while (wb_robot_step(TIME_STEP) != -1) {double pos = wb_position_sensor_get_value(sensor);double force = kp * (0 - pos) + kd *(last_pos - pos);/* F = Kp * x + Kd * dx */last_pos = pos;if (force > 500)force = 500;else if (force < -500)force = -500;wb_motor_set_force(motor, force);printf("%f\r\n", pos);};wb_robot_cleanup();return 0;
}
效果如下
参数自己去算,自己去实验,还是挺直观的。
临界阻尼计算公式:R=2√(L/C)
webots小教程-PD控制(弹簧阻尼系统)相关推荐
- 质量—弹簧—阻尼系统的建模分析
质量-弹簧-阻尼系统的建模分析 本文介绍如何使用数轴建模法对质量-弹簧-阻尼系统进行建模分析. 这里涉及的质量块.弹簧.阻尼均为理想器件. 注:实际弹簧还拥有阻尼器的效果,即实际弹簧应该是一个弹簧-阻 ...
- 【洞幺邦】单自由度弹簧阻尼系统
已知质量m=10kg,弹簧系数k=1000N/m,阻尼c=40N•s/m.且质量块的初始位移x(0)=0.02m,其初始速度x´(0)=0m/s. 阻尼是用来衡量系统自身消耗振动能量能力的物理量,在运 ...
- 前馈控制之如何计算前馈量(质量弹簧阻尼系统)
带前馈控制的博途PID程序请参看下面的文章链接: https://blog.csdn.net/m0_46143730/article/details/123268892https://blog.csd ...
- matlab弹簧阻尼系统论文,MATLAB系统仿真报告有阻尼受迫振动系统.doc
MATLAB系统仿真报告有阻尼受迫振动系统 问题描述 有阻尼受迫振动的结构及基本原理 图一 有阻尼的受迫振动系统 图1为有阻尼的受迫振动系统,质量为M,摩擦系数为B, 弹簧倔强系数为K.拉力.摩擦力和 ...
- 9. Matlab仿真二阶弹簧阻尼系统
前言 本篇文章介绍了如何使用MATLAB分析二阶系统 被控系统 x ¨ + 5 x ˙ + 6 x = F \ddot{x}+5\dot{x}+6x=F x¨+5x˙+6x=F 可以对上述系统进行拉式 ...
- Simulink基础【1】-弹簧-阻尼模型的常微分方程求解
Simulink基础[1]-弹簧-阻尼模型的常微分方程求解 0. Simulink模块是什么?能干什么? 1. 弹簧阻尼模型简介 1.1 受常力的弹簧阻尼模型 1.2 动力学方程 2. simulin ...
- 【自动控制原理】以弹簧振动系统(典型二阶系统)为例理解系统微分方程与传递函数、控制框图的关系,闭环极点与稳定性的关系
[零] 我始终认为,开始学习一门课程之前,首先要知道这门课程的实际用处或者为什么有这门课程,如果不了解这些,在学习的过程中往往会存在诸多疑问,也很难对这门课程产生兴趣,这也是我们推崇在实践中学习的 ...
- ROS 入门教程 —— 小海龟简单控制
ROS 入门教程 -- 小海龟简单控制 这里我们直接介绍命令使用方法,原理请查看我的另外几篇博客: ROS 命令行工具的使用 ROS 创建工作空间与功能包 运行并控制小海龟 由于小海龟并不是 ROS ...
- Simulink学习——基础建模流程案例(二)(简单弹簧阻尼器系统+控制建模)
Simulink Example : Create Model Components 案例学习 继上一期 当对简单的弹簧.阻尼系统建立完了模型.现在提出第二个问题: 如果F可控,但是外界环境也会有一些 ...
最新文章
- 【 Notes 】NLS ALGORITHMS of TOA - Based Positioning
- tf.nn.conv2d 与tf.layers.conv2d的区别
- 基础数学:关于二次无理数
- 【一周入门MySQL—2】单表查询
- 深度案例 | 纷享销客:用户需求精准洞察下的敏捷开发
- 方法的返回值类型是object_JavaScript中如何判断类型
- c语言趣味程序设计编程100例精解,c趣味编程100例
- vue项目html,Vue项目接口.html
- LINUX上安装SSH
- Socket服务器分类与流程总结
- canvas绘制竖排的数字_小程序利用Canvas绘制图片和竖排文字
- HDU 5234 Happy birthday 01背包
- Python 入门 —— Python 面向对象:类的创建及其基本内置方法的使用
- python代码画乌龟_乌龟教你Python编程——“玫瑰花”是怎么画的!
- python爬取lol所有英雄信息
- vue2升级到 Vue3的异同(入门须知)
- 森笔记app软件 开发记录
- [转载]Numpy 基本除法运算和模运算
- 如何学习3dsmax?3dsmax教程 中英文版本
- 内江人物--(张大千、骆成骧)秀才、美女、黏鱼