תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
github.com/AIWintermuteAI/ros-moveit-arm.git
בחלק הקודם של המאמר יצרנו קבצי URDF ו- XACRO לזרוע הרובוטית שלנו והפעלנו את RVIZ לשלוט בזרוע הרובוטית שלנו בסביבה מדומה.
הפעם נעשה זאת עם הזרוע הרובוטית האמיתית! נוסיף את האוחז, נכתוב בקר רובוט ו (אופציונלי) ייצור פותר קינמטיקה הפוכה של IKfast.
ג'רונימו!
שלב 1: הוספת הגריפר
הוספת גריפר הייתה קצת מבלבלת בהתחלה, אז דילגתי על החלק הזה במאמר הקודם. בסופו של דבר התברר שזה לא כל כך קשה.
יהיה עליך לשנות את קובץ ה- URDF שלך כדי להוסיף קישורי אחיזה ומפרקים.
לשלב זה מצורף קובץ ה- URDF שהשתנה עבור הרובוט שלי. בעיקרון הוא עוקב אחר אותו היגיון כמו חלק הזרוע, רק הוספתי שלושה קישורים חדשים (claw_base, claw_r ו- claw_l) ושלושה מפרקים חדשים (joint 5 קבוע, ו- joint 6, joint7 הם מפרקים סובבים).
לאחר ששינית את קובץ ה- URDF שלך, עליך גם לעדכן את החבילה שנוצרה על ידי MoveIt ואת קובץ ה- xacro באמצעות עוזר ההתקנה של MoveIt.
הפעל את עוזר ההתקנה באמצעות הפקודה הבאה
roslaunch moveit_setup_assistant setup_assistant.launch
לחץ על ערוך את תצורת MoveIt הקיימת ובחר את התיקיה עם חבילת MoveIt שלך.
הוסף אחיזת קבוצות תכנון חדשה (עם קישורים ומפרקים לתופס) וגם משפיע קצה. ההגדרות שלי נמצאות בצילומי המסך למטה. שים לב שאתה לא בוחר פותר קינמטיקה עבור האוחז, זה לא הכרחי. צור את החבילה והחלף את הקבצים.
לָרוּץ
יצירת קטקין
פקודה בסביבת העבודה שלך catkin.
בסדר, עכשיו יש לנו זרוע עם אחיזה!
שלב 2: בניית הזרוע
כפי שציינתי לפני שדגם 3D הזרוע מיוצר על ידי Juergenlessner, תודה על עבודה מדהימה. ניתן למצוא את הוראות ההרכבה המפורטות אם תעקוב אחר הקישור.
הייתי חייב לשנות את מערכת הבקרה. אני משתמש ב- Arduino Uno עם מגן חיישן לשליטה בסרווואים. מגן חיישן מסייע רבות בפשטת החיווט וגם מקל לספק את הכוח החיצוני לסרווואים. אני משתמש במתאם מתח 12V 6A המחובר דרך מודול ההרמה (6V) למגן חיישן.
הערה על סרוו. אני משתמש בסרוואות MG 996 HR שנקנו מטאובאו, אבל האיכות ממש גרועה. אין ספק שזה נקישה סינית זולה. זה למפרק המרפק לא סיפק מספיק מומנט ואפילו התחיל לגזום פעם אחת תחת עומס כבד. הייתי צריך להחליף סרוו מפרק מרפק ב- MG 946 HR מיצרן באיכות טובה יותר.
סיפור ארוך קצר - קנה סרווס איכותי. אם יוצא עשן קסם מהשרווסים שלך, השתמש בסרווס טוב יותר. 6V הוא מתח בטוח מאוד, אל תגדיל אותו. הוא לא יגדיל את המומנט, אך עלול לפגוע בסרוווס.
חיווט עבור סרווס כדלקמן:
בסיס 2
כתף 2 4 כתף 1 3
מרפק 6
תפס 8
פרק כף היד 11
אל תהסס לשנות אותו כל עוד אתה זוכר גם לשנות את מערכון הארדואינו.
לאחר שסיימת עם חומרה, בואו נסתכל על התמונה הגדולה יותר!
שלב 3: ממשק MoveIt RobotCommander
אז מה עכשיו? מדוע בכל זאת צריך MoveIt ו- ROS? אתה לא יכול פשוט לשלוט בזרוע דרך קוד Arduino ישירות?
כן אתה יכול.
אוקיי, עכשיו מה דעתך להשתמש בקוד GUI או Python/C ++ כדי לספק תנוחת רובוט שאליה אתה יכול ללכת? האם ארדואינו יכול לעשות זאת?
בערך. לשם כך תצטרך לכתוב פותר קינמטיקה הפוך אשר ייקח תנוחת רובוט (קואורדינטות תרגום וסיבוב בחלל תלת -ממדי) וימיר אותו להודעות זווית משותפת עבור סרוו.
למרות שאתה יכול לעשות את זה בעצמך, זו עבודה לעזאזל. אז, MoveIt ו- ROS מספקים ממשק נחמד לפותר IK (קינמטיקה הפוכה) לביצוע כל ההרמה הטריגונומטרית הכבדה עבורך.
תשובה קצרה: כן, אתה יכול לעשות זרוע רובוטית פשוטה שתבצע סקיצה ארדואינית מקודדת כדי לעבור מתנוחה אחת לאחרת. אבל אם אתה רוצה להפוך את הרובוט שלך לאינטליגנטי יותר ולהוסיף יכולות ראיית מחשב, MoveIt ו- ROS היא הדרך ללכת.
הכנתי תרשים פשוט מאוד המסביר כיצד פועלת מסגרת MoveIt. במקרה שלנו זה יהיה אפילו יותר פשוט, מכיוון שאין לנו משוב מהשרווסים שלנו ונושא את הנושא /joint_states כדי לספק לבקר הרובוט את הזוויות של סרוווס. חסר לנו רק מרכיב אחד שהוא בקר הרובוט.
למה אנחנו מחכים? בואו נכתוב כמה בקרי רובוט, כך שהרובוט שלנו יהיה … אתם יודעים, יותר ניתנים לשליטה.
שלב 4: קוד Arduino לבקר רובוט
במקרה שלנו Arduino Uno הפעלת צומת ROS עם rosserial יהיה בקר הרובוט. קוד הסקיצה של Arduino מצורף לשלב זה וזמין גם ב- GitHub.
צומת ROS הפועל ב- Arduino Uno בעצם מנוי לנושא /JointState שפורסם במחשב שמריץ MoveIt ולאחר מכן ממיר את זוויות המפרק מהמערך מרדיאנים למעלות ומעביר אותן ל servos באמצעות ספריית Servo.h סטנדרטית.
הפתרון הזה קצת פרוץ ולא איך עושים אותו עם רובוטים תעשייתיים. באופן אידיאלי אתה אמור לפרסם את מסלול התנועה בנושא /FollowJointState ולאחר מכן לקבל את המשוב על /JointState נושא. אבל בזרוענו סרבי התחביב לא יכולים לספק את המשוב, אז פשוט נרשם ישירות לנושא /JointState, שפורסם על ידי צומת FakeRobotController. ביסודו של דבר, נניח שכל הזוויות שעברנו לסרוואות מבוצעות באופן אידיאלי.
למידע נוסף על אופן הפעולה של הרוזריאל ניתן לעיין בהדרכות הבאות
wiki.ros.org/rosserial_arduino/ הדרכות
לאחר שתעלה את הסקיצה ל- Arduino Uno, יהיה עליך לחבר אותה עם הכבל הטורי למחשב שמריץ את התקנת ה- ROS שלך.
כדי להעלות את המערכת כולה בצע את הפקודות הבאות
roslaunch my_arm_xacro demo.launch rviz_tutorial: = נכון
sudo chmod -R 777 /dev /ttyUSB0
rosrun rosserial_python serial_node.py _port: =/dev/ttyUSB0 _baud: = 115200
עכשיו אתה יכול להשתמש בסמנים אינטראקטיביים ב- RVIZ כדי להזיז את זרוע הרובוט לתנוחה ולאחר מכן ללחוץ על Plan and Execute כדי שהיא אכן תעבור למיקום.
קֶסֶם!
כעת אנו מוכנים לכתוב קוד פייתון לבדיקת הרמפה שלנו. ובכן, כמעט…
שלב 5: (אופציונלי) יצירת תוסף IKfast
כברירת מחדל MoveIt מציע להשתמש בפתרון קינמטיקה של KDL, שלא ממש עובד עם פחות מ -6 זרועות DOF. אם אתה עוקב מקרוב אחר הדרכה זו, תבחין כי דגם הזרוע ב- RVIZ אינו יכול ללכת לכמה תנוחות שאמורות להיות נתמכות על ידי תצורת הזרוע.
הפתרון המומלץ הוא יצירת פותר קינמטיקה מותאם אישית באמצעות OpenRave. זה לא כל כך קשה, אבל תצטרך לבנות את זה ותלותיו מהמקור או להשתמש במיכל העגינה, לפי מה שאתה מעדיף.
ההליך מתועד היטב במדריך זה. הוא אושר לעבוד על VM שמריץ אובונטו 16.04 ו- ROS Kinetic.
השתמשתי בפקודה הבאה ליצירת הפותר
openrave.py -inversekinematics של מסדי נתונים -רובוט = arm.xml --iktype = translation3d --iktests = 1000
ואז רץ
rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. תרגום 3D.0_1_2_f3.cpp
ליצירת תוסף MoveIt IKfast.
ההליך כולו דורש מעט זמן, אך לא קשה במיוחד אם אתה עוקב מקרוב אחר ההדרכה. אם יש לך שאלות בנוגע לחלק זה, אנא צור איתי קשר בתגובות או PM.
שלב 6: מבחן הרמפה
כעת אנו מוכנים לנסות את בדיקת הרמפה, אותה נבצע באמצעות ממשק ה- API של ROS MoveIt Python.
קוד Python מצורף לשלב זה וזמין גם במאגר github. אם אין לך רמפה או שאתה רוצה לנסות בדיקה אחרת יהיה עליך לשנות את תנוחות הרובוט בקוד. לביצוע הראשון
הד rostopic/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback
במסוף כאשר כבר מריצים RVIZ ו- MoveIt. לאחר מכן העבר רובוט עם סמנים אינטראקטיביים למיקום הרצוי. ערכי המיקום וההכוונה יוצגו במסוף. פשוט העתק אותם לקוד Python.
לביצוע ריצת מבחן הרמפה
rosrun my_arm_xacro pick/pick_2.py
כאשר RVIZ וצומת rosserial כבר פועלים.
המשך לעקוב אחר החלק השלישי של המאמר, שבו אשתמש במצלמת סטריאו לזיהוי אובייקטים וביצוע צינור בחירה והצבה לאובייקטים פשוטים!