My CV | Search | עזרה | בית | מחלקה | מועדפים | ספרייה

טכנולוגיות – סביבת הפרויקט

תקציר
יחידת ה RCX שולטת בתנועה המכאנית של הרובוט. בפרויקט זה, היא מופעלת בתוכנית בשפת NQC. יחידת ה RCX הינה מחשב קטן המבוסס על שבב הH8 של היטאצ'י, מעבד שמונה ביט המספק serial I/O , מתמיר אנלוגי לדיגיטאלי וטיימרים.
כמו כן נבחר שימוש בפקד חדש בשם Phantom.ocx. פקד זה נכתב בשפת C ומאפשר תקשורת ישירה עם מגדל השידור בחיבור USBכיוון ש-MATLAB תומך בקישוריות לפקדים (Activex control), קונפיגורציות העבודה מול פקד זה טריוויאלית ונוחה לשימוש.
מצלמה ביתית מבית Logitech, בעלת יכולות רבות, שחלקן אינן נצרכות לפרויקט זה, כגון: Zoom, Pan ועוד.· רזולוציה 640x480 , 1.3 מיליון מגה פיקסל , חיישן CCD מתקדם , חבור USB.

תוכן הענינים
יחידות ה RCX
מגדל שידור האינפרא אדום TOWER
Phantom Control
מצלמה ביתית , Logitech QuickPro pro 4000
Bricx Command Center 3.3
MATLAB


יחידות ה RCX
יחידת ה RCX-, שולטת בתנועה המכאנית של הרובוט. בפרויקט זה, היא מופעלת בתוכנית בשפת NQC. תוכנית זו מורכבת מלולאה אינסופית הדוגמת ערך של משתנה בודד בזמן אמת. כל ערך של משתנה זה, מכתיב את אופי התנועה של הרובוט (שמאלה ימינה, למעלה, למטה עצירה וכו'), בהתאם לפקודה שנשלחה. פקודות התנועה משודרות לרובוט מהתוכנית המרכזית על מחשב ה-PC, דרך מגדל שידור אינפרא אדום.
מפרט טכני: יחידת ה RCX- הינה מחשב קטן המבוסס על שבב הH8- של היטאצ'י, מעבד שמונה ביט המספק serial I/O , מתמיר אנלוגי לדיגיטאלי וטיימרים.
ליחידה 16k של Rom פנימי, ו32k- של RAM חיצוני, בתחלה הRAM- ריק, אבל עם קבלת ה-RCX, יש להטעין על היחידה את ה-firmware, שהיא מעין מערכת הפעלה, הצורכת זיכרון, כך שנשאר למשתמש רק 6k לשימושו. ה-firmware נועד לשם אינטרפרטציה של הקוד, שנכתב ליחידה, על-ידי המשתמש.
ממשק המשתמש ליחידה כולל ארבעה לחצנים וצג LCD.
ישנה אפשרות להוציא מתח לשלוש יחידות הנעה, בפרויקט זה נעשה שימוש בשתיים מהיציאות הנ"ל לשם הנעת מנועי הגלגלים (אחד עבור כל צד).
יחידת הRCX-, כוללת ארבעה טיימרים, אשר מודדים אינטרוול זמן של 0.1 שנייה, ואשר יכולים להיות מאופסים, על-ידי התוכנית, בכל זמן, באופן בלתי תלוי אחד בשני, והערך שלהם ניתן להצגה על גבי צג ה-LCD.
ליחידה יש מקום ל-32 משתנים גלובליים, שגודלו של כל אחד מהם הוא עד 16 ביט, והם נשארים קבועים כאשר משנים תוכניות, והיחידה מסוגלת להחזיק עד לחמש תוכניות. http://mindstorms.lego.com/



איור 10.1 בקר RCX
דוגמאות נוספות לשימוש בבקר RCX ובמערכת Mindstorms של חברת Lego.
[מקור 25].



איור 10.2 דוגמאות לשימוש בבקר RCX.

מגדל שידור האינפרא אדום TOWER
מגדל השידור, משמש לתקשורת, בין מחשב ה-PC ליחידת הRCX, על-ידי שליחת פקודות באינפרא אדום וקבלתן.
במהלך העבודה התברר שעוצמת השידור של המגדל נמוכה ומצריכה קשר עין מתמיד עם הרובוט. מאחר שהרובוט נע ברחבי הזירה בכיוונים שונים, חלק מהפקודות ששודרו מהמגדל, לא נקלטו על-ידי הRCX- – כלומר, למרות שהתמרור זוהה, נוצר כשל בהעברת הוראת התנועה לרובוט. נמצא פתרון לבעיה זו, על-ידי התקנה של יחידת הRCX בחלקו העליון של הרובוט, למניעת הפרעות קליטה. בנוסף, מגדל השידור הוצב בנקודה גבוהה והוטה כלפי מטה על מנת שהשידור יכסה את כל הזירה.



איור 10.3 מגדל שידור אינפרא אדום

פרטים טכניים אודות מגדל השידור ניתן למצוא באתר.
Mindstorms IR-communication

Phantom Control
חברת Lego, מספקת את המוצר Mindstorms 2.0 עם פקד Spirit.ocx. פקד זה מאפשר את התקשורת בין מחשב PC לבין מגדל השידור על בסיס RS232.
מאחר ובפרויקט זה, השתמשתי בגרסה חדשה של מגדל תקשורת, בחיבור USB, אין באפשרותי לתקשר על מגדל זה בעזרת פקד Spirit.ocx.
ישנם שלושה פתרונות: האחד, שימוש במגדל ישן. כמובן שפתרון זה לא התקבל, עקב יתרונותיו הרבים של מגדל תקשורת בחיבור USB מהיר (ראה נתונים לעיל).
הפתרון השני, הוא כתיבת קוד מסובך וקשה לתקשורת בין MATLAB לבין מגדל השידור. פתרון זה גם-כן לא ישים, מפני שזה פרויקט, מורכב וקשה ליישום, בפני עצמו.

הפתרון השלישי והנבחר, הוא שימוש בפקד חדש בשם Phantom.ocx. פקד זה נכתב בשפת C ומאפשר תקשורת ישירה עם מגדל השידור בחיבור USB.
כיוון ש-MATLAB תומך בקישוריות לפקדים (Activex control), קונפיגורציות העבודה מול פקד זה טריוויאלית ונוחה לשימוש.
Phantom , הינו Class , המקשר בין המחשב לתוכנית המפעילה את הרובוט. באמצעותו נשלחים פרמטרים להזנת התכנית הצרובה, על-גבי יחידת ה- RCX. אלה מהווים, למעשה, את הפקודות להנעת הרובוט.
פרטים נוספים וכן הורדת הפקד נמצאים באתר הבא:
Phantom - The Spirit.ocx Replacement
להלן חלק מהפקודות לשימוש בפקד ה-Phantom.

OCX Overview
Communication control commands:
Bool InitComm()
Bool CloseComm()
Variant GetShortTermRetransStatistics( )
Variant GetLongTermRetransmitStatistics( )
Bool SetRetransmitRetries (immidiateRetries,
downloadRetries)
Bool IgnDLerrUntilGoodAnswer()
Firmware control commands:
BSTR UnlockPBrick( )
BSTR UnlockFirmware (UnlockString )
Bool DownloadFirmware) FileName )
Diagnostics commands:
Bool PBAliveOrNot()
Bool TowerAndCableConnected()
Bool TowerAlive()
PBrick system commands:
Bool SelectDisplay (Source, Number )
Bool SetWatch) Hours, Min )
Bool PBPowerDownTime ) Time)
Bool PBTurnOff()
Bool PBTxPower) Number )
Bool PlayTone (Frequency, Time)
Bool PlaySystemSound (Number)
Bool ClearTimer (Number )
Bool SendPBMessage) Source, Number )
Bool ClearPBMessage( )
PBrick output control commands:
Bool On (MotorList )
Bool Off ) MotorList )
Bool Float) MotorList )
Bool SetFwd (MotorList )
Bool SetRwd) MotorList )
Bool AlterDir) MotorList )
Bool SetPower) MotorList, Source, Number ) 61
Bool Wait (Source, Number)
Bool Drive) Number0, Number1 )
Bool OnWait) MotorList, Number, Time )
Bool OnWaitDifferent) MotorList,
Number0, Number1, Number2, Time )
Bool ClearTachoCounter (MotorList(
PBrick input control commands:
Bool SetSensorType (Number, Type )
Bool SetSensorMode) Number, Mode, Slope)
Bool ClearSensorValue) Number )
PBrick program control commands:
Bool SelectPrgm (Number )
Bool DeleteTask (Number )
Bool DeleteAllTasks( )
Bool DeleteSub (Number )
Bool DeleteAllSubs( )
PBrick program execution commands:
Bool StartTask) Number )
Bool StopTask (Number )
Bool StopAllTasks( )
Bool GoSub ) Number )
PBrick flow control commands:
Bool Loop (Source, Number )
Bool EndLoop()
Bool While (Src1, No1, RelOp, Src2, No2)
Bool EndWhile()
Bool If (Src1, No1, RelOp, Src2, No2)
Bool Else()
Bool EndIf()
Bool BeginOfTask) Number )
Short EndOfTask( )
Short EndOfTaskNoDownload( )
Bool BeginOfSub (Number )
Short EndOfSub( )
Short EndOfSubNoDownload( )
PBrick arithmetic/logical commands:
Bool SetVar (VarNo, Source, Number)
Bool SumVar) VarNo, Source, Number )
Bool SubVar (VarNr, Source, Number )
Bool DivVar (VarNr, Source, Number )
Bool MulVar) VarNr, Source, Number )
Bool SgnVar (VarNr, Source, Number )
Bool AbsVar) VarNr, Source, Number )
Bool AndVar) VarNr, Source, Number )
Bool OrVar) VarNr, Source, Number )
PBrick query commands:
Bool SetEvent (Source, Number, Time )
Bool ClearEvent (Source, Number)
Short Poll) Source, Number )
Short PBBattery()
Variant MemMap( )
PBrick data acquisition commands (RCX only):
Bool SetDatalog (Size )
Bool DatalogNext) Source, Number )
Variant UploadDatalog (From, Size )
ActiveX control commands:
Bool SetThreadPriority) threadNo, threadClass,
ThreadPriority)
Void GetThreadPriority) threadNo, threadClass,
ThreadPriority)
ActiveX event dispatch interface:
VariableChange) Number, Value )
DownloadDone (ErrorCode, TaskNo )
DownloadStatus) timeInMS,
sizeInBytes, taskNo )
AsyncronBrickError) Number,
Description )

מצלמה ביתית, Logitech QuickPro pro 4000

מצלמה ביתית מבית Logitech, בעלת יכולות רבות, שחלקן אינן נצרכות לפרויקט זה, כגון: Zoom, Pan ועוד.
· רזולוציה 640480 x
· 1.3 מיליון מגה פיקסל
· חיישן CCD מתקדם
· חבור USB


איור 10.4 מצלמת Logitech QuickCam pro 4000

Bricx Command Center 3.3
זוהי תכנת Editor הידועה בשם IDE, לטובת הורדה ותכנות קוד לבקר RCX.
על-מנת להוריד קוד ל-Firmware של הרובוט, ישנם מספר פקודות בסיסיות, המגיעות עם רכישת החומרה. כיוון שבפרויקט זה, ישנו שימוש מאסיבי בבקר וכן, ישנה חשיבות רבה ליעילות הקוד הרץ בבקר, נדרשתי לחפש סביבת עבודה, המאפשרת קידוד מתוחכם יותר, מאשר זה הבסיסי של חברת Lego.
לאחר בירור, הופניתי לתכנה זה המאפשר לכתוב בשפת NQC (Not Quit C) קוד כזה או אחר על-פי רצון המתכנת.
באתר הבא, ניתן להוריד את סביבת העבודה וכן תיעוד מלא של שפת התכנות NQC. כמו כן, ניתן להוריד את הקוד הפתוח של סביבה זו לטובת שיפורים פרטיים, במידה וישנם כאלו.
http://bricxcc.sourceforge.net/

MATLAB
MATLAB הינה התוכנה העיקרית במימוש פרויקט זה. כפי שציינתי, ישנם מספר תוכנות נוספות, אך כולם נקראות מתוך סביבת העבודה הראשית – MATLAB.
הבחירה בתוכנה זו, מתוארת בפרטים בחלק "חקר ישימות", לכן לא ארחיב על כך בשנית.
תוכנה זה מכילה ספריית פונקציות רבות בתחום עיבוד תמונה, למרות שבמימוש פרויקט זה, לא היו כמעט פונקציות ,Build in בהם הייתי יכול להשתמש.
רוב האלגוריתם מבוסס על תחום הסטטיסטיקה ולכן, היה עלי לממש את פונקציות האלגוריתם בקוד אישי.
כהשלכה ישירה משימוש בתוכנת MATLAB, כל מי שירצה להשתמש בקוד הפרויקט, יצטרך לרכוש את התוכנה (MATLAB) כיוון שהקוד המיוצר אינו קוד executable.
בחלק "פיתוחים עתידיים", ארחיב לגבי אפשרות ליצירת קוד exe ובכך לאפשר את ריצת קוד הפרויקט, גם על פלטפורמת stand alone ללא MATLAB.
חשוב לציין בנקודה זו, כי מלבד התוכנה הבסיסית MATLAB, יש צורך לרכשו שני כלים נוספים, המכילים ספריות ייעודיות בתחום עיבוד אות ועיבוד תמונה. הכלים הינם: Image Processing Toolbox, ו-Image Acquisition Toolbox. על-מנת לייצר קוד exe, יש לרכוש כלי נוסף בשם MATLAB Compiler.


0 Comments:

Post a Comment

<< Home