Skip to content
Merged

Dev #14

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 79 additions & 30 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 <iostream>
#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 $<TARGET_PROPERTY:xr,INTERFACE_INCLUDE_DIRECTORIES> ${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' }}
Expand Down Expand Up @@ -90,4 +140,3 @@ jobs:
sha: sha
});
console.log(`Created tag: ${tagName} on sha: ${sha}`);

11 changes: 5 additions & 6 deletions PowerControl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -15,12 +15,11 @@ depends: []
=== END MANIFEST === */
// clang-format on

#include <Eigen/Core>
#include <algorithm>
#include <cmath>
#include <cstdint>

#include <Eigen/Core>

#include "RLS.hpp"
#include "SuperPower.hpp"
#include "app_framework.hpp"
Expand Down Expand Up @@ -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];
}
Expand Down Expand Up @@ -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(); }

Expand Down
24 changes: 13 additions & 11 deletions RLS.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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_;
}
Expand Down
Loading