{"id":272,"date":"2017-11-29T17:09:05","date_gmt":"2017-11-29T16:09:05","guid":{"rendered":"http:\/\/www.em-company.fr\/blog\/?p=272"},"modified":"2017-12-22T16:06:19","modified_gmt":"2017-12-22T15:06:19","slug":"sensor-fusion-controller-using-fuzzy-logic-approach-design-choices","status":"publish","type":"post","link":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/","title":{"rendered":"Sensor Fusion controller using Fuzzy Logic approach (Design choices)"},"content":{"rendered":"<p>Following the <a href=\"http:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/20\/sensor-fusion-controller-fuzzy-logic\/\">previous article<\/a>, I now concentrate on design choices and implementation.<\/p>\n<p>The\u00a0 device was an OHRM gadget, so there was already some sensors available which could be used:<!--more--><\/p>\n<ul>\n<li>A motion sensor, basically a combo accelerometer\/gyroscope which can also say &#8220;<em>there is some motion<\/em>&#8221; or &#8220;<em>there is no motion<\/em>&#8221; (we discard the other functions implemented in the <a href=\"https:\/\/www.bosch-sensortec.com\/bst\/products\/all_products\/bmi160\">component <\/a>for this purpose).<\/li>\n<li>A light sensor, which is also used for computing the OHRM. It measures the ambient light.<\/li>\n<li>Some information from the OHRM process itself (whether there is some Heart Rate detected or not)<\/li>\n<\/ul>\n<p>And as usual, things are more complicated than in the textbooks \ud83d\ude42<\/p>\n<ul>\n<li>Those sensors are not sampled at the same rate<\/li>\n<li>Some sensors have memory. For example, if &#8220;no motion&#8221; is detected once, then this info will not be fired again until &#8220;some motion&#8221; is detected<\/li>\n<li>Not all the sensors have the same type of outputs (analog outputs and logical outputs)<\/li>\n<\/ul>\n<p>Thinking about a suitable algorithm for implementing this Sensor Fusion controller, I realized that the kind of questions to be answered was:<\/p>\n<blockquote><p>&#8220;If the device does not move too much and the ambient light is low for some time and HR could not be determined reliably, then the device is probably off-arm&#8221;<\/p><\/blockquote>\n<p>Considering the unprecise description of the criteria, it looked to me that\u00a0 this was calling for a Fuzzy Logic approach.<\/p>\n<h5>Fuzzy Logic principles<\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-278\" src=\"http:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/2017\/11\/zadeh-300x206.jpg\" alt=\"\" width=\"267\" height=\"174\" \/>This theory was impulsed by Pr. Lofti Zadeh, in the mid 1960&#8217;s at Berkeley, where he first introduced and theorized the underlying concepts of Fuzzy Logic.<\/p>\n<p>A lot of resources can be found on the Web. A comprehensive introduction can be found <a href=\"http:\/\/www.francky.me\/doc\/course\/fuzzy_logic.pdf\">here<\/a>. I found also the following <a href=\"http:\/\/www.seattlerobotics.org\/encoder\/mar98\/fuz\/flindex.html\">serie of article<\/a>s very useful. I will highlight only the main concepts and vocabulary relevant to our specific case.<\/p>\n<p>Among all the resources, very few actually apply to deeply embedded systems. Using a library was completely out of scope (small processor running at 14 Mhz, 64 kB of RAM &#8230;. ), so as usual in a very constrained system, an ad-hoc implementation had to be designed.<\/p>\n<p>Fuzzy Logic system is made of 3 parts<\/p>\n<figure id=\"attachment_282\" aria-describedby=\"caption-attachment-282\" style=\"width: 300px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-282 size-medium\" src=\"http:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/2017\/11\/fuzzy_logic-300x159.jpg\" alt=\" Fuzzy System overview\" width=\"300\" height=\"159\" srcset=\"https:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/2017\/11\/fuzzy_logic-300x159.jpg 300w, https:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/2017\/11\/fuzzy_logic.jpg 517w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><figcaption id=\"caption-attachment-282\" class=\"wp-caption-text\">Overview diagram of a fuzzy system<br \/> (courtesy of franck.dernoncourt)<\/figcaption><\/figure>\n<ul>\n<li>Fuzzication &#8211; this is where the input variables values (&#8220;crisp values&#8221;) are transformed into a grade ranging [0 .. 1]. In FL terminology, we define the &#8220;degree of membership&#8221; of this input variable to one &#8220;fuzzy set&#8221;.<\/li>\n<li>Rules Inference &#8211; this is where we define Rules (using Fuzzy Operators) which combine the Fuzzy variables computed before. There will be as many rules as needed to describe all the possible &#8220;behavior&#8221; of the system.<\/li>\n<li>Defuzzification &#8211; This is where all the Rules are combined to derive a decision (the output).<\/li>\n<\/ul>\n<p>In &#8220;classical logic&#8221;, we are used to categorizing values in &#8220;sets&#8221;. For example, a LOW temperature will be all points below 5 degrees (celsius), WARM temperature will probably be above 50. We can already see the two main points differentiating the &#8220;classical logic&#8221; approach from the &#8220;fuzzy logic&#8221;.<\/p>\n<ol>\n<li>WARM, COLD are linguistic concepts which have no meaning per se and are context dependent. By saying that WARM is above 50 degrees, we implicitly define a context.<\/li>\n<li>The boundaries between those sets are clear (and abrupt).<\/li>\n<\/ol>\n<p>Fuzzy logic deals precisely with the meaning of these &#8220;linguistic&#8221; concepts, by defining membership function for all the &#8220;subsets&#8221; (i.e. how much this measured temperature belongs to the WARM subset, to the COLD subset ?)<\/p>\n<p>Moreover, hence the name, the boundaries between those subsets are &#8230; Fuzzy \ud83d\ude42 and not clear. One temperature value can belong at the same time to the &#8220;WARM&#8221; subset and to the &#8220;COLD&#8221; subset. It is only the degree of membership that allows &#8220;rather cold&#8221; or &#8220;not too warm&#8221; notions to be expressed.<\/p>\n<h5>My Practical case<\/h5>\n<p>In our case we can define 3 fuzzy variables, each with appropriate subsets<\/p>\n<p><em><strong>Ambient Light intensity <\/strong><span style=\"text-decoration: underline;\"><strong>(<\/strong><\/span><\/em>subsets LOW, MID, HIGH), <em><strong>Motion quantity<\/strong><\/em> (subsets LOW, MODERATE, HIGH) and\u00a0 <em><strong>HR can be locked<\/strong><\/em> (subsets LOCKED, NOT LOCKED)<\/p>\n<p>and the first set of rules, which defined our heuristic for finding out if the device is OFF ARM or not (OFF ARM means that it is NOT WORN \ud83d\ude42<\/p>\n<pre><em>1. if motion low and hr not locked and ambient light high ==&gt; certainly off-arm<\/em>\r\n\r\n<em>2. if motion high and hr not locked and ambient light high ==&gt; certainly off-arm<\/em>\r\n\r\n<em>3. if motion low and hr not locked and (ambient light low or ambient light moderate) ==&gt; certainly off-arm\u00a0 (on a table)<\/em>\r\n\r\n<em>4. if ambient light high ==&gt; certainly off-arm (device alone facing up)<\/em>\r\n\r\n<em>5. if motion high and hr not locked and ambient light moderate ==&gt; probably off-arm<\/em>\r\n\r\n<em>6. if motion high and hr not locked and ambient light low ==&gt; probably off-arm (in hand moving)<\/em>\r\n\r\n<em>7. if motion low and hr locked and light low ==&gt; probably off-arm<\/em>\r\n\r\n<em>8. if motion high and hr locked and light low ==&gt; certainly not off-arm\u00a0\u00a0 (i.e. on arm)<\/em>\r\n\r\n<em>9. if motion moderate and hr locked and ambient light low ==&gt; certainly not off-arm (i.e. on arm)<\/em>\r\n\r\n<\/pre>\n<p>This is quite a lot of Rules, and indeed it immediately calls for an optimisation in order to reduce their number. We&#8217;ll talk about that point at the Results\/Improvement stage.<\/p>\n<h5>Membership functions<\/h5>\n<p>If we consider the <em><strong>Ambient Light intensity<\/strong><\/em> variable, we can define the three subsets boundaries as follow (crisp values are analog values out of the Light Sensor component)<\/p>\n<ul>\n<li>HIGH when the crisp value is above 200<\/li>\n<li>MID when the crisp value is between 50 and 100<\/li>\n<li>LOW when the crisp value is below 25<\/li>\n<\/ul>\n<p>so the membership function will look like<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-297 size-full\" src=\"http:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/light_membership.png\" alt=\"\" width=\"820\" height=\"447\" srcset=\"https:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/light_membership.png 820w, https:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/light_membership-300x164.png 300w, https:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/light_membership-768x419.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/p>\n<p>We can immediately deduce the 3 membership functions for this variable, using linear interpolation (as our sensor characteristic is linear).<\/p>\n<div title=\"Hint: double-click to select code\">\n<pre>static float LsMFunc_LOW (unsigned int_crisp)\r\n{\r\n\u00a0\u00a0\u00a0 if (_crisp &lt;= 25)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return 1.0f;\r\n\u00a0\u00a0\u00a0 else if (_crisp &gt;= 50)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return 0.0f;\r\n\u00a0\u00a0\u00a0\u00a0else\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return((float)_crisp * (-0.04f)) + 2.0f;\r\n}\r\n\r\nstatic floatLsMFunc_MID (unsigned int_crisp)\r\n{\r\n\u00a0\u00a0\u00a0 if(_crisp &gt;= 50 &amp;&amp; _crisp &lt;= 100)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return 1.0f;\r\n\u00a0\u00a0\u00a0 else if(_crisp &lt;= 25 || _crisp &gt;= 200)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return0.0f;\r\n\u00a0\u00a0\u00a0 else\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if(_crisp &lt;= 50)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return((float)_crisp * (0.04f)) - 1.0f;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return ((float)_crisp * (-0.01f)) + 2.0f;\r\n}\r\n\r\nstatic floatLsMFunc_HIGH (unsigned int_crisp)\r\n{\r\n\u00a0\u00a0\u00a0 if(_crisp &lt;= 100)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return0.0f;\r\n\u00a0\u00a0\u00a0 else if ((float)_crisp &gt;= 200)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return1.0f;\r\n\u00a0\u00a0\u00a0 else\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return((float)_crisp * (0.01f)) - 1.0f;\r\n}<\/pre>\n<\/div>\n<div>So the process is, for each crisp value out of the sensor, compute the degree of membership to the 3 subsets. This basically computing &#8220;how much our Light Intensity is LOW (resp. MID, HIGH)&#8221;.<\/div>\n<div><\/div>\n<h5>Non-linear sensors<\/h5>\n<div>\n<p>The case is a bit more complicated for the <em><strong>Motion quantity<\/strong><\/em>\u00a0 (and similarly for the <em><strong>HR can be locked<\/strong><\/em> variable),\u00a0 as the value does not come from a\u00a0 linear sensor. We use both the&#8221; AnyMotion&#8221; and the &#8220;NoMotion&#8221; detection feature of our accelerometer. Both are combined by the controller into a composite &#8220;motion&#8221; variable as follows:<\/p>\n<ul>\n<li>When an AnyMotion is detected, the NoMotion value is decreased (and vice versa)<\/li>\n<li>When a NoMotion is detected once, it is no more detected (BMI spec). Therefore, the framework will generate fake &#8220;noMotion&#8221; events at the same rate, until AnyMotion is found.<\/li>\n<\/ul>\n<p>The treatment of <em><strong>HR can be locked<\/strong><\/em> is similar, although the nature of this sensor is very different. It takes a lot of time to converge, and can also sometimes return no result.<\/p>\n<p>For these reasons, we have used a running average process, so the value is smoothed and still we can absorb the parasitic events.<\/p>\n<p><a href=\"http:\/\/www.em-company.fr\/blog\/index.php\/2017\/12\/15\/sensor-fusion-controller-using-fuzzy-logic-approach-software-implementation\/\">Next article<\/a> will focus on the pure software implementation, and some results \/ paths for improvement.<span style=\"font-size: 19px; font-weight: 900;\">\u00a0<\/span><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Following the previous article, I now concentrate on design choices and implementation. The\u00a0 device was an OHRM gadget, so there was already some sensors available which could be used:<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,14],"tags":[42,41],"class_list":["post-272","post","type-post","status-publish","format-standard","hentry","category-embedded","category-programming","tag-fuzzy-logic","tag-sensor-fusion"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Sensor Fusion controller using Fuzzy Logic approach (Design choices) - Embedded<\/title>\n<meta name=\"description\" content=\"Design choices for the fuzzy logic based controller. we describe the variables used and their specific behaviour\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sensor Fusion controller using Fuzzy Logic approach (Design choices) - Embedded\" \/>\n<meta property=\"og:description\" content=\"Design choices for the fuzzy logic based controller. we describe the variables used and their specific behaviour\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/\" \/>\n<meta property=\"og:site_name\" content=\"Embedded\" \/>\n<meta property=\"article:published_time\" content=\"2017-11-29T16:09:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-12-22T15:06:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/2017\/11\/zadeh.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"768\" \/>\n\t<meta property=\"og:image:height\" content=\"527\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"kriko\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"kriko\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/\"},\"author\":{\"name\":\"kriko\",\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/#\\\/schema\\\/person\\\/fcb297f759038f0e8cb969c4c29742df\"},\"headline\":\"Sensor Fusion controller using Fuzzy Logic approach (Design choices)\",\"datePublished\":\"2017-11-29T16:09:05+00:00\",\"dateModified\":\"2017-12-22T15:06:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/\"},\"wordCount\":1006,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.em-company.fr\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/zadeh-300x206.jpg\",\"keywords\":[\"fuzzy logic\",\"sensor fusion\"],\"articleSection\":[\"embedded\",\"programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/\",\"url\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/\",\"name\":\"Sensor Fusion controller using Fuzzy Logic approach (Design choices) - Embedded\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.em-company.fr\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/zadeh-300x206.jpg\",\"datePublished\":\"2017-11-29T16:09:05+00:00\",\"dateModified\":\"2017-12-22T15:06:19+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/#\\\/schema\\\/person\\\/fcb297f759038f0e8cb969c4c29742df\"},\"description\":\"Design choices for the fuzzy logic based controller. we describe the variables used and their specific behaviour\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/#primaryimage\",\"url\":\"http:\\\/\\\/www.em-company.fr\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/zadeh-300x206.jpg\",\"contentUrl\":\"http:\\\/\\\/www.em-company.fr\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/zadeh-300x206.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/index.php\\\/2017\\\/11\\\/29\\\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sensor Fusion controller using Fuzzy Logic approach (Design choices)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/\",\"name\":\"Embedded\",\"description\":\"(...but not only)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.em-company.fr\\\/blog\\\/#\\\/schema\\\/person\\\/fcb297f759038f0e8cb969c4c29742df\",\"name\":\"kriko\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Sensor Fusion controller using Fuzzy Logic approach (Design choices) - Embedded","description":"Design choices for the fuzzy logic based controller. we describe the variables used and their specific behaviour","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/","og_locale":"en_US","og_type":"article","og_title":"Sensor Fusion controller using Fuzzy Logic approach (Design choices) - Embedded","og_description":"Design choices for the fuzzy logic based controller. we describe the variables used and their specific behaviour","og_url":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/","og_site_name":"Embedded","article_published_time":"2017-11-29T16:09:05+00:00","article_modified_time":"2017-12-22T15:06:19+00:00","og_image":[{"width":768,"height":527,"url":"https:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/2017\/11\/zadeh.jpg","type":"image\/jpeg"}],"author":"kriko","twitter_card":"summary_large_image","twitter_misc":{"Written by":"kriko","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/#article","isPartOf":{"@id":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/"},"author":{"name":"kriko","@id":"https:\/\/www.em-company.fr\/blog\/#\/schema\/person\/fcb297f759038f0e8cb969c4c29742df"},"headline":"Sensor Fusion controller using Fuzzy Logic approach (Design choices)","datePublished":"2017-11-29T16:09:05+00:00","dateModified":"2017-12-22T15:06:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/"},"wordCount":1006,"commentCount":0,"image":{"@id":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/#primaryimage"},"thumbnailUrl":"http:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/2017\/11\/zadeh-300x206.jpg","keywords":["fuzzy logic","sensor fusion"],"articleSection":["embedded","programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/","url":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/","name":"Sensor Fusion controller using Fuzzy Logic approach (Design choices) - Embedded","isPartOf":{"@id":"https:\/\/www.em-company.fr\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/#primaryimage"},"image":{"@id":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/#primaryimage"},"thumbnailUrl":"http:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/2017\/11\/zadeh-300x206.jpg","datePublished":"2017-11-29T16:09:05+00:00","dateModified":"2017-12-22T15:06:19+00:00","author":{"@id":"https:\/\/www.em-company.fr\/blog\/#\/schema\/person\/fcb297f759038f0e8cb969c4c29742df"},"description":"Design choices for the fuzzy logic based controller. we describe the variables used and their specific behaviour","breadcrumb":{"@id":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/#primaryimage","url":"http:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/2017\/11\/zadeh-300x206.jpg","contentUrl":"http:\/\/www.em-company.fr\/blog\/wp-content\/uploads\/2017\/11\/zadeh-300x206.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.em-company.fr\/blog\/index.php\/2017\/11\/29\/sensor-fusion-controller-using-fuzzy-logic-approach-design-choices\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.em-company.fr\/blog\/"},{"@type":"ListItem","position":2,"name":"Sensor Fusion controller using Fuzzy Logic approach (Design choices)"}]},{"@type":"WebSite","@id":"https:\/\/www.em-company.fr\/blog\/#website","url":"https:\/\/www.em-company.fr\/blog\/","name":"Embedded","description":"(...but not only)","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.em-company.fr\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.em-company.fr\/blog\/#\/schema\/person\/fcb297f759038f0e8cb969c4c29742df","name":"kriko"}]}},"_links":{"self":[{"href":"https:\/\/www.em-company.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.em-company.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.em-company.fr\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.em-company.fr\/blog\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.em-company.fr\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=272"}],"version-history":[{"count":15,"href":"https:\/\/www.em-company.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/272\/revisions"}],"predecessor-version":[{"id":340,"href":"https:\/\/www.em-company.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/272\/revisions\/340"}],"wp:attachment":[{"href":"https:\/\/www.em-company.fr\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.em-company.fr\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.em-company.fr\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}