Robotic Knowledge
387 subscribers
242 photos
62 videos
2 files
172 links
دانش و برنامه‌نویسی برای رباتیک
Download Telegram
Robotic Knowledge
#Cpp در ++C می‌توانید متغیرهای پیچیده را به کمک لامبدا فانکشن‌ها براحتی initialize کنید - با این ساختار: const auto var = [&] { return /* some complex code here */; }(); // call it! یک مثال مشخص چنین است: const int myVariable = [&] { if (bFirstContidion)…
#Cpp
مثال رباتیکی آن در یکی از آموزش‌های moveit2:
// Set a target Pose
auto const target_pose = []{
geometry_msgs::msg::Pose msg;
msg.orientation.w = 1.0;
msg.position.x = 0.28;
msg.position.y = -0.2;
msg.position.z = 0.5;
return msg;
}();
move_group_interface.setPoseTarget(target_pose);

// Create a plan to that target pose
auto const [success, plan] = [&move_group_interface]{
moveit::planning_interface::MoveGroupInterface::Plan msg;
auto const ok = static_cast<bool>(move_group_interface.plan(msg));
return std::make_pair(ok, msg);
}();

متغیر target_pose و جفت [success, plan] به این زیبایی initialize شده‌اند - در نگاه اول شاید کمی سخت باشد، اما در واقع با لامبدا و IIFE خیلی ساده و تمیز شده است.
—————
@roboticknowledge
👍2
#ROS2 #moveit2

پکیج ROS2 برای بازوی رباتیک خود GENERATE کنید!

در استک moveit2 یک ابزار وجود دارد به نام Moveit Setup Assistant که تنها URDF ربات شما را لازم دارد و در خروجی یک بسته ROS2 تولید می‌کند که دارای کانفیگ کامل بازوی رباتیک شما به همراه کنترل‌کننده مفصلی و گریپری، دسته‌های حرکتی (مفاصل)، پوسچرهای مهم تعریف شده (مانند home یا gripper close)، انواع لانچ فایل، کنترل‌کننده ros2_control با قابلیت انتخاب اینترفیس و موارد مهمی دیگری مانند Perception است! تمام الگوریتم‌های Planning و Control موجود در Moveit2 را بدون کمترین سختی به این ترتیب می‌توان برای هر بازوی رباتیکی که URDF دارد استفاده کرد!
AWSOME!
—————
@roboticknowledge
👍4
#Manipulator
مسابقه رباتیک پارچه یا Cloth Competition

در این مسابقه دو بازوی رباتیک باید به مانند فردی که یک پارچه را بدون چروک و روی هم افتادگی با دستانش باز می‌کند، باز کنند و نگه دارند.
در مقابل دو بازوی رباتیک یک سیستم Depth Camera وجود دارد که داده‌های پایپلاین Perception را فراهم می‌کند. فیلم مسابقه جالب است:
https://youtu.be/716P6zG7NLc?si=whlMID7f2W660Sh6

شما چه الگوریتم تصمیم‌گیری را برای چنین چالشی طراحی می‌کنید؟ در ذهن خود فکر کنید و پاسخ دهید - تمرین خوبی هست.🙂
----------
@roboticknowledge
👍4
Robotic Knowledge
#Simulink #C #Cpp #Algorithm #CodeGeneration #Python شبیه‌سازهای مطرح RL همگی از Python استفاده می‌کنند و شما یک ++C/C نویس هستید. تکلیف چیست؟ شاید برای افرادی که از Python برای کار رباتیکی خود استفاده می‌کنند و زیاد از ++C/C در کار خود استفاده نکرده‌اند،…
#Cpp #C #Python
ابزار pybind11 برای تبدیل کتابخانه ++C به ماژول پایتون

قبلا درباره اینکه روش کلی فراخوانی کد C در پایتون چیست، به ماژول ctypes اشاره کرده بودیم - اما محدودیت‌هایی در استفاده از آن وجود دارد. راه حرفه‌ای‌تری که اخیرا پیدا کرده‌ام - مختص استفاده از کدهای ++C در پایتون و پشتیبان‌کننده OOP موجود در ++C - ابزار pybind11 است:
https://github.com/pybind/pybind11
—————
@roboticknowledge
#منهای_رباتیک
در فیلم میان‌ستاره‌ای (Interstellar) صحنه‌ای وجود دارد که در آن کوپر (Cooper)، فرمانده فضاپیما، مجبور است فضاپیمای خود را به کشتی مادر اما گردان متصل کند. برای این کار باید نرخ گردش چرخشی فضاپیما و کشتی فضایی را یکسان کند و در شرایط ایجاد شده متصل شود. ربات در شرایطی که کوپر تحت شتاب نمی‌تواند کاری کند، دستور میگیرد تا کار را به سرانجام برساند.
این صحنه به همراه اجرای زنده موسیقی آن توسط Hans Zimmer بسیار با ارزش است:
https://www.youtube.com/watch?v=1YoSdfrb5GM&list=RDva1oiojnGrA&index=2
گاهی اوقات احتیاط در کار را باید کنار گذاشت - زیرا زمان احتیاط وجود ندارد.
به قول کوپر:
No Time for Caution

—————
@roboticknowledge
#Isaac #IsaacSim #Nvidia #ROS2

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

فضا یکی از زمین‌های بازی پیشگامان بوده و است. امروز شرکت مشهور موفقیتی کسب کرده که مبارکشان باد.

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

این هدف والای شخصی من است: روزی ربات‌هایی با اسم‌های پارسی خواهم ساخت تا زندگی بشر را بهتر کنند و نا ممکن‌ها را ممکن. گرچه دست ما از امکانات و شرایط به دور است، اما افکار ما چون پرنده‌هایی بلند پرواز هستند که با قدرت سخت‌کوشی و لطف آنکه باید (خداوند) ما را به مقصد میرسانند.
—————
@roboticknowledge
👍11
#منهای_رباتیک #تجربه
مدیریت پروژه یا Project Management
#Project_Management #PM

از حضور در صنعت می‌توان درس‌های بزرگی گرفت، مدیریت پروژه یکی از آن‌ها است. اگر PM شما کار خود را درست انجام ندهد، کنترل امور تیم از دست خواهد رفت و محصول به مشتری نخواهد رسید و عواقب بعدی ظاهر می‌شوند!

برنامه‌نویس‌ها باید اصول PM را دنبال کنند تا بدانند کجای نقشه راه یا Road Map هستند و در صنعت این بحث بسیار جدی‌تر است. پس از 2.5 سال دوری از دانشگاه قرار است دوباره وارد دانشگاه شوم و دکتری خود را ادامه دهم، اما در این فاصله حدود 1 سال و 3 ماه برای شرکتی چینی کار کردم که در آن به عنوان مهندس الگوریتم در حال توسعه و تطبیق نرم‌افزار خودرو برای رانندگی خودکار در سطوح مختلف برای خودروسازهای مطرح چینی و آمریکایی بودم. انواع روش‌های PM را با آزمون و خطا دنبال کردیم و دعواهای زیادی داشتیم و بعضی مواقع خوشحال و بعضی مواقع ناراحت بودیم - اما برآیند مثبت است وقتی تیم تا حدی حرفه‌ای باشد.

اکنون دید من نسبت به دکتری یک پروژه R&D صنعتی منعطف در محیط آکادمیک است (نه چیزی که عمده افراد وقتی بدون کار صنعتی مفید، پشت سر هم ادامه تحصیل می‌دهند) و علاوه بر دانش نظری و مهارت‌های رباتیکی، یک ابزار قوی در دستانم دارم که مهارت‌های PM شکل گرفته از صنعت است! ما یک کارگروه توسعه نرم‌افزار رباتیک در مرکز تحقیقاتی خود داریم که منه تازه وارد به نظریه‌پرداز روش مدیریت کردن امور آن‌ها تبدیل شده‌ام. 🙂😎 با کارهایی که انجام می‌دهیم، کارها سرعت بهتری دارد و همه می‌دانند که چه می‌کنند و باید چه کنند و چطور به هدف خواهیم رسید.

نکته این است: ابعاد دیگر را در خود رشد دهید تا شتاب به حرکت خود بدهید و کیفیت کار خوبی داشته باشید. برای همه ما انبوهی از چیزها وجود دارد که یاد بگیریم،‌ اما مهارت‌های نرم مثل PM واقعا نیاز جدی هستند (و تفاوت‌ساز) که اگر یاد نگیریم، خود را محدود کرده‌ایم.
—————
@roboticknowledge
👍9
#توسعه_نرم‌افزار #مدیریت_پروژه
#Software_Development #Project_Management

از روش‌های مطرح برای مدیریت پروژه توسعه نرم‌افزار روش Agile است که در واقع تعدادی اصل ساده است و می‌توانید در اینجا بیابید:
https://agilemanifesto.org/principles.html

برخی از این اصول در انواع پروژه‌ها قابل پی‌ریزی است و آشنایی ذهن با این موارد خوب است.
—————
@roboticknowledge
👍2
#Planning
#وسیله_خودران


در حرکت خودمختار [به اتوموبیل محدود نکردم و منظور ربات پرنده یا کشتی یا زیرسطحی و ... نیز می‌تواند باشد] طراح ریزی مسیر یا Path Planning اهمیت بسیاری دارد - ورودی مرجع کنترل‌کننده در این داده است. در بحث اتوموبیل خودران، به دلیل وجود انواع ماشین در اطراف، حضور افراد و قوانین رانندگی و ایمنی، این قضیه بسیار مهم است.
طرح‌ریزها یا Planner ها، بصورت rule-based هستند و بر اساس فرضیه‌ها توسعه داده شده‌اند تا در شرایط ترافیکی متفاوت، مسیرهای کنترلی مطلوب و منطقی که با اثبات ایمنی همراه هستند را برای کنترل‌کننده فراهم سازند.
اما با پیچیدگی شرایط، برای مثال تعدد ایجنت‌های خارجی، یک Planner مبتنی برrule چالش‌هایی خواهد داشت که ناشی از عدم قطعیت و محدود بودن دانش دینامیکی است. در اینجا AI وارد می‌شود و مفهومی به نام Planner مبتنی بر learning به وجود می‌آید که مزیت آن قابلیت انجام Planning های پیچیده بر اساس داده است - هر چند نیاز به یادگیری و training دارد و مهم‌تر اینکه ذاتا اثباتی برای ایمنی آن‌ها وجود ندارد.
ترکیب دو روش می‌تواند راه‌گشا باشد. یک مثال Hydra-MDP از تیم توسعه Nvidia است که مقاله آن در اینجا قابل رویت است. کد آن‌ها هنوز منتشر نشده، اما گویی بزودی خواهد شد.
—————
@roboticknowledge
👍2
#Tools
#Cpp
#AnalyticalDynamics
#OptimalControl

کتابخانه‌ای برای ++C و البته بصورت bind شده در Python وجود دارد که مسائل دینامیک چندجسمی را برای شما حل می‌کند. مدل می‌تواند براحتی بصورت URDF در ورودی تعریف شود.

این کتابخانه pinocchio نام دارد:
https://github.com/stack-of-tasks/pinocchio

همچنین این کتابخانه می‌تواند با CasADI که خود کتابخانه کنترل بهینه است نیز کار کند! فکر نکنید ربات‌های Boston Dynamics کنترل بهینه را از هیچ کامل در خود دارند بدون این ابزارها.

پیشروها با این‌ها و امثال این‌ها کارهای بزرگ می‌کنند. متاسفانه سیستم آموزشی کشور ما در قرن پیش مانده است و همین الان در بهترین دانشگاه‌های مملکت معادلات را بصورت اشتباه پیاده و غیر بهینه حل و برای جبران نتایج دست به تغییر دستی نتایج زده می‌شود! در هیچ دوره‌ای به این‌ها اشاره نمی‌کنند چون نمی‌دانند و این‌ها چیزهای مدرن هستند که تفاوت می‌سازند.
—————
@roboticknowledge
👍1🤯1
Robotic Knowledge
#Tools #Cpp #AnalyticalDynamics #OptimalControl کتابخانه‌ای برای ++C و البته بصورت bind شده در Python وجود دارد که مسائل دینامیک چندجسمی را برای شما حل می‌کند. مدل می‌تواند براحتی بصورت URDF در ورودی تعریف شود. این کتابخانه pinocchio نام دارد: https://github.com/stack…
هر دو کتابخانه‌ای که معرفی شد توسط فاند اروپایی در اتحادیه اروپا توسعه داده شده است - این کارها را باز هم ادامه می‌دهند و چرخه نشر علم و ابزار آن را متوقف نمی‌کنند. اینکه علم را با بودجه خود پیاده می‌کنند و متن‌باز در اختیار جهان قرار می‌دهند فرهنگ بالایی است و قابل احترام.
—————
@roboticknowledge
👍5
#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
Media is too big
VIEW IN TELEGRAM
#China
#AGV
فیلمی که دوست عزیز ما در هتلی در چین گرفته‌اند و یک ربات را برای تحویل غذا به ساکنین هتل ارائه می‌دهد.
بسیار جالب است و توصیه می‌کنم به دیدن. چین از آن چه که فکر می‌کنید پیشرفته‌تر است!
----------
@roboticknowledge
👍3
Robotic Knowledge
#China #AGV فیلمی که دوست عزیز ما در هتلی در چین گرفته‌اند و یک ربات را برای تحویل غذا به ساکنین هتل ارائه می‌دهد. بسیار جالب است و توصیه می‌کنم به دیدن. چین از آن چه که فکر می‌کنید پیشرفته‌تر است! ---------- @roboticknowledge
#China
#AGV
۱. ربات با آسانسور به طبقه هدف می‌آید.
۲. ربات به روبروی درب واحد می‌رود و زنگ می‌زند.
۳. فرد احتمالا با ID Card قفل ربات را باز و بسته را می‌گیرد.
۴. ربات به چینی کارتونی چیزی می‌گوید! 😃
۵. ربات به سمت آسانسور می‌رود و سوار می‌شود.
۶. احتمالا در طبقه هدف وارد داک شارژر خود می‌شود.
----------
@roboticknowledge
👍2
#PM #Project_Management

سخنی زیبا، اما همراه با دروغی بزرگ!

اگر این ادعای آقای ماسک را صحیح بدانیم، آیا او می‌تواند یک موشک، یک خودرو، یک ربات انسان‌نما، یک شبکه اجتماعی، یک رمزارز، یک سیستم مالی و ... را طراحی کند؟ چون در هر صورت ایشان CEO همه اینها بوده و هستند. :)

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

در هر صورت این بخشی از ناعدالتی ذاتی این جهان است. ذهن‌های برتر باید خود CEO شوند - چنانچه تلاش برتر نیز داشته باشند - وگرنه ابزار این افراد خواهند شد. #PM بودن را یاد بگیرید. 😉

—————
@roboticknowledge
👍1👏1
#Tools #CAD
#URDF #SDF
#Gazebo

مدل‌های شبیه‌سازی رباتی که همراه با mesh هستند و جزئیات خوبی دارند، توسط نرم‌افزارهای CAD آماده می‌شوند و به صورت URDF خروجی گرفته می‌شوند - نوشتن آنها با دست تقریبا غیرممکن است.

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

من قبلاً SOLIDWORKS کار کرده بودم و یادگیری یک نرم‌افزار دیگر مثل FreeCAD در چنین حالتی بسیار ساده است زیرا معمولا روش‌ها و ابزارهای CAD همه قواعد یکسان دارند.

چرا FreeCAD؟

- رایگان است و کم حجم.
- ساده است و قوی.
- برای استخراج URDF یک workbench رباتیک دارد و خیلی راحت‌تر از SOLIDWORKS این کار را انجام می‌دهد.
- بر روی Ubuntu 22 نصب می‌شود.

گزینه‌های دیگری مثل Fusion360 یا Blender نیز با پلاگین خروجی URDF می‌دهند، اما اگر سادگی ملاک باشد، آن هم در سن ۲۶ سالگی برای یک رباتیک کار چیزی مثل Blender انتخاب خوبی نیست. ترجیح می‌دهم وقتم را صرف چیز پیچیده دیگری بکنم! 🙂
----------
@roboticknowledge
👍4