校准车辆

校准车辆的目的是使其能够始终稳定行驶。如果您使用的是舵机,则Donkey需要知道与完全左转和完全右转相对应的PWM值。如果您使用的是电调,则Donkey需要知道完全前进油门、停止和完全后退油门的PWM值。您可以在校准过程中确定这些值,然后将它们保存到您的myconfig.py文件中,以便在车辆行驶时使用。

某些类型的传动系统不需要进行校准。如果您使用的是使用L298N电机控制器或类似设备(而不是电调)的任何传动系统,则无需进行校准;这些传动系统不使用PWM;它们使用不需要校准的占空比。大多数差分传动系统(名称以DC_TWO_WHEEL开头)属于这种类型。如果您的传动系统在油门上使用L298N电机控制器或类似设备,但在转向上使用舵机,则您需要校准转向,但不需要校准油门。

关于传动系统的更详细讨论,请参阅马达

如何调整车辆设置

您需要通过SSH登录到树莓派来进行校准。

车辆的所有默认设置都在config.py文件中。您可以通过编辑车辆目录中的myconfig.py脚本来覆盖默认设置。这个文件是在运行donkey createcar --path ~/mycar命令时生成的。您可以通过以下命令在车辆上编辑此文件:

nano ~/mycar/myconfig.py

转向校准

确保您的车辆离地以防止失控的情况发生。

  1. 打开您的车辆。
  2. 找到舵机的3针电缆,并确保它正确连接到PWM输出引脚。
  3. 运行donkey calibrate ...命令,并提供参数来指定将产生PWM的引脚。

    • 当校准使用引脚指定的传动系统(如PWM_STEERING_THROTTLE)时,使用--pwm-pin参数来指定目标引脚,例如RPI_GPIO.BOARD.33PCA9685.1:40.13。如果您使用的是Donkey Hat,则可以使用donkey calibrate --pwm-pin=PIGPIO.BCM.13来校准转向。有关引脚和引脚指定符的更详细讨论,请参阅Pins
    • 当使用过时的PCA9685传动系统(如I2C_SERVO,代码里标识为过期)时,请指定PCA9685通道(电缆连接的3针连接器的索引)和PCA9685连接的I2C总线;donkey calibrate --channel <your_steering_channel> --bus=<your_i2c_bus>, 如果按照前面组装,转向舵机是接在PCA9685的通道1上,所以我们就可以如下执行 donkey calibrate --channel 1 --bus=1
  4. 首先,找到将轮子完全转向左侧的值。在校准转向时,您要选择刚好能使车轮达到最大转向角度的值;车轮应该完全转向,但是舵机不应发出嗡嗡声。尝试值360,您应该看到您的车轮稍微移动。如果没有,请尝试400300。接下来,输入起始值加减10以找到使您的车辆完全向左转的PWM设置,再次确保电机没有发出嗡嗡声。记住这个值。

  5. 接下来,找到将轮子完全转向右侧的值。输入起始值加减10以找到使您的车辆完全向右转的PWM设置,再次确保电机没有发出嗡嗡声。记住这个值。

编辑您车辆上的myconfig.py脚本,并分别将这些值输入为STEERING_LEFT_PWMSTEERING_RIGHT_PWM

  • STEERING_LEFT_PWM = 左转的PWM值
  • STEERING_RIGHT_PWM = 右转的PWM值

油门校准

  1. 找到电调的3针电缆,并确保将其正确连接到PWM输出引脚上。
  2. 如果使用Donkey Hat,电调的3针电缆将插入到帽子上。请参阅使用RC Hat控制电调和舵机以获取有关连接的完整说明。
  3. 如果使用PCA9685,电调的3针电缆将连接到PCA9685的一个3针输入通道上。请参阅将舵机盾连接到树莓派以获取说明。
  4. 运行donkey calibrate ...命令,并提供参数来指定产生PWM的引脚。
  5. 当校准使用引脚标识符的驱动系统(例如PWM_STEERING_THROTTLE)时,使用--pwm-pin参数指定目标引脚,例如RPI_GPIO.BOARD.33PCA9685.1:40.13。如果您使用的是Donkey Hat,则可以使用donkey calibrate --pwm-pin=PIGPIO.BCM.18来校准油门。有关引脚和引脚标识符的更完整讨论,请参阅Pins
  6. 当使用传统的PCA9685驱动系统(如I2C_SERVO)时,请指定PCA9685通道(电缆连接的3针连接器的索引)和PCA9685连接的I2C总线;donkey calibrate --channel <your_throttle_channel> --bus=<your_i2c_bus> 如果按照前面组装,电调ESC是接在PCA9685的通道0上,所以我们就可以如下执行 donkey calibrate --channel 0 --bus=1
  7. 当提示输入PWM值时,输入370
  8. 您应该听到电调的蜂鸣声,表示已经校准完成。
  9. 输入400,您应该看到车轮开始向前转动。如果没有,很可能是反向的,请尝试输入330
  10. 不断尝试不同的值,直到找到一个合理的最大速度,并记住这个PWM值。

对于遥控车的倒车,稍微有些复杂,因为电调必须接收到一个反向脉冲、零脉冲、反向脉冲才能开始向后行驶。要校准反向的PWM设置...

  1. 使用上述相同的方法将PWM设置为零油门。
  2. 输入反向值,然后是零油门值,然后再次输入反向值。
  3. 输入反向值的正负10的范围内的值,以找到一个合理的反向速度。记住这个反向PWM值。

现在打开您的myconfig.py脚本,将汽车的PWM值输入到throttle_controller部分:

  • THROTTLE_FORWARD_PWM = 全油门前进的PWM值
  • THROTTLE_STOPPED_PWM = 零油门的PWM值
  • THROTTLE_REVERSE_PWM = 全反向油门的PWM值

微调校准

现在您的车大致校准完成,您可以尝试驾驶它以验证其行驶是否符合预期。以下是微调汽车校准的步骤。

首先,最重要的是,确保您的车在没有转向输入时能够完全直行

  1. 运行python manage.py drive启动您的车辆。
  2. 在浏览器中打开 <your_cars_hostname.local>:8887
  3. 按键盘上的 i 键几次,使车辆向前行驶。最好在非常平坦的地板上进行此操作,并使用某种网格来判断车辆是否直行。注意不要将车辆的角度与沿弧线行驶混淆。车辆的倾斜可能只是因为您在启动时将车辆指向了一个角度。如果车辆行驶的是一条弯曲的弧线,则表示车辆正在转向。
  4. 如果您的车辆在没有转向输入时倾向于向左转,则在 myconfig.py 文件中更新 STEERING_LEFT_PWM 的值,使其更接近中性。例如,如果 STEERING_LEFT_PWM 是 460,STEERING_RIGHT_PWM 是 290,那么可以稍微减小 STEERING_LEFT_PWM,例如改为 458。
  5. 如果您的车辆在没有转向输入时倾向于向右转,则在 myconfig.py 文件中更新 STEERING_RIGHT_PWM 的值,使其更接近中性。例如,如果 STEERING_LEFT_PWM 是 460,STEERING_RIGHT_PWM 是 290,那么可以稍微增加 STEERING_RIGHT_PWM,例如改为 292。
  6. 重复此过程几次,直到您的车辆能够直行。

接下来,尝试使车辆的全左转和全右转具有相同的转向角度(在完全绕圈时形成相同直径的圆)。

注意:可选步骤

  1. 运行python manage.py drive启动您的车辆。
  2. 在浏览器中打开 <your_cars_hostname.local>:8887
  3. 按下 j 键直到车辆的转向达到最大右转。
  4. 按键盘上的 i 键几次,使车辆向前行驶。
  5. 测量转弯的直径,并记录在电子表格中。
  6. 对于不同的转向值,重复进行此测量以测量每个方向的转弯。
  7. 绘制图表,以便您可以看到车辆在每个方向上的转向是否相同。

校正方法:

  • 如果车辆在80%转向和100%转向时转向角度相同,请将该转向方向的PWM设置更改为80%时的PWM值。
  • 如果车辆倾向于向一个方向转向,请在偏向相反方向的转向中更改PWM值。

微调完成后,您的转向图表应该类似于以下示例。

calibration graph

您可能需要迭代进行调整,确保车辆直行并且左转和右转的角度相同。优先确保车辆直行。

接下来,让我们开始驾驶!