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

عمده آموزش‌های Isaac Sim را که اکنون طی کرده‌ام و در میانه‌های Learning Curve آن هستم، نظرم را درباره این شبیه‌ساز می‌نویسم.

با فاصله بهترین گرافیک را ارائه می‌کند - به عبارتی Photorealistic ترین شبیه‌ساز رباتیکی جهان است و چیزهای دیگر در برابر آن جک هستند.

با ROS 2 با کمک Bridge ارتباط می‌گیرد. در نسخه 4.2 ارتباط با نسخه‌های قدیمی ROS ممکن نیست که بدیهی است.

تعدادی از الگوریتم‌های معروف رباتیکی در پکیج Isaac ROS پیاده شده‌اند و در شبیه‌ساز قابل استفاده هستند.

با مفاهیم Standalone Scripting به شما اجازه می‌دهد براحتی کل شبیه‌سازی را با تمام core API ها کنترل و customize کنید.

چند صد اکستنشن برای Isaac Sim Platform توسعه یافته که کار شما را آسان کند؛ یک مثال Isaac Lab است که برای RL است.

شما می‌توانید اکستنشن خود را برای کار خود توسعه دهید و اگر چیز خوبی شد، برای community بصورت open source منتشر کنید.

امکان deploy بصورت SITL با این شبیه‌ساز برقرار است، به شرط اینکه ربات هاردور استاندارد داشته باشد (مشخصا از خاندان Jetson).

موارد دیگر را بعدا مکتوب می‌کنم. اگر درباره Isaac Sim سوال داشتید، می‌توانید بپرسید.

----------
@roboticknowledge
31
Robotic Knowledge
#Isaac #IssacSim عمده آموزش‌های Isaac Sim را که اکنون طی کرده‌ام و در میانه‌های Learning Curve آن هستم، نظرم را درباره این شبیه‌ساز می‌نویسم. با فاصله بهترین گرافیک را ارائه می‌کند - به عبارتی Photorealistic ترین شبیه‌ساز رباتیکی جهان است و چیزهای دیگر…
#Isaac #IssacSim
این موجود (Isaac Sim) یک اکوسیستم است که خود بر اساس موجود بزرگ دیگری به نام Omniverse است.

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

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

چهار کتابخانه سازگار با‌ Isaac Lab که مشخصا SKRL از بقیه بهتر است. در Isaac Lab هر چهار کتابخانه بصورت workflow براحتی قابل استفاده هستند.

----------
@roboticknowledge
3
#رباتیک #تجربه #داستان

چند وقت پیش دوستی از من پرسید کار تو چیست؟ گفتم کار من رباتیک است؛ کمی بیشتر توضیح دهم، کنترل ایمن ربات برای حرکت است (مسأله را باز نکردم). پرسید با چه روشی؟ گفتم کنترل کلاسیک را قرار است با روش‌های مبتنی بر یادگیری ترکیب کنیم. سپس گفت که پس تو رباتیک کار نمی‌کنی و هوش مصنوعی کار می‌کنی!!!

شوکه شدم و کمی بحث کردیم. فایده نداشت چون کسی که رباتیک کار نکرده نمی‌فهمد ابعاد کاری رباتیک را. این پست لینکدین را دیدم و یاد آن بحث افتادم:

https://www.linkedin.com/posts/enzo-ghisoni-robotics_ros2-robotics-opensource-activity-7258827911242076160-c8A3

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

شب بخیر! :)))))
----------
@roboticknowledge
#Isaac #RL

در یادگیری تقویتی محیط‌های موازی سرعت آموزش را تا 1000X زیاد می‌کنند. چگونه؟

تعدد محیط یعنی تعدد sample برای observation. پس عملیات گرادیان گیری یادگیری شبکه با batch سایز بزرگ‌تر می‌تواند انجام شود که سرعت زیاد برای آموزش شبکه را محقق می‌کند. بنابراین شما میتوانید با یک GPU در شبیه‌سازی‌ مثل Isaac Gym اقدام به آموزش یک Policy در چند دقیقه تا چند ساعت بکنید.

البته به این سادگی که نوشتم نیست و زحمت زیادی دارد. برای مثال صرفا یک Reward Function درست نوشتن کار خیلی ساده‌ای نیست، بماند که توانایی پیاده‌سازی درست با Torch هم خود چالش دیگر این ماجرا است.

----------
@roboticknowledge
🏆3
#ROS

خلاصه که هر چیزی در جای خودش باید استفاده بشه، خصوصا ROS. 😁
----------
@roboticknowledge
😁3
#RL
شما وقتی یک Agent را در محیط train می‌کنید، باید شرایطی را تعریف کنید تا آموزش در یک Episode متوقف شود و اصطلاحا محیط را reset کنید. طی reset کردن محیط، می‌توانید Target را نیز بصورت تصادفی بروز کنید تا شبکه generalized بشود و حالت‌های مختلف را یاد بگیرد.

اما چه زمانی باید یک Episode را reset کرد؟ بسته به طراحی دارد، اما یک مثال ساده این است که agent در محیط crash کند. حال مهندسی مسأله این است که crash را چطوری ببینید. مثلا اگه مقدار tilt یک ربات پرنده یا زاویه پای یک ربات انسان نما از حدی تجاوز کرد، آن شرایط را می‌توان به‌عنوان trigger برای ثبت یک crash در نظر گرفت.

----------
@roboticknowledge
2
#منهای_رباتیک

اگر ایده‌آل عمر انسان ۱۰۰ سال باشد، می‌شود ۵۲۰۰ هفته.
امروز چک کردم و دیدم من ۱۳۹۹ هفته را در زندگی خود گذرانده‌ام.

باید از هفته به هفته این فرصت استفاده کنیم. هر هفته خروجی خوب در کار خود داشته باشیم؛ هفته‌های سبز داشته باشیم. میراثی درست کنیم که در آینده به آن افتخار کنیم و با سربلندی درباره زمانی که گذشته است، صحبت کنیم (البته صحبت بکنند😉)

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

----------
@roboticknowledge
7🫡3
#کنترل

در سیستم‌های کنترل تحقق Stability هدف اصلی است، اما مفاهیم دیگری نیز وجود دارند که باید محقق شوند. یکی از مهمترین‌ها Safety است.

خروجی کنترل‌کننده شما اگرچه باید سیستم را پایدار کند، اما آیا آن را safe هم می‌کند؟

لایه‌های بالادستی کنترلی بر روی سیستم‌های Pre Controlled از این سوال به وجود می‌آیند‌. معمولا Safety با تعریف constraints بر روی state یا inputs تعریف می‌شود.

وقتی شما بر سر خروجی کنترل‌کننده اصلی یک rate limiter قرار می‌دهید کاری که می‌کنید از نوع safety controller است، اما چیزی ساده و همراه با عدم تضمین safety است.

این اساس وجودی چیزی به نام Reference Governor یا RG است که ورودی کنترلی r را به صورت اصلاحی به ورودی v مپ می‌کند تا سیستم تضمین برای عدم عبور از قیود داشته باشد.

حالا روی همین RG اخیرا کاری که می‌شود چک کردن Feasible بودن فرمان است. در مباحث Safe Control اگر خروجی برای سیستم Feasible نباشد اساسا بدرد بخور نخواهد بود چون تضمین‌ها را زیر سوال می‌برد.

----------
@roboticknowledge
🏆3
#Tools
#Computer

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

ماژول‌های سخت‌افزاری وجود دارد که این مسأله را حل کرده‌اند. یک نمونه معروف Realsense T265 است که دارای دو fish eye و یک IMU است و با روش‌های Visual Slam با دقت مناسبی اطلاعات موقعیتی Local را برای کامپیوتر Master تامین می‌کند. تفاوت با سیستم موقعیت‌یابی جهانی این است که در هر محیطی که امکان دیدن وجود داشته باشد، حتی محیط بسته، این سیستم موقعیت‌یابی لوکال بخوبی کار خواهد کرد. نکته قابل توجه این است که اسلمی که اجرا می‌شود بر روی خود ماژول است (و شما برای موقعیت سنجی بر روی کامپیوتر اصلی هیچ پردازشی نخواهید داشت) و خروجی موقعیت نرخ 200 هرتز دارد که بسیار خوب است.

----------
@roboticknowledge
1
#رباتیک

دستان خود را با هاردور کثیف کنید. رباتیک در شبیه‌ساز یک چیز ساده است. در واقعیت اگر همه چیز در شبیه‌ساز خوب پیش رفته باشد، چالش‌های زیادی در sim to real وجود خواهد داشت. چالش‌های توسعه مکاترونیکی پلتفرم هم جای خود!

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

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

----------
@roboticknowledge
🫡9
#RL
#Isaac

برای task یادگیری تقویتی، Isaac Lab دو ساختار برای تعریف تسک آماده کرده است:

Manager-based RL
و
Direct RL

در ساختار Manager-based، مسأله بصورت ماژولار مدل شده است. به این صورت که شما یک کلاس برای Scene، یک کلاس برای Actions، یک کلاس برای Observation، یک کلاس برای Management محیط، یک کلاس برای Reward، و یک کلاس برای Terminations خواهید داشت.

فایده؟

تغییر هر کدام از این‌ها (که همگی مفاهیم پایه RL هستند) مستقل از دیگر چیزهای مسأله انجام می‌شود. بعبارتی شما می‌توانید خیلی راحت یک قسمت کار را عوض کنید بدون اینکه مجبور شوید بقیه جاها را هم دست بزنید. پس شما امکان Rapid Environment Modification دارید.

----------
@roboticknowledge
👨‍💻4
#منهای_رباتیک

در بلژیک یک راه جالب برای میلیونر شدن وجود دارد: پس از PhD خود یک محصول بر اساس PhD خود ایجاد کنید و برای آن کمپانی ثبت کنید. اینجا پول به حدی برای ایده زیاد است که به راحتی ۱۰۰ هزار یورو میتوانید برای یک سال اول دریافت کنید.

سپس آن را رشد دهید و کمی پخته که شد، با چند demo می‌توان آن را با قیمت چند ده میلیون یورو به فروش رساند.

این کار را چند نفر که جلوی چشمان خودم هستند انجام داده‌اند.

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

----------
@roboticknowledge
5
استادم امشب می‌گفت که چین و ایران بزرگ‌ترین صادر کنندگان مغز در جهان هستند؛ با این فرق که چین مغز‌هایش را برمی‌گرداند اما ایران چه؟

@BelObs
🤯7🫡2
#Isaac

استاندارد Isaac Sim و Nvidia برای توصیف ربات و محیط فرمتی به نام USD یا Universal Scene Description است. بر خلاف URDF که یک فایل متنی xml و قابل خواندن است، USD را نمی‌توان با دست ایجاد کرد و فایل آن نیز encrypted است و نمی‌توان آن را خارج از اکوسیستم Nvidia خواند.

کتابخانه‌ها و ابزارهایی وجود دارند که با آن‌ها می‌توان فایل USD را تولید کرد، از جمله یک کتابخانه پایتون برای این کار.

یک راه مهندسی هم این است که فایل‌های Mesh را در Isaac Sim باز کرد و با تعریف مفصل‌ها و متریال و فیزیک و غیره، آن را ذخیره کرد. با این روش بدون نیاز به اسکریپت نویسی می‌توانید USD های خودتان را ایجاد کنید. اگرچه دانستن پایه‌های یک USD مهم است و به شما درک بیشتری از کار می‌دهد.

اصلاح: در واقع USD را فشرده می‌کنند تا حجم آن کم شود، اما نسخه Human readable آن یعنی USDA را می‌توان با هر text editor ای باز و ویرایش کرد، اما حجم آن بسیار بزرگتر از فایل USD است.

----------
@roboticknowledge
👨‍💻4
#Perception

مدل YOLOv5 برای من یک مدل بسیار ارزشمند بوده است همیشه که برای Object detection همواره بحث Perception در کار رباتیک را برای من حل کرده است و ارتباط دلی با این مدل دارم. ❤️

اکنون در یک پروژه به Semantic Segmentation و مدل‌هایی که این کار را بکنند نیاز دارم. کمی جستجو کردم و مدل‌هایی مثل SegNet یا DeepLab یا Unet را پیدا کردم. اما متوجه شدم که این مدل‌ها FPS خوبی ندارند و نهایتاً با سرعت ۳۰ هرتز کار می‌کنند.

سری به وضعیت نسخه‌های جدید YOLO زدم که دیدم بله، در YOLOv11 نه فقط Object detection، بلکه Semantic Segmentation و Pose Estimation و چیزهای معروف دیگر هم ارائه شده است! بنچمارک‌ها را نیز که نگاه می‌کردم خیلی سرعت و عملکرد خوبی دارد.

اگرچه در همین YOLOv11 هم بحث سرعت و یا inference time برای کار Segmentation از کار Detection بیشتر است - به دلیل ذات مسأله - اما واقعا YOLO و حجم چیزهایی که برای آن در دسترس است با اختلاف آن را از چیزهای دیگر برای بحث Perception Engineering محبوب‌تر می‌کند - حداقل برای من.

----------
@roboticknowledge
5
Duckietown.com

در X پست آن‌ها را دیدم که توسط Open Robotic بازنشر داده شده بود. چند پلتفرم ساده برای آموزش یا کارهای رباتیکی ساده اما باحال دارند. شخصا وسوسه شدم یکی از پلتفرم‌های آن‌ها را درست کنم و کمی بازی کنم! :)

----------
@roboticknowledge
😎3
#RL

در جایی که لبه تکنولوژی و نوآوری ترکیب می‌شود، از RL و نخبه‌های این زمینه برای قدرت راه رفتن و یاد دادن آن به ربات در کلاس انسان به ربات‌های تسلا قرار است استفاده شود.

جالب است که همچنان عده‌ای RL را صرفا یک حل کننده بازی دو بعدی می‌دانند و اعتقاد دارند که ارزش ندارد. در مجموع نه RL و نه MPC یا هر چیزی در مهندسی و علم جای تعصب نیست. هنر در حل مسأله در یک چارچوب مشخص است. باید تشخیص داده شود کجا یک مسأله را می‌توان به چه روشی حل کرد و کجا نمی‌توان.

----------
@roboticknowledge
🤯5🏆2🐳1
Robotic Knowledge
#Perception مدل YOLOv5 برای من یک مدل بسیار ارزشمند بوده است همیشه که برای Object detection همواره بحث Perception در کار رباتیک را برای من حل کرده است و ارتباط دلی با این مدل دارم. ❤️ اکنون در یک پروژه به Semantic Segmentation و مدل‌هایی که این کار را بکنند…
#Perception

آمدم که با کمک کتابخانه Ultralytic و yolov11 کار segmentation را انجام دهم، به یک مشکل اساسی خوردم: Bounding Box based Segmentation

اساس Yolo (تا جایی که میدانم) استفاده از Bounding Box برای بیان Region of Interest یا RoI است. بنابراین دیتاست من برای این هدف سازگار نبود چونکه برای Semantic Segmentation شما به عنوان label یک تصویر دارید که صرفا یک mask است و نواحی برچسب خورده دارای مقدار مشخص پیکسلی هستند.

بنابراین به کتابخانه Segmentation Models PyTorch یا SMP که بر اساس PyTorch ایجاد شده است، مراجعه کردم. اینجا براحتی Data Set را خواندم و معماری مدل Unet را استفاده کردم. در این کتابخانه مدل‌های مهم برای کار Segmentation از جمله
UNet, Unet++, DeepLavV3, DeepLabV3+, FPN, PSPNet, Linknet, MAnet, PAN, UPerNet, and Segformer

در دسترس است.

چیزی که در در SMP برای من جذاب است، این است که شما می‌توانید معماری شبکه را کاملا عوض کنید و انواع Encoder از جمله ResNet یا MobileNet و ... استفاده کنید! به همین دلیل بر اساس trade off بین پیچیدگی مسأله و سنگینی مدل میتوان به حالت بهینه رسید.

من بر روی یک دیتاست مصنوعی از محیط جنگلی با 5000 تصویر با backbone مدلی resnet34 و انکودر ImageNet برای یک تسک باینری با دقت 99.5% مدل Unet را آموزش دارم. باید ببینم Inference time آن چگونه است و اگر برای Edge computer و الگوریتم کنترلی من مناسب نبود، آن را باید تغییر دهم و سبک سازی کنم، حتی به هزینه کمی دقت کمتر.

----------
@roboticknowledge
🫡4
Robotic Knowledge
#Perception آمدم که با کمک کتابخانه Ultralytic و yolov11 کار segmentation را انجام دهم، به یک مشکل اساسی خوردم: Bounding Box based Segmentation اساس Yolo (تا جایی که میدانم) استفاده از Bounding Box برای بیان Region of Interest یا RoI است. بنابراین دیتاست…
#Perception

یک نکته در استفاده از SMP این است که بر خلاف Yolo که ابعاد تصویر ورودی اهمیتی ندارد، اینجا برای Unet شما ابعاد بخشپذیر بر 32 باید داشته باشید. پس اگر تصویر شما 1280 در 720 است، باید عرض آن به 736 با کمک مکانیزم Padding افزایش یابد. این قید بر اساس معماری ابعادی encoder است.

----------
@roboticknowledge
👨‍💻1