Sasaran • Persyaratan • Memulai • Fitur • Todo • Referensi
Robotika C ++ memiliki tujuan berikut:
Proyek ini terinspirasi oleh Pythonrobotics. Alih -alih hanya menjadi repo pendidikan, perpustakaan ini bertujuan menerapkan algoritma cepat dengan API yang konsisten, untuk menjamin kinerja runtime dan kemudahan penggunaan.
Meskipun ini masih merupakan pekerjaan yang sedang berlangsung, saya akan sangat menghargainya jika Anda meninggalkan saran atau membintangi repo. Bantuan apa pun sangat dihargai!
Kompiler C ++ 11
CMake 3.14+ (jika menggunakan Visual Studio di Windows Anda harus dapat mengimpor proyek sebagai proyek CMake)
Ketergantungan C ++ akan diperoleh secara otomatis oleh CPM.CMake. Perhatikan bahwa pustaka hanya tergantung pada Eigen , tetapi matplotplusplus digunakan dalam folder examples untuk memplot hasil.
Berikut ini adalah beberapa contoh untuk memulai. Folder examples berisi beberapa contoh yang berguna untuk memulai.
CPPROBOTICS bertujuan untuk menjadi modular, yang berarti:
Setelah Anda mendefinisikan sistem dinamis, sebagian besar algoritma akan tersedia untuk digunakan
Data harus mengalir dengan mulus antar objek (misalnya estimator -> controller)
Setelah Anda mengatur algoritma, Anda harus dapat mengubah sistem dinamis dan mengintegrasikannya secara langsung
Git Clone https://github.com/giacomo-b/cpprobotics.git
Diberikan EXAMPLE umum yang ingin Anda jalankan, perintah berikut membangunnya:
cmake -S examples/EXAMPLE -B build/EXAMPLE
cmake --build build/EXAMPLE Di Windows, ini akan default ke konfigurasi debug. Untuk membangun proyek dalam mode rilis, Anda dapat menambahkan --config=Release setelah perintah pertama.
Untuk menjalankan contoh di Linux, MacOS, dan sebagian besar sistem berbasis UNIX:
./build/EXAMPLE/mainDi Windows:
./build/EXAMPLE/CONFIG_TYPE/main di mana CONFIG_TYPE adalah Debug atau Release , tergantung pada bagaimana Anda mengonfigurasi proyek.
# include < robotics/robotics.hpp > SystemBase mewakili sistem dinamis generik. Dalam kebanyakan kasus, Anda akan menggunakan LinearSystem atau NonlinearSystem .
Karena perpustakaan templated, untuk mendefinisikan sistem yang perlu Anda definisikan:
Jumlah negara bagian
Jumlah input (tindakan kontrol)
Jumlah output
misalnya:
static constexpr int N = 2 ; // Number of states
static constexpr int M = 1 ; // Number of inputs
static constexpr int P = 2 ; // Number of outputsJenis alias bisa berguna, dan mencegah coder mencampur dimensi yang salah:
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>;Mari kita tentukan sistem linier yang bentuknya
x' = A * x + B * u
y = C * x + D * u
Untuk mengatur LinearSystem :
StateMatrix A;
A << 1 , 0 ,
0 , 1 ;
InputMatrix B;
B << 1 , 0 ;
OutputMatrix C;
C << 1 , 0 ,
0 , 1 ;Perhatikan bahwa memiliki template tidak hanya meningkatkan kinerja runtime, tetapi juga menegakkan pemeriksaan waktu kompilasi. Jika Anda menginisialisasi matriks dengan jumlah elemen yang salah, kode tidak akan dikompilasi.
Matriks C dan D tidak diperlukan: mereka nol secara default jika tidak disediakan. Dalam hal ini, D adalah nol. Untuk mendefinisikan sistem:
Robotics::Model::LinearSystem<N, M, P> system (A, B, C);Keadaan awal adalah nol secara default. Anda dapat mengatur keadaan awal khusus sebagai berikut:
system.SetInitialState(State( 1.0 , - 1.0 ));Lihatlah Thelarians/ModernCPPStarter jika Anda ingin memasukkan fitur -fitur ini dalam proyek Anda.
Dari direktori root:
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 Untuk juga mengumpulkan informasi cakupan kode, jalankan CMake dengan opsi -DENABLE_TEST_COVERAGE=1 .
Ini membutuhkan format dentang , format CMake dan pyyaml untuk dipasang pada sistem saat ini.
cmake -S test -B build/test
# view changes
cmake --build build/test --target format
# apply changes
cmake --build build/test --target fix-formatLihat Format.CMake untuk detailnya.
Dokumentasi dibangun secara otomatis dan diterbitkan setiap kali rilis GitHub dibuat. Untuk membangun dokumentasi secara manual, hubungi perintah berikut.
cmake -S documentation -B build/doc
cmake --build build/doc --target GenerateDocs
# view the docs
open build/doc/doxygen/html/index.htmlUntuk membangun dokumentasi secara lokal, Anda akan membutuhkan Doxygen , Jinja2 dan Pygments yang diinstal dalam sistem Anda.
Proyek ini juga mencakup all direktori yang memungkinkan membangun semua target secara bersamaan. Ini berguna selama pengembangan, karena memaparkan semua subproyek ke IDE Anda dan menghindari bangunan perpustakaan yang berlebihan.
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 GenerateDocsSubproyon tes dan mandiri mencakup file alat. Berikut ini saat ini didukung.
Sanitizers dapat diaktifkan dengan mengonfigurasi cmake dengan -DUSE_SANITIZER=<Address | Memory | MemoryWithOrigins | Undefined | Thread | Leak | 'Address;Undefined'> .
Analisis statis dapat diaktifkan dengan pengaturan -DUSE_STATIC_ANALYZER=<clang-tidy | iwyu | cppcheck> , atau kombinasi dari yang ada di tanda kutip, dipisahkan oleh titik koma. Secara default, analisis akan secara otomatis menemukan file konfigurasi seperti .clang-format . Argumen tambahan dapat diteruskan ke analisis dengan mengatur variabel CLANG_TIDY_ARGS , IWYU_ARGS , atau CPPCHECK_ARGS .
CCACHE dapat diaktifkan dengan mengonfigurasi dengan -DUSE_CCACHE=<ON | OFF> .
Seperti disebutkan di atas, repo ini awalnya terinspirasi oleh Atsushisakai/Pythonrobotics. Jadi, periksa jika Anda ingin melihat lebih banyak algoritma (atau jika Anda ingin membantu port beberapa dari mereka!).