Skip to content

vex LemLib的横向运动

View the example project if you need more context for setup

在大多数自动控制中,你不只是想让底盘原地打转,还想让它在场地中移动。LemLib 提供了两种基于 PID 的运动,专门用于实现这一目标:“moveToPoint”(移动到点)和“moveToPose”(移动到姿态)。这两种运动在内部都使用了角度和横向 PID 控制器,这意味着两者都需要进行调整。

“moveToPoint”(移动到点)是到达场地中某个点的最简单、最快速的方法。它将底盘移动到笛卡尔坐标系中的绝对位置(以英寸为单位)。在运动过程中,该运动将始终尝试让底盘面向目标点,并在运动结束时也面向目标点。以下是使用它的示例:

cpp
chassis.moveToPoint(10, 10, 4000); // 将底盘移动到 (10, 10),超时时间为 4000 毫秒

以下是该运动的可视化效果: move-to-point

就像我们目前为止介绍的其他运动一样,这个运动也接受可选的“params”(参数)和“async”(异步)参数。以下是一个示例:

cpp
// 将底盘移动到 x = 20,y = 15,超时时间为 4000 毫秒,但让底盘背向目标点
chassis.moveToPoint(20, 15, 4000, {.forwards = false}, true);

{cpp:func}moveToPoint <lemlib::Chassis::moveToPoint>(移动到点函数)和 {cpp:class}MoveToPointParams <lemlib::MoveToPointParams>(移动到点参数类)API 参考。

“moveToPose”(移动到姿态):有时你需要能够控制底盘在横向运动结束时的朝向。LemLib 为你提供了一种使用“moveToPose”运动来实现这一目标的方法。这个运动在内部使用了一个飞旋镖控制器,并添加了一些功能。这个运动的工作方式与前面的运动非常相似,不同之处在于它尝试移动到一个随着底盘靠近而改变位置的中间引导点。我们强烈建议你在 Desmos 图表上进行一些尝试,以了解它的工作原理。 {important} 这个运动通常比“moveToPoint”慢一些,所以在不需要额外精度的情况下,你应该优先选择“moveToPoint”。 以下是如何使用这个运动的示例:

cpp
chassis.moveToPose(10, 10, 90, 4000); // 将底盘移动到 (10, 10, 90),超时时间为 4000 毫秒

以下是该运动的示意图:

move-to-pose

与其他运动一样,“moveToPose”接受可选的“params”(参数)和“async”(异步)参数。然而,“MoveToPoseParams”(移动到姿态参数类)有更多内容,因此值得更详细地讨论。特别是,“lead”(引导)和“horizontalDrift”(横向漂移)成员是飞旋镖算法特有的。“lead”调整引导点与目标点之间的距离比例。增加它会使底盘转弯更宽,而减小它会使转弯更紧凑。“horizontalDrift”是我们在原始飞旋镖控制器上添加的一个功能,确保与全向轮驱动系统(漂移驱动)或带有中心牵引轮的驱动系统兼容。它控制底盘在转弯时的移动速度。如果你有一个漂移驱动,我们建议从值为 2 开始,而带有中心牵引轮的驱动系统应该从值为 8 开始。以下是它们的使用示例:

cpp
chassis.moveToPose(
0, // x = 0
0, // y = 0
0, // theta = 0
4000, // 超时时间为 4000 毫秒
{.lead = 0.3,.horizontalDrift = 8}
);

{cpp:func}moveToPose <lemlib::Chassis::moveToPose>(移动到姿态函数)和 {cpp:class}MoveToPoseParams <lemlib::MoveToPoseParams>(移动到姿态参数类)API 参考。

在大多数自动控制中,你不只是想让底盘原地打转,还想让它在场地中移动。LemLib 提供了两种基于 PID 的运动,专门用于实现这一目标:“moveToPoint”(移动到点)和“moveToPose”(移动到姿态)。这两种运动在内部都使用了角度和横向 PID 控制器,这意味着两者都需要进行调整。

6 - 横向运动 如果你需要更多设置方面的上下文信息,请查看示例项目

在大多数自动控制中,你不只是想让底盘原地打转,还想让它在场地中移动。LemLib 提供了两种基于 PID 的运动,专门用于实现这一目标:moveToPoint 和 moveToPose。这两种运动在内部都使用了角度和横向 PID 控制器,这意味着两者都需要进行调整。

本文来自 [LemLib](https://lemlib.readthedocs.io/en/stable),经翻译发布于此以供大家学习使用!侵删!

最近更新