Donkeycar 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的编码器引脚暴露的引脚。