Skip to content

Fonyuy45/phd_test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Path Follower Implementation

Overview

Implementation of a holonomic lookahead controller with kinematic velocity limiting for the cellumation celluveyor system.

Test Result: Reached end of path

Algorithm: Holonomic Lookahead Controller

Core Approach

Adapted Pure Pursuit algorithm for omnidirectional motion:

  • Guidance: Proportional control to lookahead point on path
  • Safety: Kinematic velocity limiting based on parcel geometry
  • Output: 2D velocity vector in global frame

Why This Approach?

Simple and Effective:

  • Proportional control is robust and easy to tune
  • Lookahead prediction provides smooth trajectories
  • Natural fit for holonomic celluveyor system

Celluveyor-Specific Design:

  • Global frame velocity output matches omniwheel actuation
  • Independent X, Y, θ control utilizes omnidirectional capability
  • Corner velocity limiting respects individual wheel speed constraints

Key Features

1. Corner Velocity Limiting (Critical Innovation)

Physics: v_corner = v_center + ω × r

For a parcel rotating while translating, corner wheels move faster than center. Implementation checks all 4 corners and scales velocity if any exceeds limit.

2. Velocity Saturation

Prevents control instability from large position errors by capping desired velocity magnitude.

3. Angular Speed Limiting

Limits rotational velocity to 1.5 rad/s for smooth rotation profiles.

System Constraints

Parameter Value Status Implementation
Max Wheel Speed 1.1 m/s Implemented Corner velocity checked and scaled
Max Acceleration 2.5 m/s² Future Work Documented for future implementation
Control Frequency 100 Hz Respected Update/compute cycle as specified
Parcel Size 0.6×0.4 m Implemented Used in corner velocity calculation

Build Instructions

Prerequisites

  • CMake >= 3.22
  • C++17 compiler (GCC 7+ or Clang 5+)
  • Eigen3 library

Install Eigen3:

# Ubuntu/Debian
sudo apt install libeigen3-dev

# Verify installation
dpkg -L libeigen3-dev | grep eigen3

Build

mkdir build && cd build
cmake ..
make

Expected output:

[100%] Built target prog_test

Run

./prog_test

Expected output:

Reached end of path

Implementation Details

Controller Parameters

  • Lookahead distance: 0.15m (25% of parcel length)
  • Position gain: 2.0 (tuned for 100Hz control)
  • Heading gain: 3.0 (higher for orientation tracking)
  • Waypoint tolerance: 0.02m (2cm accuracy)
  • Max angular speed: 1.5 rad/s (smooth rotation)

Design Decisions

1. Lookahead Distance: 0.15m

  • Rationale: ~25% of parcel length provides smooth following without cutting corners
  • Trade-off: Larger = smoother but cuts corners; Smaller = accurate but jerky
  • Chosen value balances smoothness with path accuracy

2. Proportional Gains

  • Position gain (2.0): Balanced responsiveness without overshoot
  • Heading gain (3.0): Higher to ensure orientation tracking during translation
  • Trade-off: Too high causes oscillation; too low causes lag
  • Values tuned for 100Hz control frequency and expected object dynamics

3. Velocity Scaling Strategy

  • Scales both translation and rotation proportionally when limits exceeded
  • Alternative: Prioritize translation over rotation (not implemented)
  • Rationale: Maintains intended motion profile while respecting hardware constraints
  • Ensures predictable behavior across varying path geometries

Celluveyor-Specific Considerations

Challenge: Large Object Rotation

From interview materials: 2×2m objects require significant rotation.

Impact on This Implementation:

  • Larger parcels have larger corner radii (r = √(a² + b²))
    • 0.6×0.4m parcel: r = 0.36m → moderate velocity limiting
    • 2.0×2.0m parcel: r = 1.41m → aggressive velocity limiting
  • More aggressive velocity limiting during rotation for large objects
  • Trade-off: Rotation speed vs. translation speed becomes more pronounced

Rotation-Translation Coupling: When both translation and rotation occur simultaneously (as in the S-curve section of the test path), the corner velocity constraint becomes the dominant limiting factor. This is the challenge mentioned regarding large objects.

Testing & Validation

Test Path Characteristics:

  • 112 waypoints over ~1.08m total path length
  • Dense waypoint spacing: ~0.01m (enables smooth following)
  • Two distinct sections:
    • S-curve: 172° rotation over 0.6m (tests coupled translation + rotation)
    • Straight line: 0.47m at constant 90° heading (tests pure translation)

Constraints Verified:

  • No corner wheel exceeds 1.1 m/s at any point
  • Smooth velocity transitions (no discontinuities)
  • Reaches goal within tolerance (< 0.1mm position, < 0.01° orientation)
  • Handles orientation tracking throughout path
  • Completes in < 10,000 iterations

Performance:

  • Position accuracy: ~1-2cm during path following
  • Final position error: < 0.1mm (as verified by test)
  • Orientation accuracy: ~1-2° during following, < 0.01° at goal

Future Enhancements

The current implementation prioritizes velocity constraints as explicitly required by the test specification. The following enhancements would make this ready for the celluveyor system:

1. Acceleration Limiting

Current implementation focuses on velocity limits. Adding acceleration limiting (2.5 m/s² as specified in system documentation) would require:

  • Time derivative tracking between control cycles
  • Previous command storage for computing acceleration
  • Smooth velocity ramping to respect 150ms wheel response time
  • Trade-off: Slower response but gentler on mechanical system

2. Adaptive Lookahead

Scale lookahead distance based on object size (0.15m to 2m range) for optimal performance across all parcel sizes:

  • Small objects (0.15m): Shorter lookahead for tight tracking
  • Large objects (2m): Longer lookahead for smooth motion
  • Dynamic adjustment based on path curvature
  • Benefit: Optimized behavior across full object size range

3. Multi-Phase Velocity Profiles

For large objects with significant rotation needs, implement separate velocity strategies for different path segments:

  • Rotation-heavy segments: Prioritize angular velocity, reduce translation
  • Translation-heavy segments: Maximize linear velocity
  • Smooth transitions between phases
  • Benefit: Faster overall motion while respecting constraints

4. Predictive Constraint Handling

Look ahead in path to anticipate tight corners or high-curvature sections:

  • Pre-emptively reduce velocity before constraint violation
  • Smoother velocity profiles (less "bang-bang" control)
  • Better for tall objects prone to tipping

Project Structure

phd_test/
├── .gitignore              # Excludes build artifacts
├── CMakeLists.txt          # Build configuration
├── README.md               # This file
└── src/
    ├── PathFollower.cpp    # Controller implementation
    ├── PathFollower.hpp    # Controller interface  
    └── Test.cpp            # Test application (provided)

Development Notes

Implementation Approach:

  • Started with proportional control core (simple, robust foundation)
  • Added lookahead mechanism for predictive behavior
  • Implemented corner velocity constraint (key innovation)
  • Added velocity saturation and angular limiting for stability
  • Validated against provided test path

Key Design Choices:

  • Prioritized correctness and clarity over optimization
  • Used well-established Pure Pursuit as foundation
  • Adapted algorithm for holonomic (omnidirectional) motion
  • Focused on constraint satisfaction (safety-critical)

Author

Dieudonné YUFONYUY
December 03 2025

Contact:

References

  1. Coulter, R. C. (1992). Implementation of the Pure Pursuit Path Tracking Algorithm. Carnegie Mellon University, The Robotics Institute. Technical Report CMU-RI-TR-92-01.

  2. Lynch, K. M., & Park, F. C. (2017). Modern Robotics: Mechanics, Planning, and Control. Cambridge University Press. (Chapter 3: Rigid-Body Motions).

  3. Cellumation GmbH. Coding Test: Technical Specifications and System Constraints (Received December 2025).

  4. Guennebaud, G., Jacob, B., et al. Eigen v3: A C++ Template Library for Linear Algebra. http://eigen.tuxfamily.org

Acknowledgments

Special thanks to Cellumation GmbH for the interesting path following challenge and the opportunity to gain insight into the innovative celluveyor system.

About

Holonomic look-ahead path following controller for cellumation celluveyor system

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors