Donkeycar RC Hat

RaspberryPi的RC Hat

如果您从一个现成的遥控车开始,它可能带有一个遥控器。好消息是:您可以将其与Donkeycar一起使用,使用遥控器进行手动驾驶。您还可以直接将车辆的舵机和电机控制器插入RaspberryPi,而无需使用PCA9685电机/舵机控制板。

请注意,在使用RC hat之前,您需要调整好遥控器的修剪。您需要调整好油门修剪、方向修剪和方向范围;可以参考此视频了解如何进行调整。

要做到这一点,您可以按照此教程所示手动连接它(这种方法可行,但有很多容易掉落的线缆),或者使用上面显示的Donkeycar RC Hat进行更整洁的连接,它会为您处理所有的线缆连接,并且还包括一个OLED屏幕和一个风扇。

Donkeycar RC Hat可以从Donkeycar商店购买。请注意,它仅适用于RaspberryPi,不适用于Jetson Nano,因为Jetson处理其I/O引脚的方式有限制。

如果您使用标准的轮式编码器,可以将其插入到"Encoder"引脚中。如果您有一个5V电源,可以使用"Optional 5v power in"引脚为RaspberryPi供电。

一旦您插好了所有的电缆,就可以进行软件设置了。

软件设置分为两个部分。第一部分是设置使用RC Hat读取RC遥控器。第二部分是可选的,它是设置驱动系统,以便我们可以使用RC Hat来控制电调和舵机(这样您就不再需要PCA9685)。

安装PiGPIO

无论是哪种情况,我们都将使用PiGPIO库来控制I/O引脚(请记住,这仅适用于树莓派)。请按照以下命令在命令提示符中安装PiGPIO:

sudo apt-get update
sudo apt-get install pigpio

然后,在命令行中输入以下内容,将PIGPIO守护程序设置为始终在启动时运行:

sudo systemctl enable pigpiod & sudo systemctl start pigpiod

使用RC Hat读取RC遥控器

RC Hat可以将RC接收器生成的PWM信号路由到树莓派的GPIO引脚,因此软件可以测量PWM脉冲的长度,然后使用该长度确定转向和油门。这使您可以使用随附的RC遥控器,而不是使用游戏手柄。

连接方式: 要使用RC Hat读取您的RC遥控器,请使用附带的3线电缆将RC接收器连接到RC 1和RC 2引脚(对应于RC接收器的通道1和通道2)。在所有情况下,请确保正确插入它们,注意+、-和S(信号)标记。通常,黑色线是“-”,中间的红色线是“+”,白色线是“S”。

配置: 现在编辑您的myconfig.py文件,使用RC Hat读取RC遥控器。在您的mycar目录中,按照以下方式编辑myconfig.py文件:

在myconfig.py文件中,将pigpio_rc作为您的控制器类型。取消注释CONTROLLER_TYPE行(删除前面的#),并将其编辑如下:

CONTROLLER_TYPE = 'pigpio_rc'

还要将use joystick设置为True

USE_JOYSTICK_AS_DEFAULT = True

您可以在#PIGPIO RC control部分更改其他设置,例如反转输出方向或连接的引脚,或调整预期的PWM脉冲宽度(有关脉冲宽度调制的讨论,请参阅Standard RC with ESC and Steering Servo);简而言之,1000纳秒的脉冲表示全向左/倒车,1500纳秒的脉冲表示直行/停止,2000纳秒的脉冲表示全向右/前进。默认值通常是好的,您可以从它们开始。如果在校准时遇到任何问题,请阅读“故障排除”部分,了解如何更改其中一个或多个值以进行补偿。

读取RC遥控器的输入选项:

#PIGPIO RC control
STEERING_RC_GPIO = 26              # 用于读取RC遥控器转向的GPIO引脚(以Broadcom编号)
THROTTLE_RC_GPIO = 20              # 用于读取RC遥控器油门的GPIO引脚(以Broadcom编号)
DATA_WIPER_RC_GPIO = 19            # 用于读取RC遥控器按钮的GPIO引脚(以Broadcom编号)
PIGPIO_STEERING_MID = 1500         # '直行'转向的PWM脉冲(以纳秒为单位)。如果您的车无法直线行驶,请调整此值。
PIGPIO_MAX_FORWARD = 2000          # 最大前进油门的PWM脉冲(以纳秒为单位)。
PIGPIO_STOPPED_PWM = 1500          # 停止油门的PWM脉冲(以纳秒为单位)
PIGPIO_MAX_REVERSE = 1000          # 最大倒车油门的PWM脉冲(以纳秒为单位)。
PIGPIO_SHOW_STEERING_VALUE = False
PIGPIO_INVERT = False              # 很少有控制器使用反向脉冲;如果是,请将其设置为True
PIGPIO_JITTER = 0.025              # 低于此阈值时不报告信号(去抖动/噪声抑制)

使用RC Hat控制ESC和转向舵机

可选地,您可以使用树莓派生成PWM信号(参见Standard RC with ESC and Steering Servo)来控制电机速度和转向,而不是使用PCA9685板(这样,您刚好用上了RC Hat!)。

连接方式: RC Hat包括两个与舵机电缆兼容的3针排针,用于连接电机控制器和转向舵机。将您的车辆舵机插入舵机引脚,将电机控制器插入电机引脚。在所有情况下,请确保正确插入它们,注意+、-和S(信号)标记。通常,黑色线是“-”,中间的红色线是“+”,白色线是“S”。

配置: 对于RC输出,请在myconfig.py文件中选择PWM_STEERING_THROTTLE作为驱动系统类型。取消注释DRIVE_TRAIN_TYPE行(删除前面的#),并将其编辑如下:

DRIVE_TRAIN_TYPE = "PWM_STEERING_THROTTLE"

然后取消注释整个PWM_STEERING_THROTTLE配置块,并确保转向使用"PIGPIO.BCM.13",油门使用"PIGPIO.BCM.18",因为这是RC Hat上的引脚与树莓派40引脚头部连接的方式。

PWM_STEERING_THROTTLE = {
    "PWM_STEERING_PIN": "PIGPIO.BCM.13",    # 用于转向舵机的PWM输出引脚
    "PWM_STEERING_SCALE": 1.0,              # 用于补偿PWM频率与60Hz的差异;不用于调整转向范围
    "PWM_STEERING_INVERTED": False,         # 如果硬件需要反向的PWM脉冲,则为True
    "PWM_THROTTLE_PIN": "PIGPIO.BCM.18",    # 用于ESC的PWM输出引脚
    "PWM_THROTTLE_SCALE": 1.0,              # 用于补偿PWM频率与60Hz的差异;不用于增加/限制速度
    "PWM_THROTTLE_INVERTED": False,         # 如果硬件需要反向的PWM脉冲,则为True
    "STEERING_LEFT_PWM": 400,               # 全向左转的PWM值
    "STEERING_RIGHT_PWM": 200,              # 全向右转的PWM值
    "THROTTLE_FORWARD_PWM": 400,            # 最大前进油门的PWM值
    "THROTTLE_STOPPED_PWM": 300,            # 停止油门的PWM值
    "THROTTLE_REVERSE_PWM": 220,            # 最大倒车油门的PWM值
}

校准

在将RC Hat配置为读取RC控制器并可选地控制ESC和转向舵机之后,您应该进行正常的校准步骤,以确定您的车辆的正确转向和油门PWM值(并确保正确连接)。

故障排除

如果一个通道反向(例如,向左转向向右转等),可以在RC发射器上反转该通道(通常是一个开关或设置),或者通过在上述输出选项中更改该通道的PWM_INVERTED值为True来进行更改。

OLED设置

myconfig.py中启用显示。

# SSD1306_128_32
USE_SSD1306_128_32 = True     # 启用SSD_1306 OLED显示屏
SSD1306_128_32_I2C_BUSNUM = 1 # I2C总线号
SSD1306_RESOLUTION = 1 # 1 = 128x32; 2 = 128x64

在启动时显示IP地址

拥有OLED屏幕的一个很酷的功能是可以在启动时显示车辆的IP地址,以便您可以连接到它。设置说明在这里

故障排除

如果无法启动车辆,请确保在您的虚拟环境中安装了Adafruit_SSD1306包。如果您使用的是较新版本的donkeycar,它应该会自动安装。

pip install Adafruit_SSD1306

编码器

如果您使用的是标准的轮式编码器,可以将其插入“编码器”引脚,然后在myconfig.py中设置编码器配置,以使用RC Hat的编码器引脚暴露的引脚。