Indice |
Motivazione dell'articolo
Durante gli studi universitari, successivamente nei vari corsi di specializzazione e sovente, tentando di risolvere alcuni problemi di controllo in azienda, mi sono imbattuto nel filtro di Kalman.
Esistono migliaia di libri ed articoli sull'argomento ma pochi forniscono immediatamente una visione chiara, concettuale e semplice di questo potentissimo strumento utilizzato in moltissime applicazioni.
La cosa mi ha stupito molto e mi sono chiesto se fosse solo una personale percezione relativa alla letteratura che avevo consultato oppure l'imbarazzo nell'affrontare l'argomento fosse generalizzato.
Molti amici e colleghi mi hanno chiesto informazioni sull'argomento poiché non avevano afferrato l'essenza dello strumento ed in poche battute ho cercato di spiegarne le potenzialità.
Premetto che :
- E' un argomento complesso dal punto di vista matematico
- Prima o poi bisogna leggere i testi sacri e capire la teoria che si nasconde dietro le quinte
- Non sempre è lo strumento migliore da utilizzare e tanto meno il più semplice come molti vorrebbero far credere
- La comprensione dell'argomento richiede rudimenti di Controlli Automatici, Teoria dei Segnali e Teoria dei Sistemi
Questa premessa non deve spaventare il lettore in quanto nel presente documento si vuole solo introdurre l'argomento dal punto di vista concettuale per cui i complessi dettagli matematici saranno volutamente omessi.
Esistono comunque un certo numero di concetti che devono essere chiari prima di iniziare la lettura :
- Cosa sono le variabili di stato in un sistema dinamico
- La definizione di variabile aleatoria e di processo aleatorio
Il modello matematico della realtà
A livello ingegneristico il modello fisico/matematico è uno strumento potentissimo che ha come scopo principe quello di descrivere l'oggetto che si vuole realizzare e controllare.
Il modello ( in tutte le sue forme ) è una rappresentazione della realtà fisica.
Infatti non si deve mai dimenticare che :
- Ci sono moltissimi modi per descrivere un oggetto a seconda dell'aspetto che si vuole privilegiare
- Nessuno di essi è perfetto nel senso che per quanto ci si sforzi bisogna sempre "accontentarsi" di descrivere un'entità fisica formulando ipotesi semplificative poiché la realtà è comunque troppo complessa per essere ritratta fedelmente
Facciamo un esempio molto semplice.
Quando disegniamo un circuito elettrico come quello riportato nella figura stiamo implicitamente facendo
tantissime approssimazioni ; ne citerò alcune a titolo di esempio.
- Vengono implicitamente trascurate le resistenze di contatto dei componenti
- Non c'è alcun riferimento alla dislocazione fisica dei componenti ed ai fenomeni di induzione magnetica nello spazio limitrofo dovuti al campo generato dalle correnti che fluiscono nei conduttori
- Vengono trascurati i campi elettromagnetici che si propagano in quanto si suppone che alle frequenze di esercizio il modello sia una buona approssimazione della realtà
- Resistenza e condensatore non sono tempo varianti quindi si suppone che le loro caratteristiche e quindi il valore nominale venga preservato sempre
- Non vengono indicate le tolleranze dei componenti
- Non vengono indicati i circuiti equivalenti dei vari componenti per cui perdite interne e comportamento in alta frequenza non vengono considerati.
- Non vengono modellati i disturbi che possono provenire dall'esterno quali l'interferenza elettromagnetica di altri circuiti elettrici prossimi a quello indicato
Si potrebbe andare avanti per molto ma ci fermiamo qui in quanto abbiamo già gli elementi per asserire quanto segue :
Un modello fisico/matematico per quanto scrupoloso è sempre impreciso e differisce dalla realtà di una quantità che indicheremo come errore di modello. |
Quindi se indichiamo l'oggetto reale con la lettera R ed il modello rappresentativo di quest'ultimo con la lettera M possiamo dire che :
E' proprio δM la grandezza su cui ci soffermeremo nel prossimo paragrafo in quanto ricopre un ruolo fondamentale nella struttura del filto di Kalman e non solo.
L'errore di modello
L'errore di modello non è una quantità deterministica in quanto non è possibile stabilirne il valore a priori utilizzando quantità ben precisate.
Concettualmente il significato di questa affermazione è molto semplice da intuire alla luce del prossimo esempio.
Prendiamo in considerazione il circuito RC precedentemente illustrato. Il valore della resistenza Rc non è noto a priori, al più possiamo supporre di conoscerne il valore nominale. Supponiamo che la resistenza abbia un valore nominale pari a Rcnom=470Ω.
Altrettanto vale per il condensatore per il quale è noto solo il valore nominale desiderato Ccnom.=1µF.
Supponiamo anche che il costruttore di resistenze garantisca una tolleranza del ±5% sul valore nominale mentre il costruttore dei condensatori garantisca una tolleranza di ±10% sul valore nominale del componente.
A questo punto, ogni volta che si costruisce un circuito RC e si richiede il montaggio di una resistenza Rc = 470Ω
ed un condensatore Cc=1µF in realtà si realizza qualcosa di diverso con componenti resistivi che vanno da un valore minimo Rcminad un valore massimo Rcmax intorno a quello nominale ed analogamente componenti capacitivi che vanno da un valore minimo Ccminad un valore massimo Ccmax.
Ora si presti molta attenzione al seguente passaggio.
Se abbiamo prodotto tantissime schede RC imponendo al produttore di usare i valori nominali per i componenti possiamo sceglierne una a caso e chiederci quale sia l'errore della componentistica montata
su quella particolare scheda rispetto a quella che abbiamo progettato su carta.
Assumiamo chiaramente come modello ideale di riferimento il circuito RC nel quale sono montati i componenti esattamente pari al valore nominale richiesto.
E' quindi evidente che la scheda campione potrà essere una delle tante con una coppia di componenti qualsiasi in un intervallo possibile di scelte. Chiameremo questa coppia ( Rci, Cci).
A questo punto viene spontaneo chiedersi quanto segue :
- Si riesce in qualche modo a descrivere tutte le possibili schede prodotte con un unico modello ?
- Siccome le schede possibili sono praticamente infinite non si può descriverle una per una con un modello deterministico quindi qual è il mezzo matematico che consente di fare questo ?
- Si dovrebbe utilizzare un metodo generale per descrivere le incertezze dei componenti non perfettamente noti che possa però adattarsi a tutti i casi classici dell'ingegneria in modo tale da non dover variare lo strumento a seconda del problema.
Questo strumento esiste ed è il rumore.
Il rumore infatti è per definizione qualcosa che rende incerta la determinazione di una grandezza ed è proprio ciò che fa al nostro caso.
Infatti utilizzando due sorgenti di rumore indipendenti possiamo inquinare il valore della resistenza e della capacità nominali ottenendo dei valori casuali chiaramente prossimi a quello nominale ; è proprio quello che volevamo.
Si presti attenzione alla parola "indipendenti" che non è stata introdotta a caso nel discorso. Nell'esempio in oggetto i fornitori di resistenze e condensatori sono diversi per cui non c'è nessuna relazione tra l'errore di produzione della resistenza e quello del condensatore. Se le linee di produzione dei componenti invece fossero in qualche modo legate non si potrebbero utilizzare due sorgenti di rumore indipendenti ma in qualche modo una sarebbe relazionata all'altra e bisognerebbe tenerne conto.
Scriviamo le equazioni del sistema nel dominio temporale.
Ora riscriviamole come equazioni di stato nell'accezione tipica della Teoria dei sistemi :
E' evidente dalla scrittura come :
- x(t) : Variabile di stato
- u(t) : Ingresso
- ( Aτ , Bτ , Cτ , Dτ ) : Matrici del modello
A questo punto ci troviamo di fronte ad un problema concettuale importantissimo.
Infatti le matrici Aτ e Bτ non sono costanti ma dipendono da ben due variabili aleatorie ed in modo evidentemente non lineare.
Infatti basta rivedere la scrittura completa di Aτ in funzione dei rumori :.
Le equazioni appena scritte simulano tutti i circuiti che si possono realizzare con le varie resistenze e condensatori ma purtroppo non sono espresse in maniera idonea.
L'obiettivo è quello di distinguere fisicamente la parte deterministica del sistema da quella statistica. Nella formulazione appena fatta le due parti sono strettamente connesse.
In pratica si vorrebbe che le matrici A e B ( anche C e D se non fossero costanti come nell'esempio particolare ) del sistema fossero dipendenti solo ed esclusivamente dai valori nominali dei componenti ( componente deterministica ) e la parte statistica che corrompe il modello ideale fosse modellata a parte ( componente aleatoria ).
Riscriviamo quindi le equazioni come vorremmo fossero strutturate :
A questo punto si vede che il rumore di modello η corrompe il valore della derivata dello stato e di conseguenza lo stato e quindi l'uscita. Il rumore ξ verrà trattato prossimamente poiché ha un significato ben preciso ;' per ora si noti che quest'ultimo non agisce sullo stato ma direttamente sull'uscita.'
'In pratica si simulano gli effetti degli errori di modellazione ( imprecisioni nella redazione delle equazioni ) e dell'incertezza parametrica ( non conoscenza esatta delle grandezze fisiche geometriche e quant'altro ) corrompendo lo stato generato dal sistema ideale con del rumore.
Facciamo alcune osservazioni fondamentali :
- Il rumore di modello η non è direttamente legato ai rumori che simulano le incertezze dei componenti ovvero da ηR e ηC. E' un semplice strumento matematico che simula la non conoscenza degli errori introdotti nel modello. Consideratelo come un potenziometro su cui potete agire per dichiarare quanto buono è il vostro modello rispetto alla realtà fisica.
- Il rumore di modello η agisce direttamente sulla derivata della variabile di stato e quindi sulla variabile di stato stessa mentre nel precedente modello i rumori ηR e ηC corrompevano la matrice A la quale veniva moltiplicata per lo stato attuale andava a corrompere la derivata. Il meccanismo di azione è completamente diverso.
In conclusione il concetto base è che il rumore di modello η non ha necessariamente un legame semplice e diretto con le incertezze fisiche ma è uno strumento efficace per simulare l'effetto globale di queste incertezze sulle variabili di stato del sistema e quindi anche sull'uscita del sistema. |
Le considerazioni appena espresse portano a due riflessioni legate all'esperienza in campo industriale :
- I dispositivi che si vogliono modellare sono sovente specificati dal produttore tramite i valori nominali ; lo scostamento rispetto a questi valori viene generalmente specificato in maniera molto meno puntuale e precisa ( quando si tratta di sensoristica questo discorso non vale, è più frequente negli attuatori ). Questo comporta che sia più semplice e fisiologico scrivere il modello deterministico della macchina nominale rispetto a quello statistico che ne descrive l'incertezza.
- Fornire una misura di quanto il modello si discosti dalla realtà non è solo funzione delle tolleranze dei componenti ma anche e soprattutto della bravura di chi scrive le equazioni. Infatti anche le approssimazioni che si impongono nella scrittura del modello devono essere prese in considerazione. Essendo difficilissimo valutare le ripercussioni dovute agli errori di approssimazione delle equazioni sul risultato finale si usa una tecnica molto semplice ; si scrivono al meglio rispettando un equilibrio fra funzionalità e semplicità e poi si aggiunge del rumore sullo stato per dichiarare esplicitamente l'esistenza di un certo errore di modellazione.
Il rumore di misura
Il rumore di misura è qualcosa di più fisiologico da descrivere ed intuire. Infatti, chiunque abbia osservato un segnale proveniente da un dispositivo industriale con un semplice oscilloscopio avrà certamente notato la tipologia dei disturbi.
Chiaro quindi che anche il rumore di misura debba essere modellato come una variabile casuale ( aleatoria appunto ) che si sovrappone al segnale utile ( misura ideale ).
Nella figura si può notare come l'equazione (2) sia composta da due termini ; uno di tipo deterministico yd(t) ed uno di tipo statistico ξ. Mentre il segnale si può descrivere con una funzione matematica classica, il rumore è per forza di cose una variabile aleatoria e la sua descrizione viene fatta attraverso la statistica.
A questo punto possono sorgere dei dubbi sulla natura del rumore e possiamo porci le seguenti domande :
- Che tipo di rumore utilizziamo ?
- Rappresentiamo sia il rumore impulsivo che quello tipo burst che quello di fondo ?
Alla prima domanda potremmo rispondere che la descrizione statistica del rumore di un sensore dovrebbe essere ricavata ipoteticamente campionando il segnale d'uscita del medesimo e verificandone le caratteristiche statistiche.
In realtà si procede come criterio generale assumendo che il rumore abbia una distribuzione gaussiana a media nulla.
In effetti questa ipotesi non è troppo azzardata in quanto si potrebbe discutere a lungo sull'argomento ma in generale il rumore di fondo sovrapposto ad un segnale misurato è spesso assimilabile ad una distribuzione di questo tipo in virtù delle seguenti caratteristiche :
- Ha media nulla
- E' più probabile che il rumore abbia un valore assoluto prossimo a zero piuttosto che valori grandi
- E' simmetrico rispetto allo zero
In figura è stato rappresentato un tipico segnale y(t) in cui è presente un rumore gaussiano a media nulla.
La traiettoria ideale è individuabile dalla linea gialla tratteggiata e rappresenta la parte yd(t) del modello.
La parte blue invece è il segnale y(t) dato da yd(t) a cui è stata aggiunta la variabile aleatoria ξ per simulare il rumore.
Se scegliamo alcuni istanti a caso possiamo guardare la distribuzione statistica dell'errore in quel determinato punto della curva ; basta appoggiare la curva gaussiana sulla traiettoria ideale, infatti il segnale è formato dalla traiettoria ideale alla quale si somma una variabile aleatoria ξ identificata dalla sua distribuzione statistica.
Supponiamo che la distribuzione non cambi nel tempo ovvero che la campana abbia sempre la stessa forma ed intensità. In questo caso il segnale y(t) risulta essere un processo stazionario ( in realtà la definizione matematica sarebbe più complessa ma si cerca solo di dare un'idea base dei concetti che stanno dietro la modellazione ).
Si ricorda che l'area arancione indicata in figura rappresenta la probabilità che il disturbo ( rumore ) abbia valori compresi tra ξ0 e ξ1.
Per quanto riguarda invece gli impulsi ed i burst o altra tipologia di rumore non continuo, si simulerà successivamente come segnale di disturbo nel sistema iniettando il segnale nel modello e verificandone gli effetti.
In realtà, se strettamente necessario, si possono modellare anche questi disturbi ma in questo contesto non ce ne occupiamo in quanto richiedono strumenti matematici piuttosto complessi per una semplice trattazione del problema in oggetto.
Il concetto fondamentale da comprendere è che il rumore di misura ξ rappresenta un altro potenziometro virtuale che serve per indicare la bontà della misura.
Struttura dello stimatore Kalman
Lo stimatore altro non è che uno strumento in grado di ricostruire lo stato del sistema reale.
In pratica abbiamo due carte da giocare per ricostruire lo stato :
- Il modello matematico che abbiamo scritto e di cui abbiamo dichiarato la bontà tramite il rumore di modello.
- Le misure provenienti dai sensori che ci danno il valore dell'uscita reale del sistema ( corrotta da rumore ovviamente )
Cerchiamo di utilizzarli in modo coerente per giungere alla stima dello stato.
Innanzitutto usiamo il modello.
In figura si può osservare quanto segue :
- Il sistema reale ed il modello vengono alimentati con il medesimo ingresso u(t)
- Il simbolo "^" utilizzato nel modello indica la stima dello stato e dell'uscita
Se le equazioni sono scritte 'sufficientemente bene' ci si aspetta che stimolando nello stesso modo l'ingresso del sistema reale e del modello matematico, le uscite siano molto simili.
Questo è un errore molto grave che si commette spesso quando si inizia a maneggiare sistemi reali.
Infatti esiste il problema dell'indeterminazione delle condizioni iniziali :
- Nulla sappiamo sullo stato interno del sistema reale all'inizio dell'osservazione. Le variabili di stato hanno valori diversi da quelli del sistema reale. Nell'esempio del circuito RC il condensatore potrebbe essere parzialmente carico e noi non ne siamo a conoscenza.
- La non conoscenza della storia pregressa del sistema comporta una indeterminazione dello stato iniziale. Infatti iniziamo ad osservare il sistema reale in un istante qualsiasi e non sappiamo nulla sull'andamento delle variabili di stato fino a quel momento. Ci poniamo ora l'obiettivo di stimarle ma non sappiamo quale sia il loro valore nel momento in cui iniziamo ad osservarle quindi il modello matematico parte da uno stato completamente diverso ( questo comporta ovviamente che anche l'uscita sia diversa dato che dipende linearmente dallo stato per come è definito il sistema di equazioni ).
L'affermazione corretta sarebbe quindi la seguente :
Se il condensatore è inizialmente scarico ed applico lo stesso ingresso al sistema reale e al modello matematico mi aspetto che le uscite siano simili fermo restando l'ipotesi di bontà nella scrittura delle equazioni.
Se le due uscite non sono simili le cause potrebbero essere le seguenti :
- Il modello non è scritto correttamente e quindi non fornisce la stessa uscita del sistema reale a parità di ingresso
- Le condizioni iniziali dei due oggetti erano diverse e quindi, anche se stimolati dal medesimo ingresso percorrono diverse traiettorie in uscita
Facciamo ora un passo in avanti.
Si consideri la differenza delle due uscite come parametro indicatore della "bontà" della stima.
L'errore e(t) viene comunemente chiamato innovazione.
Ragioniamo un attimo sulle sue caratteristiche. Perché la stima di x(t) e quindi di y(t) sia buona l'errore di predizione e(t) dovrebbe essere :
- 'Piccolo' : infatti questo vorrebbe dire che stima e valore reale sono molto simili
- 'A media nulla' : infatti se y(t) e la stima di y(t) differissero per una costante vorrebbe dire che il modello era scritto male in quanto la costante poteva essere predetta ed inserita nelle equazioni del modello.
- 'Bianco' : Fondamentalmente questa è una caratteristica statistica che implica sostanzialmente questo ; tra l'errore e(t) al tempo t e l'errore e(t+dt) al tempo t+dt non deve sussistere nessuna relazione ovvero devono essere indipendenti l'uno dall'altro. Se così non fosse vorrebbe dire che c'è una regola che permette di stimare parte di e(t+dt) a partire da e(t) utilizzando la regola stessa e questo, ancora una volta , implica che esistono ancora delle relazioni fra i segnali non scritte nel modello.
In pratica tutto quello che si può dire a priori in termini di relazioni tra i segnali deve essere scritto nel modello altrimenti perdiamo pezzi di dinamica che finiscono nell'errore e non contribuiscono a dare una buona predizione dello stato e quindi dell'uscita.
Facciamo ancora un passo in avanti cioè utilizziamo l'errore e(t) per migliorare la stima dello stato.
Il guadagno K permette di pesare l'errore e(t) e riportarlo all'interno del modello per correggere la stima dello stato.
Nella figura non viene esplicitamente spigato come verrà utilizzato e(t) cioè in che punto del modello verrà effettivamente iniettato ma a noi per il momento non importa.
La cosa fondamentale da capire è che abbiamo realizzato una retroazione sul nostro modello per migliorare la stima dello stato servendoci dell'errore.
Questo schema è del tutto generale. Per ora non abbiamo fatto altro che creare un predittore dello stato sfruttando il modello prima e successivamente affinando la stima tramite l'errore e(t).
La domanda principale che ci si pone a questo punto è la seguente :
- Come si calcola K ?
- E' univoco ?
K si può calcolare in vari modi e non è evidentemente univoco.
Nel caso in cui :
- Il sistema di equazioni ( A , B , C , D ) sia lineare e tempo invariante
- Il rumore di modello μ ed il rumore di misura ξ siano gaussiani
Esiste un algoritmo ottimale che permette di calcolare K che diventa appunto il guadagno di Kalman.
A questo punto possiamo concludere con la seguente procedura riassuntiva :
- Scriviamo il modello del sistema reale
- Stimiamo l'errore di modello ovvero indichiamo la varianza del medesimo
- Stimiamo l'errore di misura ovvero indichiamo la varianza del medesimo
- Calcoliamo il guadagno di Kalman tramite un algoritmo che ha come ingresso le matrici ( A , B , C , D ) del modello e le varianze degli errori di modello e di misura.
- Realizziamo la struttura appena illustrata utilizzando il guadagno di Kalman calcolato nel passo precedente.
Se tutto è fatto con cura, dopo un certo periodo transitorio lo stato stimato converge allo stato del sistema reale e quindi abbiamo realizzato uno stimatore dello stato.
Alcune note importanti
In tutta la trattazione è stato proposto un modello a variabili di stato nel dominio temporale continuo. In realtà il filtro di Kalman inizialmente è stato sviluppato nel dominio temporale discreto ovvero per segnali campionati e successivamente esteso al dominio continuo.
Nel seguente articolo la trattazione è stata condotta nel dominio temporale continuo poiché in genere i sistemi fisici sono modellabili più facilmente. A questo punto però bisogna fare alcune precisazioni.
- Il filtro di Kalman viene implementato tramite una sequenza di operazioni matriciali eseguite da un algoritmo numerico implementato su un qualsiasi processore. Questo implica che la trasformazione da tempo continuo a tempo discreto prima o poi debba essere fatta ( bisogna sostanzialmente passare dal dominio della s-Trasformata a quello della z-Trasformata ).
- Quando si studia il filtro di Kalman è sempre meglio partire dalla formulazione nel dominio discreto.
- La sintesi del filtro di Kalman è meglio effettuarla nel dominio discreto per questioni di stabilità numerica relativa agli algoritmi che calcolano il guadagno.
In breve, consiglio vivamente il lettore di studiare il filtro di Kalman discreto prima di quello continuo.
Ma in definitiva a cosa serve lo stimatore di Kalman ? Cosa me ne faccio dello stato stimato ?
Due cose fondamentalmente :
- Stimare cosa accade dentro il sistema senza installare sensori. Infatti stimare lo stato è l'equivalente di possedere uno strumento virtuale che legge una determinata variabile. Se la variabile di stato è una variabile fisica come un livello d'acqua o una tensione elettrica, abbiamo la possibilità di stimarne il valore senza installare ulteriori strumenti. Nel caso del livello dell'acqua potremmo verificare che il fluido non straripi mentre nel caso della tensione elettrica potremmo evitare la saturazione di qualche componente in un determinato punto del circuito.
- La teoria della retroazione dei sistemi dinamici insegna che il feedback tramite lo stato risulta più potente del feedback dall'uscita in quanto permette di regolare puntualmente la dinamica. Inoltre risulta indispensabile quando i sistemi non sono più SISO ( Single Input Single Output ) ma diventano MIMO ( Multi Input Multi Output ). Se lo stato non è direttamente misurabile bisogna stimarlo in qualche modo ed il filtro di Kalman risulta uno strumento molto potente che soddisfa questa richiesta aggiungendo implicitamente stabilità e robustezza.
Conclusioni
Nel presente articolo è stata data una descrizione di base dello stimatore di Kalman soffermando l'attenzione su alcuni aspetti generali non legati al formalismo matematico ma egualmente importanti ai fini applicativi per comprendere le potenzialità dello strumento.
E' stato spiegato il motivo di fondo per cui il modello viene formulato scindendo la parte deterministica e quella statistica evitando quindi di generare matrici ( A , B , C , D ) legate alla statistica del rumore.
Il modello ( A , B , C , D ) è quindi deterministico e viene corrotto dal rumore di modello e quello di misura al fine di pesare le incertezze relative alla stesura delle equazioni e quelle dovute ad una misura rumorosa dell'uscita del sistema reale.
A questo punto il lettore interessato potrebbe iniziare a leggere la documentazione "ufficiale" cercando di risolvere qualche esercizio accademico molto semplice.
E' importante familiarizzare con i seguenti concetti :
- Come scrivere il modello
- Come parametrizzare i rumori di modello e misura
- Come calcolare il guadagno di Kalman
- Verificare le condizioni di convergenza
Il terzo punto è generalmente il più ostico e viene spesso trascurato causando comportamenti indesiderati dello stimatore. Le condizioni di convergenza devono essere sempre verificate altrimenti non si ha nessuna certezza riguardo la veridicità della stima.
Bibliografia
[1] Kalman filtering: with real-time applications Di C. K. Chui,Guanrong Chen
[2] Applied Optimal Estimation Arthur Gelb
[3] Teoria della predizione e del filtraggio Bittanti Sergio
[4] Kalman filtering: theory and practice using MATLAB Mohinder S. Grewal,Angus P. Andrews
[5] Estimation, control, and the discrete Kalman filter Donald E. Catlin
[6] Optimal state estimation: Kalman, Hinf and nonlinear approaches Dan Simon
[7] A New Approach to Linear Filtering and Prediction Problems R. E. Kalman, 1960
[8] An Introduction to the Kalman Filter, SIGGRAPH 2001 Course, Greg Welch and Gary Bishop