Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
5a48c91
feat: adding sensor classes for hall effect sensors and brushed motor…
emilybywater Aug 13, 2026
7f00907
feat: add adc class ADS114S0x
emilybywater Aug 13, 2026
b1803d7
test: add UnitTest for hall, encoderCounter, and adc sensor classes
emilybywater Aug 13, 2026
2756499
doc: update README regard Hall Effect and Encoder Counter
emilybywater Aug 13, 2026
7b3d444
feat: add brushed motor actuator and update base actuator class
ninankh Aug 13, 2026
cdacba2
test: add unit test for Maxon Brushed actuator
ninankh Aug 13, 2026
2085087
test: add unit test for Maxon Brushed actuator
ninankh Aug 13, 2026
f3e54db
docs: add tutorial sample code for brushed motor actuator
ninankh Aug 13, 2026
9d12f01
test: add unit tests to improve codecov coverage
emilybywater Aug 14, 2026
4734d75
Merge branch 'vso_update_sensors' into vso_actuator_update
ninankh Aug 14, 2026
6d2b8ad
fix: mock gpiozero in test_default_constants_no_raise to fix CI failure
ninankh Aug 14, 2026
aa97148
test: add unit tests to improve codecov coverage
ninankh Aug 14, 2026
18d7e2d
fix: update pyproject.toml to fix lgpio denpendency issue
ninankh Aug 14, 2026
739d61d
feat: add vso robot class
anushkarathi Aug 14, 2026
9b34d02
test: add unitTest for vso robot class
anushkarathi Aug 14, 2026
90323f2
doc: add tutorial to read vso sensors
ninankh Aug 14, 2026
7b4930a
test: add more unitTest for vso to improve codecov coverage
anushkarathi Aug 14, 2026
c400ba9
fix: compilation error in reading vso sensors
ninankh Sep 4, 2026
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
19 changes: 11 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,17 +53,20 @@ This library solves common challenges in developing, testing, and deploying robo

The library currently supports the following hardware components:

| Sensors | Unit Tests | Hardware Tests | Benchmarks | Documentation |
| -------------------- | ---------- | -------------- | ---------- | ------------- |
| AS5048B Encoder | ✅ | ✅ | ❌ | ✅ |
| Lord Microstrain IMU | ✅ | ✅ | ❌ | ✅ |
| SRI Loadcell | ✅ | ✅ | ❌ | ✅ |
| Sensors | Unit Tests | Hardware Tests | Benchmarks | Documentation |
| ----------------------- | ----------- | -------------- | ---------- | ------------- |
| AS5048B Encoder | ✅ | ✅ | ❌ | ✅ |
| Lord Microstrain IMU | ✅ | ✅ | ❌ | ✅ |
| SRI Loadcell | ✅ | ✅ | ❌ | ✅ |
| DRV5056 Hall Effect | ✅ | ❌ | ❌ | ❌ |
| LS7366R Encoder Counter | ✅ | ❌ | ❌ | ❌ |

| Actuators | Unit Tests | Hardware Tests | Benchmarks | Documentation |
| ------------- | ---------- | -------------- | ---------- | ------------- |
| Dephy Actpack | ⚠️ | ✅ | ⚠️ | ✅ |
| Moteus | ⚠️ | ⚠️ | ⚠️ | ✅ |
| TMotor | ❌ | ⚠️ | ❌ | ❌ |
| Dephy Actpack | ⚠️ | ✅ | ⚠️ | ✅ |
| Moteus | ⚠️ | ⚠️ | ⚠️ | ✅ |
| TMotor | ❌ | ⚠️ | ❌ | ❌ |
| Brushed Maxon | ✅ | ⚠️ | ❌ | ❌ |

> Legend: ✅ Complete/Available; ⚠️ Partial/In Progress; ❌ Not Yet Available;

Expand Down
48 changes: 48 additions & 0 deletions opensourceleg/actuators/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1204,3 +1204,51 @@ def is_streaming(self) -> bool:
True
"""
return self._is_streaming


class UnsupportedControlModeError(NotImplementedError):
"""Raised when a control capability the actuator lacks is invoked."""


class PositionControlActuatorBase(ActuatorBase):
"""ActuatorBase specialized to position control only.

Voltage, current, torque, and impedance methods are satisfied here once so
subclasses don't have to. They raise UnsupportedControlModeError if ever
called, and the corresponding telemetry properties do the same. Everything
else (position control, lifecycle, telemetry, mode machinery) is inherited
unchanged from ActuatorBase.
"""

def set_motor_voltage(self, value: float) -> None:
raise UnsupportedControlModeError(f"{type(self).__name__} does not support voltage control.")

def set_motor_current(self, value: float) -> None:
raise UnsupportedControlModeError(f"{type(self).__name__} does not support current control.")

def set_motor_impedance(self, value: float) -> None:
raise UnsupportedControlModeError(f"{type(self).__name__} does not support impedance control.")

def set_motor_torque(self, value: float) -> None:
raise UnsupportedControlModeError(f"{type(self).__name__} does not support torque control.")

def set_output_torque(self, value: float) -> None:
raise UnsupportedControlModeError(f"{type(self).__name__} does not support torque control.")

def set_current_gains(self, kp: float, ki: float, kd: float, ff: float) -> None:
raise UnsupportedControlModeError(f"{type(self).__name__} does not support current control.")

def _set_impedance_gains(self, k: float, b: float) -> None:
raise UnsupportedControlModeError(f"{type(self).__name__} does not support impedance control.")

@property
def motor_voltage(self) -> float:
raise UnsupportedControlModeError(f"{type(self).__name__} does not measure motor voltage.")

@property
def motor_current(self) -> float:
raise UnsupportedControlModeError(f"{type(self).__name__} does not measure motor current.")

@property
def motor_torque(self) -> float:
raise UnsupportedControlModeError(f"{type(self).__name__} does not measure motor torque.")
Loading
Loading