เป้าหมาย•ข้อกำหนด•การเริ่มต้น•คุณสมบัติ• TODOS •ข้อมูลอ้างอิง
หุ่นยนต์ C ++ มีเป้าหมายดังต่อไปนี้:
โครงการนี้ได้รับแรงบันดาลใจจาก Pythonrobotics แทนที่จะเป็นเพียงการซื้อขายเพื่อการศึกษาห้องสมุดนี้มีจุดมุ่งหมายที่จะใช้อัลกอริทึมที่รวดเร็วด้วย API ที่สอดคล้องกันเพื่อรับประกันประสิทธิภาพการทำงานของรันไทม์และใช้งานง่าย
ในขณะที่นี่ยังคงเป็นงานที่อยู่ระหว่างดำเนินการฉันจะขอบคุณถ้าคุณทิ้งคำแนะนำหรือนำแสดงโดย repo ความช่วยเหลือใด ๆ ที่ได้รับการชื่นชมอย่างมาก!
คอมไพเลอร์ C ++ 11
CMake 3.14+ (หากใช้ Visual Studio บน Windows คุณควรนำเข้าโครงการเป็นโครงการ CMake)
การพึ่งพา C ++ จะได้รับโดยอัตโนมัติโดย cpm.cmake โปรดทราบว่าห้องสมุดขึ้นอยู่กับ Eigen เท่านั้น แต่ matplotplusplus ใช้ในโฟลเดอร์ examples เพื่อพล็อตผลลัพธ์
ต่อไปนี้เป็นตัวอย่างที่จะเริ่มต้น โฟลเดอร์ examples มีหลายตัวอย่างที่มีประโยชน์ในการเริ่มต้น
CPPROBOTICS มีจุดมุ่งหมายที่จะเป็นโมดูลาร์ซึ่งหมายถึง:
เมื่อคุณกำหนดระบบพลวัตอัลกอริทึมส่วนใหญ่จะพร้อมใช้งานเพื่อใช้งาน
ข้อมูลควรไหลอย่างราบรื่นระหว่างวัตถุ (เช่นตัวประมาณ -> คอนโทรลเลอร์)
เมื่อคุณตั้งค่าอัลกอริทึมคุณควรจะสามารถเปลี่ยนระบบพลวัตและรวมเข้าด้วยกันได้โดยตรง
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ชื่อนามแฝงสามารถมีประโยชน์และป้องกันไม่ให้ coder ผสมมิติที่ผิด:
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 , 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โครงการย่อยการทดสอบและแบบสแตนด์อโลนรวมถึงไฟล์ tools.cmake ซึ่งใช้ในการนำเข้าเครื่องมือเพิ่มเติมตามความต้องการผ่านอาร์กิวเมนต์การกำหนดค่า CMake รองรับต่อไปนี้
sanitizers สามารถเปิดใช้งานได้โดยการกำหนดค่า 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> .
ดังที่ได้กล่าวไว้ข้างต้น repo นี้ได้รับแรงบันดาลใจจาก Atsushisakai/Pythonrobotics เดิม ดังนั้นไปตรวจสอบถ้าคุณต้องการดูอัลกอริทึมเพิ่มเติม (หรือถ้าคุณต้องการช่วยพอร์ตบางส่วนของพวกเขา!)