הסבר בעברית על PID

פורום הדן בנושא תחרות הרובונר

המנהלים: אסף פוניס, גיא יונה

הסבר בעברית על PID

הודעהעל ידי אורח » ו' מרץ 28, 2003 11:27 am

קראתי את ה PID Tutorial בכתובת:
http://www.engin.umich.edu/group/ctm/PID/PID.html

האנגלית שלי די סביר אבל שילוב של אנגלית ונושא שהוא במילא קשה להבנה זה כבר קצת יותר מידי בשבילי :oops:

האםתוגלו לתת לי לינק להסבר על PID בשפת הקודש ?

תודה
אורח
 

הודעהעל ידי השחר העולה » ו' מרץ 28, 2003 2:11 pm

אין בעברית עד כמה שאני יודע.
הסבר הכי פשוט:
בגדול PID לוקח כל זמן קבוע את המספר אנקודרים שמנוע עושה, מוריד ממנו את הכמות הרצוייה של אנקודרים ליחידת זמן שאתה רוצה שהמנוע יעשה, מכפיל או מחלק בקבוע ומוסיף את זה ישירות למתח מנוע.
-במפי
www.robotica.co.il/movies/movies.php
האמת המפתיעה היא שלו היינו מאפשרים לחתולים להתקדם לעמדות כוח בפוליטיקה העולמית הרי שתופעות כמו מלחמות וטרור גלובלי היו מצטמצמות לאלתר. לעומת זאת, העצרת הראשית של האו"ם היתה מסריחה.
סמל אישי של המשתמש
השחר העולה
כותב הטור
 
הודעות: 1739
הצטרף: ג' אוקטובר 08, 2002 11:27 pm
מיקום: אוניברסיטת ת

הודעהעל ידי אינגר » ו' מרץ 28, 2003 2:58 pm

בכיף - תוריד את עבודת הגמר שלנו מ:
http://www.robotica.co.il/Kreplach_Work.pdf

יש שם פרק על PID עם ציורים (ככה שגם אם אתה לא יודע לקרוא בכלל תבין קצת :)).

תהנה.
!Hiroshima - 45, Chernobyl - 86, Windows - 95

העבודה על קרעפלך:
http://www.iarc.org/~4x4pf/Kreplach_Work.pdf
סמל אישי של המשתמש
אינגר
משתמש ותיק
משתמש ותיק
 
הודעות: 199
הצטרף: ו' אוקטובר 11, 2002 8:32 pm
מיקום: רמת גן

...

הודעהעל ידי stac » ו' מרץ 28, 2003 4:51 pm

כמובן שאפשר גם לבצע תיקון לפי מרחק מהקיר.
-- שחר.
סמל אישי של המשתמש
stac
חבר פורום
חבר פורום
 
הודעות: 73
הצטרף: ו' אוקטובר 18, 2002 9:26 pm
מיקום: שרון

הודעהעל ידי השחר העולה » ו' מרץ 28, 2003 4:56 pm

ררררר לא בדיוק סטאק....
PID למנוע עושים בלי קשר לנסיעה לאורך קיר.
PID כזה יוצר מערכת בחוג סגור , שדואגת שהמהירות שאתה קובע לו לפי הסטייה מהקיר - זו תהיה המהירות האמיתית . בתיקון רגיל לפי הקיר אתה נותן מתח למנוע - ולא בודק שהמנוע באמת נוסע במהירות האמתית, אלא מניח שזה ככה.
עם PID אתה בודק את מהירות המנוע - כלומר, מודד כמה אנקודרים נספרו בזמן נתון, וזו המהירות המצויה. זה אומר שגם עם שיפוע לדוגמא, המהירות האמיתית של המנוע תהיה כאילו זה היה מישור ולא היה שום שיפוע ולכן לא תהיה גם סטיה שתווצר מהשיפוע.
-במפי
www.robotica.co.il/movies/movies.php
האמת המפתיעה היא שלו היינו מאפשרים לחתולים להתקדם לעמדות כוח בפוליטיקה העולמית הרי שתופעות כמו מלחמות וטרור גלובלי היו מצטמצמות לאלתר. לעומת זאת, העצרת הראשית של האו"ם היתה מסריחה.
סמל אישי של המשתמש
השחר העולה
כותב הטור
 
הודעות: 1739
הצטרף: ג' אוקטובר 08, 2002 11:27 pm
מיקום: אוניברסיטת ת

הודעהעל ידי אורח » ו' מרץ 28, 2003 7:41 pm

ואם אני לא משתמש באנקודרים?
אם אני עוקב אחרי קיר ע"י חיישני מרחק בלבד (שני חיישנים מקבילים זה לזה ומאונכים לקיר)
האם ניתן ליישם את שיטת ה PID גם עליהם ?
אורח
 

הודעהעל ידי אורח » ו' מרץ 28, 2003 7:54 pm

לאחר שקראתי את ההסבר על PID בעבודה של אינגר (קרפלעך)
אני חושב שאני צריך רק PD ללא תיקוני סכום.
אז אני רוצה "לעדכן" את השאלה הקודמת שלי:
האם ניתן ליישם PD ע"י חיישני מרחק בלבד?
אורח
 

הודעהעל ידי השחר העולה » ו' מרץ 28, 2003 8:30 pm

לא נכון. אינטגרל בא להעיף שגיאת STEADY STATE.
בלי אינטגרל - מה שיקרה הוא שהרובוט יהיה בזווית של 1, 2 מהקיר, לא מספיק בשביל חיישן מרחק שיראה ואז הוא פשוט יכול להמשיך קדימה - ולהתקע במסדרון ארוך בקיר. אני יודע, בדקתי.
שחר
www.robotica.co.il/movies/movies.php
האמת המפתיעה היא שלו היינו מאפשרים לחתולים להתקדם לעמדות כוח בפוליטיקה העולמית הרי שתופעות כמו מלחמות וטרור גלובלי היו מצטמצמות לאלתר. לעומת זאת, העצרת הראשית של האו"ם היתה מסריחה.
סמל אישי של המשתמש
השחר העולה
כותב הטור
 
הודעות: 1739
הצטרף: ג' אוקטובר 08, 2002 11:27 pm
מיקום: אוניברסיטת ת

הודעהעל ידי אורח » ו' מרץ 28, 2003 8:40 pm

אם ככה אז אולי אני כן צריך PID
לא יודע...אני אנסה גם PID וגם רק PD ונראה מה יהיה יותר טוב
אבל בכל מקרה:
איך אני מיישם את זה בעזרת חיישני מרחק בלבד(בלי אנקודרים), האם זה אפשרי בכלל?
אורח
 

הודעהעל ידי shtroodel » ו' מרץ 28, 2003 8:43 pm

אבל זה ייפתר ע"י המירכוז בתוך המסדרון לפי חיישני מרחק...

אם אני זוכר נכון גם לסנאפי לא הייתה בקרה על האינטגרל.
Ein Volk, Ein Reich, Ein Frrrrr!
סמל אישי של המשתמש
shtroodel
משתמש בכיר
משתמש בכיר
 
הודעות: 787
הצטרף: ו' אוקטובר 18, 2002 6:22 pm
מיקום: הרצליה

הודעהעל ידי אורח » ו' מרץ 28, 2003 8:54 pm

קודם כל תודה רבה לכל מי שמגיב פה
דבר שני: עזבו את הקטע של האם אני צריך אינטגרל או לא ותסבירו לי איך בכלל מיישמים את השיטה הזו אם חיישני מרחק
אורח
 

הודעהעל ידי השחר העולה » ש' מרץ 29, 2003 12:25 pm

ותפסיקו כבר להחליט אם זה טוב או לא טוב לגבי שיטה שאת המשמעות האמיתית שלה המרכיבים שלה אתם לא מבינים. אתם אולי מבינים מה היא עושה, אבל לא ממש לגבי המרכיבים.

PID עם חיישנים
P - קח גודל של שגיאה ולפי גודל השגיאה אתה מחלק בקבוע ומוריד מהמנוע הרצוי.
I - תסכום את הזוויות. אם זה נהיה גדול מידי וחיובי - אתה סוטה מידי לצד ימין (לדוגמא). אם זה גדול מידי ושלילי אתה סוטה מידי לשמאל.
D - תחסר זווית עכשיוית מהקודמת. לפי הגודל של זה אתה יודע אם אתה מגיע למצב רצוי מהר מידי (ואז אתה גם לא תצליח להתיצב על המצב הרצוי) או לאט מידי (אתה פשוט לא תגיע למצב רצוי).

בכל מקרה, כל גודל אתה מחלק בפקטור הרצוי, ומוסיף או מחסר למנוע הרצוי.
בהצלחה
-במפי
www.robotica.co.il/movies/movies.php
האמת המפתיעה היא שלו היינו מאפשרים לחתולים להתקדם לעמדות כוח בפוליטיקה העולמית הרי שתופעות כמו מלחמות וטרור גלובלי היו מצטמצמות לאלתר. לעומת זאת, העצרת הראשית של האו"ם היתה מסריחה.
סמל אישי של המשתמש
השחר העולה
כותב הטור
 
הודעות: 1739
הצטרף: ג' אוקטובר 08, 2002 11:27 pm
מיקום: אוניברסיטת ת

.....

הודעהעל ידי stac » ש' מרץ 29, 2003 1:19 pm

can i try?

* בשביל לצפות נורמלי בקוד,
IE -> VIEW - >ENCODING -> LEFT TO RIGHT

אז אנחנו נעצרנו על בקרת PD? אחלה, ברוב המקרים זה בהחלט מספיק.
-------------------------------------------------------

מימוש בקרת PD, על פי תיקוני הרובוט לפי הקיר, אני מדבר פה על רובוט עם הנעה דיפרנציאלית(משמע בעל שני גלגלים ממונעים).
כפי שידוע על מנת לכוון רובוט לכיוון מסוים צריך לשנות לו יחס מהירויות בשני הגלגלים, לכן ניקח בקרת מהירות בצורת אחוזים של הספק המנוע, 100-מלא, 0-דום, ולכן התיקונים התיחסו לערכים אלו.
קוד: בחר הכל
motor_speed(int left_motor, int right_motor)


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

בקרה פרופורציונלית. החלק הראשון של משוואת התיקון שלנו, נגדיר ערך שאנו מעוניינים לשמור מן הקיר, נפחית בערך המצוי, זאת השגיאה שאנחנו צריך לתקן ולרסן לאפס.
קוד: בחר הכל
p_error = dist_available - dist_desirable


בקרת נגזרת. עכשיו כשיש לנו שגיאה, לא נרצה לבצע תיקון דרסטי, לכן ניקח את הערך הקודם שהיינו במרחק מהקיר למרחק כעת כעבור t מסוים. לבקרה הזאת אפשר גם ליישם שינוי d_gain וp_gain, כי הרי d_error, אומר לכם עד כמה תיקנתם את השגיאה שלכם, ולכן תוכלו לשנות את הערכים על מנת להאיץ את התיקון או להאיט אותו.
קוד: בחר הכל
d_error = p_error - p_error_old


בקרה אינטגרצית. [לא רוצים?]

נסכם את השגיאות לפלט עבור המנועים. שינוי ערכי מהירויות תלוי בצד של הקיר שלפיו אנו רוצים לעקוב, נגיד עבור עקיבה לפי קיר שמאלי, כך שתיקונים יתבצעו גם לכיוון הזה.
קוד: בחר הכל
int pd_control()
{
   int p_error,
   p_error_old,
   d_error,
   d_error_old,
   dist_available,
   dist_desirable,
   right_speed,
   left_speed;

   /*
      the values of gains set dependenting your robot speed,
      desire distance from a wall and some physics.
      try to play with the values the get the best combination
      for your robot.
   */
   int p_gain = 6;
   int d_gain = 3;
   /*int i_gain = 6;*/

   /* initial motor speed */
   int offset_speed = 60;

   do {
      dist_available   = get(IR_LEFT);
      p_error      = dist_available - dist_desirable;
      d_error      = p_error - p_error_old;
      if (d_error<d_error_old)
      {
         /* accelerate correction rate.*/
         p_gain++; d_gain++;
      } else {
         p_gain--; d_gain--;
      }
      p_error_old   = p_error;
      d_error_old   = d_error;
      right_speed   = offset_speed + (p_gain*p_error) - (d_gain*d_error);
      left_speed   = offset_speed - (p_gain*p_error) + (d_gain*d_error);
      if (right_speed > 100) right_speed=100;
      if (left_speed > 100) left_speed=100;
      motor_speed(left_speed, right_speed);
   } while(dist_available<75); /* until we see a wall */

   return 1;
}


* דברים אחרונים, הקוד לא ממש יעיל, אבל רק נועד להמחיש את הבקרה
-- שחר.
סמל אישי של המשתמש
stac
חבר פורום
חבר פורום
 
הודעות: 73
הצטרף: ו' אוקטובר 18, 2002 9:26 pm
מיקום: שרון

הודעהעל ידי shtroodel » ש' מרץ 29, 2003 4:40 pm

טוב אני קצת סוטה מנושא הפי איי די לצורך מיקום חיישנים.

עד כמה שאני יודע ומבין, אין שום טעם במיקום חיישנים שהוא לא מקביל או ניצב לצירי הרובוט. אלא אם כן אתה רוצה לדעת על פנייה עוד לפני שהגעת אליה או שאתה רוצה קריאת מרחק שהיא לא פרופורציונית לסטייה... ככה שההגיון אומר למקם כל צמד חיישנים שפונים לאותו כיוון במקביל...
Ein Volk, Ein Reich, Ein Frrrrr!
סמל אישי של המשתמש
shtroodel
משתמש בכיר
משתמש בכיר
 
הודעות: 787
הצטרף: ו' אוקטובר 18, 2002 6:22 pm
מיקום: הרצליה

..

הודעהעל ידי stac » ש' מרץ 29, 2003 5:09 pm

לא יודע,
אבל אצלנו ברובוט היו גם חיישנים בצדדים וגם מקדימה בפינות,
הרצתי בקרה גם לפי חיישנים בצדדים וגם מקדימה בצדדים, ובזמן הרצת הרובוט כשהוא משתמש בחיישנים מקדימה, היתה הרבה יותר טוב.
-- שחר.
סמל אישי של המשתמש
stac
חבר פורום
חבר פורום
 
הודעות: 73
הצטרף: ו' אוקטובר 18, 2002 9:26 pm
מיקום: שרון

הבא

חזור אל רובונר

מי מחובר

משתמשים הגולשים בפורום זה: אין משתמשים רשומים ו 4 אורחים