#ربات_پایه_متحرک #ROS
توسعه TurtleBot4: نسل جدید سکوی آموزشی، توسعهای و تحقیقاتی برای رباتیک.
این ربات پایه متحرک توسط Clearpath robotics بعنوان سازنده و Open Robotics که توسعه ROS را بر عهده دارد، با کمک شبیهساز Gazebo توسعه یافته است.
از ویژگیهای جدید این ربات به امکان شارژ خودکار آن، بهبود سنسورها و سختافزار اشاره کرد. برای مثال این ربات نسبت به نسل قبل خود بار بیشتری میتواند حمل کند.
این ربات به انکودر چرخ، آرایه سنسورهای IR در بدنه، سنسور نوری سنجش تغییرات در کف (مانند ماوس) و IMU برای ناوبری مجهز است. همچنین یک LiDAR دو بعدی به همراه یک دوربین استریو در جلو این ربات را برای SLAM ایدهآل میکند.
این ربات به یک کامپیوتر Raspberry Pi 4 مجهز است که بر روی آن سیستم عامل ربات ۲ (ROS 2) قرار گرفته است که برای رباتیک یک ایدهآل قطعی به حساب میآید. امکان اضافه کردن سنسورهای دیگر هم با ارتباط USB ممکن است. تمامی دادههای سنسوری با تاپیکهای ROS 2 منتشر میشوند.
نسخه استاندارد آن ۱۷۵۰ دلار و نسخه سبک آن ۱۰۹۵ دلار قیمت دارد.
----------
@roboticknowledge
توسعه TurtleBot4: نسل جدید سکوی آموزشی، توسعهای و تحقیقاتی برای رباتیک.
این ربات پایه متحرک توسط Clearpath robotics بعنوان سازنده و Open Robotics که توسعه ROS را بر عهده دارد، با کمک شبیهساز Gazebo توسعه یافته است.
از ویژگیهای جدید این ربات به امکان شارژ خودکار آن، بهبود سنسورها و سختافزار اشاره کرد. برای مثال این ربات نسبت به نسل قبل خود بار بیشتری میتواند حمل کند.
این ربات به انکودر چرخ، آرایه سنسورهای IR در بدنه، سنسور نوری سنجش تغییرات در کف (مانند ماوس) و IMU برای ناوبری مجهز است. همچنین یک LiDAR دو بعدی به همراه یک دوربین استریو در جلو این ربات را برای SLAM ایدهآل میکند.
این ربات به یک کامپیوتر Raspberry Pi 4 مجهز است که بر روی آن سیستم عامل ربات ۲ (ROS 2) قرار گرفته است که برای رباتیک یک ایدهآل قطعی به حساب میآید. امکان اضافه کردن سنسورهای دیگر هم با ارتباط USB ممکن است. تمامی دادههای سنسوری با تاپیکهای ROS 2 منتشر میشوند.
نسخه استاندارد آن ۱۷۵۰ دلار و نسخه سبک آن ۱۰۹۵ دلار قیمت دارد.
----------
@roboticknowledge
#URDF #ROS2 #Gazebo #CAD #Tools
https://www.linkedin.com/posts/mjavadzallaghi_roboticists-ros-gazebo-activity-7217814868333084672-Pvmb?utm_source=share&utm_medium=member_desktop
https://www.linkedin.com/posts/mjavadzallaghi_roboticists-ros-gazebo-activity-7217814868333084672-Pvmb?utm_source=share&utm_medium=member_desktop
Linkedin
#Roboticists would like to create robots, simulate them, develop their software, then deploy on the hardware. | Mohammad Javad…
#Roboticists would like to create robots, simulate them, develop their software, then deploy on the hardware.
In #ROS 2 ecosystem, for simulation, we use #Gazebo. But you may ask, how to model the robot and import it in Gazebo?
🐢 For modelling the robot…
In #ROS 2 ecosystem, for simulation, we use #Gazebo. But you may ask, how to model the robot and import it in Gazebo?
🐢 For modelling the robot…
👍5
#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
یکی از سختیهای کار در استفاده از نرمافزارهای متنباز 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
GitHub
GitHub - JINXER000/GIE-mapping: GPU-accelerated Incremental Euclidean Distance Transform for Online Motion Planning of Mobile Robots
GPU-accelerated Incremental Euclidean Distance Transform for Online Motion Planning of Mobile Robots - JINXER000/GIE-mapping
👍3
#Docker #ROS2 #ROS #GPU
https://www.linkedin.com/posts/mjavadzallaghi_docker-ros-robotics-activity-7226857502234075136-4E4w
—————
@roboticknowledge
https://www.linkedin.com/posts/mjavadzallaghi_docker-ros-robotics-activity-7226857502234075136-4E4w
—————
@roboticknowledge
Linkedin
Mohammad Javad Zallaghi on LinkedIn: #docker #ros #robotics
#Docker #ROS #Robotics
You have installed Ubuntu 22.04, and ROS 2 humble for Long-Time-Support (LTS). But when you want to use a famous and functional ROS…
You have installed Ubuntu 22.04, and ROS 2 humble for Long-Time-Support (LTS). But when you want to use a famous and functional ROS…
#ROS #Gazebo #AerialRobotics
https://www.linkedin.com/posts/mjavadzallaghi_ros-gazebo-robotics-activity-7242159293074952193-ZCl-
https://www.linkedin.com/posts/mjavadzallaghi_ros-gazebo-robotics-activity-7242159293074952193-ZCl-
Linkedin
Mohammad Javad Zallaghi on LinkedIn: #ros #gazebo #robotics #aerialrobotics
Commanding [manually] an aerial robot equipped with RGB-D sensor in CTU MRS Gazebo simulator, in a dummy forest. I'll use this framework for my research and…
🐳2🫡2 2 1
#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 باید
را اجرا کنید و خروجی بگیرید و از روی Slave باید
اجرا بشود و خروجی بگیرید.
گام بعدی این هست که در فایل bashrc. هر دو کامپیوتر دو خط اضافه کنید. در Master:
و در Slave:
و تمام. چگونه چک کنید که شبکه برقرار است؟
کافی است در Master یک roscore اجرا بشود و شما در Slave میتوانید با دستور
تاپیکهای روی Master را ببینید.
این آموزش برای ROS 1 است و بر روی توزیعهای Melodic و Noetic خودم تست و پیادهسازی کردهام. در ROS 2 هنوز این کار را نکردهام اما فکر میکنم بصورت فنی آنجا حتی کار راحتتر باشد.
-----------
@roboticknowledge
ارتباط بین چند کامپیوتر با 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
داستان 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
در یک ربات مدرن به به یک ترکیب کارا از سنسورها و کامپیوتر و سختافزار کامل رسیدن کار پیچیدهای است. طراحی در رباتیک دانش زیادی میخواهد که در این مطلب کمی توضیح میدهم.
برای مثال شما نیاز به یک 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
پیادهسازی (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 گفته میشود. فرمول ریاضی این تبدیل بصورت زیر است:
در ROS یک کتابخانه وجود دارد به نام angles که این را پیادهسازی کردهاند و شما میتوانید این تبدیل را براحتی انجام دهید:
میتوانید داکیومنت همه توابع این کتابخانه را اینجا ببینید:
http://docs.ros.org/en/jade/api/angles/html/angles_8h.html
—————
@roboticknowledge
زوایای دوران را در بسیاری از مواقع دوست داریم به بازه [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