как убрать задержку и добавить плавность на джойстик - PullRequest
0 голосов
/ 24 июня 2019

Я работаю с двумя двухколесными роботами, которые управляются с помощью джойстиков. Теперь, когда я пишу условия для движения вперед, назад и поворота, происходит постоянное движение. Я создал условие else, чтобы при отпускании осей джойстика робот не двигался, но с этим условием возникла задержка. Когда робот делает ход, он может остановиться через секунду, его можно остановить на максимальном значении, хотя я не отпускал оси. Пожалуйста, скажите мне, как я могу написать наилучшее условие для остановки робота, когда я отпускаю ось. (Управление с клавиатуры нужно на всякий случай)

import socket
import pygame
import time
import pygame.joystick

pygame.init()
pygame.display.set_mode((640, 480))

rc_socket = socket.socket()
rc_socket_2 = socket.socket()

try:
    rc_socket.connect(('192.168.1.102', 1234)) # connect to robot
    rc_socket_2.connect(("192.168.1.101",1234))
except socket.error:
    print("could not connect to socket")

joystick_count = pygame.joystick.get_count()
pygame.joystick.init()

joystick = pygame.joystick.Joystick(0)
joystick.init()
joystick_2 = pygame.joystick.Joystick(1)
joystick_2.init()
axes = joystick.get_numaxes()




while True:
    events = pygame.event.get()
    for event in events:
        if event.type == pygame.JOYAXISMOTION:
            joy = event.joy
            axis = event.axis
            value = event.value
            if joy == 0:

                if axis == 1:
                    if abs(value) >= 0.2:
                        u1 = u2 = -value
                        rc_socket.send('({},{})\n'.format(u1, u2).encode())
                        # print('({},{})\n'.format(u1, u2))
                        print(value)

                elif axis == 3:
                    if abs(value) >= 0.2:
                        u1 = -value
                        u2 = value
                        rc_socket.send('({},{})\n'.format(u1, u2).encode())
                        # print('({},{})\n'.format(u1, u2))
                        print(value)

                elif axis == 2:
                    if value >= 0:
                        u1 = 0
                        u2 = abs(value)
                        rc_socket.send('({},{})\n'.format(u1, u2).encode())
                        print(value)


                else:
                    u1 = u2 = 0
                    rc_socket.send('({},{})\n'.format(u1, u2).encode())
                    # print('({},{})\n'.format(u1, u2))
                    #print("{} -> sending (0,0)".format(value))



        if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    u1 = -1.0
                    u2 = 1.0
                    print("turn left: ({},{})".format(u1, u2))
                elif event.key == pygame.K_RIGHT:
                    u1 = 1.0
                    u2 = -1.0
                    print("turn right: ({},{})".format(u1, u2))
                elif event.key == pygame.K_UP:
                    u1 = 1.0
                    u2 = 1.0
                    print("forward: ({},{})".format(u1, u2))
                elif event.key == pygame.K_DOWN:
                    u1 = -1.0
                    u2 = -1.0
                    print("forward: ({},{})".format(u1, u2))
                rc_socket_2.send('({},{})\n'.format(u1, u2).encode())
        elif event.type == pygame.KEYUP:
            u1 = 0
            u2 = 0
            print("key released, resetting: ({},{})".format(u1, u2))
            rc_socket_2.send('({},{})\n'.format(u1, u2).encode())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...