الأهداف • المتطلبات • البدء • الميزات • Todos • المراجع
C ++ Robotics لديه الأهداف التالية:
هذا المشروع مستوحى من Pythonrobotics. بدلاً من أن تكون مجرد ريبو تعليمي ، تهدف هذه المكتبة إلى تنفيذ خوارزميات سريعة باستخدام واجهة برمجة تطبيقات متسقة ، لضمان أداء وقت التشغيل وسهولة الاستخدام.
على الرغم من أن هذا لا يزال عملًا مستمرًا ، إلا أنني سأقدر ذلك إذا تركت أي اقتراحات أو قامت ببطولة إعادة البطولة. أي مساعدة موضع تقدير كبير!
C ++ 11 مترجم
Cmake 3.14+ (إذا كنت تستخدم Visual Studio على Windows ، فيجب أن تكون قادرًا على استيراد المشروع كمشروع Cmake)
سيتم الحصول على تبعيات C ++ تلقائيًا بواسطة CPM.Cmake. لاحظ أن المكتبة تعتمد فقط على Eigen ، ولكن يتم استخدام matplotplusplus في مجلد examples لرسم النتائج.
فيما يلي بعض الأمثلة للبدء. يحتوي مجلد examples على عدة أمثلة مفيدة للبدء.
يهدف cpprobotics إلى أن تكون وحدات ، مما يعني:
بمجرد تحديد نظام ديناميكي ، ستكون معظم الخوارزميات متاحة بسهولة لاستخدامها
يجب أن تتدفق البيانات بسلاسة بين الكائنات (EG Extorm -> Controller)
بمجرد إعداد خوارزمية ، يجب أن تكون قادرًا على تغيير النظام الديناميكي ودمجه مباشرة
git clone https://github.com/giacomo-b/cpprobotics.git
بالنظر إلى EXAMPLE عام تريد تشغيله ، فإن الأوامر التالية تنشئها:
cmake -S examples/EXAMPLE -B build/EXAMPLE
cmake --build build/EXAMPLE على Windows ، سيؤدي ذلك إلى تكوين تصحيح. لإنشاء المشروع في وضع الإصدار ، يمكنك إضافة --config=Release بعد الأمر الأول.
لتشغيل المثال على Linux و MacOS والأنظمة القائمة على UNIX:
./build/EXAMPLE/mainعلى Windows:
./build/EXAMPLE/CONFIG_TYPE/main حيث يكون CONFIG_TYPE إما Debug أو Release ، اعتمادًا على كيفية تكوين المشروع.
# include < robotics/robotics.hpp > يمثل SystemBase نظامًا ديناميكيًا عامًا. في معظم الحالات ، ستستخدم إما LinearSystem أو NonlinearSystem .
نظرًا لأن المكتبة قد تم تمثيلها ، لتحديد نظام تحتاج إلى تحديده:
عدد الدول
عدد المدخلات (إجراءات التحكم)
عدد المخرجات
على سبيل المثال:
static constexpr int N = 2 ; // Number of states
static constexpr int M = 1 ; // Number of inputs
static constexpr int P = 2 ; // Number of outputsيمكن أن يكون الاسم المستعار النوع مفيدًا ، ويمنع المبرمج من خلط الأبعاد الخاطئة:
using State = Robotics::ColumnVector<N>;
using Input = Robotics::ColumnVector<M>;
using Output = Robotics::ColumnVector<P>;
using StateMatrix = Robotics::SquareMatrix<N>;
using InputMatrix = Robotics::Matrix<N, M>;
using OutputMatrix = Robotics::Matrix<P, N>;
using FeedthroughMatrix = Robotics::Matrix<P, N>;دعونا نحدد نظامًا خطيًا شكل حالته
x' = A * x + B * u
y = C * x + D * u
لإعداد LinearSystem :
StateMatrix A;
A << 1 , 0 ,
0 , 1 ;
InputMatrix B;
B << 1 , 0 ;
OutputMatrix C;
C << 1 , 0 ,
0 , 1 ;لاحظ أن وجود قوالب لا يحسن أداء وقت التشغيل فحسب ، بل يفرض أيضًا فحص وقت التجميع. إذا قمت بتهيئة مصفوفة مع العدد الخاطئ للعناصر ، فلن يتم تجميع الكود.
المصفوفات C و D غير مطلوبة: فهي فارغة افتراضيًا إذا لم يتم توفيرها. في هذه الحالة ، D هو لاغ. لتحديد النظام:
Robotics::Model::LinearSystem<N, M, P> system (A, B, C);الحالة الأولية هي صفر بشكل افتراضي. يمكنك تعيين حالة أولية مخصصة على النحو التالي:
system.SetInitialState(State( 1.0 , - 1.0 ));تحقق من Thelartians/ModernCppStarter إذا كنت ترغب في تضمين هذه الميزات في مشروعك.
من دليل الجذر:
cmake -S test -B build/test
cmake --build build/test
CTEST_OUTPUT_ON_FAILURE=1 cmake --build build/test --target test
# or simply call the executable:
./build/test/RoboticsTests لجمع معلومات تغطية التعليمات البرمجية ، قم بتشغيل Cmake باستخدام خيار -DENABLE_TEST_COVERAGE=1 .
وهذا يتطلب تثبيت clang-format و cmake-format و pyyaml على النظام الحالي.
cmake -S test -B build/test
# view changes
cmake --build build/test --target format
# apply changes
cmake --build build/test --target fix-formatانظر format.cmake للحصول على التفاصيل.
تم تصميم الوثائق ونشرها تلقائيًا عند إنشاء إصدار GitHub. لإنشاء الوثائق يدويًا ، اتصل بالأمر التالي.
cmake -S documentation -B build/doc
cmake --build build/doc --target GenerateDocs
# view the docs
open build/doc/doxygen/html/index.htmlلإنشاء الوثائق محليًا ، ستحتاج إلى تثبيت Doxygen و Jinja2 و Pygments في نظامك.
يتضمن المشروع أيضًا all يسمح ببناء جميع الأهداف في نفس الوقت. هذا مفيد أثناء التطوير ، لأنه يعرض جميع المشروعات الفرعية إلى IDE الخاص بك ويتجنب بنيات المكتبة الزائدة عن الحاجة.
cmake -S all -B build
cmake --build build
# run tests
./build/test/RoboticsTests
# format code
cmake --build build --target fix-format
# run standalone
./build/standalone/Robotics --help
# build docs
cmake --build build --target GenerateDocsتتضمن المشاريع الفرعية للاختبار وملف الأدوات. ملف Cmake الذي يتم استخدامه لاستيراد أدوات إضافية عند الطلب من خلال وسيطات تكوين CMAKE. فيما يلي مدعوم حاليا.
يمكن تمكين المطهرات من خلال تكوين cmake مع -DUSE_SANITIZER=<Address | Memory | MemoryWithOrigins | Undefined | Thread | Leak | 'Address;Undefined'> .
يمكن تمكين المحللات الثابتة عن طريق الإعداد -DUSE_STATIC_ANALYZER=<clang-tidy | iwyu | cppcheck> ، أو مجموعة من تلك الموجودة في علامات اقتباس ، مفصولة بواسطة انتقائية. بشكل افتراضي ، سيجد المحللون تلقائيًا ملفات التكوين مثل .clang-format . يمكن تمرير الوسائط الإضافية إلى المحللين عن طريق تعيين متغيرات CLANG_TIDY_ARGS أو IWYU_ARGS أو CPPCHECK_ARGS .
يمكن تمكين CCache من خلال التكوين باستخدام -DUSE_CCACHE=<ON | OFF> .
كما ذكر أعلاه ، استلهم هذا الريبو في الأصل من Atsushisakai/Pythonrobotics. لذا ، اذهب تحقق من ذلك إذا كنت ترغب في رؤية المزيد من الخوارزميات (أو إذا كنت ترغب في المساعدة في تنفيذ عدد قليل منها!).