#robotic #odometry #algorithm
I'm a robot. Where am I?
I have published a lecture to explain odometry and a simple algorithm for its implementation in a two-wheel mobile robot.
For a mobile robot, the ability for self-positioning is crucial and basic for other capabilities. I want to teach you the theory, and algorithm of a simple Odometry algorithm based on the wheel's encoder of two-wheel mobile robots. I will employ the discussed algorithm in the next lecture in Webots to track the position of a turtle bot.
Link to the lecture: https://youtu.be/BqmoPWKZWGM
----------
t.me/roboticknowledge
youtube.com/@roboticknowledge
I'm a robot. Where am I?
I have published a lecture to explain odometry and a simple algorithm for its implementation in a two-wheel mobile robot.
For a mobile robot, the ability for self-positioning is crucial and basic for other capabilities. I want to teach you the theory, and algorithm of a simple Odometry algorithm based on the wheel's encoder of two-wheel mobile robots. I will employ the discussed algorithm in the next lecture in Webots to track the position of a turtle bot.
Link to the lecture: https://youtu.be/BqmoPWKZWGM
----------
t.me/roboticknowledge
youtube.com/@roboticknowledge
YouTube
Odometry: Theory and Algorithm for two-wheel mobile robots
For a mobile robot, the ability for self-positioning is crucial and basic for other capabilities. I want to teach you the theory, and algorithm of a simple Odometry algorithm based on the wheel's encoder of two-wheel mobile robots. I will employ the discussed…
#ROS2
#Simulink
#Algorithm
#Design
#Tools
در ادامه امکانات مربوط به لاگهای ROS (فایلهای bag)، مورد محبوب دیگری نیز وجود دارد: Simulink
در سیمولینک بلوکهایی برای خواندن این فایلها وجود دارد. برای مثال من در تصویر دیتای IMU را (شتاب خطی) ترسیم کردهام. این امکان به شما در توسعه الگوریتم سرعت بالایی میدهد؛ براحتی فایلهای لاگ را بالا میاورید و با دادههای آن الگوریتم را توسعه میدهید و تست میکنید - همین کار را من برای Localization دارم انجام میدهم. نهایتا میتوان از الگوریتم نیز کد هسته آن را تولید کرد — توسط Code Generation (بعدا در این مورد صحبت خواهم کرد).
—————
@roboticknowledge
#Simulink
#Algorithm
#Design
#Tools
در ادامه امکانات مربوط به لاگهای ROS (فایلهای bag)، مورد محبوب دیگری نیز وجود دارد: Simulink
در سیمولینک بلوکهایی برای خواندن این فایلها وجود دارد. برای مثال من در تصویر دیتای IMU را (شتاب خطی) ترسیم کردهام. این امکان به شما در توسعه الگوریتم سرعت بالایی میدهد؛ براحتی فایلهای لاگ را بالا میاورید و با دادههای آن الگوریتم را توسعه میدهید و تست میکنید - همین کار را من برای Localization دارم انجام میدهم. نهایتا میتوان از الگوریتم نیز کد هسته آن را تولید کرد — توسط Code Generation (بعدا در این مورد صحبت خواهم کرد).
—————
@roboticknowledge
👍3
#ROS2 #Time #Algorithm
در پردازش دادههای سنسور زمان اهمیت فراوانی دارد. الگوریتم شما باید دادهها را بصورت Syncron از سنسورها یا نودهای دیگر دریافت کند. چنانچه این اتفاق محقق نشد، الگوریتم ربات شما محاسبات غلطی انجام خواهد داد (در زمان واقعی از دادههای نامعتبر استفاده شده است).
در سیستمهای متکی بر Event مانند سیستم Pub/Sub موجود در ROS، ممکن است به هر دلیلی دیتا بصورت Sync به الگوریتم شما نرسد. برای کنترل آن شرایط، ابتدا باید متوجه بشوید که تاخیر در رسیدن داده وجود دارد. اما چگونه؟
هر سنسوری در دیتایی که منتشر میکند، در فیلد هدر یک Timestamp به داده میزند. کافی است شما هنگام دریافت داده آن Timestamp را را با زمان سیستم دریافت کننده مقایسه و کنترل کنید.
همچنین این کار را برای آنچه که الگوریتم نیز منتشر میکند باید انجام بدهید. برای مثال، من در انتشار دادههای خروجی نود موقعیتیابی ربات Timestamp را به این شکل در ++C پر میکنم:
—————
@roboticknowledge
در پردازش دادههای سنسور زمان اهمیت فراوانی دارد. الگوریتم شما باید دادهها را بصورت Syncron از سنسورها یا نودهای دیگر دریافت کند. چنانچه این اتفاق محقق نشد، الگوریتم ربات شما محاسبات غلطی انجام خواهد داد (در زمان واقعی از دادههای نامعتبر استفاده شده است).
در سیستمهای متکی بر Event مانند سیستم Pub/Sub موجود در ROS، ممکن است به هر دلیلی دیتا بصورت Sync به الگوریتم شما نرسد. برای کنترل آن شرایط، ابتدا باید متوجه بشوید که تاخیر در رسیدن داده وجود دارد. اما چگونه؟
هر سنسوری در دیتایی که منتشر میکند، در فیلد هدر یک Timestamp به داده میزند. کافی است شما هنگام دریافت داده آن Timestamp را را با زمان سیستم دریافت کننده مقایسه و کنترل کنید.
همچنین این کار را برای آنچه که الگوریتم نیز منتشر میکند باید انجام بدهید. برای مثال، من در انتشار دادههای خروجی نود موقعیتیابی ربات Timestamp را به این شکل در ++C پر میکنم:
auto current_time = std::chrono::system_clock::now();
auto timestamp = std::chrono::duration_cast<std::chrono::seconds>(current_time.time_since_epoch());
message.header.stamp.sec = static_cast<uint32_t>(timestamp.count());
message.header.stamp.nanosec = static_cast<uint32_t>((current_time.time_since_epoch() - timestamp).count());
—————
@roboticknowledge
👍5
#Simulink #C #Cpp #Algorithm #CodeGeneration #Python
شبیهسازهای مطرح RL همگی از Python استفاده میکنند و شما یک ++C/C نویس هستید. تکلیف چیست؟
شاید برای افرادی که از Python برای کار رباتیکی خود استفاده میکنند و زیاد از ++C/C در کار خود استفاده نکردهاند، پایتون یک بهشت باشد اما برای افرادی که به ++C/C نویسی عادت دارند، نوشتن Python بصورت فراتر از یک اسکریپت ساده عذاب بزرگی خواهد بود از بس که محدودیت دارد این زبان و وقتی قدرت C بزرگ را بدانید متوجه خواهید شد - خصوصا اگر C را از Simulink تولید کنید!
حال تصویر کنید در Isaac Gym یا هر Gym دیگری ربات و محیط شما باید با اسکریپت Python شبیهسازی و کنترل شود — که دردناک خواهد بود برای همان دسته توسعهدهنگان صنعتیتر.
اما خیلی راحت میتوان الگوریتم را با C نوشت (یا کد C از آن در Simulink تولید کرد) و آن را کامپایل کرد و یک کتابخانه AlgoSDK.so از آن تولید کرد. از اینجا به بعد براحتی مینوانید فایل so. کتابخانه C را در اسکریپت مینیمال پایتون خود صدا بزنید:
—————
@roboticknowledge
شبیهسازهای مطرح RL همگی از Python استفاده میکنند و شما یک ++C/C نویس هستید. تکلیف چیست؟
شاید برای افرادی که از Python برای کار رباتیکی خود استفاده میکنند و زیاد از ++C/C در کار خود استفاده نکردهاند، پایتون یک بهشت باشد اما برای افرادی که به ++C/C نویسی عادت دارند، نوشتن Python بصورت فراتر از یک اسکریپت ساده عذاب بزرگی خواهد بود از بس که محدودیت دارد این زبان و وقتی قدرت C بزرگ را بدانید متوجه خواهید شد - خصوصا اگر C را از Simulink تولید کنید!
حال تصویر کنید در Isaac Gym یا هر Gym دیگری ربات و محیط شما باید با اسکریپت Python شبیهسازی و کنترل شود — که دردناک خواهد بود برای همان دسته توسعهدهنگان صنعتیتر.
اما خیلی راحت میتوان الگوریتم را با C نوشت (یا کد C از آن در Simulink تولید کرد) و آن را کامپایل کرد و یک کتابخانه AlgoSDK.so از آن تولید کرد. از اینجا به بعد براحتی مینوانید فایل so. کتابخانه C را در اسکریپت مینیمال پایتون خود صدا بزنید:
from ctypes import * #Import ctypes library
libc = CDLL("./AlgoSDK.so") #Load library
—————
@roboticknowledge
👍3👀2🫡2
Robotic Knowledge
#Simulink #C #Cpp #Algorithm #CodeGeneration #Python شبیهسازهای مطرح RL همگی از Python استفاده میکنند و شما یک ++C/C نویس هستید. تکلیف چیست؟ شاید برای افرادی که از Python برای کار رباتیکی خود استفاده میکنند و زیاد از ++C/C در کار خود استفاده نکردهاند،…
#Simulink #C #Cpp #Algorithm #CodeGeneration #Python
پایتون در توسعه و پیادهسازی الگوریتم کنترلی = SHIT
بسیار افراد متخصص و صاحب موقعیت در آکادمیا دیدهام که نمیدانند Code Generation چیست و چگونه باید از قابلیتهای آن استفاده کنند — واقعا نصف عمرشان بر فنا هست حتی بیشتر! در رباتیک واقعی و هر جا که به سیستم امبدد منتهی شود، پایتون یک SHIT است — البته برای افرادی که با ++C/C پیمان قلبی دارند و میدانند چقدر قابل هستند!
و وقتی برای آن دسته از افراد مواردی از امکانات Code Generation ارائه میکنم، متوجه میشوم حسرت را در نگاهشان که وای از چه نعمتی غافل بودیم. 😎
—————
@roboticknowledge
پایتون در توسعه و پیادهسازی الگوریتم کنترلی = SHIT
بسیار افراد متخصص و صاحب موقعیت در آکادمیا دیدهام که نمیدانند Code Generation چیست و چگونه باید از قابلیتهای آن استفاده کنند — واقعا نصف عمرشان بر فنا هست حتی بیشتر! در رباتیک واقعی و هر جا که به سیستم امبدد منتهی شود، پایتون یک SHIT است — البته برای افرادی که با ++C/C پیمان قلبی دارند و میدانند چقدر قابل هستند!
و وقتی برای آن دسته از افراد مواردی از امکانات Code Generation ارائه میکنم، متوجه میشوم حسرت را در نگاهشان که وای از چه نعمتی غافل بودیم. 😎
—————
@roboticknowledge
👍2🤯1🍾1👀1