Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Observer Design

ASecurity

Use when you must design a full-order Luenberger state observer for a linear time-invariant system whose states are not all directly measurable: build the observability matrix and check observability, compute the estimator gain matrix by pole placement with the Ackermann formula so the observer error dynamics eigenvalues sit at the desired locations, verify the error dynamics are Hurwitz stable with the characteristic polynomial, confirm the separation principle so observer poles and controll...

2 stars
0 votes
0 copies
0 views
Added 9/27/2026
ai-agentspythongoangular

Works with

claude code

Security Analysis

A100/100

Scanned 9/27/2026

Install to Claude Code

$npx -y skills add ashfordeOU/aero-agent-skills --skill observer-design --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Observer Design?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Observer Design
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ashfordeou-observer-design/badge)](https://www.skillsdirectory.com/skills/ashfordeou-observer-design)

More formats (shields.io, HTML) on the badges page.

Download with Pro
Files
SKILL.md
---
name: observer-design
description: "Use when you must design a full-order Luenberger state observer for a linear time-invariant system whose states are not all directly measurable: build the observability matrix and check observability, compute the estimator gain matrix by pole placement with the Ackermann formula so the observer error dynamics eigenvalues sit at the desired locations, verify the error dynamics are Hurwitz stable with the characteristic polynomial, confirm the separation principle so observer poles and controller poles combine by union in the closed loop, and size the convergence with the settling time. Produces the observer gain, the error dynamics matrix and characteristic polynomial, the stability verdict, and the separation check that gate an output feedback design. Trigger: observer design, luenberger, estimator gain, pole placement, separation principle, error dynamics, observability, ackermann, settling time, output feedback."
license: Apache-2.0
compliance: STANDARDS-REF
standards:
  - id: arp4754a
    reference-only: true
  - id: do-178c
    reference-only: true
gated: false
domain: gnc-autonomy
pack: gnc-autonomy
compatibility: "agentskills.io SKILL.md; any SKILL.md host (Claude Code, Hermes, OpenClaw)"
metadata:
  domain: gnc-autonomy
  subdomain: control
  tags: [observer, luenberger, estimator, ackermann, pole, placement, unmeasured, settling, hurwitz, feedback, principle, error, observer-design, full-order-observer, luenberger-observer, estimator-gain, separation-principle, error-dynamics, routh-hurwitz]
  version: 0.1.0
  author: Aero Agent Skills
---

# Observer Design (gnc-autonomy/control/observer-design)

Use when the task is deterministic full-order state estimation for
feedback control: the Luenberger observer gain, the placement of the
observer error dynamics eigenvalues, the stability of those error
dynamics, and the separation principle that joins them with a
controller gain.

## Domain quick reference

- Plant: the continuous-time linear time-invariant system
  x_dot = A x + B u with measured output y = C x, x in R^n. The
  full-order observer is
  x_hat_dot = A x_hat + B u + L (y - C x_hat) with the estimation
  error e = x - x_hat obeying e_dot = (A - L C) e.
- Observability: the observability matrix
  O = [C; C A; ...; C A^(n-1)] has full column rank n exactly when the
  pair (A, C) is observable; a rank-deficient O means some state
  direction never reaches the output and no observer can reconstruct
  it.
- Ackermann formula: with the desired characteristic polynomial
  phi(s) = prod_i (s - p_i) built from the observer poles p_i, the
  estimator gain is L = phi(A) O^{-1} e_n, where e_n is the last unit
  vector and O must be square (single measured output row). The error
  dynamics eigenvalues are then exactly the chosen p_i.
- Worked, double integrator: A = [[0, 1], [0, 0]] (position, velocity)
  with C = [[1, 0]] (position measured only). O = I2, so the pair is
  observable. Choosing observer poles -4 and -5 rad/s gives
  phi(s) = s^2 + 9s + 20 and L = [9, 20]; then
  A - L C = [[-9, 1], [-20, 0]] with characteristic polynomial
  s^2 + 9s + 20, so the error decays as e^(-4t) and e^(-5t).
- Complex poles: choosing -2 +/- 3j rad/s gives phi(s) = s^2 + 4s + 13
  and L = [4, 13] on the same plant; the gain stays real because the
  poles form a conjugate pair.
- Worked, three states: A = [[-1, 0, 1], [0, -2, 0], [0, 1, -3]] with
  C = [[1, 0, 0]] and poles -10, -11, -12 rad/s gives L = [27, 720,
  216] and error dynamics polynomial
  s^3 + 33 s^2 + 362 s + 1320 = (s+10)(s+11)(s+12), stable by the
  Routh array.
- Settling time: for the 2% band t_s = 4 / sigma, where
  sigma = min_i |Re(p_i)| is the distance of the slowest error pole
  from the imaginary axis. The worked double integrator gives
  t_s = 1.0 s; the complex pair -2 +/- 3j gives t_s = 2.0 s.
- Separation principle: with output feedback u = -K x_hat the closed
  loop is x_dot = (A - B K) x + B K e, e_dot = (A - L C) e, a block
  upper triangular system whose characteristic polynomial factors into
  the controller polynomial det(sI - (A - B K)) and the observer
  polynomial det(sI - (A - L C)). Controller and observer poles can be
  designed independently. Worked: K = [1, 1] on the double integrator
  gives controller polynomial s^2 + s + 1 and observer polynomial
  s^2 + 9s + 20, whose product s^4 + 10 s^3 + 30 s^2 + 29 s + 20 is
  the closed-loop polynomial.
- Rule of thumb: place observer poles 4 to 10 times faster than the
  controller poles (in real part) so the estimates settle before the
  controlled response, without amplifying measurement noise too much.
- Characteristic polynomial: computed by the Faddeev-LeVerrier
  algorithm from the matrix trace recursion; Hurwitz verdict by the
  Routh array, which needs every first-column entry strictly positive
  (marginal roots on the imaginary axis are not stable).
- Units: SI. Pole locations in rad/s, settling time in seconds.

## Workflow

1. Write the state-space model A, B, C of the plant with the state x,
   the input u, and the measured output y; the Ackermann gain needs a
   single output row, C is 1 x n.
2. Compute observability_matrix(A, C) and confirm is_observable(A, C)
   returns True; a rank-deficient O means the observer task is
   ill-posed for this measurement set.
3. Choose the observer poles p_i: strictly negative real parts, real
   values or conjugate pairs, typically 4 to 10 times faster than the
   controller poles.
4. Compute the estimator gain with observer_gain_ackermann(A, C,
   poles); the function raises ValueError when the system is not
   observable, the pole count is wrong, a pole is unstable, or a
   non-conjugate complex pole set would give a complex gain.
5. Verify the design with error_dynamics(A, C, L): the returned error
   matrix A - L C, its characteristic polynomial, and the Hurwitz
   stability verdict; the polynomial coefficients must match the
   desired phi(s).
6. Size the convergence with settling_time(poles); 4 / sigma seconds
   to reach the 2% error band.
7. When a controller gain K exists (for example from lqr-design or
   root-locus-design), run separation_closed_loop(A, B, C, K, L) and
   confirm factorizes is True, so the closed-loop polynomial is the
   product of the controller and observer polynomials.
8. Implement the observer as flight software: x_hat_dot integration
   with the injected output error L (y - C x_hat), u = -K x_hat as the
   feedback path.

## Pitfalls

- Routing stochastic estimation here: Kalman gain, innovation, process
  and measurement noise covariances, and the covariance recursion
  belong to gnc-autonomy/navigation/kalman-filter-design; observer
  design is deterministic pole placement with no noise statistics.
- Routing analysis here: controllability and observability verdicts,
  the state transition matrix, eigenvalue stability, and canonical
  forms belong to gnc-autonomy/control/state-space-analysis; this leaf
  synthesizes the estimator gain that the verdict enables, it does not
  repeat the rank tests as an end in themselves.
- Routing controller gain design here: the feedback gain K from
  quadratic cost belongs to gnc-autonomy/optimal-control/lqr-design,
  and pole-placement controller design belongs to
  gnc-autonomy/control/root-locus-design; this leaf designs the
  estimator side L, and u = -K x_hat combines both through the
  separation principle.
- Forgetting the sign convention: the gain enters the observer as
  +L (y - C x_hat) and the error dynamics are A - L C; a sign flip in
  either place moves the error poles into the right half plane.
- Designing unstable or marginal observer poles: the error dynamics
  must be strictly Hurwitz, poles on the imaginary axis never decay.
- Making the observer too fast: 100x faster poles amplify measurement
  noise through L; 4 to 10x the controller bandwidth is the practical
  band.
- Applying Ackermann to a multi-output measurement: the formula needs
  a square observability matrix, that is a single measured output row;
  multi-output estimation needs a different gain synthesis.
- Reading the Routh array wrong: all polynomial coefficients must be
  positive and every first-column entry strictly positive; a zero
  first-column entry means marginal or unstable roots, not a pass.
- Ignoring observability: placing poles on an unobservable pair is
  silently ineffective for the unobservable state direction, check
  rank(O) = n first.
- Confusing settling time with the time constant: t_s = 4 / sigma is
  the 2% band, the time constant is 1 / sigma.

## Behavior contract (gate 3)

The observability matrix and rank verdict, the Ackermann estimator
gain, the characteristic polynomial, the Hurwitz stability verdict,
the separation principle factorization, and the settling time are
exercised by the gate 3 contract test:
scripts/test_observer_design.py against
scripts/observer_design_logic.py (stdlib unittest, offline). Run:
python3 scripts/test_observer_design.py

## Compliance

- Standards referenced, not reproduced: ARP4754A frames development
  assurance for aircraft systems and DO-178C frames the flight
  software that hosts the observer implementation; the observer design
  equations are common control-theory knowledge, summary-only per
  standards-map.yaml, both reference-only: true.
- Revision note: ARP4754B (2023) supersedes ARP4754A; this skill keys to
  ARP4754A as the certification-baseline revision (FAA AC 20-174 cites A);
  see standards-map.yaml arp4754a.revision_decision.
- compliance: STANDARDS-REF, gated: false.

Attribution

ashfordeOUashfordeOU
View sourceMore from ashfordeOU →
SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Related Skills

Caveman

Ultra-compressed communication mode that cuts output tokens while keeping technical accuracy. Levels: lite, full, ultra and the wenyan variants. Use for /caveman, "caveman mode", "talk like caveman", "be brief" or "less tokens".

1074701 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

694821 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3351 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

691 votes

math-skill

A comprehensive mathematical reasoning skill for AI assistants — handles arithmetic to research-level problems with rigorous step-by-step reasoning, systematic verification, and transparent uncertainty handling

381 votes
View all in ai-agents →