• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

TUM-Aries-Lab / hip-controller / 34959837982
86%

Build:
DEFAULT BRANCH: main
Ran 15 Sep 2026 10:49AM UTC
Jobs 1
Files 31
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

15 Sep 2026 10:47AM UTC coverage: 84.059% (+0.6%) from 83.469%
34959837982

push

github

NGierden
Add trigger-driven baseline removal for the hip angle

The IMU angle carries a subject- and mounting-dependent DC offset. Remove
it the way the deployed Simulink implementation does
(getHipKinematics_IMU.m): average the angle over a short window and
subtract that mean from every later sample.

What matters is when the window is taken. Anchor it to the main switch
(motor enable), the moment the operator picks with the subject standing
ready, rather than to process start-up. The offset is therefore
re-takeable at any time -- after a strap slips, between trials -- without
disturbing the SOGI/FLL lock.

Two safeguards on top of the Simulink behaviour:

* Stand-still gating. A window is only accepted while the raw velocity
  stays below a threshold; motion restarts it. Flipping the switch
  mid-stride waits for the leg to settle instead of averaging a moving
  limb.
* No fabricated output. The offset defaults to zero and the angle passes
  through untouched until a window completes, so the stateful filters are
  never fed a step edge.

Applied at the top of SensorPreprocessor.filter(), ahead of the
drift-removal LPF, which therefore has far less DC to settle out at
start-up. The caller's SensorSignal is never mutated: the integration's
logged raw angle stays free of the offset, which is what makes an exact
replay possible -- logging the corrected angle as "raw" would subtract
the offset twice on playback.

Playback drives the trigger from the recorded main switch, so a session
replays with the offset it actually ran with, including the uncorrected
segment before the switch was flipped. Two escape hatches for recordings
that predate this:

* --no-baseline-removal suppresses it for files whose main switch never
  took a baseline.
* A file with no main switch column has no trigger to replay and never
  removes a baseline. Its main_switch defaults to True, which is a
  default for "run the controller", not evidence of a switch -- taking a
  baseline off that f... (continued)

1197 of 1424 relevant lines covered (84.06%)

0.84 hits per line

Coverage Regressions

Lines Coverage ∆ File
32
74.62
1.89% hip_controller/control/signal_processing/sensor_preprocessor.py
4
0.0
0.0% hip_controller/__main__.py
3
94.64
0.3% hip_controller/plotter/csv_player.py
2
89.19
-2.12% hip_controller/control/app.py
Jobs
ID Job ID Ran Files Coverage
1 34959837982.1 15 Sep 2026 10:49AM UTC 31
84.06
GitHub Action Run
Source Files on build 34959837982
  • Tree
  • List 31
  • Changed 5
  • Source Changed 0
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #34959837982
  • fcec42d7 on github
  • Prev Build on main (#34616677376)
  • Next Build on main (#34969872797)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc