Robotic Knowledge
379 subscribers
242 photos
62 videos
2 files
170 links
دانش و برنامه‌نویسی برای رباتیک
Download Telegram
#ربات_پایه_متحرک #ROS
توسعه TurtleBot4: نسل جدید سکوی آموزشی، توسعه‌ای و تحقیقاتی برای رباتیک.

این ربات پایه متحرک توسط Clearpath robotics بعنوان سازنده و Open Robotics که توسعه ROS را بر عهده دارد، با کمک شبیه‌ساز Gazebo توسعه یافته است.
از ویژگی‌های جدید این ربات به امکان شارژ خودکار آن، بهبود سنسورها و سخت‌افزار اشاره کرد. برای مثال این ربات نسبت به نسل قبل خود بار بیشتری می‌تواند حمل کند.
این ربات به انکودر چرخ، آرایه سنسورهای IR در بدنه، سنسور نوری سنجش تغییرات در کف (مانند ماوس) و IMU برای ناوبری مجهز است. همچنین یک LiDAR دو بعدی به همراه یک دوربین استریو در جلو این ربات را برای SLAM ایده‌آل می‌کند.
این ربات به یک کامپیوتر Raspberry Pi 4 مجهز است که بر روی آن سیستم عامل ربات ۲ (ROS 2) قرار گرفته است که برای رباتیک یک ایده‌آل قطعی به حساب می‌آید. امکان اضافه کردن سنسورهای دیگر هم با ارتباط USB ممکن است. تمامی داده‌های سنسوری با تاپیک‌های ROS 2 منتشر می‌شوند.
نسخه استاندارد آن ۱۷۵۰ دلار و نسخه سبک آن ۱۰۹۵ دلار قیمت دارد.
----------
@roboticknowledge
#ROS2 #ROS
یکی از سختی‌های کار در استفاده از نرم‌افزارهای متن‌باز compatible بودن آن‌ها با سیستم شماست.
برای مثال شما برای داشتن مزیت LTS یا Long Time Support سراغ ROS 2 Humble می‌روید، اما برای استفاده از الگوریتم Volumetric Mapper می‌بینید که با اینکه پکیج جدیدی است،‌ اما در ROS توسعه پیدا کرده است و براحتی نمی‌توانید از آن استفاده کنید.
به همین دلیل است که بسیاری از نرم‌افزارهای رباتیکی و اکوسیتم ROS همچنان بر روی ROS پایه و توزیع‌های قدیمی آن که روی اوبنتو 18 یا 20 قابل نصب هست، توسعه می‌یابد - متاسفانه. دلیل هم این است که زنجیره وار بر روی نسخه‌های قدیمی توسعه ادامه دارد و تا پایه‌ها منتقل نشوند، نمی‌توان براحتی روی توزیع‌های جدید چیزی توسعه داد.

به الگوریتم Volumetric Mapper اشاره شد که اینجا قابل یافتن است و برای مپینگ می‌تواند به شما نقشه آنلاین ‌Occupency Grid به همراه Euclidean Distance Transform بدهد:
https://github.com/JINXER000/GIE-mapping

—————
@roboticknowledge
👍3
#ROS

خلاصه که هر چیزی در جای خودش باید استفاده بشه، خصوصا ROS. 😁
----------
@roboticknowledge
😁3
#ROS
ارتباط بین چند کامپیوتر با ROS

فرض کنید در دو کامپیوتر یک نسخه از ROS را نصب دارید و قصد دارید یک ارتباط بصورت Master-Slave ایجاد کنید تا دیتای ROS از جمله Topic ها را بین دو سیستم منتشر کنید.

ابتدا باید در هر کامپیوتر یک IP تعریف کنید. برای این کار یک Connection جدید از نوع Ethernet تعریف کنید و در بخش IPV4 settings یک IP بصورت Manual تعریف کنید. مثلاً برای Master:
192.168.4.65

و برای Slave:
192.168.4.66

سپس دو کامپیوتر را با کابل Ethernet به واسطه یک مودم یا سوییچ متصل کنید. کانکشن پروفایل ایجاد شده را انتخاب کنید و با دستور ping مطمئن شوید ارتباط برقرار است. برای مثال از روی Master باید
ping 192.168.4.66

را اجرا کنید و خروجی بگیرید و از روی Slave باید
ping 192.168.4.65

اجرا بشود و خروجی بگیرید.

گام بعدی این هست که در فایل bashrc. هر دو کامپیوتر دو خط اضافه کنید. در Master:
export ROS_IP=192.168.4.65
export ROS_MASTER_URI=http://192.168.4.65:11313

و در Slave:
export ROS_IP=192.168.4.66
export ROS_MASTER_URI=http://192.168.4.65:11313

و تمام. چگونه چک کنید که شبکه برقرار است؟
کافی است در Master یک roscore اجرا بشود و شما در Slave می‌توانید با دستور
rostopic list

تاپیک‌های روی Master را ببینید.

این آموزش برای ROS 1 است و بر روی توزیع‌های Melodic و Noetic خودم تست و پیاده‌سازی کرده‌ام. در ROS 2 هنوز این کار را نکرده‌ام اما فکر می‌کنم بصورت فنی آنجا حتی کار راحت‌تر باشد.

-----------
@roboticknowledge
🫡4👨‍💻2
#ROS

داستان ROS 1 هم از نظر توسعه رسمی تا انتهای May به پایان خواهد رسید اگرچه حداقل تا چند سال دیگر توزیع Noetic همچنان با قدرت محبوب‌ترین توزیع خواهند ماند.

عمده Autonomy Stack های فعلی برای Noetic هستند و فرآیند Migration طولانی. بنابراین همچنان ROS 1 محبوب خواهد ماند.

----------
@roboticknowledge
1🤯1
#Hardware #ROS #Design #Jetson

در یک ربات مدرن به به یک ترکیب کارا از سنسورها و کامپیوتر و سخت‌افزار کامل رسیدن کار پیچیده‌ای است. طراحی در رباتیک دانش زیادی می‌خواهد که در این مطلب کمی توضیح می‌دهم.

برای مثال شما نیاز به یک Stereo Camera دارید. گزینه‌ها RealSense، OAK-D، ZED و کلی چیز دیگر مانند Astra و ... هستند. همه این‌ سنسورها دارای رنجی از ویژگی‌های مشابه در نسخه‌های مختلف هستند. شما چجوری باید انتخاب کنید؟

باید چک بشود که سنسور دارای پشتیبانی و نرم‌افزار ROS است. آیا فقط نرم‌افزار ROS 1 دارد؟ آیا نرم‌افزار ROS 2 هم دارد؟ آیا نرم‌افزار با Autonomy Stack شما conflict ندارد؟ آیا افراد چنانچه open issue داشته‌اند، برنامه‌نویس‌های آن شرکت یا community آن مسأله را حل کرده‌اند؟

این‌ها فقط بخشی کوچکی از سوالات نرم‌افزاری تنها برای یک سنسور است. برای همه سنسورها این چک‌ها باید انجام شود، سازگاری نرم‌افزاری و سخت‌افزاری با autonomy stack تایید شود، سنسور بصورت مکانیکی و الکتریکی قابل یکپارچه سازی با ربات باشد (سازگاری الکتریکی با Onboard computer و power unit) و خواسته اندازه‌گیری و observation شما از محیط را بتواند محقق کند تا autonomy stack کار بکند.

این طراحی تنها از دست یک فرد که رباتیک مدرن را می‌شناسد، بر‌می‌آید. کامپیوترها، سنسورها، نرم افزارها و الگوریتم‌ها و حتی سخت‌افزار مکانیکی در رباتیک با نرخ بالا در مرتبه سال تغییر می‌کنند و طراح رباتیکی مدرن این چیز‌ها را می‌داند و آگاه هست.

اگر غیر از این بود که رباتیک شاخه آسانی بود‌. بر خلاف بسیاری از فیلدها که افراد فقط با کامپیوتر و سطح ساده‌‌ای از coding درگیر هستند، رباتیک درگیری زیادی با latest art در سخت‌افزار الکترونیکی و مکانیکی دارد‌‌. این‌ها در کنار الگوریتم‌های کنترلی و طرح‌ریزی که همگی نیازمند ریاضی قوی هستند، الگوریتم‌های ادراکی که امروز با کمک هوش مصنوعی قوی شده‌اند، شبکه‌های عصبی برای کنترل ربات‌های پیشرفته با کمک RL و چیزهای بسیار دیگر در مدل‌سازی و شبیه‌سازی رباتیک را پیچیده می‌کند. این‌ فیلد جای استفاده از تکنولوژی‌های روز برای حل مسائل سخت است و ویترین زیبای آن بدون تلاش و سخت‌کوشی در این موارد که اشاره شد، ایجاد نشده است.

----------
@roboticknowledge
🏆8🤯1😎1
#ROS #RL #NN

پیاده‌سازی (deployment) یک شبکه عصبی در یک ROS Node با ++C

من از کتابخانه PyTorch برای آموزش مدل‌های عصبی که در Autonomy Stack ربات‌هایم نقشی دارند استفاده می‌کنم. مدل را می‌توان بصورت یک torch script با پسوند pt. ذخیره کرد. سپس این مدل را می‌توان با کتابخانه libtorch که یک کتابخانه ++C برای torch است را در محیط مبتنی بر ++C/C خواند و اجرا کرد.

کتابخانه libtorch می‌تواند بر روی CUDA بصورت accelerated مدل‌ها را اجرا کند. برای اینکه در یک ROS Node از جنس ++C این کار را بکنید، فقط لازم است تا CMakeLists آن ROS Package را به گونه‌ای تغییر دهید تا از محل کتابخانه libtorch و cuda_toolkit شما آگاه باشد و در سورس ROS Node از جنس ++C هم torch/torch.h را include کنید تا به توابع آن دسترسی داشته باشید.

به این ترتیب می‌توان مدل‌های PyTorch را در شرایط deployment و در اکوسیستم ROS با زبان ++C استفاده کرد. انجام Unit test را فراموش نکنید تا مطمئن شوید مدل به درستی کار می‌کند.

راهنمای خوب:
https://docs.pytorch.org/tutorials/advanced/cpp_export.html

----------
@roboticknowledge
🏆5🫡1
#ROS #Tools

زوایای دوران را در بسیاری از مواقع دوست داریم به بازه [pi pi-] انتقال دهیم. چرا؟ ما میدانیم که زاویه 380 درجه برابر با زاویه 20 درجه است و با این تبدیل همواره زوایای جهت‌گیری را در محدوده [pi pi-] نگه می‌داریم. مهم‌ترین مکان برای این تبدیل در بحث یادگیری ماشین است که تلاش می‌شود ورودی‌های شبکه بصورت normalized بشوند تا یادگیری آسان‌تر بشود.

به این تبدیل ssa یا smallest signed angle گفته می‌شود. فرمول ریاضی این تبدیل بصورت زیر است:


signed reminder((angle + pi), 2pi) - pi


در ROS یک کتابخانه وجود دارد به نام angles که این را پیاده‌سازی کرده‌اند و شما می‌توانید این تبدیل را براحتی انجام دهید:

static double angles::normalize_angle (double angle)


می‌توانید داکیومنت همه توابع این کتابخانه را اینجا ببینید:
http://docs.ros.org/en/jade/api/angles/html/angles_8h.html

—————
@roboticknowledge
6