כיצד להכין סביבת ROS מותאמת אישית על לוח NVIDIA Jetson
בשל יכולותיה, לוח NVIDIA Jetson הוא פלטפורמה אידיאלית להתקנת סביבת ROS (מערכת הפעלה לרובוטים). עם זאת, התקנת ROS על הלוח עלולה להציב אתגרים, כגון תלויות מערכת חסרות, בניית חבילות איטית והצורך באופטימיזציה של חומרה. במאמר זה אעבור אתכם דרך מדריך להכנת סביבת ROS מותאמת אישית על לוח NVIDIA Jetson, תוך התייחסות לבעיות אלו ומתן הוראות התקנה שלב אחר שלב.
מדוע NVIDIA Jetson עבור ROS?
לוח Jetson הוא סדרה של פלטפורמות מחשוב משובצות שפותחו על ידי NVIDIA. לוחות אלה מיועדים במיוחד להרצת יישומי AI ולמידה עמוקה בסביבות מוגבלות במשאבים. לוחות Jetson משלבים GPUs עוצמתיים, CPUs מרובי ליבות ומאיצי AI ייעודיים כדי לספק יכולות מחשוב בעלות ביצועים גבוהים בצורה קומפקטית. הם מוכרים ביכולתם לעבד ולנתח ביעילות נתוני חיישנים, לבצע משימות ראייה ממוחשבת ולהריץ אלגוריתמי AI מורכבים. לפיכך, הם משמשים בדרך כלל ברובוטיקה, כלי רכב אוטונומיים, רחפנים, אוטומציה תעשייתית ויישומי מחשוב קצה אחרים.
מהם האתגרים העיקריים בהגדרת סביבת ROS?
מפתחים עשויים להיתקל במספר בעיות נפוצות בעת הכנת ROS על לוחות Jetson, כגון הבאות:
- ל-ROS יש מספר תלויות מערכת שצריך להתקין לפני שתוכלו להשתמש בו. אם אתם נתקלים בשגיאות קומפילציה בעת בניית חבילות ROS, סביר להניח שחסרה לכם תלות מערכת, או שיש אי-התאמה בגרסאות. הדרך הטובה ביותר לזהות התנגשות חבילות ושגיאות בנייה היא להשתמש בקבצי docker וליצור סביבה מבודדת לפיתוח ולתחזוקה קלה.
- בניית חבילות ישירות על לוח ה-Jetson היא תהליך איטי למדי, וברוב המקרים היא דורשת חיבור לאינטרנט להורדת חבילות תלויות. ניתן לפתור זאת על ידי יצירת אימג'ים על מחשב מארח חזק בהרבה וצריבתם ישירות על כרטיס SD אשר ישמש לאחר מכן על לוח ה-Jetson.
- כדי לשפר את ביצועי החומרה בלוח Jetson, עלינו לייעל את יישומי התוכנה כך שיפעלו ביעילות רבה יותר. הדבר עשוי לכלול כיוונון הקוד, שימוש בחבילות יעילות יותר, או הפחתת העומס על הלוח על ידי הימנעות מהתקנה של פונקציונליות מיותרת, כגון ממשק משתמש גרפי של Linux.
התקנת סביבת ROS על לוח Jetson בשלושה שלבים
במאמר זה אתמקד בתצורה נפוצה למדי: מהדורת ROS1 Melodic (Ubuntu 18.04) בתוך לוח NVIDIA Jetson Nano. נשתמש ב-Linux4Tegra, מערכת הפעלה ייעודית בסביבת ARM64 Jetson המכילה סקריפטים שנוכל לעשות בהם שימוש חוזר ליצירת קובצי IMG.
שלב 1. יצירת קבצי ROS docker
ראשית, עלינו להכין סביבת build של ARM64 במכונת ה-host שלנו. סביר להניח שתשתמשו בארכיטקטורת AMD64 סטנדרטית (לדוגמה, ubuntu 22.04); לשם כך, עליכם להתקין את כלי QEMU. הרמה הראשית שבה נאחסן את ההגדרה המותאמת שלנו תהיה קובץ docker (נקרא לו Dockerfile.eg), שבו נגדיר את גרסת מערכת L4T, ונתקין את חבילות ה-ROS הנדרשות, לדוגמה:
# התקנת חבילות בסיס
RUN apt-get update \
&& apt-get install -y \
lsb-core \
cmake \
git \
ninja-build \
curl
RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
RUN curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add -
# התקנת חבילות ROS - יש להוסיף את החבילות הבאות בסוף במידת הצורך
RUN apt-get update \
&& apt-get install -y \
ros-melodic-ros-base \
ros-melodic-navigation \
ros-melodic-robot-localization \
ros-melodic-tf2-ros \
ros-melodic-rviz \
python-catkin-pkg \
python-catkin-tools \
python-rosdep \
python-rosinstall \
python-rosinstall-generator
אנו יכולים להזריק ולבנות מחדש את המאגרים שלנו כדי לקבל סביבה תפעולית מלאה מסוג plug-and-play. בקוד שלהלן, השורה התשיעית שימושית מאוד כדי להימנע משגיאות הנבנות על תלויות חבילות נדרשות ולהתקין אותן מראש לפני שמאקרו catkin_make מתחיל.
# Install and build your git repositories RUN mkdir -p /catkin_ws/src \ && cd /catkin_ws/src \ && git clone https://github.com/<myRepo>.git \ && git clone https://github.com/<myRepo1>.git \ && git clone https://github.com/<myRepo2>.git \ && cd /catkin_ws/ \ && . /opt/ros/melodic/setup.sh \ && rosdep install --from-paths src -y --ignore-src \ catkin_make_isolated --use-ninja --cmake-args -DCMAKE_BUILD_TYPE=Release
אנו יכולים להוסיף קבצי משאבים או ספריות לתמונת ה-docker במידת הצורך. בנוסף, אנו יכולים ליצור שירות מערכת משלנו, לדוגמה, roscoreinit.service להפעלת roscore בכל אתחול של מערכת L4T:
[Unit] Description=Init roscore After=remote-fs.target After=syslog.target [Service] ExecStart=/root/init_roscore.sh Restart=on-abort [Install] WantedBy=multi-user.target
סקריפט ייעודי init_roscore.sh:
#!/bin/bash source /catkin_ws/devel_isolated/setup.bash roscore
הוסיפו הפעלה של roscoreinit.service ו-init_roscore.sh בתוך dockerfile:
COPY roscoreinit.service /lib/systemd/system/roscoreinit.service COPY init_roscore.sh /root/init_roscore.shRUN systemctl enable roscoreinit
שלב 2. בניית אימג'
כדי לבנות docker ולייצא אותו לקובץ, אנו קוראים לפקודות שלהלן:
docker build --build-arg --network=host . -f Dockerfile.eg -t myImage docker export "$(docker create --name nano-rootfs --platform linux/arm64 myImage)" -o myImage.tar
לאחר מכן, עלינו לפרוס את מערכת הקבצים הבסיסית (Rootfs) מהשלב הקודם, ובאמצעות חבילת התמיכה של Linux4Tegra ניצור אימג' של Jetson Nano שניתן לצרוב ישירות על כרטיס ה-SD:
# BSP 32.7.2 פרטים נוספים ניתן למצוא כאן: https://developer.nvidia.com/embedded/linux-tegra-r3272
L4T_PACKAGE=https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t210/jetson-210_linux_r32.7.2_aarch64.tbz2
L4T_PACKAGE_BUILD_DIR=l4t_bsp
wget --no-check-certificate -qO- $L4TPackage | tar -jxpf - -C $L4T_PACKAGE_BUILD_DIR
ROOTFS_L4T_DIR=/tmp/l4t/rootfs
mkdir -p $ROOTFS_L4T_DIR
tar --same-owner -xf myImage.tar -C $ROOTFS_L4T_DIR
# כאן נוכל לשנות את ליבת Linux, שלב אופציונלי המתואר בסעיף הבא
# יצירת קובץ IMG
ROOTFS_DIR=$ROOTFS_L4T_DIR $L4T_PACKAGE_BUILD_DIR/Linux_for_Tegra/tools/jetson-disk-image-creator.sh \
-o myImage.img -b jetson-nano -r 300
קובץ הפלט myImage.img הוא התמונה הסופית שניתן לצרוב ישירות על כרטיס SD, לדוגמה, באמצעות כלי balenaEtcher.
שלב 3, אופציונלי. בנייה מחדש של ליבת Linux מקוד המקור
בנייה מחדש של הקרנל מהמקור מאפשרת לך לבחור רק את התכונות שאתה צריך. הדבר יכול להביא לביצועי מערכת רזים יותר, מהירים יותר ויציבים יותר. לעיתים אנו נדרשים לשנות באופן משמעותי את תצורת ליבת Linux כדי לתמוך במכשירים המבוקשים. לצורכי סנכרון חיישנים, נוכל לאפשר פונקציונליות שונות כגון Pulse per second (PPS) או Precision Time Protocol (PTP), כך שצמתי ROS יוכלו לפעול בסביבה יציבה. לאחר מכן עלינו למצוא גרסת GCC חוצת-מהדרים תואמת ומקורות קרנל. בתרחיש שלנו, אנו בודקים את עמוד NVIDIA שלהלן המתאר את גרסת L4T 32.7.2:
https://developer.nvidia.com/embedded/linux-tegra-r3272
לאחר בניית הקרנל החדש מחדש, יש להתקין device tree blobs בחבילת L4T הנבנית, כמוזכר בסעיף Build Image:
cp <build_from_sources_kernel>/arch/arm64/boot/Image $L4T_PACKAGE_BUILD_DIR/Linux_for_Tegra/kernel cp -r <build_from_sources_kernel>/arch/arm64/boot/dts/* $L4T_PACKAGE_BUILD_DIR/Linux_for_Tegra/kernel/dtb
אם ל-NVIDIA Jetson Nano שלך יש כרטיס מולטימדיה מובנה, עליך גם לסנכרן את הקרנל החדש עם eMMC כאשר ה-bootloader יתחיל בפעם הראשונה. בלוח Jetson Nano ללא eMMC, הקרנל יאותחל מכרטיס SD חיצוני או מאחסון USB שבו אימג' ה-L4T מותקן ישירות.
בסך הכל, בנייה מחדש של ליבת Linux מהמקור יכולה לספק גמישות ושליטה רבות יותר על המערכת, מה שהופך אותה למאמץ כדאי עבור מפתחים מתקדמים.
תקציר
פיתוח ופריסה של סביבת ROS על לוח NVIDIA Jetson יכולים לארוז בקלות את האפליקציה שלך ואת התלויות שלה לתמונת קונטיינר.
בעת בניית תמונת Jetson, Docker מספק סביבה סטנדרטית וניתנת לשחזור המבטיחה עקביות בין בניות שונות. הדבר חשוב במיוחד בעבודה עם מערכות משובצות כמו Jetson, שבהן תאימות חומרה ואופטימיזציה הן קריטיות. Docker גם מאפשר לשתף בקלות את תמונת ה-Jetson עם אחרים, ובכך מפחית את הזמן והמאמץ הנדרשים להגדרה ותצורה. הוא גם מקל על בניית צד של אינטגרציה רציפה.
לסיכום, השימוש ב-Docker ביצירת תמונת Jetson מציע סביבה סטנדרטית וניתנת לשחזור המבטיחה עקביות בין builds ומפשטת שיתוף ופעולה משותפת.
מחפשים מומחי רובוטיקה?
גלו כיצד אנו יכולים לתמוך במוצר הבא שלכם – עיינו בשירותי רובוטיקה, ואל תהססו ליצור קשר בכל שאלה.
שאלות נפוצות
סביבת ROS מותאמת אישית מאפשרת לך להתאים תלויות, לייעל ביצועים ולהבטיח תאימות לחומרה ולתרחישי שימוש ספציפיים. הדבר חשוב במיוחד במכשירי Jetson, שבהם המשאבים והארכיטקטורה שונים מתצורות שולחן עבודה סטנדרטיות.
התקנה מותאמת אישית שימושית כאשר הפצות ROS ברירת המחדל אינן עונות על דרישות הפרויקט, למשל בעבודה עם ספריות ספציפיות, אינטגרציות חומרה או מגבלות ביצועים בפלטפורמות משובצות כמו Jetson.
אתגרים נפוצים כוללים ניהול תלויות, תאימות לארכיטקטורת ARM והבטחה שכל הרכיבים הנדרשים פועלים יחד כראוי. בניית סביבה מותאמת אישית מסייעת להתמודד עם בעיות אלה, אך דורשת תצורה קפדנית.
arrow_circle_rightצרו קשר
שנו את התעשייה שלכם עם פתרונות רובוטיקה. צרו קשר עם המומחה שלנו כדי לגלות עוד
arrow_circle_right מאמרים נוספים