بخشی از مقاله


طراحي و پياده سازي نرم افزار شبيه ساز
عملکرد تراکتور با ويژوال بيسيک


خلاصه :
اين تز يك قسمت از پروژه HSV در مركز استراليايي براي زمينه رباتيك در دانشگاه سيدني است . هدف توسعه Package ارتباطي بي سيم براي ارتباط بين كامپيوتر آن بورد ute و كامپيوتر اپراتور است . اول از همه حسگرها و محرك ها مطالعه و بحث شدند و همه داده هاي مهم كه اپراتور ممكن است به آن علاقه داشته باشد تحليل و معين شده اند . سيستم ارتباطي بي سيم سپس انتخاب و گسترش يافت . بانداستفاده شده 2.4 GHz بود و سيستم IEEE802.llb بوسيله ارتباطپيك توپيك كامپيوترها استفاده مي شود . Package سخت افزاري بي سيم به دفت انتخاب شده مانند : آنتن ute ، آنتن اپراتور كارت اينترنتي ارتباطي بي سيم و مبدل اينترنتي . كتابخانه ارتباطي استفاده شده كتابخانه msg-Bus بود . جايي كه ارتباط به آساني فعال مي شود تا پيام‌ها در يك زمان فرستاده شوند .دو نرم افزار اصلي توسعه يافت . اولين نرم افزار توسعه يافته براي ute تمام ديتاي حسگرها را ز حافظه تقسيم شده هسته اصلي مي خواند و آن را به كامپيوتر اپراتوري مي فرستد . نرم افزار دوم ، نرم افزار اپراتور با ute ارتباط مي يابد و ديتاي مخصوصي رامي خواهد و آن را در فايلهاي متني ذخيره مي كند . سرانجام ، روالهاي مطمئن براي هر كس طرح ريزي شده كه ute براي مردم توسعه يافته استفاده كند و هر بخش از آزمايش انجام شده در هر زمان را دنبال كند .
فهرست مطالب


فصل اول
مقدمه

Chapter 4 :
4.1 Background : (پيش زمينه)
massage-Bus رابط برنامه نويسي كاربردي msg-Bus يك كتابخانه براي پشتيباني پردازش داخلي و ارتباط سيستم داخلي است كه واسط سوكت را استفاده مي كند . كتابخانه پروتكل پيام دياگرام را استفاده مي كند (UDP) كه بوسيله IP فراهم مي شود. اين انتخاب كه نسبت به استفاده TCP برتري دارد ساخته شده است . براي اجراي دلايل و بدليل اينكه واسط اساسي (اترنت سريع كليدداري در صفحه بندي hupspoke) خودش به تنهايي مجزا است : ارتباط دو طرفه نقطه به نقطه پس گره ها و تصادم يابي با دوباره ارسال كردن بسته ها گم شده . كتابخانه براي كد كردن ساختار دستوري C++ است .
توابع گذرگاه پيام : 4.2


يك سيستم توزيعي شامل تعدادي از سيستم هاست (كه گره ها ناميده مي شوند) جايي كه روي هر نود يك شماره از فرايندها (كه وظايف خوانده مي شوند) مي توانند اجرا شوند . هدف از يك message Bus يك گذرگاه پيام فعال سازي اين وظايف است براي انتقال دادن اطلاعات تبادلي و همزمان سازي اهداف دليل استفاده از message Bus براي اين تبادلات اجتناب از ارتباطات نقطه به نقطه يك شبكه وسيع و بدست آوردن معماري سيستم پيمانه اي است . هدف توانايي ارتباط (گذراندن پيام) پس وظيفه ها در نودهاي مختلف پاپس وئظايفي در نود مشابه بدون ايجاد هيچ تغيير براي وظايف ديگر در سيستم مي باشد . كتابخانه msg-bus شامل تعدادي از توابع

است كه بوسيله سرويس گيرنده ، سرور و برنامه هاي نظير به نظير فراخواني مي شووند . بوسيله استفاده از اين فراخواني ها يك سيستم تمام توزيع شده عبور دهنده پيام مي‌تواند در هر سيستم عامل پشتيباني شده فهميده شود . چهار تابع اصلي شامل :
msg - attach message Bus نصب ارتباط
msg - detach message Bus آزادسازي ارتباط با
msg - send فرستادن يك پيغام به برنامه يا نود ديگر
msg - receive انتظار رسيدن يك پيغام و خواندن آن
4.2.1 : ضميمه يا پيوست
تابع كتابخانه اي msg-bus يعني msg-attach اولين تابعي است كه بوسيله هر فرايندي كه بخواهد msg-Bus را استفاده كند فراخواني مي شود . آن نود و برنامه را براي ايجاد سوكت و تنظيم يك ساختار عمومي با ديتاي معمولي استفاده مي كند . تابع مقدار Msg-ok(0) را هنگامي كه الحاق موفقيت آميز است يا يكي از كدهاي خطا در جايي كه سوكت باز است ، بسته است يا خطاها قرار داده شده اند برمي گرداند .
Long msg - attach (char*node,char*task)
(گره) : nede
نود نامي از خود سيستم است (در واقع آدرس IP) كه بوسيله

يك رشته درفرمت
"XXX.XXX.XXX.XXX" معرفي مي شود . (براي مثال "155.69.31.90" ) .
(وظيفه) : task
task(وظيفه) اسمي از خود سيستم است :‌اين بايد يك رشته

باشد كه يك عدد صحيح است . ( در واقع يك شماره درگاه) در رنج 65535+1024 را معرفي مي كند . (براي مثال "5016" )
(انفعال ) Detach 4.2.2
تابع كتابخانه msg-bus يعني msg-attach بايد قبل از خارج شدن برنامه كاربردي فراخواني شود كه msg-bus استفاده شود . آن نزديك socket خواهد بود . هيچ پارامتري هم نياز نيست .
Long msg-detach( );
4.2.3
msg-send از تابع كتابخانه اي msg-bus براي فرستادن پيغام به برنامه (وظيفه) ديگر بكار مي رود . تابع يك بسته با اطلاعات فرستنده و گيرنده اضافه خواهد كرد . براي توانايي فرستادن ، سوكت بايداول بوسيله msg-attach ( ) اضافه شود . ID پيغام و طول (اگر لازم باشد) به دستور بايتي شبكه تبديل خواهند شد. براي محتويات ميدان داده اي ، آن مسئوليت برنامه كاربردي است كه اين را انجام دهد . براي اطمينان از اينكه آن دريافت شده باشد ، پارامتر قبلي بايد به شكل صحيح تنظيم شود . سپس msg - send ( 0 قبل از اينكه برگردد منتظر يك تعويق (البته استفاده از يك timeout) مي ماند . تابع هنگامي كه فرستادن موفقيت آميز باشد msg-ok(0) را بر مي گرداند يا هنگامي كه فرستادن خطا داشته باشد يكي از كدهاي خطا را بر مي گرداند . timeout يا تصديق .
Long msg - send (char*nede , char * tssk , Long id , Long len , char * data , boolck);
Node
نود يا گره نام سيستم است (آدرس IP) جايي كه برنامه قرار مي گيرد . نام نود در رشته اي در فرمت "XXX.XXX.XXX.XXX" معرفي مي شود (براي مثال "155.69.31.90"
task
وظيفه يا برنامه نام فرايند مقصد است : اين بايد يگ رشته بارها كه يك عدد صحيح (در واقع يك شماره گذرگاهي) در رنج 1024 به 65535 را معرفي كند (براي مثال "5016")
id
شناسه اي از پيام براي فرستادن است . (ID ساختار پيام ، احتياج به دريافت وظيفه براي جذب داده دارد)
Len
طول ، در مقياس بايت : دنباله بلاك داده است .
data
بلاك ديتا ، يك رشته است .
ack


اگر فرستنده بخواهد براي تصديق دريافت منتظر بماند بولين True را set مي كند .
: دريافت 4.25
msg-receive تابع كتابخانه اي msg-bus يك پيام را از يك سوكت دريافت مي كند و با ID پيام و ديتا جواب مي دهد . مقدار time out مي تواند براي ثانيه هاي زياد انتظار كشيدن داده شود . زماني كه يك time out اتفاق بيافتد ، تابع بوسيله كد خطاي Msg-ERR-timeout(-30) برگردانده مي شود .


اگر timeout به 1- تنظيم شود تابع براي هميشه براي يك پيام ورودي منتظر خواهد ماند .
(اين در يك setup استفاده خواهد شد جايي كه برنامه دريافتي به يك event ورودي لينك شده است براي اينكه تابع بازخورد فراهم شود) . تابع هنگاميكه پيام دريافتي موفقيت آميز باشد msg-ok(0) را بر مي گرداند يا يكي از كدهاي خطا را هنگامي كه خطا دريافت مي شود . time out يا تصديق . زماني كه يك ساختمان داده دريافت مي‌شود ، اين ساختار فقط بعد از اينكه ID پيغام شناخته شده يكي مي شود .
ما يك اشاره گر براي يك ساختار درست فرمت شده ايجاد خواهيم كرد و آن را به يك ميدان داده اي ساختار نيافته براي دستيابي به داده نسبت مي دهيم .
Long msg - receive(char*nede,char*task,Long* id , Long* len , char* data , Long timeout) ;
Node
نود نام سيستم است (آدرس IP) جايي كه فرايند فرستاده شده ناشي مي شود . اسم نود بوسيله يك رشته در فرمت "XXX.XXX.XXX.XXX" معرفي مي شود . (براي مثال "135.69.31.90" )
task
برنامه (وظيفه) نام فرايند فرستاده شده است . اين شايد يك رشته باشد كه يك عدد صحيح (در واقع يك شماره گذرگاه) در رنج 1024 تا 65535 را معرفي كند (براي مثال "5016")
id
شناسه اي از پيام دريافتي است . ID بوسيله برنامه فرستاده شده با موافقت با وظيفه دريافتي استفاده مي شود تا ساختار پيام تعريف شود . برنامه دريافتي براي جذب داده مورد نياز است .
Len
طول ، در مقياس بايت : دنباله بلاك داده است .
data
بلاك ديتا ، يك رشته است .
timeout :
انتظار كشيدن به مدت چند ميلي ثانيه براي يك پيام ورودي . هنگامي كه timeout صفر است تابع فقط با ديتايي كه در صف موجود است بر مي گردد . وقتي

مثبت است، اين تابع بلوكه مي شود و تا وقتي كه پيام برسد منتظر مي ماند .
پيغامهاي فوري 4.3
كتابخانه مي تواند بين پيامهاي معمولي و پيامهاي فوري فرق قائل شود . براي هر برنامه اي كه كانال ارتباطي استفاده مي كند همچنين يك كانال فوري مي تواند باز شود. اگر كانال ارتباطي معمولي بسته باشد كانال اضطراري مي تواند استفاده شود . تابع msg-attach-urgent از كتابخانه msg-bus خيلي به msg-attach شبيه است . هر چند سوكت هاي مختلف براي تهيه كانال جدا براي پيام هاي اضطراري باز است . اين كانال اضطراري مورد نياز است زيرا براي پيام هاي اضطراري به صف شدن و گم شدن غيرقابل قبول است زيرا با

فر سرريز مي كند . تابع مي تواند بوسيله هر فرايندي كه مي خواهد تسهيلات كانال اضطراري از msg-bus را استفاده كند فراخواني شود . آن مي تواند با msg-attach( ) در زمان نصب فراخواني شود . تابع هنگامي كه الحاق موفقيت آميز باشد msg-ok(0) را بر مي گرداند يا يكي از كدهاي خطا را هنگاميكه سوكت باز باشد يا بسته يا خطاها set شوند نشان مي دهد .
Long msg - attach - urgent(Char*nede,char*task) ;
چيز مشابهي كه به فرستادن پيغام ها ، دريافت پيغامها و جدا كردن پارامترها جواب مي‌دهد مانند زير است:
Long msg - send - urgent(char*node,char*task , Long id, Long len , char* data , bool ack) ;
Long msg - receive - urgent (char*node , char * task , Long * id , Long * len , char * data , Long timeout) ;
Msg-detach 0 urgent ( ) ;
در پروژه ها پيامهاي فوري استفاده نمي شود زيرا اساساً پيامهاي ارتباطي كاملاً ساده و به موقع هستند . هچ كدام از آنها اضطراري نيستند .

chapter 5
5-توسعه نرم افزار
.5.1 در اين مرحله از پايان نامه راه اندازي سخت افزار قطعيت داده شد و كتابخانه ارتباطي شبكه فهميده شد . بنابراين مرحله بعد توسعه نرم افزار خواهد بود . توسعه نرم افزار يك معماي عمومي دارد كه به پنج مرحله اصلي تقسيم مي شود : احتياجات ،
طراحي ، كد كردن ، آزمايش و تعمير و نگهداري .
گراف زير روالي را كه در توسعه نرم افزار بكار مي

رود نشان مي دهد . بعد از شكل دادن بعضي قسمتهاي مخصوص ، هر چند گاهي اوقات احتياج دوباره به توجه كردن به آن دارد زيرا معماري سيستم با قسمتهاي انفرادي پيوند قوي دارد .
شكل .5.1 مراحل توسعه نرم افزار

 


.5.2 احتياجات
هدف پايان نامه طراحي و ساخت يك بسته ارتباطي بي سيم است كه براي شبكه بندي كامپيوتر آنبورد ute با كامپيوتر بي سيم اپراتور ، جايي كه دستورات، پيغامها و ديتاي حسگر مي تواند از يك كامپيوتر به ديگري انتقال يابد مي باشد . تشخيص نهايي اين است كه نرم افزاربايد يك ارتباط شبكه اي بين دو كامپيوتر برقرار كند . جايي كه اپراتور بعضي دستورات را به كامپيوتر ute مي فرستد تا بخواهد بعضي از ديتاي حسگرها يا همه ديتاي حسگر را به او بفرستد و ثوابت كنترلي را براي مدلهايي مانند نقاط شروع و و .. داده بايد روي كامپيوتر اپراتور ، هر حسگر يا هر تقسيم در فايل txt خودش ذخيره شود .
هر فايل بايد با عضي خصوصيات درباره آنچه ديتاست ، داده و زمان براي مجموعه داده شروع مي شود و با داده و زمان پايان مجموعه داده تمام مي شود . هر حسگر زمان خودش را براي تخصيص دارد ، همه آن بستگي به زماني كه هر حسگر به‌روز‌رساني مي شود دارد . جدول زير زمان بروز رساني ديتاي هر حسگر را نشان مي‌دهد .
جدول5.1 : زمان بندي حسگرها
Timing Sensor
200 ms GPS1
200 ms GPS2
200 ms Laser 1
200 ms Laser 2
100 ms Compass
25 ms Uteactuators
25 ms Generalute
10 ms INS

همچنين مجموعه اي از تركيب 2 ، 3 يا بيشتر حسگر پيشنهاد مي شود . زيرا گاهي اوقات ما فقط احتياج به تركيب 2 يا 3 تا حسگر براي جستجو يا كنترل داريم . بقيه براي ما بي استفاده است كه چرا ممكن است حسگرهاي خاصي ضبط شود كه فقط از بعضي واسطه هاي Dos استفاده مي كند .

.5.3 طراحي
همانطور كه قبلاً بحث شد ما مجبوريم دو نرم افزار انفرادي طراحي كنيم : يكي براي ute و ديگري براي اپراتور . برنامه ute كاملاً ساده و درست براي اشاره كردن است در صورتيكه برنامه اپراتور كمي بيشتر پيچيده باشد . معماري نرم افزار اصلي بوسيله گراف زير خلاصه شده است .اولين چيزي كه انجام مي شود بوجود آوردن ارتباط بي

 

ن دو كامپيوتر بوسيله الحاق آدرسهاي IP به يكديگر است . پس اپراتور يك پيغام به ute مي فرستدجايي كه آن براي بعضي ديتاهاي خاص (معمولاً ديتاي حسگرها) درخواست مي كند . نرم افزار ute داده را از حافظه اشتراكي مي خواند (حافظه اشتراكي فوق هسته اي ) و آن را به كامپيوتر اپراتور مي فرستد . سرانجام نرم افزار اپراتور ديتا را در فايل متني مي نويسد . نرم افزار زماني كه اپراتور آن را مي خواهد پايان مي يابد و پس در برنامه ارتباط بين آنها را مي شكند . در قسمت بعدي ، طراحي
براي هر نرم افزار انفرادي در جزئيات كامل بحث مي شود .
شكل 5-2 : معماري نرم افزار اصلي
-5.3.1 نرم افزار ute
نرم افزار ute خيلي ساده(درست) است . هدف گرفتن پيام جستجو براي داده و فرستادن آن براي گرفتن پل جديد است . اين روال دوباره و دوباره تكرار مي شود .
اگر يك پيغام دريافت نكند براي هميشه منتظر مي ماند . اولين چيز اتصال به حافظه اشتراكي فوق هسته اي است جايي كه آن به همه حسگرها دسترسي دارد . آن تمام ساختار حسگرها را در زمان واقعي مي خواند . بنابراين ، همه داده هاي حسگرها هر دفعه بروزرساني مي شوند و هسته حسگرها را بروز رساني مي كند . همه ساختار حسگرها درخواست نمي شوند هر چند تمام ساختارها فرستاده خواهد شد و آنچه نياز باشد ذخيره خواهد شد . قدم بعدي شناسايي آدرس IP است سپس به نرم افزار ديگر الحاق مي شود . يك ارتباط شبكه اي به وجود خواهد آمد . پس آن تا زماني كه پيام دريافت كند هميشه منتظر مي ماند . هر پيام دريافتي اساساً هيچ داده اي در آن نخواهد داشت (هر چند ما مي توانيم هر داده يا ساختاري را كه مي خو.اهيم بفرستيم) آن فقط يك message ID خواهد داشت . هر شماره Message ID يك درخواست براي بعضي داده هاي خاص است . در اين مرحله ما يك تابع انتخابي خواهيم داشت كه شامل نه حالت مختلف است . اولين حالت فقط يك سيگنال ضربان قلب است . به عبارت ديگر فقط يك چكاپ است اگر ارتباط زنده باشد . 8 حالت ديگر براي هشت مجموعه مختلف از ساختار حسگرهاست . هر كدام براي حسگرهاي انفرادي مانند GPS ، ليزر ، INS و قطب نما مي باشد . هر چند encoder و مقادير كنترلي محرك فقط در دو ساختار مختلف فرستاده مي شوند :

يكي شامل تمام موقعيت محرك هاي encoder چرخه اي و ديگري شامل تمام تنظيمات كنترل گرمايي مي باشد .هر معماري حسگر يكبار به خودش فرستاده مي شود . سرعت فرستادن داده خيلي سريع و كوچكتر از زماني است كه هر حسگر بروزرساني م

ي شود . بنابراين ، نرم افزار مي‌تواند تمام مقادير حسگرها را قبل از اينكه بوسيله هر كدام از آنها به تاخير بيافتد بفرستد . بعد از فرستادن تمام داده هاي لازم ، آن جدا مي شود هر زمان كه نرم افزار بوسيله دريافت message ID صفر براي اتصال پايان يابد . شكل زير معماري را قدم
به قدم براي نرم افزار ute در تمام جزئيات نشان مي دهد .
شكل .5-3معماري نرم افزار ute

-5.3.2 نرم افزار اپراتور
برنامه اپراتور جايي است كه تصميمي بايد بوسيله اپراتور گفته شود براي اينكه چه نوع داده خواسته شده در اين قسمت اپراتور كنترل كامل روي اعمال ارتباطي شبكه دارد . اولين قسمت الحاق به كامپيوتر ute است كه در طرف ديگر بايد اجرا شود و براي اتصال منتظر مي ماند .براي الحاق ، نرم افزار آدرس IP كامپيوتر را جستجو مي‌كند و پس با استفاده از تابع msg-attach اتصال برقرار مي كند . قسمت بعد ديتا را شناسايي مي كند و زماني كه ارتباطات ساخته شدند . سپس آن 8 فايل متني مختلف ايجاد خواهد كرد يكي براي هر حسگر بعد از ايجاد فايلها آن نوع ديتاي ذخيره شدند در فايل را با داده و زمان در خط اول مي نويسد . خط بعد تعريف هر ستون از داده مي باشد . همه آنها با timestamp شروع مي شود و سپس ديتاي حسگر مانند ارتفاع ، طول ، حالت ، ماهواره و غيره .
(كه برخي از مقادير GPS بود) قسمت بعد يك بخش درون حلقه است كه تا وقتي اپراتور بخواهد از برنامه خارج شود هميشه true مي ماند . در هنگام شروع اپراتور انتخاب خواهدكرد كه آنها چه نوع داده اي را مي خواهند از ute تقاضا كنند . آنجا چهار دليل اصلي وجود دارد :
1-چك كردن اينكه آيا ارتباط زنده است .
2-خروج از برنامه و جدا شدن از شبكه
3-دريافت تمام داده هاي حسگر و ذخيره آنها در فايل متني
4-انتخاب فقط حسگرهاي مخصوص - يكي ، دوتا يا بيشتر . در اين مرحله ، اپراتور بايد حسگرها را يكي يكي تخصيص دهد .
اگر انتخاب نادرست باشد ،اپراتور مي تواند هر چيزي را در حال اجرا است متوقف كند و به انتخاب برگردد . بعد از اجراي يك آزمايش و ذخيره بعضي داده ها در همان زمان انتخاب ديگري از حسگرها مي تواند ايجاد شود و داده جديد ذخيره خواهد شد. او مي تواند در فرايند بوسيله انتخاب خروج وقفه ايجاد كند و نرم افزار از شبكه جدا خواهد شد .
چارت زير معماري نرم افزار از نرم افزار اپراتور را در تمام جزئيات عملكرد نشان خواهد داد . هر قسمت ممكن است قسمت هاي كوچك ديگري كه ممكن است در آن شامل باشد بسازد .

شكل .5-4 معماري نرم افزار اپراتور

-5.4 كدنويسي :
كد نويسي و اشكال گيري در واسط Win32,Dos در visual C

++ انجام شده است . دو كد اصلي نوشته شده است . يك كد براي ute وكد ديگر براي اپراتور نوشته شده است . هر كدام از آنها در بخش بعد بحث خواهد شد .

-5.4.1 كد ute
قسمت اول اتصال يا الحاق به فايلهاي سربرنامه بود . ليست ز

ير بعضي از فايلهاي سربرنامه غيرمعمولي اصلي را نشان خواهد داد :
• #include" msg-bus.h" براي در برگرفتن كتابخانه ارتباطي بي سيم
• #include"Hypshare.h" براي فوق هسته
• #include "hk common.h" براي فوق هسته
• #include "shared Mem Protocol" براي حافظه اشتراكي جايي كه حسگرها و داده هاي محرك ها خوانده مي شود .
پس تعيين ساختارهاي حافظه اشتراكي حسگرها:
Static void*hksur=NULL;
Static struct aietc_packet*pEtc;
Static struct sic_packet *pll.*pl2;
Static struct pos_packet *pGPSI , *pGPS2;
Static struct ins_packet*plns;
Static struct general UTE Info *pGui;
Static unsigned long Last CmpTime = 1L;
Static struct Compass *pCmp=NULL;
پس تمام ساختارهاي حسگرها از حافظه اشتراكي فوق هسته از كامپيوتر ute خوانده مي شود .
Hksur=hkusersharedRam(&SZsm);
If (hksur!=Null)
خواندن ساختار براي اولين حسگر ليزري از حافظه اشتراكي :
Pl1=(struct
Sic_packet*)(((char*)hksur)+Laser -offset-in-usershared memory);
خواندن ساختار براي دومين حسگر ليزري ازحافظه اشتراكي :
Pl2=Pl1+1;
خواندن ساختار براي اولين حسگر GPS از حافظه اشتراكي :
PGPS1=(struct


Pos_packet*)(((char*hksur)+GPS1-offset-in-usershared memory);
خواندن ساختار براي دومين حسگر GPS از حافظه اشتراكي :
PGPS2=PGPS1+1
خواندن ساختار براي حسگر عمومي ute مثل encoder از حافظه اشتراكي :
Petc=(struct
Aiet-packet*)(((char*)hksur)+ETC1-offset-in-usershared memory);

خواندن ساختار براي حسگر INS ازحافظه اشتراكي :
PLns=(struct ins-packet*)
(((char*)hksur)+INS-offset-in-usershared memory);

خواندن ساختار براي حسگر قطب نما از حافظه اشتراكي :
Pcmp=(Stuct Compass*)
(((char*)hksur+compass-offset-in-usershared memory);
خواندن ساختار براي ute info عمومي مانند نقاط تنظيمي براي كنترل گرها از حافظه اشتراكي :
Pgui=(struct general ute info*)((char*)hksur
+Etc2-offset-inusershared memory );
قسمت بعدي شناسايي آدرس IP از كامپيوتر ute براي ارتباط آينده باشبكه مي باشد :
//cheking the Ip Addresses
Word wversion Requested ;
WSADATA wsa Data ;
Char name [255]

PHOSTENT hodtinfo ;
WVersionRequested=MAKEWORD(2.0);
If(WSAStartup(wVersionRequested , & wsaData )==0)
{
if(gethostname(name , size of (name ))==0)


{
if((hostinfo=gethosbyname(name))!=NULL)
{
own_nade=inet_ntoa(*(struct in_addr*)*hostinfoo->h_addr_list);
Printf ("\n the IP is %s \n \n ".own_node);
}
WSACleanup( ) ;
}
بعد از شناسايي آدرس IP ، ارتباط شبكه اي بي سيم ساخته خواهد شد و تابع
msg-attach از كتابخانه "msg-bus" استفاده مي شود . "own-node" آدرس IP است و "5220" شماره پورت انتخابي تصادفي است .
/*connect to the message bus*/
if ((rc=msg-attach(own-node,"5220"))!=MSG-ok
msg-error(rc);
مرحله بعد تا وقتي حلقه هميشه درست مي باشد است . بعد از اينكه برنامه تابع
msg-receive را استقاده خواهد كرد ، جايي كه آن براي پياماز كامپيوتر اپراتور و خواندن msg-id منتظر است و پس تصميم مي گيرد كدام مرحله تابع انتخابي را استفاده كند .
Whicle (1) {
Rc = msg_receive (snd_node , snd_task , & msg_id & msg_len , msg_data-1);
If (rc!=MSG_OK)
Msg_error(rc);
Print f("id is %d\n" . msg_id);
Switch(msg_id)
Case one زماني است كه اپراتور چك مي كند آيا ارتباط eth برقرار است . بنابراين پيام دريافتي شامل هيچ چيز به جز 1 به عنوان ID نيست . case دوباره يك پيغام خالي با ID مساوي 1 بر مي گرداند .
Case 1 ;
{
if((rc=msg_send("snd-node" , "5110" , 1 , 0 , Null , false))! =(MSG_ok)
msg_error(rc);
break ;
}
باقيمانده case ها داده حسگرها را هر وقت آنها درخوا

ست شوند مي فرستد . فقط اولين GPS طرح و توضيح داده شده است .ID براي GPS ، 2 است . وظيفه اصلي براي اين مورد فرستادن ساختار داده GPS2 است .
Case2 ://send GPS1
{
rc=msg-send(own-node, "5110" , msg-id , size of (struct pos - packet) , (char*) PGPS1 , -1
if (rc!=MSG_ok)
Case zero جايي است كه كاربر براي پايان دادن برنامه و شكستن ارتباط شبكه بي‌سيم سوال مي كند .

Case 0;
{
if((rc=msg-detach( ))!=MSF-ok)
msg-error(rc);

-5.4.2 نرم افزار اپراتور
اولين قسمت الحاق فايلهاي سربرنامه بود . ليست زير بعضي از فايلهاي سربرنامه نامعمول اصلي را نشان ميدهد .
#include<time-h>0 براي شناسايي داده و زمان
#include "msg-bus.h" كه كتابخانه ارتباطي بي سيم را در بر مي گيرد .
#include "shared mem protocol .h" براي حافظه اشتراكي جايي كه حسگرها و داده هاي محرك خوانده مي شوند :
قسمت بعد شناسايي آدرس IP ازكامپيوتر اپراتور براي ارتباط آينده به شبكه است .
Checking the IP Addresses
WORD wVersionRequested;
WSADATA wsa Data ;
Char name [255];
PHOSTENT hostinfo ;
WVersionRequested=MAKEWORD(2.0);
If(WSAStartup (wVersion Requested . &wsaData)= = 0)
{
if(gethostname(name , size of(name)) = = 0)
{
if((hostinfo=gethostbyname(name))!=NULL)
{
ip=inet_ntoa(*(

struct in_addr*)*hostinfo->h_addr_list);
printf("\n the IP is %s \n \n",ip);
}
}
WSACleanup( ) ;
}
بعد از شناسايي آدرس IP ، ارتباط شبكه اي بي سيم كه تابع msg-attach از كتابخانه "msg-bus" را استفاده مي كند ، ساخته خواهد شد ، "own-node" آدرس IP است و "5110" شماره پورت انتخابي تصادفي است .
/* Connect to the message bus*/
if((rc=msg-attach (ip,"5110")) ! =MSG-ok)
ms_error(rc) ;
قدم بعد خواندن داده و eth time از كامپيوتر است . داده و زمان از سيستم عملكرد windows خوانده مي شود .
//time
time(&bintime);
curtime=Localtime(&bintime);
قدم بعد باز كردن 8 فايل مختلف است كه هر يك براي يك حسگر مخصوص است . فايلها در فرمت ASCII هستند . خط اول تعيين اينكه فايل شامل چه چيزي است مي‌باشد و پس اينكه چه داده و زماني ايجاد مي شوند . بعد از آن ، مقدار هر ستون تعيين خواهد شد . آن باستون مرتب نمي شود اما براي تعريف داده به اندازه كافي واضح است . مثال زيرفقط براي داده GPS1 است . باقيمانده فايلهاي حسگرهاي eth ايجاد شده ، روالهاي مشابهي را استفاده مي كنند .
//Oppening GPSI
if(FGPSI = fopen("FGPSI.txt","W"))= = NULL)
printf("The file was not opened\n");
fprintf(FGPSI) "The File Contains the First GPS Data in:%s" ,
ctime(&bintime));
fprintf(FGPSI,"timestamo , latitude , longitude, altude , altitude , ttcorse , speedog ,
vspeed , sigmaLati , sigmaLongi , sigmaAlti , mode , satellites");
در اين مرحله ،‌اپراتور مي تواند روي يكي از چهار option اصلي تصميم بگيرد :
1-حرف "e" براي خروج
2-حرف "a" براي همه حسگرهايي كه دريافت و ذخيره شده اند .
3-حرف "p" براي چك كردن اينكه آيا ارتباط برقرار است .
4-حرف "s" براي انتخاب بعضي حسگرهاي خاص و / يا داده هاي محرك
While(msg_id!=0)
{
if(id_imput!="0"|id_imput)="1"|id_imput!="2"|id_imput!=3)
{
printf("\n Please ch

oose one of the following options ; \n");
printf"\n->the letter "0" to exit ........n");
printf("\n->the letter "2" for all the sensors to be retrieved and saved........n");
printf("\n->the letter "1" to check if the connection is alive........n");
printf("\n->the letter "3" to select some spe

cific sensors and / or actuators data\n");
gets(id)input);
}
اگر عدد "0" انتخاب شود ، اپراتور مي خواهد خارج شود بنابراين پيام به ute كه ID صفر را براي درخواست قطع ارتباط شبكه خواهد داشت فرستاده مي شود . پس دو كامپيوتر از شبكه جدا خواهد شدو پيوند ارتباطي خواهد شكست .
IF(id_imput= = 0)
{
msg_id=0 ;
if((rc=msg_send(ip,"5220" , msg_id, 0 , NULL, FALSE))! = MSG_OK)
printf("NO CONNECTION %d" , rc);
if((rc=msg_detach())!=MSG_OK)
msg_error(rc);
}
اگر عدد "1" انتخاب شود‌، اپراتور چك مي كند آيا ارتباط برقرار است . بنابراين يك پيام با ID مساوي يك فرستاده مي شود و يك پيغام با اپراتور كه هر يك ثانيه مي‌گويد من موجودم چاپ مي شود . اپراتور مي تواند اين فرايند را با فشار دادن هر كليد قطع كند .

If(id_imput= = "1")

 


{
while(!_kbhit())
{
msg_id=1;
if((rc=msg_send(ip,"5220" , msg_id, 0 , NULL , FALSE))! = MSG_OK)
printf("NO CONNECTION%d",rc);
msg_receive(snd)nodel , snd_task1,&msg)id,&msg_len,msg_data,-1);
sleep(1000);
printf("i"am alive\n");
}
id_input=1;}


اگر عدد "2" انتخاب شود يعني اپراتور بعد از همه ديتاهاي حسگرها ذخيره مي شود . كد ريز نشان خواهد داد كه چگونه هر قسمت يك حسگر را فراخواني مي كند و بعد از دريافت داده براي حسگر بعدي فراخواني مي كند . زمان براي بروزرساني هر حسگر متفاوت است زيرا گاهي اوقات يك حسگر راقبل از اينكه بقيه را فراخواني كنم بيشتر از يك بار فراخواني مي كنيم . ساختار فراخواني و زمان بندي ، استفاده براي حساب كردن هر عبارت را كنترل مي كند و تابع steep براي زمان بندي .

If((id)imput = = 2)
{msg_id=2;
if((rc=msg_send(ip,"5220" , msg_id , 0 , NULL , False))! = MSG_OK)
printf("NO CONNECTION?d" , rc) ;
while (!_kbhit())
{for)int d=0 ; d<1 ; d++)
{
//GPS1
msg_receive (snd_node1,snd_task1, &msg_id , msg_len,msg_data,-1);
GPS1=*pos_packet*)msg_data;
fprintf(FGPS1,"%d %d %d %d %d %d %d %d %d %d %d \n" , GPS1 , timestamp , GPSI . latitude , GPSI . longitude , GPSI . altitude , GPSI . ttcourse , GPSI . speedog , GPSI , vspeed , GPSI . sigm aLati , GPSI . sigmaLogi , GPSI . sigmaAlti, GPSI . mode , GPSI . satellites) ;
msg_send(ip, "5220" , 3 , 0 , NULL , FALSE) ;

//GPS 2
msg_receive (snd_node1 , snd_task1 , &msg_id , & msg_len , msg_data , -1);
GPS2 = *(pos_packet *)msg_data ;
Fprintf(FGPS2 . "%d %d %d %d %d %d %d %d %d %d %d \n" , GPS2 , latitude , GPS2 , longitude , GPS2 , altitude , GPS2 , ttcourse , GPS2 , speedog , GPS2 . vspeed , GPS2 , sigm aLati , GPS2 . sigmaLongi , GPS2 . sigmaAlti ,GPS2 , mode , GPS2 . satellites , GPS2 . timestamp);
Msg_send(ip,"5220" , 4 , 0 , NULL , FALSE) ;

//Laser1
msg_receive (snd_node1 , snd_task , &msg_id & msg_len , data , -1);
l1=*(stc_packet *)msg_data;


for(j=0;j<361;j++)
{l1 . range [j];
fprintf(Flaser1,"%d" , l1.range [1]);}
fprintf(Flaser1,"\n" );
msg_send(ip,"5220" , 5 , 0 , NULL , FALSE);

//Laser 2
msg_receive(snd_node1, snd_task1 , &msg_id , &msg_len , msg_data, 1);
l2=*(sic_packet*)msg_data;
for (j=0 ; j<361 ; j++)
{l2 . range [j] ;
fprintf(Flaser2 , "%d" , l2 , range[j];}
fprintf(Flaser2 , "\n" );
msg_send (ip, "5220" , 6 , 0 , NULL , FALSE);
for(intc=0 ; c<2 ; c++)
{
// Compass
msg_receive (snd_node1 , snd_task1 , &msg)id , &msg_len , msg)data , -1);
Cmp = *(Compass*)msg_data;
Fprintf(Fcompass , "%d %d %d\n" , Cmp . Heading , Cmp.Pitch , Cmp . Roll);
Msg_send (ip, "5220" , 8 , 0 , NULL , FALSE) ;
For(int b=0 ; b<5 ; b++)
{
//Actuators
msg_receive (snd_node1, snd_task1 , &msg_id , &msg_len , msg_data , -1);
lns=*(ins_packet*)msg_data;
fprintf(Factuators , "%d %d %d %d %d\n" , Etc.Counts , Etc . Accelerator , Etc.Streering , Etc . Brake , Etc.timestamp);
msg_send (ip , "5220" , 9 , 0 , NULL , FALSE);

//send Ute Info
msg_receive (snd_nodel , snd_task1

, &msg_id &msg_len , msg_data , -1);
Gui=*(general UTE Info*)msg_data ;
Fprintf(Factuators , "%d %d %d %d %d %d %d %d %d %d\n" Gui.PID_A.Kp, Gui.PID_Aki,Gui.PID_A.Kd , Gui , PID_A.SeMa

x , Gui.PID_A.yMin , Gui.PID_A.y.Max, Gui.PID_A.spoint , Gui . Steering Control Mode , Gui , manual_steering);
Msg_send (ip , "5220" , 7 , 0 , NULL , FALSE) ;
For(int a=0 ; a<2 ; a++)
{
//INSmsg_receive(snd_nodel , snd_task1 , &msg_id , &msg_len , msg_data, -1);
Ins = *(ins_packet*)msg_data;
Fprintf(FINS,"%d %d %d %d %d %d %d %d\n" , Ins.bank,Ins.elev , Ins.ax , Ins.ay , Ins.az . Ins.gx , Ins.gy , Ins.gz);
Msg_send (ip , "5220" , 2 , 0 , NULL , FALSE );
Printf("Count%d\n",a);
Sleep(10) ;
} } } } }
printf("\n Please Enter the ID Number \n" );
gets(id_input);,}
اگر اپراتور عدد "3" را انتخاب كند او مجبور است يك سري از انتخابها را طي كند . برنامه از او هر مجموعه ساده از داده هاي حسگر را مي خواهد اگر احتياج به خواندن و ذخيره شدن باشد . پس هر وقت حسگر انتخاب نشد ذخيره آن در txt ممنوع مي‌شود . ساختار آن قسمت دقيقاً شبيه قسمت قبل است . اگر عبارت براي انتخاب باشد .

-5.5 آزمايش و تعمير و نگهداري
بعد از اشكال گيري كدها و رهايي از خطاهاي اشكال گيري اصلي و اخطارها ، بعضي كدهاي ضعيف كشف مي شود . من در تعمير بعضي از آنها موفق بودم اما بقيه مشكل بودند و احتياج به مقدار زيادي زمان داشتند . قسمت بعد درباره بعضي از ضعف هاي كدها بحث خواهد كرد : بدليل اينكه نرم افزارها در زمان واقعي اجرا مي شوند وبرنامه ute حافظه اشتراكي فوق هسته اي را استفاده مي كند . ما مجبوريم نرم افزار فوق هسته را براي خواندن حسگرها در زمان واقعي اجرا كنيم و آنها را در حافظه اشتراكي ذخيره كنيم . بنابراين ، نرم افزار ute به ديتاي تازه حسگر دستي خواهد داشت و آن را به اپراتور از طريق شبكه ارتباطي بي سيم خواهد فرستاد .
هر چند اين ممكن است كوشش ناخواسته زياد

ي بخواهد . همانطور كه قبلاً بحث شد، ما قادريم پس واژه هاي حسگر براي ذخيره در فايلهاي متني انتخاب كنيم . هر چند اگر ما اول GPS1 را براي ذخيره انتخاب كنيم ، بوسيله ليزر دنبال مي شود و به دوباره به دادة GPS1 بر مي گردد . هر وقت ذخيره كردن از قسمت قبل GPS1 با يك مجموعه جديد از time stamp ها تمام شد ادامه

مي يابد . هر چند اگر ما نرم افزار را خارج كنيم و آن را دوباره با انتخاب GPS1 اجرا كنيم ، آن در داده GPS1 موجود رونويسي خواهد شد . پيشنهاد مي شود فايلها هر بار كه آزمايش تمام مي شود در دايركتوري هاي مختلف ذخيره شود . يك راه حل اين است كه به برنامه اجازه دهيم هر بار كه آن را اجرا كنيم يك دايركتوري جديد ايجاد كند ، جايي كه نامش

به داده و زمان مرتبط باشد و ديتا را در آن ذخيره كند . ضعف ديگر كه كشف شد اين است كه اگر ما باعث شويم كه برنامه اپراتور داده مورد نياز را روي صفحه چاپ كند آن پردازنده را كند خواهد كرد و خواندن پردازش داده را كندتر مي كند كه منجر به تاخير ر بروزرساني حسگر مي شود . بنابراين چاپ داده روي صفحه بخاطر جلوگيري از هر تاخيري كنسل شد . همه داده ها فقط در فايلهاي متني ذخيره مي شوند . خروجي داده متني اول به عنوان فايلهاي ASCII ايجاد شد . پيشنهاد شد فايل هاي داده اي بزرگتر را به عنوان دررويي ذخيره شود .
هر چند هنگام استفاده از كامپيوتر اپراتور فضا مساله مهمي نيست . داشتن يك هاردديسك حداقل 10 گيگابايتي براي يك ساعت آزمايش داده هاي حسگر كافي مي‌باشد . هر چند اگر فايلهاي نوعي دودويي احتياج باشد آن براي پياده سازي ذخيره آپشن يك آپشن ساده مي باشد قبل از اينكه فايل ايجاد مي شود . من ترجيح مي دهم ASCII را استفاده كنم زيرا براي فهميدن آسان تر است و براي استفاده براي نمودار كشيدن يا فيلتر كردن بدون احتياج هر كد يا كتابخانه براي ترجمه آسان تر است . بات نرم افزار اپراتور ، كاربر يك انتخاب از مجموعه داده هاي مخصوص انتقال مي دهد و در ابتداي برنامه ذخيره مي كند . در اين مرحله يك ورودي اشتباه منجربه پياده سازي يك تصميم اشتباه مي شود . بنابراين ، يك روال كشف خطا براي جلوگيري از دستورات ورودي اشتباه طراحي شد كه منجر به پردازش و پياده سازي كد اشتباه مي‌شود .


*In the name of the uniqe and peerless *
*creator *
The God
1ـ مقدمه:
1،1ـ سابقة پروژه (HSV) وسيله نقليه با سرعت بالا يك پروژة موفقيت آميز انجام شده توسط مركز ربوتيك فيلد استراليا(ACFR) به سال 1997 بر مي گردد. هدف ا

ولية دانشجويان و محققان در اين پروژه عبارت اند از توسعة الگوريتم هاي ناوبري و كنترل بر منظور عمليات مستقل وسيله نقلية زميني در حال كار در محيط هاي نامعلوم بوده است. اولين نسخة آزمايشي از يك اتومبيل مجهز به تجهيزات كمودور سري S هولدن، با يك سري از حسگرهاي فعال سازها، جمع آوري كننده اطلاعات و سيستم كنترل ساخته شد.
هدف از پروژه HSV عبارت اند از توسعة فن آوري ها براي اتوما

سيون(خودكار سازي) يك وسيلة نقليه مي باشد كه در سرعت بالا ( بيش از 90km/h ) در يك سري از محيط هاي « حقيقي» كار مي كند. پروژه توسط ACFR وcanTE بودجه گذاري مي‌شود.
عنصر « سرعت بالا» پيچيدگي سيستم را افزايش مي دهد كه اين امر مستلزم نگاه و بررسي بعدي است. اين موضوع اهميت ملاحظة ميزان وسعت پي آمدهاي حركت در آينده را يادآور مي شودـ يعني تمام آنچه كه لازم است در زمينة لايه هاي چندگانة پردازش شكل ها و حالت هاي خرابي، بي خطر، و زائد صورت گيرد.
براي محقق نمودن چنين سيستمهايي، پروژةHSV تمام جنبه هاي ناوبري وسيله نقلية خودكار شده را تحقيق مي كند. اين فرايند مي تواند به چهار مرحله تقسيم شود:
1) آگاهي و مدل سازي محيط
2) قرار دادن وسيله نقليه در داخل محيط (اش)
3) طرح ريزي و تصميم گيري درمورد حركت مطلوب وسيلة نقليه
4) اجراي حركت مطلوب وسيله نقليه
توسعة سيستم هاي كنترل نيرومند و مطمئن كه توسط يك وسيله نقلية مستقل براي كار در سرعت بالا لازم مي باشد( و اغلب در محيط هاي جهان حقيقي و ساختار بندي نشده بكار مي رود) يك كار پر زحمت است. روش ها و الگوريتم هاي اجرا شده و اعمال گرديده بر روي روبوت هاي متحرك( محيط داخلي) كه در حال كار در محيط هاي ساختار بندي شده و بي حركت ( ايستا) هستند اغلب براي يك وسيلة مستقل و با سرعت بالا، نامناسب مي باشند. هدف غايي و نهايي اين پروژه عبارت اند از طراحي نمودن سيستمي است كه بتواند موقعيت مكاني وسيلة نقليه را در محيط هاي ساختار بندي نشده و نامعلوم تعيين كند و آن را براي اجراي كار در يك مسير مورد نظر با دقت در حد سانتيمتر، كنترل و اداره نمايد.

1.2 ـ حسگرها و فعال كننده هاي HSV
كار تحقيق و توسعه بر روي يك وسيله نقلية آزمايشي پروژة HSV آزمايشي، رفع عيب و ارزيابي واجرا مي شود. اين وسيله نقليه موسوم “vte’’ توننده براي اتوماسيون كامل، مورد بررسي قرار مي گيرد. يك كامپيوتر شخصي پنتيوم II با قدرت 400MHZ و 64MB RAM كه با نرم افزار ويندوزNT و سيستم عامل پيوسته(بلادرنگ) QNX كار مي كند در سيني Ute قرار داده مي شود و از تجهيزات تحصيل و جمع آوري ديتا ( اطلاعات خام)( از قبيل يك مبّدل A/D ) براي ارتباط بين حسگرها و فعال سازها استفاده مي گردد. در داخل كابين، در سمت مسافر( غير راننده) يك مونيتور نمايش نصب شده است تا نظارت بر عملكرد سيستم در طي آزمايش ( تست) امكان پذير باشد.
يك سري از حس گرها براي استفاده بر روي “ute” موجود مي باشد كه تركيب بندي‌ها و حق انتخاب هاي حس كردن محيطي و تعيين موقعيت بالقوة متعددي را
فراهم نمايد.

حسگرهاي بكار رفته به شرح زير مي باشند:
واحد GPS ديفرانسيل (جزئي)، سيستم ناوبري اينرسي INS ، ليزر ياتاقان sick ،LVDT ، كد كنندة چرخ، رادارـMM ، ديد پانوراميك، پتانسيومتر دريچة گاز سه سيستم فعال سازي( براي هم زدن، دريچه گاز و ترمز) نيز در محل وجود دارند كه به ute اجازه مي دهند كه تحت كنترل مستقل كامل كار كند. شرح مختصري از تركيب بندي اين سيستم ها ارائه مي شود:
• فعال كننده هم زدن ( گردش) و كنترل: يك موتور DC كه در محل راننده نصب شده است و ميله فرمان را از طريق گيربكس كاهش سرعت دنده مارپيچ و يك كلاچ الكترومغناطيسي مي چرخاند.
• فعال كننده و كنترل دريچه گاز: يك فعال كننده خطي كه جابجايي سوپاپ پروانه كاربراتور را كنترل مي كند( كه توان خروجي موتور را از طريق يك كابل راهنما تعيين مي كند.
• فعال كننده و كنترل ترمز: يك فعال كننده خطي ثانوي( كه زير صندلي راننده نصب شده است) و وضعيت پدال ترمز را مستقيماً كنترل مي كند. اتصال فيزيكي بين پدال و فعال كننده از طريق دو كابل صورت مي گيرد، كه در قسمت جلوي پاي راننده وصل مي گردد.

3،10ـ حسگرهاي HSV :

 


يك مجموعه از حسگرها براي استفاه بر روي “Ute” وجود دارد كه تركيب بندي ها و راههاي انتخاب محيطي و محل بالقوة آنها را فراهم كرده اند. در بخش بعدي اين فصل حسگرهاي بكار رفته در Ute فهرست وشرح داده مي شود.
ساختارهاي اطلاعات منتقل شده بصورت بي سيم كه توسط هر حسگر توليد مي شود نيز با شرح مختصري ارائه مي شوند.1.3.1ـ واحدGps ديفرانسيل ـ سيستم موقعيت جهاني يا Gps واحدي است كه مي تواند اطلاعات سرعت و موقعيت را فراهم كند. با استفاده از يك سري ماهوارة در حال گردش دور زميني، در مدارهاي معلوم، واحد مي تواند تعيين كند كه دركجا و با چه جهتي واحد در حال حركت است. سيستم روي HSV موسوم به يك Gps ديفرانسيل است كه دقت بالاتر را به اطلاعات دريافت شده تبديل مي نمايد. يك ايستگاه پايه در يك محل جغرافيايي معلوم بر پا مي شود و اطلاعات دريافتيGps در اين محل را جمع مي كند و يك برآورد خطاي Gps مي تواند صورت گيرد. اين خطا سپس، از طريق ويدئو به كامپيوتر ( رايانه) HSV فرستاده مي شود كه بعداً خطاي برآورد شده از اطلاعات Gps جمع آوري شده از واحدGps واقع بر روي آن، حذف مي نمايد. اطلاعات جمع آوري شده از چنين سيستمي يك موقعيت جهاني در شمال، شرق، و پايين ( ارتفاع عمودي) و سرعت هاي واحد در اين فريم ها را فراهم مي كند. شش مقدار اصلي اطلاعات بكار رفته وجود دارند، ولي اطلاعات موجود بر روي سيستمGps نيز فراهم مي شود، مثلاً تعداد ماهواره هاي اطلاع رساني به واحد و انواع سيگنال هاي مجزا را مي توان نام برد.
شكل 1ـ1 : Gps ديفرانسيل
اطلاعات ارسال شده بطور بي سيم عبارت اند از:
ارتفاع=altitude زمان=time stamp


؟=tt course عرض جغرافيايي = latitude
سرعت افقي زميني= speedog طول جغرافيايي= longitude
سرعت عمودي= Vspeed عرض سيگما= Sigmalati
مودGps = mode طول سيگما= Sigmalong
تعداد ماهواره= Sattelites ارتفاع سيگما= Sigma Alti

1.3.2ـ سيستم ناوبري اينرسي:
INS سيستم ناوبري اينرسي است و يك جعبه سياه است كه داراي يك سري حسگر مي باشد و شامل ژيروسكپ ها، شتاب سنج هايي است كه در جهت سه محور عمود برهم آرايش يافته اند.
• ژيروسكپ ها سرعت زاويه اي را اندازه مي گيرند. و سرعت ماشين در هنگام افزايش و يا كاهش شتاب آن در هر جهت تعيين مي شود.
• شتاب سنج ها شتاب را اندازه مي گيرند و افزايش و كاهش سرعت درهر جهت تعيين مي گردد.
• شيب سنج ها، شيب را مي سنجند.
اين امر اطلاعات را در تمام شش درجة آزادي فراهم مي نمايد: يعني شتاب وسرعت زاويه اي در هر سه محور، با زاويه هاي نسبت ژيروسكپ هاي آويزان تعيين مي شود. و به كمك آن برآورد موقعيت HSV از طريق انتگرال گيري شتاب و سرعت زاويه اي براي تعيين موقعيت مكان و جهت انجام مي گردد. اطلاعات انتقال يافته بطور بي سيم:
timestamp: // timestamp(inmilliseconds)
bank: // bank
elev: // elevation
ax: // acceleration along x-axis
ay: // accelertion along y- axis
az: // acceleration along z-axis
gx: // angular acc. About x-axis


gy: // angular acc.about y-axis
gz: // angular acc. About z- axis
1.3ـ سيستم ناوبري ليزري
ليزر Sick
براي بدست آوردن تصويري از محيط اطراف HSV ، يك ليزر در جلوي HSV قرار دارد. ليزر يك پالس ليزر مادون قرمز را منتشر مي كند كه پس از برخورد به هر شي درمجاورت آن، منعكس مي شود. زمان بازگشت اشعه در (پالس مادون قرمز) به واحد اندازه گيري مي ود و سپس با استفاده از سرعت نور، فاصلة شيء از دستگاه ليزر مي تواند اندازه گيري شود. تصويري از محيط توسط دوران و چرخش ليزر ايجاد مي شود و نمونه هايي تحت فاصله هاي زاويه هاي معلوم تهيه مي شود.
شكل 2ـ1 : ليزرSick


نمونه ها تحت هرْ0.5 تهيه مي شوند وبراي محدوده تا ْ180 و به فاصله حداكثر تا 80 متر اين نمونه برداري اين كار صورت مي گيرد. اطلاعات ارائه شده براي هر حسگر به صورت يك سري عدد براي هر نمونه مي باشد و بطور كلي 361 عدد قرائت مي شود. اين مدل، شدت، سيگنال برگشت را مي فراهم مي كند كه در همان فرمت ارائه مي شود.


اطلاعات انتقال بي سيمي
timestamp: // timestamp ( in milliseconds)
range : // Laser Range 180o for 360 section


1.3.4ـLVDT
يكLVDT يك دستگاه اندازه گيري است كه از نيروي الكترومغناطيسي استفاده مي كند كه در حركت يك هسته آهني توسط دو سيم پيچ الكترومغناطيسي القا مي شود. LVDT اين قانون را براي اندازه گيري حركت خطي بكار مي برد و دو سر ( انتها) را به فاصله خطي لازم براي اندازه گيري وصل مي كند. برايHSVD ، اين دستگاه به سيستم فرمان Ute وصل شده است و يك مقدار جابجايي حركت فرمان ماشين( بصورت زاويه اي) را در

نظر مي گيرد. براي پرهيز از خسارت به سخت افزار فرمان(steering) ، يك سري زاويه هاي چرخش فرمان معيني از قبل فرض شده اند طوري كه فعال كننده ها مجبور به عمل درخارج از محدودة فيزيكي معيني نباشند.
اطلاعات منتقل شده بي سيم
مقدار LVDT حسگر فرماني// ( فرمان): steering
( محاسبه شده) توان خروجي فرمان واقعي// ( توان خروج

ي فرمان – حقيقي )real-steerin-output
1.3.5ـ كد كننده فرمان ـ كد كننده چرخ ROD-430 از كد كننده هاي سرعت دوران جزئي از شركت Heidenhain مي باشد. كد كننده ها بر اساس قانون روش الكتريكي شبكه خطوط به تعداد بين 50 تا 5000 تبعيت مي كند. اتصال محور به كدكننده هاي چرخ مي تواند تا 12000rpm نوسان كند. سيگنال هاي خروجي براي اين مدل خاص سيگنال هاي موج مربع HTL هستند و يك مدار را شامل مي شوند كه سيگنال هاي اسكن كردن سينوسوئيدي را ديجيتال( رقومي) مي نمايد و رديف پالس با جابجائي فاز 90 درجه و يك پالس مرجع را فراهم مي نمايد./ كد كننده توسط 12V برق مستقيم از جعبه فيوز، قدرت مي گيرد.
شكل 3ـ1 encoder چرخنده
اطلاعات
مقدار شمارش پتانسيومتر:Counts
1.3.6ـ قطب نما: يك منبع ديگر از اطلاعات وسيل

ه نقليه است كه نسبت به شمال مغناطيسي اندازه گيري انجام ميدهد. قطب نما از نوع TCMZ مي باشد. تمام قطب نما ها بايد دقيق باشند بنابراين TCMZ از يك شيب سنج دقيق استفاده مي كند تا پردازشگر بتواند ميزان انحراف را تصحيح نمايد. تمام اندازه گيري هاي زواياي دوران و انحراف و اندازه گيري هاي ميدان مغناطيسي و توان خروج

ي توسط قطب نما انجام مي شود. اين اطلاعات اضافي به TCMZ اجازه مي دهد تا دقت بيشتري توسط كاليبره كردن در تمام موقعيت ها فراهم گردد و يك آلارم فراهم شود هنگامي كه اختلالات مغناطيسي محلي موجود باشند و هشدارهايي ارائه شود هنگامي كه دستگاه خيلي منحرف شده باشد.
اطلاعات منتقل شده بطور بي سيم:
timestamp B: // timestamp ( inmilliseconds)
Heading: // latitude ( in degrees)
Pitch: // longitude 9in degrees)
Roll: // altitude (in metres)
1.3.7ـ پتانسيومتر دريچه گازـ براي كنترل دريچه گاز، بازخورد موقعيت دريچه گاز از يك پتانسيومتر بدست مي آيد كه درداخل فعال كننده خطي نصب شد. پتانسيومتر شامل يك تقسيم كنندة حجم است كه در آن ميلة خروجي پتانسيومتر با ميلة فعال كننده حركت مي كند. پتانسيومتر اعداد از 1000 تا 10000 اهم را مي خواند و دامنه ولتاژ خروجي آن توسط دو ولتاژ Vpot- و Vpot+ بكار رفته در كرانه هاي مقاومت پتانسيومتر، داده مي شود. ولتاژ بكار رفته در دو كرانه عبارت اند از-8.6V و +8.6V مي باشد و دامنه ولتاژ پتانسيومترV-8.6 و+8.6V است. دريچه گاز با ميله فعال كننده حركت مي كند تا اينكه دريچه گاز به موقعيت حداكثر يا حداقل مي رسد. لذا، درناحيه فعال، يعني ناحيه اي كه دريچه گاز با ميله فعال كننده حركت مي كند، فاصلة طي شده توسط ميلة فعال كننده نيز فاصلة طي شده توسط دريچة گاز است و بنابراين قرائت ولتاژ از پتانسيومتر نيز متناسب با وضعيت در دريچة گاز است.
اطلاعات منتقل شدة بي سيم:
مقدار حسگر شتاب // : شتاب دهنده

1.3.8ـ پتانسيومتر ترمز:
براي كنترل دريچة گاز، بازخورد وضعيت د

ريچة گاز از يك پتانسيومتر بدست مي آيد كه در داخل فعال كننده خطي نصب است. پتانسيومتر شامل يك تقسيم كننده ولتاژ است در جايي كه ميلة خروجي پتانسيومتر با ميلة فعال كننده حركت مي كند. پتانسيومتر از 0 تا 1000 اهم را مي خواند و ولتاژ خروجي آن توسط دو ولتاژ Vpot- و Vpot+ داده مي شود كه دركرانه هاي مقاومت پتانسيومتر بكارمي رود. ولتاژهاي بكاررفته در دو كرانه –8.6V و Vpot+ است و بنابراين

ولتاژ پتانسيومتر بين V-8.6 و+8.6V تغيير مي كند. پدال ترمز با ميلة فعال كننده حركت مي كند تا اينكه پدال ترمز به وضعيت هاي حداكثر يا حداقل خودش مي رسد.
اطلاعات منتقل شدة بطور بي سيم
مقدار حسگر ترمز // : ترمز

1.4ـ فعال كننده و كنترل كننده
1.4.1ـ كنترل كننده ها و فعال كننده فرمان
قسمت گردان در HSV مي تواند به دو شيوه فعال شود: دستي يا خودكار. يك موتور DC براي حركت از طريق يك جعبه دندة كاهش سرعت مارپيچ بر روي مكانيزم گردش استفاده مي شود تا بتواند با يك سرعت متغير به چپ يا راست حركت نمايد.
شكل 4ـ1: فعال كنندة گردش

: اجزاء
: موتور
5A : جريان ولت24 : ولتاژ 120W : قدرت
2000rpm (20q rad/s) : سرعت
ْ90 : دوران كاهش سرعت مارپيچ :گير بكس 1: 40 : نسبت
( دقيق نيست) %90 : راندمان
گشتاور: گشتاور مورد نياز: 8NM
گشتاور موتور P/w = 120/20qs 05742NM = سرعت/ توان
گشتاور ايجاد شده توسط گيربكس = راندمان گشتاور موتور نسبت = 0.9
0.5742 40 = NM20.6aa
بنابراين گيربكس/ موتور گشتاور كافي براي گردش ايجاد مي كند.
كلاچ:كلاچي كه استفاده مي شود يك كلاچ الكترومغناطيسيLenze 10NM مي باشد. يك كلاچ الكترومغناطيسي استفاده شد تا بتواند ماشين را با استفاده از يك كليد واحد از مود مستقل به مود دستي، سوئيچ نمايد.


درگير شدن: كلاچ هاي الكترومكانيكي از طريق يك فعال سازي الكتريكي عمل مي كند، اما گشتاور را بطور مكانيكي منتقل مي نمايد. وقتي كلاچ لازم باشد تا فعال گردد، جريان / ولتاژ براي كوئل كلاچ استفاده مي شود. كوئل الكترومغناطيسي مي شود و خطوط فلو ( شار) مغناطيسي توليد مي گردد. اين فلو از طريق فاصله هوايي

بين ميدان و روتور انتقال داده مي شود. بخش روتور ازكلاچ مغناطيسي مي شود و يك حلقة مغناطيسي ايجاد مي نمايد كه آرماتور را جذب مي كند. آرماتور در مقابل روتور كشيده مي شود و يك نيروي اصطكاك درتماس بكار برده مي شود. ظرف مدت نسبتاً كوتاهي، بار شتاب داده مي شود تا با سرعت روتور مناسب شود و بدان وسيله آرماتور و توپي خروجي كلاچ درگير مي شوند. در اكثر موارد، روتور بطور ثابت با ورودي در تمام اوقات مي چرخد.
رها شدن: وقتي ولتاژ جاري از كلاچ قطع مي شود، آرماتور آزاد مي گردد تا با محور شفت بچرخد. در اكثر طراحي ها، فنرها آرماتور را از سطح روتور دور نگه مي دارند هنگامي كه برق قطع مي شود، و يك فضاي كوچك ايجاد مي ود ك دو قطعه را قادر مي سازد تا بچرخند.
كنترل سيستم:LVDT وضعيت ترك چرخان را مي خواند و يك سيگنال ولتاژ به صورت مقدار‌بازخورد‌اتخاذ‌مي‌شود. خطاي بين اين مقدار و نقطه تنظيم ارزيابي مي‌شود
و الگوريتم كنترل، يك خروجي جديد را براي فعال كنندة گردش، تعيين مي كند.
شكل 5ـ1
تقويت كننده: كنترل كننده موتور DC بكار رفته، يك تقويت كنندة سرو و برس DC كنترل حركت پيشرفته سري A25 است. اين كنترل كنندة موتور قادر به بيرون دادن DCV24+/- در جريان هاي تا A30 با استفاده از استانداردهاي صنع

تي سيگنال هاي كنترل +/-5V مي باشد. اين كنترل كننده در موارد كنترل مدار بسته براي كنترل سرعت و موقعيت مكاني استفاده مي شود.
فعال سازي: با تغيير دادن ورودي ولتاژ براي

موتور از –24 تا +24V ، مي توانيم سرعت و موقعيت موتور را كنترل كنيم. ولتاژ متغير توسط ضرب كردن خطا در kp از كنترل كنندة PID ( تناسبي مشتقي انتگرالي) محاسبه خواهد شد.

1.4.2ـ كنترل و فعال كنندة دريچه گاز
فعال كننده: فعال كنندة دريچه گاز انتخاب شده يك فعال كنندة خطي است كه توسط يك موتور 24V 1.25ADC ( جريان حداكثر) راه اندازي مي شود كه از “ياتاقان هاي خطي ” در NSW خريداري مي شود. مدل فعال كنندة خطي بصورت LAR.3 درخواست مي گردد، و داراي يك بار حداكثر 200N است و سرعت حداكثر 48mm/3 و طول ضربه 100mm مي باشد.
اين فعال كننده انتخاب گرديد زيرا سريعترين فعال كنندة يافت شده است كه نياز هاي زير را تامين كرد.
• 45mm > طول ضربه( حداكثر جابجايي دردريچه گاز اندازه گيري شده)
• با قدرت 24VDC
• ( حداكثر نيروي اندازه گيري شده درحاليكه دريچه گازجابجا مي شود)>100N حداكثر بار
سيستم مكانيكي كنترل: براي  همان كابل هاي بكار رفته براي اتصال پدال گاز و دريچه گاز). وقتي كه ميلة فعال كننده واكنش مي كند، كابل را همراه با آن مي كشد. اين امر موجب افزايش ميزان باز شدن سوپاپ دريچة گاز مي شود و بنابراين شتاب وسيله نقليه افزايش مي يابد. وقتي كه ميلة فعال كننده اضافه طول مي يابد، كشش كابل كم مي شود و فنر برگشت دهنده( ارتجاع) در دريچة گاز به وضعيت اوليه اش ( جابجا شده) بر مي گردد. اين امر موجب كاهش بازة( روزنه) سوپاپ دريچه گاز مي شود و شتاب

وسيله نقليه كاهش مي يابد.

1.4.3ـ فعال كنندة ترمز وكنترل
فعال كننده: فعال كنندة دريچه گاز انتخاب شده يك فعال كنندة خطي است كه توسط موتور DC ( جريان حداكثر)24V6A حركت مي كند كه از “ ياتاقانهاي خطي” در NSW خريداري شده است. مدل فعال كننده خطي بصورت LA303 درخواست مي شود، و داراي حداكثر بار 1500N مي باشد. و يك سرعت حداكثر و طول ضربة150mm است. اين فعال كننده انتخاب شد زيرا سريعترين فعال كنندة خطي موجود بود كه شرايط زير را تامين ميكرد.
• قدرت گرفته توسط24 VDC
• >100mm طول ضربه( جابجايي حداكثر اندازه گيري شدة پدال گاز)
• >500N بار حداكثر( حداكثر نيروي اندازه گيري شده هنگام جابجايي پدال ترمز)

سيستم مكانيكي كنترل:
براي كنترل ترمز، سيستم مكانيكي اساساً شامل يك فعال كنندة خطي و كابل هاي هدايت شده است( همان كابل هاي بكار رفته براي اتصال دريچه گاز و پدال گاز). وقتي ميلة فعال كننده جمع مي شود، كابل را همراه با آن مي كشد و بدان وسيله پدال ترمز را بعداً مي كشد كه باعث يك افزايش در نيروي ترمز كردن بر روي وسيله مي شود. وقتي ميلة فعال كنندة پدال گاز، منبسط و طويل مي شود فنر ذخيره كننده در پدال ترمز، پدال ترمز را به طرف موقعيت جابجا شدن ذخيره مي گردد و بدان وسيله نيروي ترمز بر روي وسيله نقليه را كاهش مي دهد.

1.4.4ـ انتقال اطلاعات:
اطلاعات منتقل شده بطور بي سيم براي كنترل PID از سه فعال كننده ( KI, Kd, Kp نقطة آغاز…..) در بخش زير شرح داده مي شود.
PID_A.Kp:
PID_A.Ki:
PID_A.Kd:
PID_A.SeMin:
PID_A.SeMax:
PID_A.yMin:
PID_A.yMax:


PID_A.spiont:
SteeringControlMode:
Manual_steering:
مود كنترل گردشي
گردش دستي



فصل 2
(2) ارتباطات بي سيم
مقدمه2.1ـ ارتباطات بي سيم براي مقاومت در مقابل رشد نمايي درتلفن سلولي، شبكة بي سيم و قلمروهاي اينترنت مي باشد. تعداد موارد بي سيم از 425 ميليون در 1993 تا 953 ميليون دراواخر 2002 رسيده است. در حال حاضر، دو نوع استاندارد بي سيم در صنعت مورد توجه مي باشدكه بخاطر خصوصيات وقابليت هاي عملكرد آنها است و سيستمBlue tooth و IEEE802.11 نام دارند. انواع سيستم هاي بي سيم ديگري وجود دارند از قبيل Hiperlan/21,WDCT و Home RFZ كه داراي يك سهم بازار كوچكي مي باشند. سيستم IEEE802.11b براي شبكه سازي بي سيم بين اپراتور و رايانهUte( بصورتon beard ) استفاده گرديد.

2.1.1 ـ Blue tooth
Blue tooth يك استاندارد بي سيم باز است كه از باند ISM ( پزشكي صنعتي و علمي) براي انتقال هاي برد و مسافت كوتاه استفاده مي كند. با يك سرعت اطلاعات حداكثر 1Mbps صدا و اطلاعات بصورت بي سيم در شبكه هاي ناحيه اي و شخصي بي سيم (WPANS ) با استفاده از طرح گونة مدولاسيون(FHSS) منتقل مي شود. Blue tooth توسط گروه SIG پشتيباني مي شود. كه از طرف رهبران صنعت پشتيباني شده است( شامل موتور ولا، IBM ، Intel ، نوكيا، اريكسون، و3com ).

 

2.1.2 ـWDCT
WDCT استاندارد ارتباطات (از راه دور) بي سيم تقويت شدة ديجيتال است كه ابتدا در اروپا مطرح گرديد ولي بعنوان يك استاندارد ارتباطات از راه دور بي سيم در سراسر جهان پذيرفته شد، پس از سالها موفقيت با DECT در اروپا، آفريقا، و آمريكاي جنوبي، استان

دارد DCT ( ارتباطات از راه دور بي سيم ديجيتال در سراسر جهان ) بطور ويژه اي براي بازار آمريكاي شمالي در 1998 توسعه يافت.
WDCT با باند فركانس 2.4GHZ طرح گونة مدولاسيون FHSS را با يك برد ارسال فوت 1000 و كيفيت صداي سازگار با شبكه هاي ثابت شده، پذيرفته شده است.

2.1.3 ـHome RF
يك فن آوري بي سيم است كه پروتكل صدا را براي DECT با روش انتقال اطلاعات در 802.11b تركيب مي كند و در باند فركانس2.4GHZ با سرعت اطلاعات اوج 10/Mbps كار مي كند و يك دامنة تا 150 فوت فراهم مي كند درحاليكه از روش مدولاسيون فركانس بهره مي گيرد. شركت گروه كاري (HRFWG)Home RF براي قابليت كار دستگاههاي بي سيم در توزيع و پخش صدا، اطلاعات و رسانه هاي جاري در محيط هاي مصرف كننده تشكيل گرديد.
اعضاي اصلي شامل موتور ولا،compaq و زيمنس مي باشد.

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید