如何在物体跟踪中使用PID控制线性和角速度。

问题描述 投票:0回答:1

假设我正在跟踪一个移动的目标。

我可以通过直线速度和角速度来控制我的机器人,即。

http:/docs.ros.orgmelodicapigeometry_msgshtmlmsgTwist.html。

但如果我用两个PID,一个是线性速度,另一个是角速度,就很难调参数,因为线性速度和角速度都会影响机器人的 "下一秒 "位置。

在这种情况下,正确使用PID控制器的方法是什么?

ros pid
1个回答
0
投票

我假设这更像是一个低级控制问题:你已经收到了cmd_vel(Twist)命令,你希望你的机器人服从它。在这种情况下,你要么分别做两个动作(在转弯前停止),要么同时做两个动作。在第一种情况下,你可以分别调整旋转与驾驶,因为你在跟踪这种状态。

更有可能的是,你有一个足够类似于差速器的机器人,你要给每一边发送一个信号(例如pwm)来引导它。让我们尝试一个简单的无PID的基础;为了参考背景运动学,我会指向 本文第一节. 在这种情况下,你将这两个值融合成两边的独立值。让 d_L, d_R 为两边距中心的距离,而 d = d_L + d_R. 让前行速度。vel_fwd = (vel_L + vel_R) / 2,和 yaw_rate [rad/sec] = ω = (vel_R - vel_L) / d,如果 d_L == d_R. 解决未知问题 vel_L, vel_R 与已知 vel_fwd, yaw_rate: vel_L = vel_fwd - d/2 * yaw_rate, vel_R = vel_fwd + d/2 * yaw_rate.

现在,应用一个PID。让 vel_L0, vel_R0 是当前的测量值;因此,状态 vel_fwd0, yaw_rate0 是已知的。你有目标状态(从消息中 vel_fwd_T, yaw_rate_T. 你有错误 _err 从减去它们。这时,如果你愿意,你可以做一个多变量线性化的系统控制;但坚持用PID,你对每一个都应用一个PID,就可以得到 vel_fwd_pid, yaw_rate_pid. 你可以将它们代入到你原来的方程中,换成 vel_L, vel_R.就我个人而言,我通常只是发现添加比例项到处都是 vel_L = vel_fwd_T * k0 - d/2 * yaw_rate_T * k1, vel_R = vel_fwd_T * k2 + d/2 * yaw_rate_T * k3,加速度velocityyaw_rate限制即可。这是因为一侧的曲线可能与另一侧的曲线不一样,但在增加比例线性提升的情况下是足够接近的,而且旋转项上的调整可以调整到处理你所期望的地板轮地条件。老实说,如果你试着应用非线性或斜率函数而不是全PID曲线进行驾驶,以获得你所需要的合适的平稳性,你就不太会浪费时间。

© www.soinside.com 2019 - 2024. All rights reserved.