操纵轨迹

生成轨迹后,您可以使用某些方法从中检索信息。在编写代码以追踪这些轨迹时,这些方法将非常有用。

获取轨迹的总持续时间

因为所有轨迹在每个点上都有时间戳,所以预先确定了机器人穿越整个轨迹所需要的时间已被预先确定了。 TotalTime() (C++) / getTotalTimeSeconds() (Java) 方法可用于确定追踪轨迹所需的时间

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

轨迹采样

可以在各个时间步长采样轨迹,以获取该点的姿态,速度和加速度。(units::second_t time) (C++) / sample(double timeSeconds) (Java)方法可用于在任何时间步采样轨迹。该参数指的是自0秒(轨迹的起点)以来经过的时间量。此方法返回一个Trajectory :: Sample,包含关该采样点的信息。

// 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);

Trajectory::Sample结构包含有关采样点的几条信息:

  • t:从轨迹开始到采样点为止的时间。

  • velocity:采样点的速度。

  • acceleration: 采样点的加速度。

  • pose:采样点的姿态 (x, y, heading)

  • “曲率”:采样点的曲率(航向的变化率,相对于沿着轨迹的距离)。

注意:可以通过将速度乘以曲率来计算采样点的角速度。

获取轨迹的所有状态(高级)

更高级的用户可以通过调用States() (C++) / getStates() (Java)方法获得轨迹的所有状态列表。每个状态代表轨迹上的一个点。当轨迹被通过TrajectoryGenerator::GenerateTrajectory(…)方法创建时,轨迹点和状态的列表也被创建了。当用户在一个特定的时间步长采样轨迹时,一个新的采样点被插入到列表中两个现有的点/状态之间。