Как мы можем получить координаты с помощью пройденного расстояния и направления движения? - PullRequest
0 голосов
/ 01 февраля 2020

Предположим, у меня есть массив

sensor_data=[10,0,5,1,10,1,20,1,20,1,15]

Теперь в этом:

0 означает, что робот / дрон повернул направо и

1 означает, что робот / дрон повернул налево.

Остальные цифры представляют собой пройденные расстояния.

Итак, согласно приведенному выше набору, сначала робот / дрон проходит расстояние в 10 см. Затем поверните направо. После поворота направо робот / дрон проходит 5 см, а затем поворачивает налево. После поворота налево он проходит 10 см и так далее. Итак, изначально робот / дрон находится в точке (0,0). Затем он движется прямо, т.е. в направлении у.

Таким образом, координаты будут (0,10). Затем после поворота направо и после прохождения 5 см координаты будут (-5,10). Следуя такой схеме, остальные координаты: (-5,20), (15,20) и (15,0). Какой код можно записать так, чтобы эти координаты могли быть сгенерированы из приведенного выше массива.

1 Ответ

1 голос
/ 01 февраля 2020

Жуйте это до тех пор, пока не разберетесь в этом. Lol.

import numpy as np
from numpy import cos,sin,pi
import matplotlib.pyplot as plt

# Convert data into floats, for 
sensor_data = tuple(map(lambda x: float(x),[10,0,5,1,10,1,20,1,20,1,15]))

# Start at 0,0 in a 2D plane and start out in x-Direction
Starting_Position = np.array((0.,0.))
Starting_Direction = np.array((1.,0.))



def Rotation_Matrix(direction):

    '''Can be expanded for any angle of rotation in a 2D plane. Google rotation matrix in 2D space.'''

    a = {'left':pi/2,'right':-pi/2}[direction]

    matrix = np.array(((round(cos(a),7),round(-sin(a),7)),
                       (round(sin(a),7),round(cos(a),7))))

    return matrix



def DronePosition(Number_input,Current_Position,Current_Direction):

    if Number_input == 1.:
        New_Direction = Current_Direction.dot(Rotation_Matrix('left'))
        New_Position = Current_Position
    elif Number_input == 0.:
        New_Direction = Current_Direction.dot(Rotation_Matrix('right'))
        New_Position = Current_Position
    else:
        New_Position = Current_Position + Current_Direction*Number_input
        New_Direction = Current_Direction


    return New_Position,New_Direction

Drone_Path = np.zeros(shape=(len(sensor_data),2))

for step in range(len(sensor_data)):
    Drone_Path[step,0] = Starting_Position[0] 
    Drone_Path[step,1] = Starting_Position[1] 
    Starting_Position, Starting_Direction = DronePosition(sensor_data[step],Starting_Position,Starting_Direction)


fig, ax = plt.subplots(figsize=(6,6))

ax.plot(Drone_Path[:,0],Drone_Path[:,1])
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...