#کتاب
#Cpp
A Complete Guide to Standard C++ Algorithms
در این کتاب با ارزش الگوریتمهای استانداری [منظور قسمتهای کنترلی مانند حلقهها] که در الگوریتمهای مهندسی پیچیده برای کاربردهای مختلف استفاده میشوند، با مثال جمعآوری و ارائه شده است.
نویسنده بیان میکند که هرجای کد ++C شما یک حلقه ساده وجود دارد، به احتمال زیاد توسط یکی از این الگوریتمهای استاندار میتواند جایگزین شود که علاوه بر سرعت بیشتر و بهینهتر بودن، امکان خطا را نیز کاهش میدهد.
https://github.com/HappyCerberus/book-cpp-algorithms
----------
@roboticknowledge
#Cpp
A Complete Guide to Standard C++ Algorithms
در این کتاب با ارزش الگوریتمهای استانداری [منظور قسمتهای کنترلی مانند حلقهها] که در الگوریتمهای مهندسی پیچیده برای کاربردهای مختلف استفاده میشوند، با مثال جمعآوری و ارائه شده است.
نویسنده بیان میکند که هرجای کد ++C شما یک حلقه ساده وجود دارد، به احتمال زیاد توسط یکی از این الگوریتمهای استاندار میتواند جایگزین شود که علاوه بر سرعت بیشتر و بهینهتر بودن، امکان خطا را نیز کاهش میدهد.
https://github.com/HappyCerberus/book-cpp-algorithms
----------
@roboticknowledge
Robotic Knowledge
#کتاب #Cpp A Complete Guide to Standard C++ Algorithms در این کتاب با ارزش الگوریتمهای استانداری [منظور قسمتهای کنترلی مانند حلقهها] که در الگوریتمهای مهندسی پیچیده برای کاربردهای مختلف استفاده میشوند، با مثال جمعآوری و ارائه شده است. نویسنده بیان…
a_complete_guide_to_standard_cpp_algorithms_v1_0_1.pdf
800.7 KB
#Cpp
#gnuplot
#Tools
ترسیم کردن داده در زبان ++C براحتی کار مشابه در Python نیست - اونجا شما میتونید براحتی از کتابخانه Matplotlib استفاده کنید. برای این مساله یکی از راه حلها استفاده از ابزار کامند لاینی gnu plot هست که به شکلهای مختلف با pipe کردن دیتا توی محیط command line میتونید خروجی برنامه کامپایل شده ++C رو ترسیم کنید.
در مجموع gnu plot ابزارهای بسیار زیادی در خودش داره که توی سایتش میتونید ببینید.
توی تصویر هم براتون چیزی رو که برای تست باهاش ترسیم کردم رو قرار دادم.
—————
@roboticknowledge
#gnuplot
#Tools
ترسیم کردن داده در زبان ++C براحتی کار مشابه در Python نیست - اونجا شما میتونید براحتی از کتابخانه Matplotlib استفاده کنید. برای این مساله یکی از راه حلها استفاده از ابزار کامند لاینی gnu plot هست که به شکلهای مختلف با pipe کردن دیتا توی محیط command line میتونید خروجی برنامه کامپایل شده ++C رو ترسیم کنید.
در مجموع gnu plot ابزارهای بسیار زیادی در خودش داره که توی سایتش میتونید ببینید.
توی تصویر هم براتون چیزی رو که برای تست باهاش ترسیم کردم رو قرار دادم.
—————
@roboticknowledge
#Cpp
#OOP
چنانچه به ++C و برنامهنویسی شی گرا یا Object-Oriented Programming در آن علاقهمند هستید، در یک تایم خالی این ویدئو را ببینید که تمام مفاهیم و ساختارهای ابتدایی و ضروری را بسیار عالی توضیح دادهاند و با دانستن و تمرین این ساختارهای OOP میتوانید مهارتهای برنامهنویسی ++C خود را بهبود دهید.
https://www.youtube.com/watch?v=wN0x9eZLix4
—————
@roboticknowledge
#OOP
چنانچه به ++C و برنامهنویسی شی گرا یا Object-Oriented Programming در آن علاقهمند هستید، در یک تایم خالی این ویدئو را ببینید که تمام مفاهیم و ساختارهای ابتدایی و ضروری را بسیار عالی توضیح دادهاند و با دانستن و تمرین این ساختارهای OOP میتوانید مهارتهای برنامهنویسی ++C خود را بهبود دهید.
https://www.youtube.com/watch?v=wN0x9eZLix4
—————
@roboticknowledge
YouTube
Object Oriented Programming (OOP) in C++ Course
Object Oriented Programming (OOP) is commonly used when writing code with C++. In this crash course, you will learn what OOP is and how to implement it using C++.
This course was developed by Saldina Nurak (CodeBeauty). Check out her channel: https://ww…
This course was developed by Saldina Nurak (CodeBeauty). Check out her channel: https://ww…
👏2
#Cpp
#OOP
همواره یکی از راههای خیلی خوب حرفهای شدن توی ++C/C دیدن و بررسی کدهای Functional حرفهای است که پایهی یک محصول mass producted هستند. فیلم زیر سورس کد مهندسی معکوس شدهای GTA III رو بررسی میکنه و میشه سینتکسها و معماری رایج پیادهسازی چنین چیزی رو حتی محدود متوجه شد.
https://www.youtube.com/watch?v=N3KhMOk_6HE
اینجا مثال صرفا بازی بود - یک بازی پیچیده - اما همین داستان توی صنعت هم هست. شما وقتی وارد یک شرکت میشید که محصول اونها نرمافزار برای فرضا اتوماسیون یا رباتیک یا اتوموبیل خودران هست، شاید سه ماه اول درگیر درک کدهای موجود اونها بشید و بعد از اون میبینید بصورت اتوماتیک ساختار و معماری پیشرفته اون محصول رو یاد گرفتید و طبق همون Design Pattern به کد پایه ویژگی و فانکشن اضافه میکنید.
—————
@roboticknowledge
#OOP
همواره یکی از راههای خیلی خوب حرفهای شدن توی ++C/C دیدن و بررسی کدهای Functional حرفهای است که پایهی یک محصول mass producted هستند. فیلم زیر سورس کد مهندسی معکوس شدهای GTA III رو بررسی میکنه و میشه سینتکسها و معماری رایج پیادهسازی چنین چیزی رو حتی محدود متوجه شد.
https://www.youtube.com/watch?v=N3KhMOk_6HE
اینجا مثال صرفا بازی بود - یک بازی پیچیده - اما همین داستان توی صنعت هم هست. شما وقتی وارد یک شرکت میشید که محصول اونها نرمافزار برای فرضا اتوماسیون یا رباتیک یا اتوموبیل خودران هست، شاید سه ماه اول درگیر درک کدهای موجود اونها بشید و بعد از اون میبینید بصورت اتوماتیک ساختار و معماری پیشرفته اون محصول رو یاد گرفتید و طبق همون Design Pattern به کد پایه ویژگی و فانکشن اضافه میکنید.
—————
@roboticknowledge
YouTube
GTA3 Code Review: Weapons, Vehicles, Cops and Gangs
Today, we'll review the source code for RE3– the reverse-engineered C++ source code for Grand Theft Auto III and Vice City. We'll look at the code for Pedestrians, Vehicles, Cops, and Gangs.
👍8
#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
#Cpp
در ++C میتوانید متغیرهای پیچیده را به کمک لامبدا فانکشنها براحتی initialize کنید - با این ساختار:
یک مثال مشخص چنین است:
که بجای این روش غیربهینه میتواند استفاده شود:
این روش Immediately-invoked function expression یا IIFE نام دارد (منبع). در کدهای حرفهای این ساختار را اگر ببینید، اکنون دیگر درباره آن علامت سوال ندارید!
—————
@roboticknowledge
در ++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:
متغیر target_pose و جفت [success, plan] به این زیبایی initialize شدهاند - در نگاه اول شاید کمی سخت باشد، اما در واقع با لامبدا و IIFE خیلی ساده و تمیز شده است.
—————
@roboticknowledge
مثال رباتیکی آن در یکی از آموزشهای 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
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
ابزار pybind11 برای تبدیل کتابخانه ++C به ماژول پایتون
قبلا درباره اینکه روش کلی فراخوانی کد C در پایتون چیست، به ماژول ctypes اشاره کرده بودیم - اما محدودیتهایی در استفاده از آن وجود دارد. راه حرفهایتری که اخیرا پیدا کردهام - مختص استفاده از کدهای ++C در پایتون و پشتیبانکننده OOP موجود در ++C - ابزار pybind11 است:
https://github.com/pybind/pybind11
—————
@roboticknowledge
GitHub
GitHub - pybind/pybind11: Seamless operability between C++11 and Python
Seamless operability between C++11 and Python. Contribute to pybind/pybind11 development by creating an account on GitHub.
#Tools
#Cpp
#AnalyticalDynamics
#OptimalControl
کتابخانهای برای ++C و البته بصورت bind شده در Python وجود دارد که مسائل دینامیک چندجسمی را برای شما حل میکند. مدل میتواند براحتی بصورت URDF در ورودی تعریف شود.
این کتابخانه pinocchio نام دارد:
https://github.com/stack-of-tasks/pinocchio
همچنین این کتابخانه میتواند با CasADI که خود کتابخانه کنترل بهینه است نیز کار کند! فکر نکنید رباتهای Boston Dynamics کنترل بهینه را از هیچ کامل در خود دارند بدون این ابزارها.
پیشروها با اینها و امثال اینها کارهای بزرگ میکنند. متاسفانه سیستم آموزشی کشور ما در قرن پیش مانده است و همین الان در بهترین دانشگاههای مملکت معادلات را بصورت اشتباه پیاده و غیر بهینه حل و برای جبران نتایج دست به تغییر دستی نتایج زده میشود! در هیچ دورهای به اینها اشاره نمیکنند چون نمیدانند و اینها چیزهای مدرن هستند که تفاوت میسازند.
—————
@roboticknowledge
#Cpp
#AnalyticalDynamics
#OptimalControl
کتابخانهای برای ++C و البته بصورت bind شده در Python وجود دارد که مسائل دینامیک چندجسمی را برای شما حل میکند. مدل میتواند براحتی بصورت URDF در ورودی تعریف شود.
این کتابخانه pinocchio نام دارد:
https://github.com/stack-of-tasks/pinocchio
همچنین این کتابخانه میتواند با CasADI که خود کتابخانه کنترل بهینه است نیز کار کند! فکر نکنید رباتهای Boston Dynamics کنترل بهینه را از هیچ کامل در خود دارند بدون این ابزارها.
پیشروها با اینها و امثال اینها کارهای بزرگ میکنند. متاسفانه سیستم آموزشی کشور ما در قرن پیش مانده است و همین الان در بهترین دانشگاههای مملکت معادلات را بصورت اشتباه پیاده و غیر بهینه حل و برای جبران نتایج دست به تغییر دستی نتایج زده میشود! در هیچ دورهای به اینها اشاره نمیکنند چون نمیدانند و اینها چیزهای مدرن هستند که تفاوت میسازند.
—————
@roboticknowledge
GitHub
GitHub - stack-of-tasks/pinocchio: A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives - stack-of-tasks/pinocchio
👍1🤯1