diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2846b94..aadf6eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,58 +10,108 @@ jobs: build: runs-on: ubuntu-latest container: - image: ghcr.io/xrobot-org/docker-image-stm32:main + image: ghcr.io/xrobot-org/docker-image-linux:main options: --user 0 env: XR_MODULE_NAME: ${{ github.event.repository.name }} steps: - - name: install pip packages - run: pip install libxr xrobot - - - name: Checkout bsp-dev-c + - name: Checkout current module repo to ./Modules/${{ env.XR_MODULE_NAME }} uses: actions/checkout@v4 with: - repository: QDU-Robomaster/bsp-dev-c - path: bsp-dev-c + path: Modules/${{ env.XR_MODULE_NAME }} - - name: config libxr - run: cd bsp-dev-c && xr_cubemx_cfg -d ./ --xrobot + - name: Create main.cpp + run: | + cat > main.cpp <<'EOF' + #include + #include "xrobot_main.hpp" + #include "libxr.hpp" + + int main() { + LibXR::PlatformInit(); + LibXR::STDIO::Printf("This is XRobot Module Template Test\n"); + LibXR::HardwareContainer hw; + XRobotMain(hw); + return 0; + } + EOF + + - name: Create minimal CMakeLists.txt + run: | + cat > CMakeLists.txt <<'EOF' + project(xrobot_mod_test CXX) + set(CMAKE_CXX_STANDARD 17) + add_executable(xr_test main.cpp) + set(XROBOT_MODULES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Modules/) + add_subdirectory(libxr) + target_include_directories(xr_test PUBLIC $ ${CMAKE_SOURCE_DIR}/User) + target_link_libraries(xr_test PUBLIC xr) + EOF + + - name: Pull libxr to ./libxr + run: git clone --depth=1 https://github.com/Jiu-xiao/libxr ./libxr + + - name: Checkout Referee module + uses: actions/checkout@v4 + with: + repository: QDU-Robomaster/Referee + path: Modules/Referee - - name: Checkout current module repo to bsp-dev-c/Modules/${{ env.XR_MODULE_NAME }} + - name: Checkout CMD module uses: actions/checkout@v4 with: - path: bsp-dev-c/Modules/${{ env.XR_MODULE_NAME }} + repository: QDU-Robomaster/CMD + path: Modules/CMD - name: Checkout SuperPower module uses: actions/checkout@v4 with: repository: QDU-Robomaster/SuperPower - path: bsp-dev-c/Modules/SuperPower + path: Modules/SuperPower - - name: Checkout Matrix module - uses: actions/checkout@v4 - with: - repository: QDU-Robomaster/Matrix - path: bsp-dev-c/Modules/Matrix + - name: Setup Python & Install deps + run: | + python3 -m pip install --upgrade pip + pip3 install pyyaml requests - - name: Add modules + - name: Add XRobot tools to PATH run: | - cd bsp-dev-c - rm -rf ./User/xrobot.yaml - xrobot_add_mod SuperPower --instance-id super_power - xrobot_add_mod PowerControl --instance-id power_control - cat ./User/xrobot.yaml + echo "$HOME/.local/bin" >> $GITHUB_PATH - - name: xrobot generate code - run: cd bsp-dev-c && xrobot_gen_main && cat ./User/xrobot_main.hpp + - name: Install xrobot toolchain + run: | + pip3 install xrobot libxr + - name: Run xrobot_setup + run: | + xrobot_setup || true - - name: config cmake - run: cd bsp-dev-c && export GCC_TOOLCHAIN_ROOT=/opt/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi/bin && export CLANG_GCC_CMSIS_COMPILER=/opt/st-arm-clang && cmake . -DCMAKE_TOOLCHAIN_FILE:STRING=cmake/starm-clang.cmake -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -Bbuild -G Ninja - - name: build - run: cd bsp-dev-c && cmake --build build + - name: Run xrobot_init_mod + run: | + xrobot_init_mod + + - name: Add module + run: | + xrobot_add_mod BlinkLED --instance-id BlinkLED_0 + xrobot_add_mod Referee --instance-id referee + xrobot_add_mod CMD --instance-id cmd + xrobot_add_mod SuperPower --instance-id superpower + - name: Add this repo module + run: | + xrobot_add_mod ${{ env.XR_MODULE_NAME }} && cat User/xrobot.yaml + + - name: Generate main again + run: | + xrobot_setup + + - name: Build + run: | + mkdir -p build + cd build + cmake .. + make - name: Create Tag via GitHub API if: ${{ success() && github.event_name != 'pull_request' }} @@ -90,4 +140,3 @@ jobs: sha: sha }); console.log(`Created tag: ${tagName} on sha: ${sha}`); - diff --git a/PowerControl.hpp b/PowerControl.hpp index 3240085..b43040d 100644 --- a/PowerControl.hpp +++ b/PowerControl.hpp @@ -4,7 +4,7 @@ module_name: PowerControl module_description: Power control for chassis (supports omni and helm wheel) constructor_args: - - superpower: '@&super_power' + - superpower: '@&superpower' - is_helm: false - chassis_static_power_loss: 3.5 - motor_count_3508: 4 @@ -15,12 +15,11 @@ depends: [] === END MANIFEST === */ // clang-format on +#include #include #include #include -#include - #include "RLS.hpp" #include "SuperPower.hpp" #include "app_framework.hpp" @@ -135,8 +134,8 @@ class PowerControl : public LibXR::Application { float mechanical_power = 0; for (int i = 0; i < motor_count_3508_; i++) { - samples_3508_(0, 0) += output_current_3508_[i] * output_current_3508_[i]; - samples_3508_(1, 0) += rotorspeed_rpm_3508_[i] * rotorspeed_rpm_3508_[i]; + samples_3508_(0, 0) += output_current_3508_[i] * output_current_3508_[i]; + samples_3508_(1, 0) += rotorspeed_rpm_3508_[i] * rotorspeed_rpm_3508_[i]; mechanical_power += kt_3508_ * output_current_3508_[i] * rotorspeed_rpm_3508_[i]; } @@ -181,7 +180,7 @@ class PowerControl : public LibXR::Application { float GetMeasuredPower() const { return measured_power_; } - float GetPercent() { return superpower_->GetPercentage(); } + float GetCapEnergy() { return superpower_->GetCapEnergy(); } bool IsOnline() { return superpower_->IsOnline(); } diff --git a/RLS.hpp b/RLS.hpp index 22243f0..7b58dd0 100644 --- a/RLS.hpp +++ b/RLS.hpp @@ -40,19 +40,21 @@ class RLS { * @brief 执行一次 RLS 更新 * @param sampleVector 输入样本向量 * @param actualOutput 实际输出 - * @return const ParamVector& 当前参数估计 + * @return const ParamVector& 当前参数估计 */ - const ParamVector& Update(const ParamVector& sample_vector, float actual_output) { - gainvector_ = - (transmatrix_ * sample_vector) / - (1.0f + (sample_vector.transpose() * transmatrix_ * sample_vector)(0, 0) / lambda_) / - lambda_; + const ParamVector& Update(const ParamVector& sample_vector, + float actual_output) { + gainvector_ = (transmatrix_ * sample_vector) / + (1.0f + (sample_vector.transpose() * transmatrix_ * + sample_vector)(0, 0) / + lambda_) / + lambda_; paramsvector_ += - gainvector_ * - (actual_output - (sample_vector.transpose() * paramsvector_)(0, 0)); - transmatrix_ = - (transmatrix_ - gainvector_ * sample_vector.transpose() * transmatrix_) / - lambda_; + gainvector_ * + (actual_output - (sample_vector.transpose() * paramsvector_)(0, 0)); + transmatrix_ = (transmatrix_ - + gainvector_ * sample_vector.transpose() * transmatrix_) / + lambda_; return paramsvector_; }