Motion Planning
Advanced techniques for planning and executing smooth, optimal robot trajectories.
Path Planning Algorithms
RoboControl provides multiple path planning strategies for different applications.
Waypoint-Based Planning
Define a sequence of waypoints for the robot to follow sequentially.
var waypoints = new List
{
new Vector2(12, 12), // Start
new Vector2(36, 24), // Intermediate
new Vector2(60, 12), // End
};
var planner = new WaypointPlanner();
var path = planner.GeneratePath(waypoints);
Trajectory Generation
Generate smooth trajectories with velocity and acceleration profiles.
$$p(t) = a_0 + a_1 t + a_2 t^2 + a_3 t^3 + a_4 t^4 + a_5 t^5$$
var trajectory = new QuinticTrajectory(
startPosition: 0,
endPosition: 100,
startVelocity: 0,
endVelocity: 0,
startAcceleration: 0,
endAcceleration: 0,
duration: 5.0 // seconds
);
for (double t = 0; t <= 5.0; t += 0.01)
{
double pos = trajectory.GetPosition(t);
double vel = trajectory.GetVelocity(t);
double acc = trajectory.GetAcceleration(t);
}
RRT (Rapidly-Exploring Random Tree)
Probabilistic Path Planning
RRT algorithm for finding paths in high-dimensional configuration spaces with obstacle avoidance.
// RRT path planning with bidirectional search
var planner = new RRTPlanner
{
StartConfig = new Config(0, 0, 0),
GoalConfig = new Config(100, 100, 45),
// Algorithm parameters
MaxIterations = 5000,
GoalBias = 0.1, // 10% chance to go toward goal
StepSize = 5.0,
// Search strategy
BidirectionalSearch = true,
GoalThreshold = 2.0,
// Optimization
PathSmoothing = true,
SmoothedIterations = 100
};
// Add obstacles
planner.AddObstacle(new CircleObstacle(50, 50, 15));
planner.AddObstacle(new RectangleObstacle(30, 70, 20, 30));
var path = planner.Plan();
Console.WriteLine($"Path found with {path.Nodes.Count} nodes");
Console.WriteLine($"Total path length: {path.TotalLength:F1} units");
Collision Avoidance Algorithms
Velocity Obstacle (VO) Method
Real-time collision avoidance for dynamic environments with moving obstacles.
// Velocity obstacle collision avoidance
var avoidanceController = new VelocityObstacleController
{
RobotRadius = 0.3,
DesiredVelocity = new Vector2(1.0, 0.0), // 1 m/s forward
MaxVelocity = 1.5,
// Time horizon for collision checking
TimeHorizon = 5.0, // seconds
TimeHorizonObst = 2.0
};
// Register moving obstacles
var obstacles = new[]
{
new MovingObstacle {
Position = new Vector2(5, 2),
Velocity = new Vector2(-0.5, 0),
Radius = 0.4
},
new MovingObstacle {
Position = new Vector2(-3, 4),
Velocity = new Vector2(0, -0.3),
Radius = 0.35
}
};
avoidanceController.SetObstacles(obstacles);
// Compute safe velocity
var safeVelocity = avoidanceController.ComputeSafeVelocity();
robot.SetVelocity(safeVelocity);
Reciprocal Collision Avoidance (RCA)
Multi-agent collision avoidance with symmetric velocity adjustment.
// Reciprocal collision avoidance for multi-agent systems
var multiAgentController = new ReciprocalCollisionAvoidanceController
{
MaxAgents = 50,
TimeHorizon = 10.0,
TimeHorizonObst = 2.0,
// Agent-specific parameters
NeighborDist = 25.0, // meters
MaxNeighbors = 10,
// Velocity constraints
MaxSpeed = 5.0,
PreferredSpeed = 3.0
};
// Register agents
for (int i = 0; i < robotCount; i++)
{
multiAgentController.RegisterAgent(robots[i].Id,
position: robots[i].Position,
velocity: robots[i].Velocity,
radius: 0.3
);
}
// Update in control loop
foreach (var robot in robots)
{
var newVelocity = multiAgentController.ComputeVelocity(robot.Id);
robot.SetVelocity(newVelocity);
}
Advanced Trajectory Optimization
Time-Optimal Trajectory Planning
Generate minimum-time trajectories subject to velocity and acceleration limits.
// Time-optimal trajectory generation
var optimizer = new TimeOptimalTrajectoryOptimizer
{
StartPosition = 0,
EndPosition = 100,
StartVelocity = 0,
EndVelocity = 0,
// Physical constraints
MaxVelocity = 50.0,
MaxAcceleration = 30.0,
MaxDeceleration = 35.0
};
// Generate bang-bang control profile (max accel then decel)
var trajectory = optimizer.GenerateTrajectory();
Console.WriteLine($"Minimum time to goal: {trajectory.Duration:F2}s");
Console.WriteLine($"Max velocity achieved: {trajectory.MaxVelocity:F2}");
Console.WriteLine($"Segments:");
foreach (var segment in trajectory.Segments)
{
Console.WriteLine($" {segment.Type}: {segment.Duration:F3}s, a={segment.Acceleration:F1}");
}
Spline-Based Path Smoothing
Smooth out jagged waypoint paths using cubic or quintic splines with curvature optimization.
// Cubic spline smoothing with curvature constraints
var pathSmoother = new SplinePathSmoother
{
InterpolationType = SplineType.CubicSpline,
NumControlPoints = 50,
// Curvature constraints
MaxCurvature = 0.5, // 1/radius
CurvatureSmoothness = 0.8,
// Smoothing parameters
RegularizationWeight = 0.1,
BoundaryConditions = BoundaryCondition.Natural
};
var rawWaypoints = new List<Vector2>
{
new(0, 0), new(30, 15), new(60, 10), new(90, 30), new(120, 20)
};
var smoothedPath = pathSmoother.Smooth(rawWaypoints);
Console.WriteLine($"Original path length: {CalculatePathLength(rawWaypoints):F1}");
Console.WriteLine($"Smoothed path length: {CalculatePathLength(smoothedPath):F1}");
Console.WriteLine($"Max curvature: {smoothedPath.MaxCurvature:F3}");
Implement dynamic obstacle avoidance for safe autonomous navigation.
var obstacles = new List
{
new CircularObstacle(centerX: 30, centerY: 30, radius: 8),
new RectangularObstacle(minX: 50, maxX: 55, minY: 10, maxY: 20)
};
var safePathPlanner = new ObstacleAvoidingPlanner(obstacles);
var safePath = safePathPlanner.GeneratePath(waypoints);
Path Following Control
Execute planned paths with feedback control to maintain accuracy.
$$\delta = \arctan\left(\frac{2L e_{cte}}{v^2}\right)$$
where $L$ is wheelbase, $e_{cte}$ is cross-track error, and $v$ is velocity.
var controller = new PathFollowingController(path);
while (!controller.IsPathComplete())
{
controller.UpdateCurrentPose(robotX, robotY, robotTheta);
var (linearVel, angularVel) = controller.ComputeVelocities();
robot.SetVelocities(linearVel, angularVel);
}