Skip to content

Walker Constellations

Generator for Walker constellation patterns (Delta and Star) using T:P:F notation.

For understanding Walker constellation geometry and usage examples, see Walker Constellations.

Walker Pattern

WalkerPattern

WalkerPattern()

Walker constellation pattern type.

Defines whether the constellation uses a Delta (360°) or Star (180°) RAAN spread.

Attributes:

Name Type Description
DELTA Any

Walker Delta pattern with 360° RAAN spread (global coverage). Used by GPS, Galileo, and similar navigation constellations.

STAR Any

Walker Star pattern with 180° RAAN spread (polar coverage). Used by Iridium and similar communications constellations.

Example
1
2
3
4
import brahe as bh

delta = bh.WalkerPattern.DELTA  # 360° RAAN spread
star = bh.WalkerPattern.STAR    # 180° RAAN spread

Initialize instance.

DELTA class-attribute

DELTA: Any = WalkerPattern.DELTA

Walker constellation pattern type.

Defines whether the constellation uses a Delta (360°) or Star (180°) RAAN spread.

Attributes:

Name Type Description
DELTA

Walker Delta pattern with 360° RAAN spread (global coverage). Used by GPS, Galileo, and similar navigation constellations.

STAR

Walker Star pattern with 180° RAAN spread (polar coverage). Used by Iridium and similar communications constellations.

Example
1
2
3
4
import brahe as bh

delta = bh.WalkerPattern.DELTA  # 360° RAAN spread
star = bh.WalkerPattern.STAR    # 180° RAAN spread

STAR class-attribute

STAR: Any = WalkerPattern.STAR

Walker constellation pattern type.

Defines whether the constellation uses a Delta (360°) or Star (180°) RAAN spread.

Attributes:

Name Type Description
DELTA

Walker Delta pattern with 360° RAAN spread (global coverage). Used by GPS, Galileo, and similar navigation constellations.

STAR

Walker Star pattern with 180° RAAN spread (polar coverage). Used by Iridium and similar communications constellations.

Example
1
2
3
4
import brahe as bh

delta = bh.WalkerPattern.DELTA  # 360° RAAN spread
star = bh.WalkerPattern.STAR    # 180° RAAN spread

Walker Constellation Generator

WalkerConstellationGenerator

WalkerConstellationGenerator(t: int, p: int, f: int, semi_major_axis: float, eccentricity: float, inclination: float, argument_of_perigee: float, reference_raan: float, reference_mean_anomaly: float, epoch: Epoch, angle_format: AngleFormat, pattern: WalkerPattern)

Generator for Walker constellation patterns using T:P:F notation.

Walker constellations place satellites in circular or near-circular orbits with: - T total satellites distributed across P planes - Each plane inclined at the same angle - Planes evenly spaced in RAAN (spread depends on pattern type) - Satellites within each plane evenly spaced in mean anomaly - Phase offset F controls inter-plane phasing

Two pattern types are supported via pattern: - WalkerPattern.DELTA: 360° RAAN spread (global coverage, e.g., GPS, Galileo) - WalkerPattern.STAR: 180° RAAN spread (polar coverage, e.g., Iridium)

All satellites in the constellation share the same semi-major axis, eccentricity, inclination, and argument of perigee. They differ only in RAAN and mean anomaly.

Parameters:

Name Type Description Default
t int

Total number of satellites (must be divisible by p)

required
p int

Number of orbital planes

required
f int

Phasing factor (0 to p-1)

required
semi_major_axis float

Semi-major axis in meters

required
eccentricity float

Eccentricity (dimensionless)

required
inclination float

Inclination in degrees or radians (based on angle_format)

required
argument_of_perigee float

Argument of perigee

required
reference_raan float

RAAN for plane 0

required
reference_mean_anomaly float

Mean anomaly for first satellite

required
epoch Epoch

Reference epoch for ephemeris generation

required
angle_format AngleFormat

Format for angular inputs

required
pattern WalkerPattern

Pattern type (DELTA for 360° RAAN, STAR for 180° RAAN)

required

Raises:

Type Description
ValueError

If p is zero, t is not divisible by p, or f >= p.

Example
import brahe as bh

epoch = bh.Epoch.from_datetime(2024, 1, 1, 12, 0, 0.0, 0.0, bh.TimeSystem.UTC)
# Walker Delta constellation (GPS-like)
gen = bh.WalkerConstellationGenerator(
    t=24,                       # 24 total satellites
    p=3,                        # 3 orbital planes
    f=1,                        # phasing factor 1
    semi_major_axis=bh.R_EARTH + 20200e3,  # GPS altitude
    eccentricity=0.0,
    inclination=55.0,
    argument_of_perigee=0.0,
    reference_raan=0.0,
    reference_mean_anomaly=0.0,
    epoch=epoch,
    angle_format=bh.AngleFormat.DEGREES,
    pattern=bh.WalkerPattern.DELTA,  # 360° RAAN spread
)

# Generate Keplerian propagators
propagators = gen.as_keplerian_propagators(60.0)

Initialize instance.

eccentricity property

eccentricity: Any

Eccentricity.

epoch property

epoch: Any

Reference epoch.

num_planes property

num_planes: Any

Number of orbital planes.

pattern property

pattern: Any

Walker pattern (Delta or Star).

phasing property

phasing: Any

Phasing factor.

satellites_per_plane property

satellites_per_plane: Any

Number of satellites per plane (T/P).

semi_major_axis property

semi_major_axis: ndarray

Semi-major axis in meters.

total_satellites property

total_satellites: Any

Total number of satellites in the constellation.

as_keplerian_propagators method descriptor

as_keplerian_propagators(step_size: float) -> list[KeplerianPropagator]

Generate Keplerian propagators for all satellites in the constellation.

Parameters:

Name Type Description Default
step_size float

Step size in seconds for propagation

required

Returns:

Type Description
list[KeplerianPropagator]

list[KeplerianPropagator]: List of propagators, one per satellite

as_numerical_propagators method descriptor

as_numerical_propagators(propagation_config: NumericalPropagationConfig, force_config: ForceModelConfig, params: ndarray = None) -> list[DNumericalOrbitPropagator]

Generate numerical orbit propagators for all satellites in the constellation.

Parameters:

Name Type Description Default
propagation_config NumericalPropagationConfig

Propagation configuration

required
force_config ForceModelConfig

Force model configuration

required
params ndarray

Parameter vector [mass, drag_area, Cd, srp_area, Cr]

None

Returns:

Type Description
list[DNumericalOrbitPropagator]

list[DNumericalOrbitPropagator]: List of propagators, one per satellite

as_sgp_propagators method descriptor

as_sgp_propagators(step_size: float, bstar: float, ndt2: float, nddt6: float) -> list[SGPPropagator]

Generate SGP propagators for all satellites in the constellation.

This method creates TLE data for each satellite using the provided drag and mean motion derivative parameters.

Parameters:

Name Type Description Default
step_size float

Step size in seconds for propagation

required
bstar float

B* drag term (Earth radii^-1)

required
ndt2 float

First derivative of mean motion divided by 2 (rev/day²)

required
nddt6 float

Second derivative of mean motion divided by 6 (rev/day³)

required

Returns:

Type Description
list[SGPPropagator]

list[SGPPropagator]: List of propagators, one per satellite

builder staticmethod

builder(t: int, p: int, f: int, semi_major_axis: float, inclination: float, epoch: Epoch) -> WalkerConstellationGeneratorBuilder

Create a builder for constructing a Walker constellation generator.

The builder takes the six required inputs directly; optional inputs are provided through chained setter calls before calling build().

Parameters:

Name Type Description Default
t int

Total number of satellites (must be divisible by p)

required
p int

Number of orbital planes

required
f int

Phasing factor (0 to p-1)

required
semi_major_axis float

Semi-major axis in meters

required
inclination float

Inclination in degrees by default, or radians if angle_format() is set to AngleFormat.RADIANS

required
epoch Epoch

Reference epoch for ephemeris generation

required

Returns:

Name Type Description
WalkerConstellationGeneratorBuilder WalkerConstellationGeneratorBuilder

New builder instance, with

WalkerConstellationGeneratorBuilder

eccentricity, argument_of_perigee, reference_raan, and

WalkerConstellationGeneratorBuilder

reference_mean_anomaly defaulted to 0.0, angle_format defaulted

WalkerConstellationGeneratorBuilder

to AngleFormat.DEGREES, and pattern defaulted to WalkerPattern.DELTA.

Example
import brahe as bh

epoch = bh.Epoch.from_datetime(2024, 1, 1, 12, 0, 0.0, 0.0, bh.TimeSystem.UTC)
gen = (
    bh.WalkerConstellationGenerator.builder(
        12, 3, 1, bh.R_EARTH + 780e3, 98.0, epoch
    )
    .eccentricity(0.001)
    .base_name("Constellation")
    .build()
)

satellite_elements method descriptor

satellite_elements(plane_index: int, sat_index: int, angle_format: AngleFormat) -> ndarray

Get Keplerian elements for a specific satellite.

Parameters:

Name Type Description Default
plane_index int

Plane index (0 to P-1)

required
sat_index int

Satellite index within plane (0 to T/P - 1)

required
angle_format AngleFormat

Output angle format

required

Returns:

Type Description
ndarray

np.ndarray: Keplerian elements [a, e, i, raan, argp, M]

with_base_name method descriptor

with_base_name(name: str) -> WalkerConstellationGenerator

Set a base name for satellite naming.

When set, satellites will be named as "{base_name}-P{plane}-S{sat}" (e.g., "GPS-P0-S0", "GPS-P0-S1", "GPS-P1-S0", etc.)

Parameters:

Name Type Description Default
name str

Base name for the constellation satellites

required

Returns:

Name Type Description
WalkerConstellationGenerator WalkerConstellationGenerator

Self with the base name set

Walker Constellation Generator Builder

WalkerConstellationGeneratorBuilder

WalkerConstellationGeneratorBuilder()

Builder for WalkerConstellationGenerator.

Created by WalkerConstellationGenerator.builder(), which takes the six required inputs (t, p, f, semi_major_axis, inclination, epoch). Optional inputs are provided through chained setters and default to the same values as the flat constructor's optional parameters. build() validates the t/p/f invariants and constructs the generator, raising RuntimeError instead of panicking if they are violated.

Example
1
2
3
4
5
6
7
8
9
import brahe as bh

epoch = bh.Epoch.from_datetime(2024, 1, 1, 12, 0, 0.0, 0.0, bh.TimeSystem.UTC)
gen = (
    bh.WalkerConstellationGenerator.builder(12, 3, 1, bh.R_EARTH + 780e3, 98.0, epoch)
    .eccentricity(0.001)
    .base_name("Constellation")
    .build()
)

Initialize instance.

angle_format method descriptor

angle_format(angle_format: AngleFormat) -> WalkerConstellationGeneratorBuilder

Set the angle format for inclination, argument_of_perigee, reference_raan, and reference_mean_anomaly.

Defaults to AngleFormat.DEGREES if not called.

Parameters:

Name Type Description Default
angle_format AngleFormat

Format for angular inputs

required

Returns:

Name Type Description
WalkerConstellationGeneratorBuilder WalkerConstellationGeneratorBuilder

The builder, for method chaining.

argument_of_perigee method descriptor

argument_of_perigee(argument_of_perigee: float) -> WalkerConstellationGeneratorBuilder

Set the argument of perigee.

Defaults to 0.0 if not called.

Parameters:

Name Type Description Default
argument_of_perigee float

Argument of perigee. Units: (deg) by default, or (rad) based on angle_format

required

Returns:

Name Type Description
WalkerConstellationGeneratorBuilder WalkerConstellationGeneratorBuilder

The builder, for method chaining.

base_name method descriptor

Set a base name for satellite naming.

Applied to the generator after construction, via WalkerConstellationGenerator.with_base_name(). Unset by default.

Parameters:

Name Type Description Default
name str

Base name for the constellation satellites

required

Returns:

Name Type Description
WalkerConstellationGeneratorBuilder WalkerConstellationGeneratorBuilder

The builder, for method chaining.

build method descriptor

Construct the generator from the accumulated configuration.

Validates the t/p/f invariants and constructs the generator. This consumes the builder. The builder is single-use: calling build() a second time raises RuntimeError.

Returns:

Name Type Description
WalkerConstellationGenerator WalkerConstellationGenerator

Initialized generator.

Raises:

Type Description
RuntimeError

If the builder was already consumed by a prior build() call, or if p is zero, t is not divisible by p, or f >= p.

eccentricity method descriptor

eccentricity(eccentricity: float) -> WalkerConstellationGeneratorBuilder

Set the eccentricity.

Defaults to 0.0 if not called.

Parameters:

Name Type Description Default
eccentricity float

Eccentricity (dimensionless, typically near 0 for Walker)

required

Returns:

Name Type Description
WalkerConstellationGeneratorBuilder WalkerConstellationGeneratorBuilder

The builder, for method chaining.

pattern method descriptor

Set the Walker pattern type.

Defaults to WalkerPattern.DELTA if not called.

Parameters:

Name Type Description Default
pattern WalkerPattern

Pattern type (DELTA for 360° RAAN, STAR for 180° RAAN)

required

Returns:

Name Type Description
WalkerConstellationGeneratorBuilder WalkerConstellationGeneratorBuilder

The builder, for method chaining.

reference_mean_anomaly method descriptor

reference_mean_anomaly(reference_mean_anomaly: float) -> WalkerConstellationGeneratorBuilder

Set the reference mean anomaly for the first satellite.

Defaults to 0.0 if not called.

Parameters:

Name Type Description Default
reference_mean_anomaly float

Mean anomaly for first satellite. Units: (deg) by default, or (rad) based on angle_format

required

Returns:

Name Type Description
WalkerConstellationGeneratorBuilder WalkerConstellationGeneratorBuilder

The builder, for method chaining.

reference_raan method descriptor

reference_raan(reference_raan: float) -> WalkerConstellationGeneratorBuilder

Set the reference RAAN for plane 0.

Defaults to 0.0 if not called.

Parameters:

Name Type Description Default
reference_raan float

RAAN for plane 0. Units: (deg) by default, or (rad) based on angle_format

required

Returns:

Name Type Description
WalkerConstellationGeneratorBuilder WalkerConstellationGeneratorBuilder

The builder, for method chaining.


See Also