Robotic Knowledge
387 subscribers
242 photos
62 videos
2 files
172 links
دانش و برنامه‌نویسی برای رباتیک
Download Telegram
#نیازمندی
سلام دوستان.
من امروز به یک کامپیوتر (سرور) با GPU 3080/3090 و حداقل هشت هسته CPU و 32 گیگابایت رم و OS Ubuntu 20 نیاز جدی دارم.
با سیمرغ امیرکبیر و GPURUN صحبت کردم، سیستم آزاد ندارند - البته سرعت نت سیمرغ هم واقعا جالب نیست طبق تجربه خودم.
آیا مرکزی رو سراغ دارید که بتونه چنین چیزی رو در اختیارم قرار بده در لحظه؟ ممنون اگر می‌تونید راهنمایی کنید!
این آی دی خودم هست: @MJavadZallaghi
🫡2
سال نو پارسی و باستانی ما ایرانیان بر همه عزیزان مبارک باشه!
🍎🟩
آرزوی سلامتی، شادی و پیشرفت می‌کنم براتون.

این هفته خبرهای بسیار جالبی در دنیای رباتیک مطرح شد که خرد خرد پست می‌کنم! :=]

—————
@roboticknowledge
👏11
Robotic Knowledge
#ros2webots https://www.linkedin.com/feed/update/urn:li:activity:7173544868470894592/
#تجربه #ros2webots
پروژه‌های ساده و جذاب در رباتیک + ترکیب طلایی LinkedIn + GitHub

این پست من در لینکدین توسط Open Robotics بازنشر داده شد و حدود 19 هزار ایمپرشن تا اکنون گرفته است!
پس از آن سیلی از درخواست اتصال پدیدار شد که عمدتا حساب‌های تایید شده با شبکه قوی در رباتیک بودند.
حضور و فعالیت حرفه‌ای در LinkedIn و ‌GitHub برای شبکه‌سازی غنی در رباتیک ارزش فراوانی دارد — البته صبر و انرژی قابلی هم نیاز خواهد داشت. درس شخصی برای من این است که با تعریف کردن پروژه‌های متن باز،‌ ساده و جذاب (به مانند کاری که من برای پروژه ros2webots انجام دادم) برای گرفتن موقعیت‌های خوب یا حداقل جذب توجه افراد موقعیت‌دار می‌نوان شانس خود را افزایش داد.
—————
@roboticknowledge
👍15
#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 را در اسکریپت مینیمال پایتون خود صدا بزنید:
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
👍2🤯1🍾1👀1
#موقعیت_شغلی

چنانچه:

برنامه‌نویسی ++C/C را دوست دارید و در آن بک‌گراند دارید
با مباحث مهندس کنترل و الگوریتم‌های کنترل آشنا هستید
به توسعه نرم‌افزار برای ADAS و رانندگی خودمختار علاقه دارید
و به کار تیمی و اخلاق حرفه‌ای متعهد هستید

ما در یک شرکت چینی فعال در صنعت توسعه نرم‌افزار خودران می‌توانیم شما را به عنوان نیروی جدید خود داشته باشیم (پس از طی مراحل مرسوم). موقعیت کاری ریموت است اما رفتار سازمانی و حرفه‌ای کاملا حاکم است (5 روز در هفته، 9 صبح تا 18).

در صورت علاقه رزومه خود را برای من ایمیل کنید:
[email protected]
با چنانچه سوالی داشتید مستقیم به من پیام بدهید:
@MJavadZallaghi
👍4
#ربات_انسان_نما #حرکت_ترکیبی
انسان‌نمای پرنده!
—————
@roboticknowledge
👍1
#AGV #Iran
در این مطلب محصول رباتیک یک شرکت ایرانی برای دسته‌بندی مرسوله‌های پستی ارائه شده است. خروجی آن‌ها بسیار جذاب است. اگر این پست را می‌بینید، خسته نباشید! دیدن کار شما لذت‌بخش بود — که چنین سیستمی در چنین مرتبه‌ای توسعه داده‌اید (به تعداد ربات‌های در حال کار و الگوریتم کنترل آن‌ها توجه کنید).
—————
@roboticknowledge
👏2🏆2
#منهای_رباتیک
ضد رزومه یا Anti CV

به صورت اتفاقی ضد رزومه یک استاد را دیدم که در آن شکست‌‌ها و Failure های خودش را لیست کرده بود. نمی‌دانم کاربرد عمومی آن چیست (نشان‌دهنده شخصیت بزرگ یک فرد می‌تواند باشد)، اما کاربردهای خصوصی مهمی دارد — خصوصا وقتی موفقیت دشت می‌کنید!
همه باید یک Anti CV داشته باشیم تا یادمان بماند کجا و چرا شکست خوردیم.
—————
@roboticknowledge
👍8👏1
#CARLA #Simulator
تصویری از نقشه شبیه‌ساز Carla. امروز برای اولین بار با GPU این شبیه‌ساز را بالا آوردم - قدرت GPU بی‌نظیر است.
قصد دارم یک پروژه ساده شروع کنم که در آن یک استک حداقلی رانندگی خودکار در ترافیک را توسعه دهم. سعی می‌کنم از معماری و الگوریتم‌های اصلی که یاد می‌گیرم و استفاده می‌کنم در آن پروژه، محتوای مناسب استخراج و منتشر کنم.
—————
@roboticknowledge
2👏1
#ROS2Webots #ROS2 #Webots

تا کنون در ترکیب Webots و ROS2 (برای پروژه ros2webots) یک ربات ROSBot داشته‌ام که برای آن یک Node برای Localization و یک Node برای کنترل و هدایت به سمت Waypoint ها توسعه‌ داده‌ام.

گام بعدی برای من کنترل بازوی رباتیک Ned است. قصد دارم یاد بگیرم چگونه از moveit2 برای کنترل بازو استفاده کنم. اگر لیوان‌های شیشه‌ای را با بازو گرفتم و در مکان مطلوب قرار دادم، این هدف برای من محقق می‌شود.
—————
@roboticknowledge
👏9🫡3🏆1
#Cpp
در ++C می‌توانید متغیرهای پیچیده را به کمک لامبدا فانکشن‌ها براحتی initialize کنید - با این ساختار:
const auto var = [&] { 
return /* some complex code here */;
}(); // call it!

یک مثال مشخص چنین است:
const int myVariable = [&] {
if (bFirstContidion)
return bSecondCondition ? computeFunc(inputParam) : 0;
else
return inputParam * 2;
}(); // call!

که بجای این روش غیربهینه می‌تواند استفاده شود:
int myVariable = 0; // this should be const...

if (bFirstCondition)
myVariable = bSecondCindition ? computeFunc(inputParam) : 0;
else
myVariable = inputParam * 2;

این روش Immediately-invoked function expression یا IIFE نام دارد (منبع). در کدهای حرفه‌ای این ساختار را اگر ببینید، اکنون دیگر درباره آن علامت سوال ندارید!
—————
@roboticknowledge
👍1
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