Manipulando trayectorias

Una vez que se ha generado una trayectoria, puede recuperar información de ella utilizando ciertos métodos. Estos métodos serán útiles al escribir el código para seguir estas trayectorias.

Obteniendo la duración total de la trayectoria

Debido a que todas las trayectorias tienen marcas de tiempo en cada punto, la cantidad de tiempo que debe tomar un robot para atravesar toda la trayectoria está predeterminada. El método TotalTime() (C++) / getTotalTimeSeconds() (Java) puede ser usado para determinar el tiempo que le toma en atravesar toda la trayectoria.

// Get the total time of the trajectory in seconds
double duration = trajectory.getTotalTimeSeconds();

Una muestra de la trayectoria

Se puede hace una muestra de la trayectoria en varios pasos de tiempo para obtener la pose, la velocidad y la aceleración en ese punto. El método Sample(units::second_t time) (C++) / sample(double timeSeconds) (Java) se puede utilizar para hacer una muestra de la trayectoria en cualquier paso de tiempo. El parámetro se refiere a la cantidad de tiempo transcurrido desde 0 segundos (el punto de inicio de la trayectoria). Este método devuelve una Trajectory::Sample con información sobre ese punto de muestra.

// Sample the trajectory at 1.2 seconds. This represents where the robot
// should be after 1.2 seconds of traversal.
Trajectory.Sample point = trajectory.sample(1.2);

La estructura Trajectory::Sample tiene varias piezas de información acerca del punto de muestra:

  • t: El tiempo transcurrido desde el inicio de la trayectoria hasta el punto de muestra.

  • velocity: La velocidad en el punto de muestra.

  • acceleration: La aceleracion en el punto de muestra.

  • `pose: la pose (x, y, rumbo) en el punto de muestra.

  • curvature: la curvatura (tasa de cambio de rumbo con respecto a la distancia a lo largo de la trayectoria) en el punto de muestra.

Nota: La velocidad angular en el punto de muestra se puede calcular multiplicando la velocidad por la curvatura.

Obteniendo todos los estados de la trayectoria (avanzado)

Un usuario más avanzado puede obtener una lista de todos los estados de la trayectoria llamando al método States() (C++) / getStates() (Java). Cada estado representa un punto en la trayectoria. When the trajectory is created usando el método TrajectoryGenerator::GenerateTrajectory(...), una lista de trayectoria se crean puntos / estados. Cuando el usuario muestrea la trayectoria en un paso de tiempo particular, se interpola un nuevo punto de muestra entre dos puntos / estados existentes en la lista.