如何将陀螺仪或编码器用于直线移动的机器人?

时间:2016-07-29 12:40:55

标签: c++ raspberry-pi2 gyroscope robotics encoder

我最近成功地使用直流电机制造了我的自主式机器人,效果很好。然而,当它应该时,它还没有直线移动。我现在正在研究应该采用哪种方法让机器人走直。我非常了解如何使用编码器,但我对陀螺仪不太确定。我曾经使用编码器编写了一个直线运动程序,但由于前刷速度不能完全直线运动,为了进一步改进,我决定使用陀螺仪,如果我使用陀螺仪进行直线运动?或者是否有任何建议?

1 个答案:

答案 0 :(得分:0)

首先,确保从概念上理解机器人直线行驶的意义。你不会得到一个直线移动的机器人。你可能会让一个人足够直接移动(也许比人类可以确定的更完美),但总会出现错误。

陀螺仪可能无法确定你是否会偏离航向,如果它是逐渐的,并且取决于你的陀螺仪的质量,它可能会有一个漂移的积累,导致它认为它正在变得如此轻微的当它是完全坐着。你得到的陀螺越贵,它就会越少,但仍然如此。

即使你假设完美的传感器,“直线驾驶”和“保持直线和狭窄”之间仍然存在差异。想象一下,您已经编码了一个机器人来驱动,以便尽可能保持其轴承一致(直线驱动)。如果,当它移动的时候你敲了一下,它会转向一侧,然后将自己校正到原来的角度。但是,它将走上另一条道路。当然,路径将与原始路径平行,但它不会是相同的路径。

然后可以选择让它试图弄清楚它被推动的路径有多远并尝试重新开始。那要么是一个恒定的参考(如线跟随器机器人会做的)或更多的传感器(如3D陀螺仪和3D加速度计)。

第二个选项听起来比你正在做的更多,所以这是第一个没有特定机器人框架的选项:

//initialize
double angle = gyro.get_heading_degrees();
//...
//logic code that may be looped or fired by events
{
  //this is our error; how far off we are from our target heading
  double error = angle - gyro.get_heading_degrees() - 360;

  drive_system.drive_arcade(error / 180, 1);
}

这假设以街机方式驾驶;你可以将它改装成坦克驱动器或转向驱动器或麦克风驱动器或H驱动器或......

'1'只是速度

'-360'和'180'是将角度减小到介于-1和1之间的值。如果您的驱动方法使用不同的范围来确定角度,则必须进行调整。

最后,这个例子并非万无一失,但它应该让你考虑如何在检测到错误时纠正错误。