A comprehensive Python implementation and visualization of concepts from the research paper: "Fast and In Sync: Periodic Swarm Patterns for Quadrotors" by Du, Luis, Vukosavljev, and Schoellig.
This project replicates the mathematical formulations and concepts presented in the paper without actual drone hardware. The focus is on visualizing and analyzing the choreography algorithms through simulations and graphs.
- Generic Formulation (Eq. 1-2): Periodic motion primitives using sinusoidal basis functions
- Wave Patterns (Eq. 3-4): Elastic surface wave motions with dispersion relations
- Rigid Body Rotation (Eq. 5-6): Coordinated rotation patterns
- Assignment Problem (Eq. 7): Hungarian algorithm for optimal goal assignment
- Minimum Snap Trajectories (Eq. 8-10): Smooth transition trajectory generation
- Collision Avoidance (Eq. 11): Iterative collision resolution with ellipsoid constraints
- Frequency Response Analysis (Fig. 5): Bode plot generation
- Compensation (Eq. 12): Amplitude and phase shift correction
- Tracking Performance (Fig. 6): Before/after compensation comparison
drone_swarm_visualization/
│
├── motion_primitives.py # Core trajectory generation (Section II)
├── trajectory_planning.py # Transition planning algorithms (Section III)
├── synchronization.py # Motion compensation (Section IV)
├── visualization.py # Comprehensive plotting tools
├── main_demo.py # Main demonstration script
├── requirements.txt # Python dependencies
└── README.md # This file
# Navigate to project directory
cd /home/claude/drone_swarm_visualization
# Install required packages
pip install -r requirements.txt --break-system-packagespython main_demo.pyThis will generate all visualizations and save them to outputs/:
- wave_amplitude_function.png - Spatial distribution of wave amplitudes
- wave_snapshots.png - Wave motion at different time points
- rigid_rotation.png - Trajectories of rotating formation
- transition_planning.png - Smooth transitions between patterns
- frequency_response.png - System Bode plot
- tracking_performance.png - Compensation effectiveness
- choreography_animation.gif - Animated complete performance
You can also run specific demonstrations by importing and calling functions:
from main_demo import demo_wave_patterns, demo_rigid_body_rotation
# Run only wave pattern demo
demo_wave_patterns()
# Run only rotation demo
demo_rigid_body_rotation()T_d(r,t) = C(r) + Σ[A_m(r)·sin(ω_m·t) + B_m(r)·cos(ω_m·t)]
Where:
T_d(r,t): Trajectory functionC(r): Center position functionA_m(r), B_m(r): Amplitude functionsω_m: Angular frequencies
u = Σ a_μ₁μ₂·sin(μ₁π·s₁/a)·sin(μ₂π·s₂/b)·sin(ω_μ₁μ₂·t) + ...
With dispersion relation:
ω²_μ₁μ₂ = c²π²(μ₁²/a² + μ₂²/b²)
T_d(r,t) = ρ_o + e₃·r₃ + (e₂·r₁ - e₁·r₂)·sin(ω_z·t) + (e₁·r₁ + e₂·r₂)·cos(ω_z·t)
J_a = min ∫[T^(4)(τ)]² dτ
Subject to boundary conditions on position, velocity, acceleration, jerk, and snap.
T_r,i(r,t) = C_i(r) + Σ κ_m,i·A_m,i(r)·sin(ω_m·t + φ_m,i) + ...
Where:
κ_m,i = |H_i(jω_m)|^(-1): Amplitude scalingφ_m,i = -arg(H_i(jω_m)): Phase shift
from motion_primitives import WaveMotionPrimitive, create_grid_characteristic_vectors
import numpy as np
# Define surface and wave parameters
a, b, h = 5.0, 3.0, 1.0
characteristic_vectors = create_grid_characteristic_vectors(8, 8, a, b, h)
# Define multiple wave modes
mode_pairs = [(1, 1), (2, 1), (1, 2)]
amplitudes = [
(np.array([0.0, 0.0, 0.3]), np.array([0.0, 0.0, 0.0])),
(np.array([0.0, 0.0, 0.2]), np.array([0.0, 0.0, 0.0])),
(np.array([0.0, 0.0, 0.0]), np.array([0.0, 0.0, 0.15]))
]
wave = WaveMotionPrimitive(0, 5, characteristic_vectors, a, b, h, 2.0,
mode_pairs, amplitudes)from motion_primitives import RigidBodyRotation, create_helix_characteristic_vectors
import numpy as np
# Create helix on a cone
characteristic_vectors = create_helix_characteristic_vectors(30, 1.5, 2.0, 4)
# Define rotation with tilt
rho_o = np.array([0.0, 0.0, 1.0])
tilt_angle = np.radians(45)
R_IBo = np.array([
[np.cos(tilt_angle), 0, np.sin(tilt_angle)],
[0, 1, 0],
[-np.sin(tilt_angle), 0, np.cos(tilt_angle)]
])
rotation = RigidBodyRotation(0, 10, characteristic_vectors, rho_o, R_IBo, np.pi)- 3D surface plots of amplitude functions
- Trajectory snapshots at multiple time points
- Top and side view projections
- Bode plots (magnitude and phase)
- Tracking error analysis
- 3D animated drone swarm motion
- Trajectory trails showing recent history
- Real-time position updates
- Time counter display
- Inertial Frame (F_I): Fixed world coordinates
- Body Frame (F_B): Attached to rotating objects
- Reference Frame (F_Bo): Initial body frame orientation
- Hungarian Algorithm: O(n³) optimal assignment
- Sequential Quadratic Programming: Trajectory optimization
- Iterative Collision Resolution: Priority-based adjustment
- Second-Order Dynamics: Damped oscillator model
- Time Delays: Communication and sensing delays
- Frequency Response: Transfer function analysis
This implementation generates visualizations corresponding to:
- Figure 2: Wave amplitude functions and motion snapshots
- Figure 3: Rigid body rotation with helix pattern
- Figure 4: Transition trajectory planning (top/front views)
- Figure 5: Bode plot (frequency response)
- Figure 6: Tracking performance with/without compensation
- NumPy: Numerical computations, linear algebra
- SciPy: Optimization, signal processing, spatial algorithms
- Matplotlib: Static and animated visualizations
a, b: Surface dimensions (meters)c: Wave speed (m/s)μ₁, μ₂: Mode numbers (spatial frequency)- Higher modes = more complex patterns
ω_z: Angular velocity (rad/s)R_IBo: Initial orientation (rotation matrix)ρ_o: Center position (meters)
damping_ratio: System damping (typical: 0.5-1.0)natural_freq: System bandwidth (rad/s)time_delay: Communication delay (seconds)
This project helps understand:
- Periodic motion representation using Fourier series
- Wave equation solutions and dispersion relations
- Rigid body kinematics and rotation matrices
- Combinatorial optimization (assignment problem)
- Trajectory optimization with constraints
- Control system frequency response
- Phase and amplitude compensation
- Simplified collision detection (ellipsoids)
- No aerodynamic interactions between drones
- Idealized system dynamics
- No actual hardware control
- Animation may be slow for large swarms (N > 50)
Possible enhancements:
- More complex motion primitives (spirals, formations)
- Advanced collision avoidance (velocity obstacles)
- Real-time trajectory replanning
- Formation control algorithms
- Multi-objective optimization
- Realistic aerodynamic models
- ROS integration for simulation
Du, X., Luis, C. E., Vukosavljev, M., & Schoellig, A. P. (2019). Fast and In Sync: Periodic Swarm Patterns for Quadrotors. IEEE International Conference on Robotics and Automation (ICRA).
arXiv: https://arxiv.org/pdf/1810.03572
This is an educational implementation for understanding the concepts from the paper. Please refer to the original paper for the complete methodology and cite it appropriately.
For questions about this implementation, refer to the paper's authors or the code documentation.