Skip to content

Commit

Permalink
Test switching to force actuators.
Browse files Browse the repository at this point in the history
  • Loading branch information
vaxenburg committed Dec 4, 2024
1 parent 5ff90c2 commit 5337897
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
29 changes: 29 additions & 0 deletions tests/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"""Common functions and fixtures for flybody tests."""

import numpy as np


def is_force_actuator(physics, actuator_id=None):
"""Check if actuator with given id is a force actuator with ctrlrange == (-1, 1).
If actuator_id is None, check all actuators.
"""
physics.reset()
if actuator_id is None:
inds = [*range(physics.model.nu)]
else:
assert isinstance(actuator_id, int)
inds = [actuator_id]
for i in inds:
assert physics.model.actuator_gainprm[i][0] != 0.
assert np.all(physics.model.actuator_gainprm[i][1:] == 0.)
assert np.all(physics.model.actuator_biasprm[i][:] == 0.)
assert physics.model.actuator_gaintype[i] == 0.
assert physics.model.actuator_biastype[i] == 0.
if physics.model.actuator_trntype[i] != 5:
# Force actuator (on either joint or tendon).
assert np.all(physics.model.actuator_ctrlrange[i] == (-1, 1))
else:
# Adhesion actuator.
assert np.all(physics.model.actuator_ctrlrange[i] == (0, 1))

return True
14 changes: 14 additions & 0 deletions tests/test_flywalker.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from dm_control.composer.observation.observable import base as observable_base

from flybody.fruitfly.fruitfly import FruitFly
from .common import is_force_actuator


TEST_ACTION = 0.3561
Expand Down Expand Up @@ -120,6 +121,19 @@ def test_fly_bulletproof():
assert action_spec.maximum[i] == 1


def test_force_actuators():
"""Test switching to force actuators."""
fly = FruitFly(use_legs=True,
use_wings=True,
use_mouth=True,
use_antennae=True,
joint_filter=0.01,
adhesion_filter=0.02,
force_actuators=True)
physics = mjcf.Physics.from_mjcf_model(fly.mjcf_model)
assert is_force_actuator(physics)


def test_filterexact():
"""Test `filterexact` actuator activation dynamics."""

Expand Down

0 comments on commit 5337897

Please sign in to comment.