رانندگي براي اين مسير يابي انتخاب شده باشد مسير حرکتي به صورت يک خط قرمز رنگ بر روي خيابان ها مشخص شده و اگر حالت پياده روي انتخاب شده باشد، مسير مشخص شده به رنگ سبز خواهد بود.
if(mMode==MODE_DRIVING)
lineOptions.color(Color.RED);
else if(mMode==MODE_WALKING)
lineOptions.color(Color.GREEN);
3-2-4-ثبت و حذف پارک
مهمترين قسمت در اين پروژه مي باشد به اين صورت که در اين قسمت سيستم بايد نوع پياده بودن و يا سواره بودن راننده را تشخيص داده و سپس اطلاعات مربوط به پارکينگ را به پايگاه داده طراحي شده براي برنامه منتقل کند.
زماني که برنامه اجرا مي شود برنامه با دريافت اطلاعات ماهواره و بدست آوردن سرعت متوسط مسافت طي شده و واريانس از روي رفتار کاربر بعد از 20 ثانيه آن ها را بررسي کرده و به سيستم فازي منتقل مي کند. (زمان 20 ثانيه صرفا از روي رفتار کاربر در زمان پياده شدن و يا سوار شدن بر خودرو در نظر گرفته شده و هيچ ملاک مشخصي براي انتخاب آن وجود ندارد. با توجه به مقاله]26[ که در اين مقاله طول قدم هاي کاربر را براي تشخيص پياده بودن وي 40 ميلي ثانيه در نظر گرفته است.) سيستم با استفاده از موتور استنتاج فازي که در آن بکار رفته حالت هاي کاربر را هر 20 ثانيه زير نظر مي گيرد. زماني که حالت کاربر از سواره به پياده تغيير کرد سيستم متوجه مي شود که شخص در پارکينگ، پارک کرده و اطلاعات طول و عرض جغرافيايي که از ماهواره دريافت کرده است را همراه با شناسه برنامه به پايگاه داده منتقل مي کند و زماني که از حالت پياده به سواره تغيير پيدا کرد سيستم متوجه مي شود که شخص سوار بر خودرو شده، بنابراين محل ثبت شده در پايگاه داده را با استفاده از شناسه برنامه، حذف مي کند.
اين قسمت نيز بر روي سيستم پايه برنامه ريزي شده و همراه با راه اندازي برنامه، شروع به کار ميکند و حرکات کاربر را زير نظر مي گيرد. قبل از آنکه سيستم فازي اين بخش راه اندازي شود، براي بدست آوردن قوانين فازي، تست هايي انجام شد که سه مولفه سرعت متوسط، مسافت طي شده و واريانس در هر تست مد نظر قرار گرفت و خروجي مناسب آن تعريف شد. اين خروجي ها پياده بودن و يا سواره بودن را با توجه به اين سه مولفه در تست تعيين مي کنند که در ادامه به آن ها خواهيم پرداخت.
3-2-4-1-دريافت اطلاعات
زماني که برنامه اجرا مي شود، سيستم بلافاصله به سيگنال هاي دريافتي از ماهواره موقعيت ياب جهاني متصل شده و همچنين سيستم؛ سرعت کاربر را با استفاده از اطلاعات دريافتي از ماهواره به وي نمايش ميدهد، اين سرعت بر حسب متر بر ثانيه مي باشد و با کمترين ميزان خطا در زير صفحه برنامه نمايش داده مي شود.
public void onConnected(Bundle connectionHint) {
LocationRequest request = LocationRequest.create();
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
request.setInterval(5000);
request.setFastestInterval(2000);
mLocationClient.requestLocationUpdates(request, (LocationListener) this);
ارتباط سيستم با ماهواره بصورتي است که هر 2 ثانيه اطلاعات خود را بروز رساني مي کند.
TextView tvSpeed = (TextView) findViewById(R.id.tv_speed);
tvSpeed.setText(“سرعت شما m/s “+ location.getSpeed()+” مي باشد.”);
3-2-4-2-کنترلر تشخيص وضعيت حرکتي

شکل(3-4)- ورودي ها و خروجي سيستم فازي
رابطه (3-1)، مدل سيستم فازي استفاده شده در اين برنامه، موتور استنتاج ضرب و فازي ساز منفرد و غير فازي ساز ميانگين مراکز مي باشد.

(3-1)،

* مجموع تعداد قوانين وضع شده براي اين سيستم فازي، به تعداد 180 قانون
* خروجي قوانين، پياده و يا سواره (پنج برابر با سواره و ده برابر پياده)
* ورودي هاي اين سيستم (سه ورودي: واريانس، مسافت طي شده، سرعت متوسط)
* درجه تعلق هر يک از ورودي ها
* مقداري که به بالاترين حد خود در نمودار مي رسد.(بالاترين درجه تعلق)
* مقدار باز شدن دامنه فرکانسي در هر نمودار
در اين مدل از سيستم فازي بايد ابتدا براي کارمان، قوانيني وضع شود. اين قوانين از محيط طبيعي و از زندگي هاي روزمره مي باشند که بصورت رياضي تعريف مي شوند. يک پايگاه قواعد فازي 50 از مجموعهاي از قواعد اگر-آنگاه فازي تشکيل مي شود. پايگاه قواعد فازي از اين نظر که ساير اجزاء سيستم فازي براي پياده سازي اين قواعد به شکل موثر و کارا استفاده مي شوند، قلب يک سيستم فازي محسوب مي شود]10[.
با توجه به تست هاي انجام گرفته در پيوست (الف-1)، همانطور که مشخص است، خروجي ها از سه جزء سرعت متوسط، مسافت طي شده و واريانس بدست آمده اند. با توجه به اينکه سرعت از طريق ماهواره مکان ياب در دسترس است و در برنامه تعريف شده بنابراين تنها کافي است تا آرايه اي بطول 20 مقدار (اين تعداد مقادير براي آرايه به مقدار زمان سنجش بستگي دارد) در نظر گرفته شود و سرعت ميانگين، مسافت طي شده و واريانس را از روي آن محاسبه کرد. همان طور که در شکل (3-4) مشخص است، سيستم فازي از سه ورودي مقدار دريافت ميکند و پس از استنتاج آن ها که همان مجموع قوانين تعريف شده مي باشد، خروجي مناسب را تحويل ميدهد. خروجي يکي از دو حالت صفر و يا يک خواهد بود که نشان دهنده پياده بودن و يا سواره بودن است.
3-2-4-2-الف-ورودي ها
* فرمول ميانگين که در رابطه (3-2) نشان داده شده روش محاسبه ميانگين سرعت مي باشد. بدين صورت که آرايه اي 20 تايي براي آن در نظر گرفته شده و vi، سرعت در هر لحظه بر تعداد مقدار آرايه مشخص شده مي باشد. اين رابطه، سرعت متوسط را پس از 20 ثانيه در اختيار ما مي گذارد که يکي از سه ورودي کنترلر فازي مي باشد.
(3-2)،
در برنامه نوشته شده اين مقدار سر
عت متوسط بصورت زير تعريف شده است.
Private Int max=20;
public SamplingResult compute() {
double totalDistance = 0.0;
double totalSpeed = 0.0;
double meanSpeed = 0.0;
double varianceSpeed = 0.0;
for (PointInfo pointInfo : pointList) {
totalSpeed += pointInfo.getSpeed(); }
meanSpeed = totalSpeed / max;
* يکي ديگر از ورودي هاي مورد نياز، واريانس مي باشد که اين مقدار از طريق تقسيم مجموع (Vi-) بر تعداد مقدار آرايه تعريف شده به توان 2 مي باشد. رابطه (3-3)، بدست آوردن مقدار واريانس را نشان مي دهد.
(3-3)،
تقسيم مجموع 1تا20، تفريق سرعت متوسط از سرعت در هر لحظه بر تعداد مقدار آرايه، که اين مقادير را مي توان براي بدست آوردن جواب استاندارد به توان دو رسانيد. همچنين پياده سازي اين رابطه در برنامه بصورت زير تعريف شده است.
max=20;
if(totalDistance == 0.0){
varianceSpeed = 0.0;
}else{
for (PointInfo pointInfo : pointList) {
varianceSpeed += Math.pow((pointInfo.getSpeed()-meanSpeed),2)/max {

* جزء ورودي ديگر مسافت طي شده مي باشد و به دو صورت محاسبه مي شود، اول اينکه سيستم با دريافت مکان اول کاربر از اطلاعات ماهواره آن ها را بعنوان مبدا در نظر گرفته و سپس بعد از 20 ثانيه با دريافت اطلاعات دوباره از ماهواره آن ها را بعنوان مقصد در نظر مي گيرد و سپس با کم کردن اين مبدا و مقصد از يکديکر مقدار مسافت طي شده محاسبه مي شود. اين روش داراي خطا مي باشد به اين صورت که اگر کاربر مسير رفته را بر گردد سيستم نمي تواند اين مسير طي شده را محاسبه کند.
static double getDistance(GeoPoint point1, GeoPoint point2) {
double dLat = radian(point2.getLat() – point1.getLat());
double dLng = radian(point2.getLng() – point1.getLng());
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(radian(point1.getLat())) * Math.cos(radian(point2.getLat())) *
Math.sin(dLng / 2) * Math.sin(dLng / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 – a));
اما روش دوم که اين مشکل را ندارد و آن استفاده از قوانين فيزيک است. رابطه (3-4)، بيانگر اين رويداد مي باشد.
(3-4)،
در اين برنامه دو مولفه زمان و سرعت موجود مي باشد پس کافي است که اين دو مولفه را در هم ضرب کرده و مسافت طي شده را بدون خطايي بدست آورد. از اين پس اگر کاربر به هر طرفي قدم بردارد و حرکت کند مسافتي را که طي مي کند مي تواند به طور دقيق مشاهده کند. اين مسافت طي شده بر حسب متر بيان مي شود. اين رابطه در برنامه بصورت زير تعريف شده. بدليل استفاده از زمان در حالت ميلي ثانيه مقدار کل رابطه بر 10000 تقسيم شده تا مقدار مسافت طي شده صحيح را بر گرداند.
totalDistance = totalSpeed * ((pointList.get(pointList.size()-1).getTimeByMilis()- pointList.get(0).getTimeByMilis()) / 10000);
براي استفاده درست از اين سيستم بايد قوانيني اتخاذ شود. براي بدست آوردن اين قوانين نيازمنديم که نمودارهاي توابع تعلق براي مجموعه هاي مختلف را رسم کنيم. با استفاده از برنامه متلب تمامي نمودارهاي توابع تعلق براي سرعت متوسط، مسافت طي شده و واريانس با توجه به رابطه(3-5)، رسم شده و در ادامه هر يک بصورت جداگانه توضيح داده شده اند.

(3-5)،

o نمودار توابع تعلق اول مربوط به واريانس ورودي مي باشد که توضيحات بدست آوردن اين عدد به طور کامل داده شد. اما نموداري که ما براي اين مولفه در نظر گرفتيم بصورت شکل (3-5) مي باشد. اين نمودار داراي 5 تابع تعلق مختلف از واريانس ها مي باشد که تمامي حالت هاي ممکن از دنياي واقعي مي باشند. درجه تعلق هر کدام از ورودي ها به قانون، هر بخش نيز داراي يک و يک ? است.

شکل(3-5)- توابع تعلق واريانس در متلب
x1=0:0.01:6;
x2=2.5:0.01:12;
x3=8.7:0.01:18;
x4=16:0.1:24;
x5=23:0.1:28.5;

a=exp(-(((x1-0)/2.3).^2((
b=exp(-(((x2-7.25)/1.9).^2((
c=exp(-(((x3-13.35)/1.8).^2((
d=exp(-(((x4-20)/1.6).^2((
e=exp(-(((x5-28.5)/2.2).^2((
در اين فرمول فازي هر برابر است با جايي از نمودار که به آخرين سطح خود يعني 1 رسيده و هر ? برابر است با ميزان دامنه اي که هر تابع تعلق باز شده است. با توجه به شکل(3-5) در تابع تعلق اول که مربوط به تعلق خيلي کم است مقدار برابر با صفر و مقدار ? برابر با 2.3 مي باشد. همينطور براي ساير قسمت ها، که در جدول(3-1) مشخص شده است.
جدول(3-1)-مقادير توابع تعلق واريانس
خيلي زياد
زياد
متوسط
کم
خيلي کم
منحني
2.2
1.6
1.8
1.9
0

28.5
20
13.35
7.25
2.3
?
o نمودار توابع تعلق دوم مربوط به مسافت طي شده مي باشد که در شکل (3-6)، مشخص شده. اين نمودار داراي 6 تابع تعلق است که در مقادير مختلف نشان داده شده و بيان کننده مقدار مسافت طي شده بر حسب متر، توسط کاربر است که با توجه به متراژ مي توان حدس زد شخص در چه درجه تعلقي قرار دارد. تند راه مي رود يا کند، سوار بر خودروي خود با سرعت کم است يا سرعت زياد. اين نمودار از صفر متر تا 350 متر در نظر گرفته شده است.

شکل(3-6)-توابع تعلق مسافت طي شده در متلب
x1=0:0.01:30;
x2=0:0.01:60;
x3=30:0.01:90;
x4=82:0.01:205;
x5=195:0.1:288;
x6=273:0.1:340;

a=exp(-(((x1-0)/11).^2((
b=exp(-(((x2-30)/12).^2((
c=exp(-(((x3-60)/11).^2((
d=exp(-(((x4-143.5)/22).^2((
e=exp(-(((x5-241.5)/16).^2((
f=exp(-(((x6-340)/25).^2((
جدول(3-2)-مقادير توابع تعلق مسافت طي شده
سواره خيلي تند
سواره
دويدن
تند راه رفتن
کند راه رفتن
ثابت
منحني
340.0
241.5
143.5
60.0
30.0
0.0

25.0
16.0
22.0
12.0
12.0
11.0
?
در شکل (3-6) توابع تعلق مسافت طي شده در متلب هم، هر تابع تعلق داراي دو مقدار است. و ? که اين مقدار نيز براي تابع تعلق ثابت به ترتيب برابر با صفر و 11 مي باشد. همچنين ساير مقادير در جدول (3-2)، موجود است.

o نمودار سوم مربوط به توابع تعلق سرعت متوسط مي باشد. اين
توابع بر اساس ميزان سرعت شخص در هنگام راه رفتن، دويدن و يا حالت سوار بر خودرو در نظر گرفته شده اند و از سرعت صفر تا 18 متر بر ثانيه را نيز در بر ميگيرد. اين توابع در متلب بصورت زير تعريف شده اند.

شکل(3-7)- توابع تعلق سرعت متوسط در متلب

x1=0:0.01:1;
x2=0:0.01:2.5;
x3=2:0.01:5.5;
x4=4:0.01:9.5;
x5=7.5:0.1:13.6;
x6=12.6:0.1:16.5;
a=exp(-(((x1-0)/0.37).^2));
b=exp(-(((x2-1.25)/0.48).^2));
c=exp(-(((x3-3.75)/0.65).^2));
d=exp(-(((x4-6.75)/1.1).^2));
e=exp(-(((x5-10.55)/1.3).^2));
f=exp(-(((x6-16.5)/1.5).^2));
همان طور که در شکل (3-7)، مشخص است اين نمودار نيز داراي 6 تابع تعلق مي باشد که همگي مربوط به سرعت متوسط هستند. هر تابع تعلق نيز داراي دو مولفه و ? مي باشد. تابع تعلق مربوط به سرعت ثابت داراي و ? است که به ترتيب برابر با صفر و 0.37 مي باشد. همچنين در جدول (3-3)، ساير مقادير مشخص شده است.
جدول(3-3)-مقادير توابع تعلق سرعت متوسط
خيلي تند
تند
متوسط
کند
خيلي کند
ثابت
منحني
16.5
10.55
6.75
3.75
1.25
0.0

1.5
1.3
1.1
0.65
0.48
0.37
?
3-2-4-2-ب-خروجي:

شکل(3-8)-نمودارهاي توابع تعلق خروجي
زماني که خروجي سيستم مشخص شد، خروجي در دو تابع تعلق پياده و سواره بودن بررسي ميشود و جواب دقيق را بر مي گرداند. شکل (3-8) توابع تعلق مربوط به پياده بودن و سواره بودن را نشان مي دهد که با استفاده از رابطه (3-5) مشخص شده اند. خروجي مدل فازي در اين رابطه، براي هر يک از توابع تعلق قرار مي گيرد و اگر جواب رابطه مربوط به توابع تعلق اول بزرگتر از رابطه مربوط به توابع تعلق دوم بود سيستم حالت پياده را در نظر مي گيرد و در غير اين صورت حالت سواره در نظر گرفته مي شود.
3-2-4-2-ج-قوانين فازي
سيستم هاي فازي براي فرموله کردن دانش بشري استفاده مي شوند. بنابر اين يک سوال مهم اين است که دانش بشري معمولا چه شکلي است؟ بصورت عاميانه، دانش بشري را در زمينه يک مسئله فني خاص ميتوان به دو دسته تقسيم کرد: دانش خودآگاه و دانش نا خودآگاه. در دانش خودآگاه، منظور ما اين است که دانش را مي توان به صورت صريح و روشن در قالب کلمات بيان کرد و در دانش نا خودآگاه منظور ما وضعيت هايي است که انسان هاي


دیدگاهتان را بنویسید