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控制(弹簧阻尼系统)相关推荐

  1. 质量—弹簧—阻尼系统的建模分析

    质量-弹簧-阻尼系统的建模分析 本文介绍如何使用数轴建模法对质量-弹簧-阻尼系统进行建模分析. 这里涉及的质量块.弹簧.阻尼均为理想器件. 注:实际弹簧还拥有阻尼器的效果,即实际弹簧应该是一个弹簧-阻 ...

  2. 【洞幺邦】单自由度弹簧阻尼系统

    已知质量m=10kg,弹簧系数k=1000N/m,阻尼c=40N•s/m.且质量块的初始位移x(0)=0.02m,其初始速度x´(0)=0m/s. 阻尼是用来衡量系统自身消耗振动能量能力的物理量,在运 ...

  3. 前馈控制之如何计算前馈量(质量弹簧阻尼系统)

    带前馈控制的博途PID程序请参看下面的文章链接: https://blog.csdn.net/m0_46143730/article/details/123268892https://blog.csd ...

  4. matlab弹簧阻尼系统论文,MATLAB系统仿真报告有阻尼受迫振动系统.doc

    MATLAB系统仿真报告有阻尼受迫振动系统 问题描述 有阻尼受迫振动的结构及基本原理 图一 有阻尼的受迫振动系统 图1为有阻尼的受迫振动系统,质量为M,摩擦系数为B, 弹簧倔强系数为K.拉力.摩擦力和 ...

  5. 9. Matlab仿真二阶弹簧阻尼系统

    前言 本篇文章介绍了如何使用MATLAB分析二阶系统 被控系统 x ¨ + 5 x ˙ + 6 x = F \ddot{x}+5\dot{x}+6x=F x¨+5x˙+6x=F 可以对上述系统进行拉式 ...

  6. Simulink基础【1】-弹簧-阻尼模型的常微分方程求解

    Simulink基础[1]-弹簧-阻尼模型的常微分方程求解 0. Simulink模块是什么?能干什么? 1. 弹簧阻尼模型简介 1.1 受常力的弹簧阻尼模型 1.2 动力学方程 2. simulin ...

  7. 【自动控制原理】以弹簧振动系统(典型二阶系统)为例理解系统微分方程与传递函数、控制框图的关系,闭环极点与稳定性的关系

    [零]   我始终认为,开始学习一门课程之前,首先要知道这门课程的实际用处或者为什么有这门课程,如果不了解这些,在学习的过程中往往会存在诸多疑问,也很难对这门课程产生兴趣,这也是我们推崇在实践中学习的 ...

  8. ROS 入门教程 —— 小海龟简单控制

    ROS 入门教程 -- 小海龟简单控制 这里我们直接介绍命令使用方法,原理请查看我的另外几篇博客: ROS 命令行工具的使用 ROS 创建工作空间与功能包 运行并控制小海龟 由于小海龟并不是 ROS ...

  9. Simulink学习——基础建模流程案例(二)(简单弹簧阻尼器系统+控制建模)

    Simulink Example : Create Model Components 案例学习 继上一期 当对简单的弹簧.阻尼系统建立完了模型.现在提出第二个问题: 如果F可控,但是外界环境也会有一些 ...

最新文章

  1. 【 Notes 】NLS ALGORITHMS of TOA - Based Positioning
  2. tf.nn.conv2d 与tf.layers.conv2d的区别
  3. 基础数学:关于二次无理数
  4. 【一周入门MySQL—2】单表查询
  5. 深度案例 | 纷享销客:用户需求精准洞察下的敏捷开发
  6. 方法的返回值类型是object_JavaScript中如何判断类型
  7. c语言趣味程序设计编程100例精解,c趣味编程100例
  8. vue项目html,Vue项目接口.html
  9. LINUX上安装SSH
  10. Socket服务器分类与流程总结
  11. canvas绘制竖排的数字_小程序利用Canvas绘制图片和竖排文字
  12. HDU 5234 Happy birthday 01背包
  13. Python 入门 —— Python 面向对象:类的创建及其基本内置方法的使用
  14. python代码画乌龟_乌龟教你Python编程——“玫瑰花”是怎么画的!
  15. python爬取lol所有英雄信息
  16. vue2升级到 Vue3的异同(入门须知)
  17. 森笔记app软件 开发记录
  18. [转载]Numpy 基本除法运算和模运算
  19. 如何学习3dsmax?3dsmax教程 中英文版本
  20. 内江人物--(张大千、骆成骧)秀才、美女、黏鱼

热门文章

  1. 数据分析 - 基础原理 之 第三章:数据质量管理 - 第五节:数据质量监控
  2. NeuralRecon拜读:单目视频实时连贯三维重建
  3. apn信息实时同步服务器,apn设置服务器
  4. 1606-2闵海总结
  5. 持续交付-Blue Ocean 应用
  6. Django 后台设计
  7. python实现对称加密、数字签名、数字证书颁发
  8. [转]LTE资源调度(7)-DRX不连续接收(1)
  9. 阿里测试:给你一个APP,你如何展开测试工作?
  10. thinkphp整合系列之微信扫码支付