26 constexpr float kPi = std::numbers::pi_v<float>;
27 constexpr float kTwoPi = 2.0f * kPi;
28 while (angle > kPi) angle -= kTwoPi;
29 while (angle < -kPi) angle += kTwoPi;
36 const float c = std::cos(pose.theta);
37 const float s = std::sin(pose.theta);
39 pose.x + dxLocal * c - dyLocal * s,
40 pose.y + dxLocal * s + dyLocal * c,
48 pose.x + distanceCm * std::cos(pose.theta),
49 pose.y + distanceCm * std::sin(pose.theta),
56 constexpr float kHalfPi = std::numbers::pi_v<float> / 2.0f;
57 const float perp = pose.theta + kHalfPi;
59 pose.x + distanceCm * std::cos(perp),
60 pose.y + distanceCm * std::sin(perp),
Pose2D rotate(const Pose2D &pose, float angleRad) noexcept
Pose2D strafeMove(const Pose2D &pose, float distanceCm) noexcept
Pose2D forwardMove(const Pose2D &pose, float distanceCm) noexcept
Pose2D applyLocalDelta(const Pose2D &pose, float dxLocal, float dyLocal, float dTheta) noexcept
Apply a delta expressed in the robot's local frame (forward, left, yaw).
float normalizeAngle(float angle) noexcept