Ah, the joys of programming are back! For my ad-hoc and sensor networks class I will be trying to develop a wireless sensor-based application to interact with other devices. It’s a work-in-progress (and hopefully not a one-shot kinda’ deal) that is slowly taking shape. I’ve been using Crossbow’s TelosB sensors and an Arduino ADXL3xx accelerometer and just this week was able to get a functional prototype to read sensor data and transmit it to a nearby base-station. Next step is somekind of gesture recognition which I am trying to use fuzzy logic and while reading a book on this topic I found a paragraph that got me thinking:
“Given the deeply entrenched tradition of scientific thinking which equates the understanding of a phenomenon with the ability to analyze it in quantitative terms, one is certain to strike a dissonant note by questioning the growing tendency to analyze the behavior of humanistic systems as if they were mechanistic systems governed by difference, differential, or integral equations. Essentially, our contention is that the conventional quantitative techniques of system analysis are intrinsically unsuited for dealing with humanistic systems or, for that matter, any system whose complexity is comparable to that of humanistic systems. The basis for this contention rests on what might be called the principle of incompatibility. Stated informally, the essence of this principle is that as the complexity of a system increases, our ability to make precise and yet significant statements about its behavior diminishes until a threshold is reached beyond which precision and significance (or relevance) become almost mutually exclusive characteristics. It is in this sense that precise quantitative analyses of the behavior of humanistic systems are not likely to have much relevance to the real-world societal, political, economic, and other types of problems which involve humans either as individuals or ingroups.” Zadeh [1973]
How complex are human gestures? A quick look-up on the subject yielded a good amount of existing techniques for this using – alas! – non-fuzzy methods, and they all (at least according to their authors) result in very high (94+%) success rates. I am *very* sure that this has been implemented before using fuzzy, but it will be great to see for myself how much better one solution is compared to the other. By next week I hope to have good news on this project of mine. :)
UPDATE: I’ve since implemented the fuzzy logic into the mote, however I have been (for the last 2 days) trying to debug it. It has given me a heck of a time! Finally, today I discovered the reason behind all errors: an uninitialized variable. UNBELIEVABLE! Quoting Franklin P. Jones “Experience is that marvelous thing that enables you to recognize a mistake when you make it again”.
UPDATE2: I finally implemented a gesture recognition using Crossbow’s TelosB sensors coupled with an Arduino ADXL3xx accelerometer. The accelerometer is placed on a glove, and given the X, Y and Z axis readings, the sensor identifies the position of the hand of the user. Additionally, I have incorporated the gesture recognition into a racing game called HoloRacer. As the user pretends to hold a steering wheel, the car goes left or right. The usage of another sensor as the throttle allows to speed up the car. Fuzzy logic was used to help express the uncertainty behind any kind of classification and linguistic values where utilized such as “very low” or “very high”, which helped facilitate the expression of rules and facts, contrary to variables in mathematics that usually take numerical values. The extreme values of each one of the axis are divided into 5 groups. Each group is given a linguistic value which are “low”, “medium-low”, “medium”, “medium-high”, and “high”. For each hand position hat we plan on classifying, we measure the average values and identify in which linguistic group it belongs. If anyone is interested, this is the report I handed in for the class project.
What did I learn from this? I will need to put in a little more effort before getting something really good, but the way it is is actually pretty remarkable.
“Given the deeply entrenched tradition of scientific thinking which equates the understanding of a phenomenon with the ability to analyze it in quantitative terms, one is certain to strike a dissonant note by questioning the growing tendency to analyze the behavior of humanistic systems as if they were mechanistic systems governed by difference, differential, or integral equations. Essentially, our contention is that the conventional quantitative techniques of system analysis are intrinsically unsuited for dealing with humanistic systems or, for that matter, any system whose complexity is comparable to that of humanistic systems. The basis for this contention rests on what might be called the principle of incompatibility. Stated informally, the essence of this principle is that as the complexity of a system increases, our ability to make precise and yet significant statements about its behavior diminishes until a threshold is reached beyond which precision and significance (or relevance) become almost mutually exclusive characteristics. It is in this sense that precise quantitative analyses of the behavior of humanistic systems are not likely to have much relevance to the real-world societal, political, economic, and other types of problems which involve humans either as individuals or ingroups.” Zadeh [1973]
How complex are human gestures? A quick look-up on the subject yielded a good amount of existing techniques for this using – alas! – non-fuzzy methods, and they all (at least according to their authors) result in very high (94+%) success rates. I am *very* sure that this has been implemented before using fuzzy, but it will be great to see for myself how much better one solution is compared to the other. By next week I hope to have good news on this project of mine. :)
UPDATE: I’ve since implemented the fuzzy logic into the mote, however I have been (for the last 2 days) trying to debug it. It has given me a heck of a time! Finally, today I discovered the reason behind all errors: an uninitialized variable. UNBELIEVABLE! Quoting Franklin P. Jones “Experience is that marvelous thing that enables you to recognize a mistake when you make it again”.
UPDATE2: I finally implemented a gesture recognition using Crossbow’s TelosB sensors coupled with an Arduino ADXL3xx accelerometer. The accelerometer is placed on a glove, and given the X, Y and Z axis readings, the sensor identifies the position of the hand of the user. Additionally, I have incorporated the gesture recognition into a racing game called HoloRacer. As the user pretends to hold a steering wheel, the car goes left or right. The usage of another sensor as the throttle allows to speed up the car. Fuzzy logic was used to help express the uncertainty behind any kind of classification and linguistic values where utilized such as “very low” or “very high”, which helped facilitate the expression of rules and facts, contrary to variables in mathematics that usually take numerical values. The extreme values of each one of the axis are divided into 5 groups. Each group is given a linguistic value which are “low”, “medium-low”, “medium”, “medium-high”, and “high”. For each hand position hat we plan on classifying, we measure the average values and identify in which linguistic group it belongs. If anyone is interested, this is the report I handed in for the class project.
What did I learn from this? I will need to put in a little more effort before getting something really good, but the way it is is actually pretty remarkable.
Hi,
ReplyDeletethe link to the report is broken.
Thanks.
Alex
Hey Alex, try the link again. I just updated the link. Sorry.
ReplyDeleteHi Talmai,
ReplyDeletethanks, now it works. I will let you know if I have questions about it.
Thanks for sharing it.
Best wishes,
Alex