前面曾实验过四驱小车,以及如何获取ps4手柄数据,今天想想如何尝试两者结合起来,用ps4手柄操作四驱小车实现四向行走;以前文章参考:
1、ps4手柄蓝牙连接树莓派:https://www.shumeijiang.com/2021/08/04/树莓派和手柄-蓝牙连接;
2、ps4手柄数据获取:https://www.shumeijiang.com/2021/08/04/树莓派和手柄-数据获取;
3、四驱小车驱动封装:https://www.shumeijiang.com/2021/09/23/四驱小车循迹实验-直流电机驱动封装;
组装效果:
其中将手柄数据获取部分做了简化,然后检测手柄的右侧摇杆数据;当Axis等于2时,表示左右动作,当Axis等于5时,表示前后动作;具体如下表格:
摇杆 | 值 | 含义 |
Axis2 | 大于0 | 向右 |
Axis2 | 小于0 | 向左 |
Axis5 | 大于0 | 后退 |
Axis5 | 小于0 | 前进 |
代码示例:
#!/usr/bin/env python
#coding:utf-8
'''
from JiuJiang
树莓酱的操作实例
https:://www.shumeijiang.com
'''
#import RPi.GPIO as GPIO ##引入GPIO模块
import time ##引入time库
import pygame
#引入驱动类
from baseAct import baseAct
#实例化驱动类并赋值四个电机所占引脚值
act = baseAct(17, 16, 13, 12, 19, 18, 21, 20)
done = False
#手柄获取初始化
pygame.init()
pygame.joystick.init()
try:
while not done:
#检测手柄状态 手柄关闭则检测关闭
for event in pygame.event.get():
if event.type == pygame.QUIT: #是否关闭
done = True
#获取摇杆数量
joystick_count = pygame.joystick.get_count()
for i in range(joystick_count):
joystick = pygame.joystick.Joystick(i) #挨个创建摇杆对象
joystick.init() #摇杆初始化
axes = joystick.get_numaxes() #获取摇杆轴数
#挨个获取轴的数据
for n in range(axes):
axis = joystick.get_axis(n) #获取指定轴的位置 数字表示
if axis == 0.0:
continue
#数据收集
if n == 2: #左右
if axis > 0:
act.turn_right(0.5, 50, 50, True)
else:
act.turn_left(0.5, 50, 50, True)
elif n == 5: #前后
if axis > 0:
act.act_backward(0.5, 50, 50)
else:
act.act_forward(0.5, 50, 50, True)
time.sleep(0.2)
except KeyboardInterrupt:
print('停止检测')
执行效果:
不过实验还是存在一些问题,比如力矩体现,连贯性体现等还是不够完美;后续会实验小车安装摄像头然后实现手机远程视频功能。