Dwie rzeczy.
Jeśli planujesz wykonać mapowanie, potrzebujesz pełnoprawnego algorytmu jednoczesnej lokalizacji i mapowania (SLAM). Zobacz: Jednoczesna lokalizacja i mapowanie (SLAM): Część I Niezbędne algorytmy . W SLAM oszacowanie stanu robota to tylko połowa problemu. Jak to zrobić, jest większym pytaniem niż można tutaj znaleźć odpowiedź.
Jeśli chodzi o lokalizację (szacowanie stanu robota), nie jest to zadanie dla filtra Kalmana. Przejście od
do x ( t + 1 )x(t)=[x,y,x˙,y˙,θ,θ˙]x(t+1)nie jest funkcją liniową z powodu przyspieszeń i prędkości kątowych. Dlatego należy rozważyć nieliniowe estymatory dla tego zadania. Tak, istnieją standardowe sposoby na zrobienie tego. Tak, są dostępne w literaturze. Tak, zwykle wszystkie dane wejściowe są umieszczane w tym samym filtrze. Pozycja, prędkość, orientacja i prędkość kątowa robota są wykorzystywane jako dane wyjściowe. I tak, przedstawię tutaj krótkie wprowadzenie do ich wspólnych tematów. Główne dania na wynos to
- uwzględnij odchylenie Gyro i IMU w swoim stanie, w przeciwnym razie twoje prognozy będą się różnić
- Rozszerzony filtr Kalmana (EKF) jest powszechnie stosowany do tego problemu
- Implementacje można uzyskać od zera i zazwyczaj nie trzeba ich „sprawdzać”.
- Implementacje istnieją dla większości problemów związanych z lokalizacją i SLAM, więc nie wykonuj więcej pracy niż musisz. Zobacz: System operacyjny robota ROS
Teraz, aby wyjaśnić EKF w kontekście twojego systemu. Mamy IMU + żyroskop, GPS i odometrię. Wspomniany robot jest napędem różnicowym, jak wspomniano. Filtrowanie zadaniem jest pobieranie aktualnego oszacowania Pozy robot
x t , wejścia sterujące U t i pomiar z każdego czujnika oo t i dają oszacowanie przy następnym takcie
x t + 1 . Nazwiemy pomiary IMU I t , GPS to G t , a odometria, O t .x^tutztx^t+1ItGtOt
Zakładam, że jesteśmy zainteresowani w szacowaniu pozę robota jako
. Problem z IMU i Gyros polega na znoszeniu. W przyspieszeniach występuje niestacjonarne odchylenie, które należy uwzględnić w EKF. Odbywa się to (zwykle) poprzez ustawienie błędu w szacowanym stanie. Umożliwia to bezpośrednie oszacowanie odchylenia na każdym etapie.
x T = x , y , ˙ x , ˙ Y , θ , ˙ θ , bxt=x,y,x˙,y˙,θ,θ˙xt=x,y,x˙,y˙,θ,θ˙,b, dla wektora uprzedzeń .b
Jestem zarozumiały:
- = dwa pomiary odległości reprezentujące odległość pokonaną przez stopnie w niewielkim odstępie czasuOt
- = trzy pomiary orientacji α , β , θ i trzy pomiary przyspieszenia ¨ x , ¨ y , ¨ z .Itα,β,θx¨,y¨,z¨
- = pozycja robota wglobalnejramce,
G x t , G y t .GtGxt,Gyt
Zazwyczaj wyniki danych wejściowych sterowania (pożądane prędkości dla każdego stopnia) są trudne do odwzorowania na dane wyjściowe (zmiana pozy robota). Zamiast powszechne jest (patrz Thrun , pytanie o odometrię) stosowanie odometrii jako „wyniku” kontroli. To założenie działa dobrze, gdy nie znajdujesz się na prawie pozbawionej tarcia powierzchni. IMU i GPS mogą pomóc skorygować poślizg, jak zobaczymy.u
Tak więc pierwszym celem jest przewidzieć następny stan ze stanu
. W przypadku robota z napędem różnicowym prognozę tę można uzyskać bezpośrednio z literatury (patrz: Kinematyka kołowych robotów mobilnychx^t+1=f(x^t,ut) lub bardziej zwięzłe traktowanie w jakimkolwiek współczesnym podręczniku robotyki) lub wyprowadzić od zera, jak pokazano tutaj: Pytanie o odometrię .
Tak więc, można teraz przewidzieć x t + 1 = F ( x , T , O , T ) . To jest krok propagacji lub przewidywania. Państwo może działać robota po prostu rozmnożeniowego. Jeśli wartości O t są całkowicie dokładne, nigdy nie będzie miał szacunkową x , który nie dokładnie równa swój prawdziwy stan. W praktyce tak się nigdy nie dzieje.x^t+1=f(x^t,Ot)Otx^
Daje to tylko przewidywaną wartość z poprzedniego oszacowania i nie mówi nam, jak dokładność oszacowania zmniejsza się z czasem. Aby propagować niepewność, należy zastosować równania EKF (które propagują niepewność w formie zamkniętej przy założeniach szumu Gaussa), filtr cząstek stałych (który wykorzystuje podejście oparte na próbkowaniu) *, UKF (który stosuje punktowe przybliżenie niepewności) lub jeden z wielu innych wariantów.
W przypadku EKF postępujemy w następujący sposób. Niech będzie macierzą kowariancji stanu robota. Linearyzujemy funkcję f
za pomocą rozszerzenia szeregu Taylora, aby uzyskać układ liniowy. System liniowy można łatwo rozwiązać za pomocą filtra Kalmana. Załóżmy, że kowariancja oszacowania w czasie t wynosi P t , a zakładana kowariancja szumu w odometrii jest podana jako macierz U t
(zwykle macierz diagonalna 2 × 2 , jak np. 1 × I 2 × 2 ). W przypadku funkcji f otrzymujemy jakobianPtftPtUt2×2.1×I2×2f
Fx=∂f∂xFu=∂f∂u
Pt+1=Fx∗Pt∗FTx+Fu∗Ut∗FTu
Now we can propagate the estimate and the uncertainty. Note the
uncertainty will monotonically increase with time. This is expected.
To fix this, what is typically done, is to use the It and Gt to
update the predicted state. This is called the measurement step of the
filtering process, as the sensors provide an indirect measurement of
the state of the robot.
First, use each sensor to estimate some part of the robot state
as some function hg() and hi() for GPS, IMU. Form
the residual or innovation which is the difference of the
predicted and measured values.
Then, estimate the accuracy for each sensor estimate in
the form of a covariance matrix R for all sensors (Rg, Ri in
this case). Finally, find the Jacobians of h and update the state
estimate as follows:
For each sensor s with state estimate zs (Following wikipedia's entry)
vs=zs−hs(x^t+1)
Ss=Hs∗Pt+1∗HTs+Rs
K=Pt+1∗HTsS−1s
x^t+1=x^t+1−K∗v
Pt+1=(I−K∗Hs)∗Pt+1
In the case of GPS, the measurement zg=hg() it is probably just a
transformation from latitude and longitude to the local frame of the
robot, so the Jacobian Hg will be nearly Identity. Rg is
reported directly by the GPS unit in most cases.
In the case of the IMU+Gyro, the function zi=hi() is an integration of
accelerations, and an additive bias term. One way to handle the IMU is
to numerically integrate the accelerations to find a position and
velocity estimate at the desired time. If your IMU has a small
additive noise term pi for each acceleration estimate, then you
must integrate this noise to find the accuracy of the position
estimate. Then the covariance Ri is the integration of all the
small additive noise terms, pi. Incorporating the update for the
bias is more difficult, and out of my expertise. However, since you are interested in planar motion, you can probably simplify the problem.
You'll have to look in literature for this.
Some off-the-top-of-my-head references:
Improving the Accuracy of EKF-Based Visual-Inertial
Odometry
Observability-based Consistent EKF Estimators for Multi-robot
Cooperative
Localization
Adaptive two-stage EKF for INS-GPS loosely coupled system with
unknown fault bias
This field is mature enough that google (scholar) could probably find
you a working implementation. If you are going to be doing a lot of
work in this area, I recommend you pick up a solid textbook. Maybe
something like Probablistic Robotics by S. Thrun of Google Car fame.
(I've found it a useful reference for those late-night
implementations).
*There are several PF-based estimators available in the
Robot Operating System (ROS). However, these have
been optimized for indoor use. Particle filters deal with the
multi-modal PDFs which can result from map-based localization (am I
near this door or that door). I believe most outdoor
implementations (especially those that can use GPS, at least
intermittently) use the Extended Kalman Filter (EKF). I've
successfully used the Extended Kalman Filter for an outdoor, ground
rover with differential drive.
You can greatly simplify the problem in most common cases:
The "typical" solution for us is to use odometry + IMU to get an ego-motion estimate and then use GPS to correct X,Y,Z and heading bias.
Here is an EKF implementation that we extensively used. If you need to estimate the IMU's orientation (i.e. if it does not already have a built-in filter), you can also use on of these two filter: UKF and EKF.
źródło