Robotic Knowledge
379 subscribers
242 photos
62 videos
2 files
170 links
دانش و برنامه‌نویسی برای رباتیک
Download Telegram
#Isaac #IsaacSim #Nvidia #ROS2

تکانه پشت سر توسعه رباتیک توسط Nvidia رشد شدیدی کرده است و خوشبختانه همه چیز Open Source هست. افرادی که این ریسمان را بگیرند می‌توانند پیشگامان جهان باشند.
----------
@roboticknowledge
👍3
#ROS2
#Callbacks

در ساختار نرم‌افزاری ROS2 رایج است که از callback functions برای subscribe کردن به یک topic استفاده کنیم. مثال آن این چنین است:
    auto topic_callback =
[this](std_msgs::msg::String::UniquePtr msg) -> void {
RCLCPP_INFO(this->get_logger(), "I heard: '%s'", msg->data.c_str());
};
subscription_ =
this->create_subscription<std_msgs::msg::String>("topic", 10, topic_callback);


اما این روش بهینه نیست زیرا تعدد node ها منجر به تعدد callback ها و نهایتا بار زیاد بر روی CPU می‌شود. راه حل بهینه استفاده از متد take است.
Subscription->take()

یک مثال:
  SteeringReport::SharedPtr msg;
rclcpp::MessageInfo msg_info;
if (sub_->take(msg, msg_info)) {
// processing and publishing after this


این ساختار توسط منبع تیم Autoware پیشنهاد شده است و مزیت آن جلوگیری از CPU Load است.

[Ref 1] [Ref 2]
—————
@roboticknowledge
👍2
#ROS2
#Autoware

به Autoware اشاره شد. یک استک نرمافزاری متن باز برای Autonomous Driving که بر اساس ROS ساخته شده است.
https://autoware.org/
—————
@roboticknowledge
👍2
Robotic Knowledge
#Tools #CAD #URDF #Gazebo #ROS2 نکته تکمیلی اول: من از ورک‌بنچ CROSS برای ایجاد مدل URDF در FreeCAD استفاده می‌کنم. ‌ تصویر از محیط FreeCAD من به همراه نمودار درختی ربات ایجاد شده با کمک CROSS گرفته شده است. ————— @roboticknowledge
#Tools #CAD
#URDF
#Gazebo #ROS2

نکته تکمیلی دوم: CROSS آموزش ندارد. 😂 حتی داکیومنت خاصی هم ندارد!
با تعداد زیادی آزمون و خطا آموختم از آن استفاده کنم. ابزار Set Placement آن‌ها که در تعریف مکان مفصل کاربردی است، باگ دارد و من راه دیگری برای تعریف مفصل پیدا کردم.
این ابزار توسط گروه یک استاد در دانشگاه پراگ جمهوری چک توسعه داده شده است - کلا در رباتیک این دانشگاه خدمات متن باز زیادی داده است - دمشان گرم.
—————
@roboticknowledge
👍4
Robotic Knowledge
#Tools #CAD #URDF #Gazebo #ROS2 نکته تکمیلی دوم: CROSS آموزش ندارد. 😂 حتی داکیومنت خاصی هم ندارد! با تعداد زیادی آزمون و خطا آموختم از آن استفاده کنم. ابزار Set Placement آن‌ها که در تعریف مکان مفصل کاربردی است، باگ دارد و من راه دیگری برای تعریف مفصل پیدا…
#Tools #CAD
#URDF
#Gazebo #ROS2

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

—————
@roboticknowledge
👍3
#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
#ROS2 #Tools

توسعه‌دهنده‌ای یک برنامه درست کرده‌اند به نام Turtle Nest که کار دستور
ros2 pkg create 

را بصورت GUI انجام می‌دهد و برای پکیج درست کردن و دپندنسی اضافه کردن دیگر درگیر Command Line نمی‌شود آدم! استفاده نکرده‌ام اما این تیپ کارها دوست داشتنی هستند. 🙂

https://discourse.ros.org/t/introducing-turtle-nest-gui-for-ros-2-package-creation/39229

----------
@roboticknowledge
Please open Telegram to view this post
VIEW IN TELEGRAM
311
#ROS2 #Build #Conflict

اخیرا دچار یک conflict در سیستم بیلد خود برای ROS 2 humble شدم. این conflict ناشی از انتخاب پایتون Anaconda بجای پایتون سیستم توسط colcon ایجاد شده بود.

خود Open Robotics می‌گوید که conflict بین colcon و Anaconda وجود دارد و توصیه کرده هر دو با هم نباشند. توصیه غلطی است زیرا شاید شخصی به هر دو نیاز داشته باشد!

راه حل چیست؟
ابتدا باید ببینیم که خود conflict چه بوده است. Conflict این بود که executer انتخاب شده توسط colcon هنگام اجرای دستور colcon build، از Anaconda انتخاب می‌شود نه سیستم.
من آمدم و در محیط base برای Anaconda، پایتون ۱۰ و پکیج ament_pkg را نصب کردم. محیط base را فعال کردم، در آن ROS 2 را source کردم و نهایتا دستور
colcon build

بدون خطا اجرا شد.

راه‌های دیگری مثل دستکاری متغیرهای محیطی را تست کردم و جواب نداد. همچین colcon در رفرنس خود گفته است که می‌توان با آرگومان executer-- اجرا کننده را تعریف کرد، که باز هم کار نکرد! نهایتاً آنچه که colcon لازم دارد را در محیط base آناکندا نصب کردم و مسأله حل شد.
----------
@roboticknowledge
41
😁4🐳1
#ROS2
کدی به شما داده می‌شود، با ابعادی بزرگ.
این کد در واقع یک استک کنترلی رباتیک است که بر اساس استک دیگری چند سال پیش (۳ سال) توسعه یافته است. حال شما وارد می‌شوید که از آن استفاده کنید، اما استک پایه در این چند سال مداوم آپدیت شده است (آپدیت سنگین).

اولین چیزی که لازم دارید تا کد قدیمی را با پایه جدید سازگار کنید، طبیعتاً دانش آن دو سیستم است. دومین چیزی که لازم دارید، اعصاب پولادین است. چرا؟

خطاها می‌توانند در compile time رخ بدهند یا در run time. شما هنگام compile time می‌توانید همیشه دیباگ کنید، زیرا کامپایلر بنده خدا به شما سر نخ می‌دهد. اما در run time شما همیشه امکان traceback ندارید‌‌. در آن نقطه شرط ادامه دادن وجود اعصاب پولادین است! ریزبینی هم بسیار مهم است که چطور خطاها را از بین ببرید.

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

----------
@roboticknowledge
82
#Isaac #ROS2

Isaac Sim 4.1 and Isaac Sim 4.2 are not compatible with any version of Isaac ROS.


از طرفی Omni Graph با نسخه ۴.۱ و بالاتر ویژگی‌های جدید را دارد! طبیعتاً Isaac ROS بسیار با ارزش‌تر است، پس ورژن را بر می‌گردانم. اما meme «اسیر شدیم» برازنده شرایط است!
----------
@roboticknowledge
😁5
#رباتیک #تجربه #داستان

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

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

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

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

شب بخیر! :)))))
----------
@roboticknowledge
#ROS2 #Gazebo

برای انتقال داده از ROS2 به Gazebo و برعکس به یک پل به نام ros_ign_bridge نیاز است که در واقع خود یک ROS پکیج است.

وقتی شبیه‌سازی در Gazebo اجرا می‌شود، داده‌ها به خودی خود در برابر ROS دچار expose نمی‌شوند و شما باید تاپیک‌های مطلوب را پل کنید که با این پکیج ممکن می‌شود.

این یک مثال است که من چگونه در Launch فایل تاپیک سرعت موتور در ROS را به همان تاپیک در Ignition پل می‌کنم:

Node(
package='ros_ign_bridge',
executable='parameter_bridge',
arguments=['/model/X4/command/motor_speed/m0@std_msgs/msg/Float32@ignition.msgs.Float'],
output='screen'
),

اینجا بطور مشخص داده تاپیک /model/X4/command/motor_speed/m0 که از نوع std_msgs/msg/Float32 است از ROS به Ign ارسال می‌شود و نوع نهایی آن نیز ignition.msgs.Float خواهد شد.
----------
@roboticknowledge
🍾1👨‍💻1