namespace RobotNet10.NavigationTune.Shared.Models; /// /// 2D Pose (position + heading) /// public struct Pose2D { public double X { get; set; } public double Y { get; set; } public double Theta { get; set; } // radians public Pose2D(double x, double y, double theta) { X = x; Y = y; Theta = theta; } public static double Distance(Pose2D a, Pose2D b) { double dx = b.X - a.X; double dy = b.Y - a.Y; return Math.Sqrt(dx * dx + dy * dy); } } /// /// 2D Twist (linear + angular velocity) /// public struct Twist2D { public double Linear { get; set; } // m/s public double Angular { get; set; } // rad/s public Twist2D(double linear, double angular) { Linear = linear; Angular = angular; } }