我目前正在研究有脚的六足动物,它可以使用三脚架步态移动。我有两组代码来控制三脚架。

第1组:基于时间的控制

在此代码集中,我将三脚架电机组设置为以其额定rpm旋转所需的时间,然后再移至另一组三脚架电机组。

PID控制将基于使用光学速度编码器计算转换次数,根据实际速度和所需速度之间的差计算误差,然后使用固定Kd和Ki值。

第2组:基于过渡的控制

在此代码集中,我算出完成腿部(脚架电机组)旋转一圈所需的过渡次数。启动另一条腿(三脚架电机组)。PID控制将基于时间。误差的计算将是电动机组中单个电动机所花费的时间差。为什么这样?电动机基本上设置为在另一组移动之前先旋转1圈。

电机之间的速度差异会导致其不稳定吗?

我多久更新一次PID回路?一点点。我该如何解决?

评论

我建议将有关“拖动”的部分移到另一个问题。另外,关于“ arduino pin”的最后一部分本身就是另一个问题。甚至还可以单独询问关于“稳定化”的问题。

尽管我认为此问题框架中没有特别错误的地方,但我将按照要求进行操作。

它包含三个几乎独立的问题。如果单独询问它们,将会得到更好的答案。此外,将来的访客将能够更轻松地找到他们需要的东西。

请至少将arduino问题作为一个单独的问题提交。我已从该问题中删除了该文本,因为它与您的主要查询无关。如果要将其复制到新问题,则可以在编辑历史记录中找到原始文本。我建议也分别发布拖动问题。

#1 楼

听起来您有6条腿,每条腿上都有一些PID控制的关节。您想一次移动3条腿,而其他3条腿则以稳定的三脚架构型站立。

您不必弄清楚如何将每组3条腿作为一个整体移动。将它们视为单独的腿。您将向腿发送一组所需的关节位置,并且每个关节电机上的PID控制将影响这种变化。通过发送稳定的期望关节位置流,您将描述一条腿要遵循的轨迹。

协调所有6条腿的动作只涉及一系列检查点,以确保没有一条腿远远落后于其他人。您不必将所有6条腿都放在同一检查点上;例如,您可以使每组三脚架保持紧密同步,但仅在步态中移动了重量的点同步两套三脚架。

想象检查点的另一种方法是将步态视为每条腿的一系列重复动作,其中每条腿都略有相移。在这种情况下,检查点将是对允许的相位差的“约束”(例如,此CMU论文)。

#2 楼

我相信您的#2装置效果更好,因为您已经以对编码器的过渡进行计数的形式对其应用了反馈。在每个电机上使用正交编码器,以确保我捕获了可能使我烦恼的任何向后运动。然后,我将存储我希望电动机遵循的时间与位置轨迹的关系,这将导致我想要的速度轨迹。然后,我将使用PID控制将电机伺服到所需位置。

通常,控制回路的经验法则是采样速度比所需带宽快十倍。得出的采样间隔比系统在其线性范围内运行时要允许系统稳定的时间短十倍(大致从任何变量超出饱和的最后一刻开始) )。

如果编码器足够粗糙,以至于它们在所需的控制环采样间隔内没有经历许多过渡,那么最好在编码器过渡时进行采样。随着速度的变化,这将使您的生活变得困难,但可能不如尝试在信息不足的情况下应对控制环更新那样困难。

此处链接的某些文章可能会有所帮助,尤其是“ PID博士”和带有摩擦和反冲的电动机的操作:
http://www.wescottdesign.com/articles.html