【问题标题】:Distance covered by wheels and the angle it turns by (physics and robotics)轮子覆盖的距离及其转动的角度(物理和机器人)
【发布时间】:2021-04-26 10:50:54
【问题描述】:

让我试着描述一下我在做什么。

我正在尝试为吸尘机器人编写控制器代码。整个项目是在 Webots 平台内完成的。它的工作原理是当机器人撞到墙壁时,它会随机转动一个角度并继续打扫房子。

问题:我发现它的转数不准确。如果我指定它转 90 度,它只会转 60 度。如果我指定它转 360 度,它只会转 240 度左右(视觉猜测)。

我找到了一种解决方法 - 一种临时解决方法。我发现将角度乘以一定的量(1.2275)会使角度非常接近问题中指定的实际角度。因此,如果我指定要转动的角度为 180,并将其乘以 1.2275,我得到的值可能是 175 或 177(同样来自视觉猜测)。

问题是这个错误会随着时间的推移而累积。所以最初它可能只是 2-3 度的偏移,这没什么,但是运行模拟超过 30 分钟,它可能会建立相对较高的数字。这是不可接受的。

我问了一个朋友,他建议我随着模拟的进行缩放偏移量,以便偏移量随误差缩放,但我觉得这是一个临时的解决方法。

如果我对它的物理原理不太了解或了解不多,我将不胜感激。任何帮助都将不胜感激。

下面提供的是turn函数的代码。

static void turn(double angle) {
    double l_offset = wb_position_sensor_get_value(left_position_sensor);
    double r_offset = wb_position_sensor_get_value(right_position_sensor);
    double orient;

    stop();

    angle = angle * ANGLE_OFFSET;   //the important part
    double neg = (angle < 0.0) ? -1.0 : 1.0;

    step();

    wb_motor_set_velocity(left_motor,   neg * HALF_SPEED);
    wb_motor_set_velocity(right_motor, -neg * HALF_SPEED);

    do {
        double l  = wb_position_sensor_get_value(left_position_sensor) - l_offset;
        double r  = wb_position_sensor_get_value(right_position_sensor) - r_offset;
        double dl = l * WHEEL_RADIUS;  // distance covered by left wheel in meter
        double dr = r * WHEEL_RADIUS;  // distance covered by right wheel in meter

        orient = neg * (dl - dr) / AXLE_LENGTH; // delta orientation in radian

        step();
    } while (orient < neg * angle);

    stop();
    step();
}

让我对代码进行一些解释。 angle 显然指定了机器人转动的角度。第二行显示了我当前正在使用的解决方法。阅读接下来的几行,您可以看到机器人通过向后移动左轮和向前移动右轮来转动。它不断获取车轮所覆盖的距离并检查状况。当该条件为真时,它会停止转动。

我的猜测是orient = neg * (dl - dr) / AXLE_LENGTH; // delta orientation in radian 这一行可能有问题。有小费吗?也许有人可以验证它的物理/力学方面是否正确?

【问题讨论】:

  • 你的采样周期是无限的吗?
  • @stark 它本质上是无限的,是的。机器人在任何适当的测试周期内都会转动 100 秒。
  • 当您以相同的速度运行两个电机时,在更简单的测试中会发生什么?机器人是否线性移动并保持其方向?它会移动一段距离l * WHEEL_RADIUS吗?
  • step() 函数的时间步长是多少,即每次调用时电机将以指定的速度转动多长时间?

标签: c rotation physics robotics webots


【解决方案1】:

您能否细分导致所需角度与实际(视觉)角度之间差异的原因?我似乎潜入并修复它比修补补丁更能节省时间。

【讨论】:

  • 你能澄清一下你的意思吗?我不太明白。如果你的意思是调整偏移量,我试过了。我去了小数点后 6 位,这个点的增加部分会过度调整(这个值比指定的角度略小)。我似乎无法找到它“正常工作”的中间点。
  • 我的意思是,为什么需要偏移量?你的机制有什么不理想的吗?齿轮?计算?
  • 对。我试着查看齿轮,但第一次看不出有什么问题。我会再调查一下。由于我正在使用其他人的代码,因此我不太确定机制,但我会尝试研究一下。我想主要问题是我的工作并没有真正关注其中的力学/物理部分,而是“逻辑”部分。也许某些值存在一些问题。我会看看我能做什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 2012-04-15
  • 1970-01-01
相关资源
最近更新 更多