4. ROS编程入门--PID控制器

8 篇文章 2 订阅
这篇教程介绍了如何在ROS环境中编写一个PID控制器,用于控制机器人的位置和航向。讲解了PID控制器的三个组成部分:比例(P)、积分(I)和微分(D),并详细阐述了输入输出处理、角度和距离的计算以及误差处理。通过里程计消息获取机器人的状态,并在NodePID类中实现了离散版本的PID算法。
摘要由CSDN通过智能技术生成

介绍:
这篇教程是交给大家怎么在ROS里写一个PID控制器,PID控制器有三部分:比例部分(P)、积分部分(I)、微分部分(D),PID的输出是这三部分的加和。
PID可以控制机器人的位置和航向角,期望机器人向前走x米,x即为参考值(PID控制器的输入期望),旋转期望角度 φ

算法

PID输入是里程计消息。首先你要计算当前值和目标值之间的差值。另一个要计算的是PSD控制器的干涉值(intervention)(译者注:估计是PID输出吧)。由于用的是离散版本PID,因此积分变为加和形式。这些都在NodePID 类中进行实现。回掉函数负责数据的收集。

输入输出处理

程序的输入消息是里程计消息:

std_msgs/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/Pose pose
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
float64 covariance
geometry_msgs/TwistWithCovariance twist
geometry_msgs/Twist twist
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
float64 covariance

你实际需要的是位置和时间信息。位置信息(x,y)存储在pose.pose.position中,Time信息存储在header.stamp中.唯一的问题是如何得到机器人的旋转信息。geometry_msgs/Quaternion 包含三位空间旋转的 float64 (x,y,z,w) 四元数,我么的机器人是在2D状态下运动的。

φ=2arcsin(Qz)

角度和距离

两点之间的距离:

d=(y2y1)2+(x2x1)2(distance)

两点之间的角度:
θ=atan2(y2y1,x2x1)(angle)

误差


  1. 距离误差 :参照公式distance
  2. 角度误差,首先要计算真实的角度(与起始点相差的角度):
    φa=φoφs

φa : 实际角度
φo : 里程计测算角度
φs : 起点角度
PID(PSD)控制器

vA(t)=kPe(t)+kDde(t)dt+kI0te(t)dt(PID)

vA(t) PID输出
e(t) 误差
kP 是比例常数
kD 微分常量
kI 积分常量

vA(tn)=kPe(tn)+kDe(tn)e(tn1)tntn1+kSi=0ne(ti)(tntn1)(PSD)

tn : n次迭代 kS 对应 kI 常量

code

https://github.com/will1991/rosintrodution

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值