از نظر آقای کالمن دقت بهتر است یا صحت ؟

در بسیاری از سیستم‌ها نیاز است که سنسورهایی برای فیدبک کنترلر استفاده شود که علاوه بر دقت ،دارای صحت خوبی باشند. در اینصورت کنترلر در بهترین حالت کار می‌کند اما متأسفانه اینگونه سنسورها بسیار گران‌قیمت می‌باشند. به همین دلیل می‌توان به کمک الگوریتم‌هایی مثل کالمن با هزینه کمتر دقت و صحت را با هم داشته باشیم.

در خیلی از مواقع بعضی از سنسورها دقت خوبی دارند و بعضی از سنسورها صحت خوب . سنسوری که هم دقت و صحت خوبی داشته باشد خیلی گران قیمت است به همین دلیل اگر بتوان از طریق یک الگوریتمی یک سنسوری که دقت خوبی دارد با یک سنسوری که صحت خوبی دارد ترکیب شود در این صورت می‌توان دقت وصحت را با هم داشته باشیم خیلی از لحاظ هزینه به‌صرفه هست به همین دلیل این کار در صنعت خیلی مورد استقبال قرار گرفته اما یک سری مشکلات را هم به همراه خواهد داشت این‌که بتوان دو سنسور را روی سیستم قرار بدهیم و یا اینکه دو سنسور با دقت و صحت خوب را داشته باشیم .

یکی از موقعیت‌هایی که به سنسور زاویه نیاز داریم در بازوهای چند درجه آزادی هست که در اینجا برای آنکه بهتر این الگوریتم را درک کنیم نتایج اولیه شبیه‌سازی روی بازوی 7 درجه آزادی را هم در انتها مشاهده خواهیم کرد.

بازوی 7درجه آزادی که 3 joint اول آن در تصویر قابل مشاهده است.
بازوی 7درجه آزادی که 3 joint اول آن در تصویر قابل مشاهده است.

حال اینکه از چه الگوریتمی استفاده شود یک چالش است چون روش‌های گوناگونی برای ترکیب کردن وجود دارد . در اینجا از فیلتر کالمن استفاده خواهیم کرد چون یکی از روش‌های متداول و بهینه در دیتا فیوژن، کالمن می‌باشد که این الگوریتم نیز چند روش دارد به‌عنوان‌مثال می‌توان با داشتن مدل سیستم و یک سنسور به اصلاح پارامتر موردنظر پرداخت و درواقع مقدار پارامتر را ازلحاظ دقت و صحت بهتر کرد . یکی دیگر از روش‌های متداول کالمن استفاده از چند سنسور می‌باشد که در اینجا از این روش استفاده شده است .

در این روش اصطلاحاً از دو سنسور که یک پارامتر هم‌جنس و هم‌درجه را اندازه می‌گیرند استفاده نمی‌شود یعنی از دو سنسور که هر دو، سرعت زاویه‌ای رو از یک منبع حساب می‌کنند کاربرد ندارد . ما در اینجا از یک سنسور که مولتی ترن باشد زاویه را به دست می‌آوریم و از سنسور دیگر که انکودر باشد سرعت زاویه‌ای را به دست می‌آوریم . نکته‌ حائز اهمیت این است که در اینجا از مولتی ترن استفاده‌شده است که دقت خوبی نسبت به انکودر ندارد ولی صحت خوبی دارد اگر بخواهیم از انکودر به‌عنوان سنسور زاویه استفاده کنیم چون انکودر مطلق نیست برای همین تنها تغییرات زاویه را می‌توان به‌دقت خوبی به دست آورد ولی صحت خوبی دارد . می‌توانیم با استفاده از مشتق گرفتن از دیتای زاویه انکودر به‌سرعت زاویه‌ای برسیم که می‌توانیم با کالمن کردن آن با مولتی ترن زاویه را به دست آوریم .

اگر بخواهیم یه نگاه ساده و سطحی به فیلتر کالمن داشته باشیم میشه اینجوری گفت که فیلتر کالمن یک تخمین‌گر بازگشتی است، یعنی تنها تخمین حالت قبل و مشاهده فعلی برای محاسبه تخمین حالت فعلی لازم است. برعکس بسیاری از تخمین‌گرها نیازی به نگهداری اطلاعات تخمین‌ها و مشاهدات تمام حالات قبل نیست. فیلتر کالمن توسط یک معادله بیان می‌شود اما معمولاً آن را به دو بخش پیش‌بینی و آپدیت تفکیک می‌کنند. در گام پیش‌بینی با استفاده از تخمین‌های حالات در بازه‌های زمانی پیشین، تخمینی برای حالت فعلی بدست می‌آید. این تخمین پیش‌بینی شده همان دانش پیشینی است زیرا تنها به تخمین‌های قبلی وابسته است و هیچ مشاهده‌ای در حالت فعلی سیستم را در برنمی‌گیرد. در گام آپدیت تخمین پیشین با مشاهدات فعلی ترکیب می‌شود تا تخمینی از حالت فعلی سیستم ارائه کند. معمولاً این دو گام متناوباً تکرار می‌شوند، به این معنی که پیش‌بینی تا مشاهده بعدی انجام می‌شود و سپس با استفاده از مشاهدات فعلی آپدیت انجام می‌شود.

محاسبات فیلتر کالمن
محاسبات فیلتر کالمن

در اینجا یه سری پارامتر ها وجود دارند که اگر علاقه مند هستید میتونید دقیق تر کالمن فیلتر رو از اینجا مطالعه کنید ولی به طور مثال دو پارامتر مهم اینجا Q , R هستند که میشه به طور ساده اینجوری گفت :
R : کوواریانس پارازیت‌هایی که مشاهده می‌شود به‌عبارت‌دیگر در اینجا می‌توان واریانس سنسور را در نظر
گرفت چون چیزی که ما مشاهده می‌کنیم دیتای سنسور می‌باشد.
Q : کوواریانس پارازیت فرایند

طبق صحبت‌هایی که در بالا شد ابتدا ما نیاز داریم از سنسورهایمان دیتا جمع کنیم تا بتوانیم شبیه‌سازی را انجام بدهیم . برای دیتا جمع‌کردن به دو نوع دیتا نیاز داریم اول اینکه بتوانیم واریانس سنسور را از روی آن بیرون بیاوریم و دوم این‌که بتوانیم کالمن را پیاده و نتایج آن‌ها را مقایسه کنیم . برای اینکه بتوانیم واریانس سنسور را به دست بیاوریم چند روش وجود دارد که یکی از آن‌ها این است که سنسور را در حالتی که تغییری روی آن اعمال نمی‌شود قرار دهیم و دیتایی که سنسور به ما می‌دهد را ذخیره می‌کنیم . در اینجا ما از مولتی ترن در حالتی که شفت آن را تغییر نمی‌دهیم دیتا گرفته‌ایم که به‌صورت زیر هست :

دیتای مولتی ترن در حالتی که شفت تغییر نمی‌کند
دیتای مولتی ترن در حالتی که شفت تغییر نمی‌کند


حال اگر از نمونه 155 تا 210 را بعنوان مثال بعد از پیاده سازی الگوریتم کالمن نمودار را موردبررسی قرار دهیم :

سیگنال قرمز: دیتای مولتی ترن / سیگنال آبی : دیتای زاویه انکودر  / سیگنال سیاه:  دیتای حاصل از کالمن
سیگنال قرمز: دیتای مولتی ترن / سیگنال آبی : دیتای زاویه انکودر / سیگنال سیاه: دیتای حاصل از کالمن


در این شکل اتفاقی که می‌خواستیم افتاد اگر به دیتایی که به رنگ سیاه هست نگاه کنید این دیتا دقت انکودر را دارد اگر خوب نگاه کنیم می‌توان پله پله بودن آن را دید که شبیه انکودر می‌باشد . اگر مولتی ترن را نگاه کنیم (دیتایی که به رنگ قرمز هست)خواهیم دید که خیلی نویزی هست اما صحت خوبی دارد و سیگنال کالمن شده تقریباً سعی دارد این صحت را به دست آورد . باید در اینجا به این نکته اشاره بشه که درسته که در اینجا برای مقایسه از دیتای زاویه انکودر استفاده شده است ولی برای محاسبات کالمن طبق گفته اول از دیتای سرعت زاویه‌ای آن استفاده شده است .

این اختلافی که بین دیتای کالمن و انکودر مشاهده می‌شود در عمل خیلی ناچیزه زیرا قرار است به‌گونه‌ای ازنظر مکانیکی این دو به هم متصل شوند که هر 10 دور مولتی ترن به یک دور موتور تبدیل می‌شود این یعنی اگر الان ماکزیمم اختلاف ما 5 درجه هست در آنجا به 5/10 یا 0.5 درجه تبدیل می‌شود البته با توجه به کاربرد باید دقت را تنظیم نمود که در اینجا دقت خیلی خوبی هست و طبق الگوریتم درنهایت همگرا می‌شود .