Robotic Knowledge
382 subscribers
242 photos
62 videos
2 files
172 links
دانش و برنامه‌نویسی برای رباتیک
Download Telegram
#research

کار علمی در رباتیک باید به مانند بازی پینگ پنگ بین شما و همکاران باشد. اینکه همواره به کار شما انتقاد [درست] شود باعث می‌شود رشد کنید زیرا همواره یک فشار وجود دارد تا بهبود‍ دهید و از طرفی شما با این کار پاسخ انتقاد را میدهید و فشار را معکوس می‌کنید و این چرخه ادامه دارد.

تا چه زمانی؟

مادامی که شما بتوانید در یک جمله بیان کنید برتری کار شما نسبت به دیگران چیست. تا وقتی که آن یک جمله صحیح و قاطع را ندارید، کار شما اثر قوی نخواهد داشت.

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

----------
@roboticknowledge
8
#LLM

معمولا درباره مدل‌های زبانی کامنت خاصی ندارم، اما DeepSeek ارزش نظر دادن داره. اینکه تکنولوژی چند میلیارد دلاری Open AI از یک شرکت کوچیک (نسبی) با تکنولوژی چند میلیون دلاری ضربه اساسی می‌خوره اتفاق مهمی هست. اینکه مدلشون هم متن باز هست شدت ضربه رو بیشتر می‌کنه.

----------
@roboticknowledge
🫡4😁3
#RL

Maximum reward achieved. Network won!


یک خط لاگ بسیار زیبا و هیجان‌انگیز در ترمینال. :)
----------
@roboticknowledge
🫡5
#RL

با آزمون و خطا متوجه شدم هرچه تعداد نرون و لایه‌های شبکه کمتر باشد، می‌توان FPS بهتری گرفت. برای مثال اگر سه لایه داشته باشید و لایه اول ۵۱۲ نرون داشته باشد و هر لایه بعدی نصف لایه قبلی نرون داشته باشد، تقریبا FPS آموزش هر ایپاک را نسبت به حالتی که لایه اول ۲۵۶ نرون داشته باشد، یک چهارم کرده‌اید. یعنی ۴ برابر افت سرعت در آموزش در مقابل تعداد نورون دو برابر در هر لایه.

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

----------
@roboticknowledge
4
#RL #Isaac

در Isaac Gym با یک GPU 3090 می‌توان حدود ۶ هزار محیط موازی برای آموزش یک Policy که در آن سنسور depth هم رندر می‌شود، ایجاد کرد.

دلیل bottleneck این محدودیت تعداد محیط ابتدا بخاطر Cuda Memory است و سپس توان GPU. بطور مشخص اگر روی همین 3090 بجای ۲۴ گیگ حافظه، ۳۲ گیگابایت حافظه در دسترس بود، می‌شد که تا ۸ هزار محیط آموزشی داشت که معنای آن سرعت آموزش بیشتر است زیرا batch data بزرگ‌تر شده است.

----------
@roboticknowledge
7
#RL

در هنگام آموزش یک Policy RL مراقب باشید در تله reward function نیافتید. مقدار بیشینه reward function صرفا accumulated value است و نباید گول آن عدد را خورد.

از کجا باید فهمید که Policy آموزش دیده است؟

باید یک Success rate تعریف کنید و آن را با آپدیت شدن Policy مانیتور کنید. فرض کنید که هدف رسیدن ربات به یک نقطه‌ تصادفی در فضا است. در این حالت Success rate را می‌توان بدین صورت تعریف کرد:

تعداد محیطی که در آن ربات با Policy فعلی توانسته است به حوالی هدف برسد، تقسیم بر تعداد کل محیط‌ها.


اگر در جایی از آموزش Success rate از 0.9 عبور کرد، و تعداد محیط‌ها 1000 بود، معنا این است که با آن Policy ربات موفق شده به 900 هدف متفاوت برسد، پس آموزش خوب بوده است.


با رسیدن به یک سطح مشخص از Success rate میتوان محیط را سخت‌تر کرد و مشخصا Policy را قوی‌تر.

----------
@roboticknowledge
🫡5
#Jetpack #Jetson

یک ابزار وجود دارد به نام SDKManager - از Nvidia - که برای نصب Jetpack بر روی Jetson ها استفاده می‌شود.

یک چیز بد درباره این ابزار این است که شما بر اساس اینکه Host machine دارای چه OS ای است می‌توانید نسخه مد نظر Jetpack را نصب کنید. برای مثال شما امکان فلش کردن Jetpack 4.x را با Ubuntu 20.04 ندارید و این کار را با Ubuntu 18.04 می‌توانید انجام دهید.

حالا ممکن است بپرسید Jetpack قدیمی به چه کار می‌آید؟
خیلی به کار می‌آید - یعنی مجبور می‌شوید! مثلا اگر شما از Jetson Xavier NX استفاده می‌کنید و Stereo Camera ZED دارید، بر روی Jetpack 5.x مشکل درایور دوربین دارید و مجبور خواهید بود که به Jetpack 4.x برگردید.

خلاصه به لیست دراز OS های من Ubuntu 18.04 نیز اضافه شد. 😁

It's a headache. You see me? 😉

----------
@roboticknowledge
7
#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=https://192.168.4.65:11313

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

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

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

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

-----------
@roboticknowledge
🫡4👨‍💻2
#RL #Isaac

اگر در training خود محیطی داشته باشید که رندرینگ آن برای سنسور ساده‌تر باشد، مشخصا FPS بیشتری خواهید گرفت. بصورت تجربی متوجه شدم که چنانچه از یک Primitive shape مانند Sphere به عنوان مانع استفاده کنید، FPS Drop بیشتری خواهید داشت نسبت به یک Cube.

دلیل؟

مشخصا رندر شدن یک Sphere از Cube برای سنسور سخت‌تر است چون تعداد سطح مش بیشتری دارد! پس یک راه برای افزایش سرعت آموزش استفاده از Cube بجای Sphere در بحث ایجاد محیط است.

این چیزها فقط و فقط با تجربه و درگیری زیاد با Isaac یادگیری و تجربه می‌شود. با این حال پشت فیزیک این ماجرا بحث‌های ray casting برای مدل‌سازی سنسورها برقرار است.

----------
@roboticknowledge
6🏆2
#پادکست

خیلی دوست دارم یک پادکست خیلی ساده داشته باشم که درباره رباتیک (و تکنولوژی‌های مربوط به آن) صحبت کنم. چیزی که بصورت فنی سخت نباشد و ساده باشد. معتقدم زیبایی و جاذبه در سادگی است.
دوست دارم بصورت هفتگی باشد و زمان آن نهایتاً ۱۰ دقیقه باشد.
نظر شما چیست؟ اساسا برای شما باحال است؟ چه چیزی صحبت بشود برای شما مورد علاقه خواهد بود؟

----------
@roboticknowledge
🏆21
#پادکست
خب این قرار هست پوستر ما باشه. بعدا کیفیت‌ها ممکنه بهتر بشه. :)

این سری از صحبت‌ها فارسی خواهد بود و در YouTube آپلود می‌کنیم:
https://www.youtube.com/@roboticknowledge

قسمت اول حالت مقدمه خواهد داشت و درباره این صحبت می‌کنم که چه چیز‌هایی رو توی این پادکست دنبال می‌کنیم.
🏆11🍾3🐳2
#Robotics

در مورد رباتیک اگر قبلا ماهی یک کار با impact چه در research و چه در صنعت می‌دیدم، الان هر هفته میانیگن دو یا سه کار عالی می‌بینم که مرزها را push می‌کنند. شتاب در کارهای خوب واقعا بالاست. در این شرایط دانستن اتفاقات خیلی تفاوت ایجاد می‌کند. فقط باید مراقب بود که در موج‌ها گم نشد و با جریان حرکت کرد. چشم‌ها باید به چند پیشرو باشد و در نقطه‌ای این امکان وجود دارد که بصورت نقطه‌ای به آن‌ها اضافه شد.

----------
@roboticknowledge
6🤯1
#Community

عاشق reddit شدم. یک سوال درباره یک کامپیوتر داشتم، در reddit پرسیدم و کمتر از دو ساعت چند جواب خوب گرفتم.

تاپیک‌های دیگه همون چنل رو چک کردم و دیدم چه چیزهای خوبی پرسیده و پاسخ داده شده و چند چیز جالب پیدا کردم. جالب اینجا بود که جواب‌هایی که آدم می‌بینه و می‌گیره معمولا این چت‌بات‌ها به شما در چند پرامپت اول نمیدن.

به دوستام به شوخی گفتم از این به بعد باید من رو با بیل از کف reddit جمع کنن! 😂

----------
@roboticknowledge
😁6
سال نو پارسی مبارک باشه ❤️
آرزو می‌کنم شاد و سلامت باشید توی این سال جدید 🌹
🍾94
#Jetson

اگر روزی از یک Carrier برد غیر رسمی Nvidia برای یک ماژول Jetson مانند Orin NX استفاده کردید بدانید که دستور

apt upgrade

بسیار خطرناک است و پکیج‌های لایه کرنل لینوکس را دچار ناسازگاری می‌کند و مجبور خواهید شد که مجدد Jetpack را Flash کنید تا کامپیوتر به درستی کار کند.

استفاده از Carrier board غیر رسمی هم بسیار رایج است برای سیستم‌های مشخص و احتمال چنین رخدادی چنانچه درگیر این سیستم‌ها شدید کم نیست.

----------
@roboticknowledge
👨‍💻3
#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
#Hardware

عادت دارم مراحل کار با سخت‌افزار و نرم‌افزار یک سیستم رباتیک را مستند کنم تا خودم و افراد تیم در آینده کار تکراری انجام ندهیم.

قبلا سنسور RealSense D455 را روی یک دسکتاپ و Ubuntu 20 برای تست الگوریتم راه‌اندازی کرده بودم. درایور آن و لانچ‌ فایل‌ها و مراحل نصب و اجرا را مستند کرده بودم تا امروز که یک ماه قبل پیش‌بینی کرده بودم بر روی Jetson Orin NX سریع همان مراحل را اجرا کنم. میان راه دیدم مشکل دارم.

بله، کامپیوتر دسکتاپ معماری پردازنده AMD داشت و Jetson معماری ARM دارد. هر چه بافته بودم پنبه شد. درگیر طی کردن همان مراحل برای ARM ها شدم که شب شد و ذهن آشفته و رها کردم برای فردا، از ریخت خطاها مشخص بود دقت لازم است که دیگر حوصله آن را نداشتم.

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

----------
@roboticknowledge
3🏆1
Please open Telegram to view this post
VIEW IN TELEGRAM