#Isaac #IsaacSim #Nvidia #ROS2
تکانه پشت سر توسعه رباتیک توسط Nvidia رشد شدیدی کرده است و خوشبختانه همه چیز Open Source هست. افرادی که این ریسمان را بگیرند میتوانند پیشگامان جهان باشند.
----------
@roboticknowledge
تکانه پشت سر توسعه رباتیک توسط Nvidia رشد شدیدی کرده است و خوشبختانه همه چیز Open Source هست. افرادی که این ریسمان را بگیرند میتوانند پیشگامان جهان باشند.
----------
@roboticknowledge
👍3
Robotic Knowledge
#Isaac #IsaacSim #IsaacRos #IsaacPerceptor #ROS2 ————— @roboticknowledge
#Isaac #IsaacSim #IsaacRos #IsaacPerceptor #ROS2
https://developer.nvidia.com/blog/create-design-and-deploy-robotics-applications-using-new-nvidia-isaac-foundation-models-and-workflows/
https://developer.nvidia.com/blog/create-design-and-deploy-robotics-applications-using-new-nvidia-isaac-foundation-models-and-workflows/
NVIDIA Technical Blog
Create, Design, and Deploy Robotics Applications Using New NVIDIA Isaac Foundation Models and Workflows
The application of robotics is rapidly expanding in diverse environments such as smart manufacturing facilities, commercial kitchens, hospitals, warehouse logistics, and agricultural fields.
#ROS2
#Callbacks
در ساختار نرمافزاری ROS2 رایج است که از callback functions برای subscribe کردن به یک topic استفاده کنیم. مثال آن این چنین است:
اما این روش بهینه نیست زیرا تعدد node ها منجر به تعدد callback ها و نهایتا بار زیاد بر روی CPU میشود. راه حل بهینه استفاده از متد take است.
یک مثال:
این ساختار توسط منبع تیم Autoware پیشنهاد شده است و مزیت آن جلوگیری از CPU Load است.
[Ref 1] [Ref 2]
—————
@roboticknowledge
#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
ROS Discourse
New documentation on how to take a message from a subscriber without executing a callback function
Hello everyone! Autoware Documentation provides a guideline to take a message from Subscription without executing any callback function. https://autowarefoundation.github.io/autoware-documentation/main/contributing/coding-guidelines/ros-nodes/topic-message…
👍2
#ROS2
#Autoware
به Autoware اشاره شد. یک استک نرمافزاری متن باز برای Autonomous Driving که بر اساس ROS ساخته شده است.
https://autoware.org/
—————
@roboticknowledge
#Autoware
به Autoware اشاره شد. یک استک نرمافزاری متن باز برای Autonomous Driving که بر اساس ROS ساخته شده است.
https://autoware.org/
—————
@roboticknowledge
Autoware
Home Page - Autoware
👍2
Robotic Knowledge
#Tools #CAD #URDF #SDF #Gazebo مدلهای شبیهسازی رباتی که همراه با mesh هستند و جزئیات خوبی دارند، توسط نرمافزارهای CAD آماده میشوند و به صورت URDF خروجی گرفته میشوند - نوشتن آنها با دست تقریبا غیرممکن است. امروز از صبح در حال یادگیری قابلیتهای نرمافزار…
#Tools #CAD
#URDF
#Gazebo #ROS2
نکته تکمیلی اول:
من از ورکبنچ CROSS برای ایجاد مدل URDF در FreeCAD استفاده میکنم.
تصویر از محیط FreeCAD من به همراه نمودار درختی ربات ایجاد شده با کمک CROSS گرفته شده است.
—————
@roboticknowledge
#URDF
#Gazebo #ROS2
نکته تکمیلی اول:
من از ورکبنچ CROSS برای ایجاد مدل URDF در FreeCAD استفاده میکنم.
تصویر از محیط FreeCAD من به همراه نمودار درختی ربات ایجاد شده با کمک CROSS گرفته شده است.
—————
@roboticknowledge
👍3
Robotic Knowledge
#Tools #CAD #URDF #Gazebo #ROS2 نکته تکمیلی اول: من از ورکبنچ CROSS برای ایجاد مدل URDF در FreeCAD استفاده میکنم. تصویر از محیط FreeCAD من به همراه نمودار درختی ربات ایجاد شده با کمک CROSS گرفته شده است. ————— @roboticknowledge
#Tools #CAD
#URDF
#Gazebo #ROS2
نکته تکمیلی دوم: CROSS آموزش ندارد. 😂 حتی داکیومنت خاصی هم ندارد!
با تعداد زیادی آزمون و خطا آموختم از آن استفاده کنم. ابزار Set Placement آنها که در تعریف مکان مفصل کاربردی است، باگ دارد و من راه دیگری برای تعریف مفصل پیدا کردم.
این ابزار توسط گروه یک استاد در دانشگاه پراگ جمهوری چک توسعه داده شده است - کلا در رباتیک این دانشگاه خدمات متن باز زیادی داده است - دمشان گرم.
—————
@roboticknowledge
#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
#URDF
#Gazebo #ROS2
نکته تکمیلی سوم:پس از تعریف مدل - شامل لینکها، مفاصل، هندسه واقعی و تصادف، کراس بصورت خودکار با تعریف ماده ویژگیهای اینرسی را محاسبه میکند. نهایتا یک پکیج راس 2 برای ربات تولید میکند که دارای لانچ فایل برای گزبو و آرویز نیز است! 🙂
—————
@roboticknowledge
👍3
Robotic Knowledge
#Tools #CAD #URDF #Gazebo #ROS2 نکته تکمیلی سوم:پس از تعریف مدل - شامل لینکها، مفاصل، هندسه واقعی و تصادف، کراس بصورت خودکار با تعریف ماده ویژگیهای اینرسی را محاسبه میکند. نهایتا یک پکیج راس 2 برای ربات تولید میکند که دارای لانچ فایل برای گزبو و آرویز…
#URDF #ROS2 #Gazebo #CAD #Tools
و نهایتا لانچ کردن خروجی!
فوقالعاده است.😊
حال هر ساختار رباتیکی که در ذهن دارید میتوانید با این مراحل از CAD به Gazebo و ROS2 برسانید و کابوس URDF را به پایان برسانید.
—————
@roboticknowledge
و نهایتا لانچ کردن خروجی!
فوقالعاده است.😊
حال هر ساختار رباتیکی که در ذهن دارید میتوانید با این مراحل از CAD به Gazebo و ROS2 برسانید و کابوس URDF را به پایان برسانید.
—————
@roboticknowledge
👍3
#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…
#ROS2 #Tools
توسعهدهندهای یک برنامه درست کردهاند به نام Turtle Nest که کار دستور
را بصورت GUI انجام میدهد و برای پکیج درست کردن و دپندنسی اضافه کردن دیگر درگیر Command Line نمیشود آدم! استفاده نکردهام اما این تیپ کارها دوست داشتنی هستند.🙂
https://discourse.ros.org/t/introducing-turtle-nest-gui-for-ros-2-package-creation/39229
----------
@roboticknowledge
توسعهدهندهای یک برنامه درست کردهاند به نام 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
ROS Discourse
Introducing Turtle Nest: GUI for ROS 2 package creation
Hi everyone, I’m here to announce Turtle Nest - a GUI application to create ROS 2 packages. I started this project recently to make ROS 2 package creation easier and to reduce the likelihood of user-made errors. I believe Turtle Nest will help the beginners…
⚡3 1 1
#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 در رفرنس خود گفته است که میتوان با آرگومان executer-- اجرا کننده را تعریف کرد، که باز هم کار نکرد! نهایتاً آنچه که colcon لازم دارد را در محیط base آناکندا نصب کردم و مسأله حل شد.
----------
@roboticknowledge
اخیرا دچار یک 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
#ROS2
کدی به شما داده میشود، با ابعادی بزرگ.
این کد در واقع یک استک کنترلی رباتیک است که بر اساس استک دیگری چند سال پیش (۳ سال) توسعه یافته است. حال شما وارد میشوید که از آن استفاده کنید، اما استک پایه در این چند سال مداوم آپدیت شده است (آپدیت سنگین).
اولین چیزی که لازم دارید تا کد قدیمی را با پایه جدید سازگار کنید، طبیعتاً دانش آن دو سیستم است. دومین چیزی که لازم دارید، اعصاب پولادین است. چرا؟
خطاها میتوانند در compile time رخ بدهند یا در run time. شما هنگام compile time میتوانید همیشه دیباگ کنید، زیرا کامپایلر بنده خدا به شما سر نخ میدهد. اما در run time شما همیشه امکان traceback ندارید. در آن نقطه شرط ادامه دادن وجود اعصاب پولادین است! ریزبینی هم بسیار مهم است که چطور خطاها را از بین ببرید.
در مجموع #رباتیک یک ویترین خوشگل دارد که همه میبینند و به عشق آن ویترین رویای بزرگ شدن در آن را دارند، اما در حقیقت پشت ویترین چیزهایی وجود دارد پیچیده، که کار هر کسی نیست رسیدن به یک نقطه خوب.
----------
@roboticknowledge
کدی به شما داده میشود، با ابعادی بزرگ.
این کد در واقع یک استک کنترلی رباتیک است که بر اساس استک دیگری چند سال پیش (۳ سال) توسعه یافته است. حال شما وارد میشوید که از آن استفاده کنید، اما استک پایه در این چند سال مداوم آپدیت شده است (آپدیت سنگین).
اولین چیزی که لازم دارید تا کد قدیمی را با پایه جدید سازگار کنید، طبیعتاً دانش آن دو سیستم است. دومین چیزی که لازم دارید، اعصاب پولادین است. چرا؟
خطاها میتوانند در compile time رخ بدهند یا در run time. شما هنگام compile time میتوانید همیشه دیباگ کنید، زیرا کامپایلر بنده خدا به شما سر نخ میدهد. اما در run time شما همیشه امکان traceback ندارید. در آن نقطه شرط ادامه دادن وجود اعصاب پولادین است! ریزبینی هم بسیار مهم است که چطور خطاها را از بین ببرید.
در مجموع #رباتیک یک ویترین خوشگل دارد که همه میبینند و به عشق آن ویترین رویای بزرگ شدن در آن را دارند، اما در حقیقت پشت ویترین چیزهایی وجود دارد پیچیده، که کار هر کسی نیست رسیدن به یک نقطه خوب.
----------
@roboticknowledge
#Isaac #ROS2
از طرفی Omni Graph با نسخه ۴.۱ و بالاتر ویژگیهای جدید را دارد! طبیعتاً Isaac ROS بسیار با ارزشتر است، پس ورژن را بر میگردانم. اما meme «اسیر شدیم» برازنده شرایط است!
----------
@roboticknowledge
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
چند وقت پیش دوستی از من پرسید کار تو چیست؟ گفتم کار من رباتیک است؛ کمی بیشتر توضیح دهم، کنترل ایمن ربات برای حرکت است (مسأله را باز نکردم). پرسید با چه روشی؟ گفتم کنترل کلاسیک را قرار است با روشهای مبتنی بر یادگیری ترکیب کنیم. سپس گفت که پس تو رباتیک کار نمیکنی و هوش مصنوعی کار میکنی!!!
شوکه شدم و کمی بحث کردیم. فایده نداشت چون کسی که رباتیک کار نکرده نمیفهمد ابعاد کاری رباتیک را. این پست لینکدین را دیدم و یاد آن بحث افتادم:
https://www.linkedin.com/posts/enzo-ghisoni-robotics_ros2-robotics-opensource-activity-7258827911242076160-c8A3
نتیجه اینکه رباتیک را کسانی درک میکنند که ابعاد آن را چشیدهاند. کسی با صرف کار نظری، یا شبیهسازی تنها، یا فقط جنبه مکانیکی یا الکتریکی یا کامپیوتری دیدن، بدون در نظر گرفتن ابعاد دیگر، نمیتواند درک کند رباتیک چیست و چرا افرادی که معتقد هستند Robotics کار میکنند خیلی تفاوت دارند با افرادی که صرفا هوش مصنوعی یا کنترل یا هر چیز دیگری به تنهایی کار میکنند.
شب بخیر! :)))))
----------
@roboticknowledge
Linkedin
Enzo Ghisoni on LinkedIn: #ros2 #robotics #opensource #community #startup | 12 comments
The life of a robotics engineer in a start-up
The thing I like most about the start-up environment is that everything has to be done, and if nobody knows how… | 12 comments on LinkedIn
The thing I like most about the start-up environment is that everything has to be done, and if nobody knows how… | 12 comments on LinkedIn
#ROS2 #Gazebo
برای انتقال داده از ROS2 به Gazebo و برعکس به یک پل به نام ros_ign_bridge نیاز است که در واقع خود یک ROS پکیج است.
وقتی شبیهسازی در Gazebo اجرا میشود، دادهها به خودی خود در برابر ROS دچار expose نمیشوند و شما باید تاپیکهای مطلوب را پل کنید که با این پکیج ممکن میشود.
این یک مثال است که من چگونه در Launch فایل تاپیک سرعت موتور در ROS را به همان تاپیک در Ignition پل میکنم:
اینجا بطور مشخص داده تاپیک /model/X4/command/motor_speed/m0 که از نوع std_msgs/msg/Float32 است از ROS به Ign ارسال میشود و نوع نهایی آن نیز ignition.msgs.Float خواهد شد.
----------
@roboticknowledge
برای انتقال داده از 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