手柄遥控四驱小车实验

手柄遥控四驱小车实验

    前面曾实验过四驱小车,以及如何获取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('停止检测')
执行效果:
    不过实验还是存在一些问题,比如力矩体现,连贯性体现等还是不够完美;后续会实验小车安装摄像头然后实现手机远程视频功能。
jiujiang

评论已关闭。