在webots中实现pid控制
webots是一款开源机器人仿真软件,拥有强大的仿真能力,在机器人开发中也经常被使用。这篇文章向大家介绍如何在webots中实现自己的pid控制
前置知识
有关webots和PID的知识这里不再介绍,有需要者可移步以下链接:
webots:
PID:
开发环境
webots:2023a
VScode
搭建仿真环境
新建project,命名为pid_controller
生成这样一个世界:
然后我们搭建用于演示pid的物体,它是由一个大方块和一个小长方体组成的:
大方块我们设为robot节点,尺寸为0.1,0.1,0.12(x,y,z),appearance选PBRAppearance,颜色设为红色
小长方体是一个solid节点,尺寸为0.025,0.025,0.1(x,y,z),在大方块的一侧并与大方块有一定空隙
大方块和小长方体通过一个HingeJoint连接,关节的原点设在endPoint的solid的中心,绕Y轴旋转;关节的device有motor和position sensor
!需要注意的是为了体现一个比较好的旋转效果,并尽量贴合实际,我将大方块的physics字段中的density设为了5000,而小长方体的density为1000。这样大方块就会更重,体现出来是小长方体转动而大方块不动,小长方体旋转的惯性不会影响大方块,类似于把一个杆固定在墙上旋转。
编写控制器
控制器实现了一个简单的pid控制速度
/*
* File: pid_controller.c
* Date:
* Description:
* Author: RobotFreak
* Modifications:
*/
/*
* You may need to add include files like <webots/distance_sensor.h> or
* <webots/motor.h>, etc.
*/
#include <webots/robot.h>
#include <webots/motor.h>
#include <webots/position_sensor.h>
#include <stdio.h>
//#include "pid.h"
/*
* You may want to add macros here.
*/
#define TIME_STEP 64
#define SPD_KP 0.001
#define SPD_KI 0
#define SPD_KD 0
#define POS_KP 0
#