为足球机器人编写旋转控制器的正确方法是什么?


14

想象一下为一个三轮足球机器人编程。您将使用哪种类型的控制器来旋转它?P?PID?

该控制器的目标是使机器人以规定的角度(0度)站立,并在用手或其他机器人旋转时使其转回原位。

我为机器人使用步进电机,而不是伺服器,因此需要在软件中实现!

我已经写了一个样本P型控制器,并且运行相当好。但我想尽可能改善它。代码如下:

void spinSpeed(int devidedValue, int addedValue, int correction) {

    if(degree<correction && degree>-correction) {
        motorSpeed = 0;
    } else {
        if(degree > 0) {
            motorSpeed = ((degree)/(devidedValue) + (addedValue));
        } else {
            motorSpeed = ((degree)/(devidedValue) - (addedValue));  
        }
    }
}

correction是一个范围,其中机器人没有运动。 degree是从指南针返回的-127到128之间的数字。 motorSpeed是应用于PWM的0到255之间的数字。


假定每次compas为degree?生成新值时,都会运行此例程。
Mark Booth

@MarkBooth我将我的代码放在while(1)中,因此在每个循环中,它都会从罗盘获取值并将其提供给函数,然后将结果应用于电动机。
米罗·马卡拉万内斯

我将研究伺服系统使用哪种控制器,因为您试图在软件中复制伺服系统行为。
克里斯·拉普兰特

我不使用伺服器。我使用步进电机,因此电机中没有这种行为。
Miro Markaravanes 2012年

2
嗨,Miro,在堆栈交换时,最好根据评论中的问题来编辑您的问题,这样可以整理(删除)评论,以免分散您的注意力。
Mark Booth

Answers:


7

关于PID控制回路要记住的重要一点是,每个术语都旨在在移动过程中的不同时间控制控制。

比例项旨在控制您的位置,并使其距目标位置越远,扭矩越大(或您的情况下的速度)。

派生术语旨在在典型梯形运动的“巡航”阶段占主导地位。当您离目的地较远时,它有助于重新控制很高的比例项并限制失控加速度,但当距离目的地较近时,它也有助于提高收敛于目的地的速度,并且比例项的贡献要小得多。

如果您使用的是速度控制器而不是转矩控制器,则导数项实际上可能隐藏在速度控制器中,并且您的PID回路无法直接访问。这可以使控制更加简单(通常,它会尽可能快地加速至所需速度或最大速度(以较低者为准)),但同时也使其难以预测。通常,过于激进的D(或P)项可能会导致进入极限循环(由于在这种状态下电动机的嗡嗡声或什至是尖叫声,通常会误称为共振振荡,尽管极限循环是更准确的描述)。

积分项可以纠正残余的稳态误差,也就是说,您被要求去的地方与实际位置之间存在持久的长期差异。您当前的correction值(实际上只是容差)的工作原理与积分项相反,当您位于所需位置附近的死区中时,它将完全切断电动机。

由于这些因素,除非您还计划具有明显的加速,巡航和减速阶段的速度曲线,否则实施完整的PID回路将无济于事。

还请记住,死区和缺少I术语将意味着最终位置将始终是随机的,并且很可能会根据您接近所需位置的方向而有所不同。因此,您的双向可重复性可能会比标准可重复性差很多。

有关准确性,可重复性和分辨率之间差异的更多信息,请参见此出色的说明。在您的情况下,您的分辨率就是您的罗盘传感器,而精度和可重复性都可能受您的correction值的限制,因为如果该correction值大于您的罗盘分辨率,则您将舍弃一些位置精度,以换取能够关闭时关闭电动机。


8

PID控制器是最好的,使用指南针是一个相对简单的任务,它是获取机器人的轴承并将其与您想要获得的轴承进行比较,并使用一些PID调整技术来实现平滑的转弯运动。您想要的标题。该方法也可以应用于精确地旋转给定量。

我已经在这个领域做过一些机器人学,就是我们在机器人中使用的,与您所做的工作并不太相似...


1
感谢您的回答。我想接受答案,但我希望看到更多答案,所以当有更多答案时,我会接受;)
Miro Markaravanes 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.