<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=23&amp;t=12022&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-07-21T11:55:05+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=23&amp;t=12022&amp;mode</id>
<entry>
<author><name><![CDATA[Daniel880]]></name></author>
<updated>2015-07-21T11:55:05+01:00</updated>
<published>2015-07-21T11:55:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=135095#p135095</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=135095#p135095"/>
<title type="html"><![CDATA[Re: Filtr Kalmana Fuzja Akcelerometru i Żyroskopu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=135095#p135095"><![CDATA[
Wiadomo może jak długo wykonują się obliczenia?? Z jaką częstotliwością robiłeś obliczenia?? Jakiś czas temu porównywałem wyniki uzyskane z filtru Kalmana i filtru komplementarnego. Okazało się, że filtr komplementarny daje całkiem dobre rezultaty w porównaniu do tego ile czasu zajmują obliczenia z nim związane;) Dlatego w jednym z moich projektów wykorzystałem właśnie filtr komplementarny;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2328">Daniel880</a> — 21 lip 2015, o 11:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzyhu0905gmail]]></name></author>
<updated>2015-06-15T17:25:26+01:00</updated>
<published>2015-06-15T17:25:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=131830#p131830</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=131830#p131830"/>
<title type="html"><![CDATA[Re: Filtr Kalmana Fuzja Akcelerometru i Żyroskopu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=131830#p131830"><![CDATA[
<div class="quotetitle">krzysssztof napisał(a):</div><div class="quotecontent"><br />Taki to obserwator stanu sobie kolega implementuje <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Do tego tematu masz jakieś zapytania, czy tylko wstawiasz dobre rozwiązanie dla potomności ? (z chęcią kiedyś skorzystam).<br /></div><br /><br />To rozwiązanie działało z modułem GY-80 dobrze stabilizowało kąt. Problemem w implementacji na AVR są liczby float, dlatego w przyszłości spróbuje przekształcić kod aby liczył na liczbach całkowitych. Niestety filtr trzeba dostroić do indywidualnego przypadku złe ustawienie może generować opóźnienia które uniemożliwią wykorzystanie go w aplikacjach o szybkiej zmianie kąta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3013">krzyhu0905gmail</a> — 15 cze 2015, o 17:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysssztof]]></name></author>
<updated>2015-06-15T16:08:11+01:00</updated>
<published>2015-06-15T16:08:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=131828#p131828</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=131828#p131828"/>
<title type="html"><![CDATA[Re: Filtr Kalmana Fuzja Akcelerometru i Żyroskopu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=131828#p131828"><![CDATA[
Taki to obserwator stanu sobie kolega implementuje <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Do tego tematu masz jakieś zapytania, czy tylko wstawiasz dobre rozwiązanie dla potomności ? (z chęcią kiedyś skorzystam).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4274">krzysssztof</a> — 15 cze 2015, o 16:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzyhu0905gmail]]></name></author>
<updated>2015-06-15T15:42:17+01:00</updated>
<published>2015-06-15T15:42:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=131824#p131824</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=131824#p131824"/>
<title type="html"><![CDATA[Filtr Kalmana Fuzja Akcelerometru i Żyroskopu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12022&amp;p=131824#p131824"><![CDATA[
[syntax=c]/*<br /> * calman.h<br /> *<br /> * Created: 2014-02-10 20:06:30<br /> *  Author: KRZYCHUX<br /> */ <br /><br /><br />#ifndef CALMAN_H_<br />#define CALMAN_H_<br /><br />//#define dt //przeniesione do confing<br /><br />/*struktura stanu*/<br />struct typ_stan<br />{<br /> float theta;//odchylenie//<br /> float omega;//predkosc odchylania//<br /> float pomiar_theta;//odchylenie//<br /> float pomiar_omega;//predkosc katowa//<br />};<br />struct typ_stan stan;<br />struct typ_stan stan1;<br /><br />struct typ_kalman<br />{<br /> float Q;//wartosc przekatnej macierzy<br /> float R;//wariancja pomiaru<br /> float theta;//odchylenie<br /> float omega_previous;<br /> float omega;//predkosc katowa<br /> float g_bias;//dryft zyroskopu<br />     float P11;//wartosc macierzy kowariancji P<br /> float P13;<br /> float P21;<br /> float P31;<br /> float P33;<br /> float K1;//wartosc macierzy K<br /> float K2;<br /> float K3;<br />};<br /><br />struct typ_kalman kalm;<br />struct typ_kalman kalm1;<br /><br /><br /><br /><br />void calman_init_roll(void);<br />void calman_init_pitch(void);<br /><br />float calman_filtr_roll(float akcel,float gyro);<br />float calman_filtr_pitch(float akcel,float gyro);<br /><br /><br />#endif /* CALMAN_H_ */[/syntax]<br />[syntax=c]/*<br /> * calman.c<br /> *<br /> * Created: 2014-02-10 20:06:14<br /> *  Author: KRZYCHUX<br /> */ <br />#include &lt;avr/io.h&gt;<br />#include &quot;calman.h&quot;<br />#include &quot;confing.h&quot;<br /><br />void calman_init_roll(void)<br />{<br />//stan<br />stan.theta=0.0;<br />stan.omega=0.0;<br />stan.pomiar_theta=0.0;<br />stan.pomiar_omega=0.0;<br />//kalman<br />kalm.Q=0.00000005;//0.00000009; //mniejsza liczba zmniejsza wrazliwosc na przyspieszenia <br />kalm.R=1.0;//<br />kalm.theta=0.0;<br />kalm.omega_previous=0.0;<br />kalm.omega=0.0;<br />kalm.g_bias=0.0;<br />kalm.P11=kalm.R;<br />kalm.P13=0.0;<br />kalm.P21=0.0;<br />kalm.P31=0.0;<br />kalm.P33=0.0;<br />kalm.K1=0.0;<br />kalm.K2=0.0;<br />kalm.K3=0.0;<br />}<br />void calman_init_pitch(void)<br />{<br />//stan<br />stan1.theta=0.0;<br />stan1.omega=0.0;<br />stan1.pomiar_theta=0.0;<br />stan1.pomiar_omega=0.0;<br />//kalman<br />kalm1.Q=0.00000005;//0.00000009; //mniejsza liczba zmniejsza wrazliwosc na przyspieszenia<br />kalm1.R=1.0;//<br />kalm1.theta=0.0;<br />kalm1.omega_previous=0.0;<br />kalm1.omega=0.0;<br />kalm1.g_bias=0.0;<br />kalm1.P11=kalm.R;<br />kalm1.P13=0.0;<br />kalm1.P21=0.0;<br />kalm1.P31=0.0;<br />kalm1.P33=0.0;<br />kalm1.K1=0.0;<br />kalm1.K2=0.0;<br />kalm1.K3=0.0;<br />}<br />/*<br />ustawienia dla Q<br />0.0001 szybka reakcja na plyniecie zyroskopu duza wrazliwosc na przyspieszenie układu<br />0.00001 -podobnie <br />0.000001-w miare szybka kompensacja dryftu +-15st wrazliowsc na przyspieszenia <br />0.0000001-wolna kompencajca dryftu +- 3 st wrazliwosci na przyspieszenia<br />*/<br />float calman_filtr_roll(float akcel,float gyro)<br />{<br />stan.pomiar_theta=akcel;//(float)deg_roll_pitch&#91;ROLL&#93;;//odczyt kata z akcel do filtra<br />stan.pomiar_omega=(0.0-gyro)*0.061052;//(0.0-value_gyro_axis&#91;ROLL&#93;)*0.061052;  // przy rozdzielczosci 2000st/sec<br /><br /><br /><br /><br /><br />kalm.theta=((stan.pomiar_omega-kalm.g_bias)*dt)+kalm.theta;  <br /><br /><br />kalm.omega=stan.pomiar_omega-kalm.g_bias;<br /><br />//kalm.omega_previous=kalm.omega;<br /><br /><br /><br />//Pk=Ap_{k-1}A^T+Q<br />kalm.P11 = kalm.P11-kalm.P31*dt+kalm.P33*dt*dt-kalm.P13*dt+kalm.Q;  <br />kalm.P13=kalm.P13-kalm.P33*dt;<br />kalm.P21=kalm.P33*dt-kalm.P31;<br />kalm.P31=kalm.P31-kalm.P33*dt;<br />kalm.P33=kalm.P33+kalm.Q;<br /><br /><br />//KOREKCJA<br /><br />//Kk=PkH^T(HPk^T+R)^-1<br /><br />kalm.K1=kalm.P11*(1.0/(kalm.P11+kalm.R));<br />kalm.K2=kalm.P21*(1.0/(kalm.P11+kalm.R));<br />kalm.K3=kalm.P31*(1.0/(kalm.P11+kalm.R));<br /><br />//xk=xk-K(zk-Hxk)<br /><br />kalm.theta=kalm.theta+kalm.K1*(stan.pomiar_theta-kalm.theta);<br />kalm.omega=kalm.omega+kalm.K2*(stan.pomiar_theta-kalm.theta);<br />kalm.g_bias=kalm.g_bias+kalm.K3*(stan.pomiar_theta-kalm.theta);<br /><br />//Pk=(1-Kkh)Pk<br /><br />kalm.P11=(1.0-kalm.K1)*kalm.P11;<br />kalm.P13=(1.0-kalm.K1)*kalm.P13;<br />kalm.P21=kalm.P21-kalm.P11*kalm.K2;  <br />kalm.P31=kalm.P31-kalm.P11*kalm.K3; <br />kalm.P33=kalm.P33-kalm.P13*kalm.K3;<br /><br />//aktualizacja wektora stanu<br /><br />stan.theta=kalm.theta;<br />stan.omega=kalm.omega;<br /><br />return stan.theta;<br />}<br />float calman_filtr_pitch(float akcel,float gyro)<br />{<br />stan1.pomiar_theta=akcel;//(float)deg_roll_pitch&#91;ROLL&#93;;//odczyt kata z akcel do filtra<br />stan1.pomiar_omega=(0.0-gyro)*0.061052;//(0.0-value_gyro_axis&#91;ROLL&#93;)*0.061052;  // przy rozdzielczosci 2000st/sec<br /><br /><br /><br /><br /><br />kalm1.theta=((stan1.pomiar_omega-kalm1.g_bias)*dt)+kalm1.theta; <br /><br /><br />kalm1.omega=stan1.pomiar_omega-kalm1.g_bias;<br /><br />//kalm.omega_previous=kalm.omega;<br /><br /><br /><br />//Pk=Ap_{k-1}A^T+Q<br />kalm1.P11 = kalm1.P11-kalm1.P31*dt+kalm1.P33*dt*dt-kalm1.P13*dt+kalm1.Q;    i Q<br />kalm1.P13=kalm1.P13-kalm1.P33*dt;<br />kalm1.P21=kalm1.P33*dt-kalm1.P31;<br />kalm1.P31=kalm1.P31-kalm1.P33*dt;<br />kalm1.P33=kalm1.P33+kalm1.Q;<br /><br /><br />//KOREKCJA<br /><br />//Kk=PkH^T(HPk^T+R)^-1<br /><br />kalm1.K1=kalm1.P11*(1.0/(kalm1.P11+kalm1.R));<br />kalm1.K2=kalm1.P21*(1.0/(kalm1.P11+kalm1.R));<br />kalm1.K3=kalm1.P31*(1.0/(kalm1.P11+kalm1.R));<br /><br />//xk=xk-K(zk-Hxk)<br /><br />kalm1.theta=kalm1.theta+kalm1.K1*(stan1.pomiar_theta-kalm1.theta);<br />kalm1.omega=kalm1.omega+kalm1.K2*(stan1.pomiar_theta-kalm1.theta);<br />kalm1.g_bias=kalm1.g_bias+kalm1.K3*(stan1.pomiar_theta-kalm1.theta);<br /><br />//Pk=(1-Kkh)Pk<br /><br />kalm1.P11=(1.0-kalm1.K1)*kalm1.P11;<br />kalm1.P13=(1.0-kalm1.K1)*kalm1.P13;<br />kalm1.P21=kalm1.P21-kalm1.P11*kalm1.K2;  //?<br />kalm1.P31=kalm1.P31-kalm1.P11*kalm1.K3; //?<br />kalm1.P33=kalm1.P33-kalm1.P13*kalm1.K3;//?<br /><br />//aktualizacja wektora stanu<br /><br />stan1.theta=kalm1.theta;<br />stan1.omega=kalm1.omega;<br /><br />return stan1.theta;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3013">krzyhu0905gmail</a> — 15 cze 2015, o 15:42</p><hr />
]]></content>
</entry>
</feed>