Implement feetech broadcast ping
This commit is contained in:
@@ -295,16 +295,13 @@ class MockMotors(MockSerial):
|
||||
return new_stub
|
||||
|
||||
def build_broadcast_ping_stub(
|
||||
self, ids_models_firmwares: dict[int, list[int]] | None = None, num_invalid_try: int = 0
|
||||
self, ids_models: dict[int, list[int]] | None = None, num_invalid_try: int = 0
|
||||
) -> str:
|
||||
ping_request = MockInstructionPacket.ping(scs.BROADCAST_ID)
|
||||
return_packets = b"".join(
|
||||
MockStatusPacket.ping(idx, model, firm_ver)
|
||||
for idx, (model, firm_ver) in ids_models_firmwares.items()
|
||||
)
|
||||
return_packets = b"".join(MockStatusPacket.ping(idx, model) for idx, model in ids_models.items())
|
||||
ping_response = self._build_send_fn(return_packets, num_invalid_try)
|
||||
|
||||
stub_name = "Ping_" + "_".join([str(idx) for idx in ids_models_firmwares])
|
||||
stub_name = "Ping_" + "_".join([str(idx) for idx in ids_models])
|
||||
self.stub(
|
||||
name=stub_name,
|
||||
receive_bytes=ping_request,
|
||||
|
||||
@@ -6,7 +6,7 @@ import pytest
|
||||
import scservo_sdk as scs
|
||||
|
||||
from lerobot.common.motors import CalibrationMode, Motor
|
||||
from lerobot.common.motors.feetech import FeetechMotorsBus
|
||||
from lerobot.common.motors.feetech import MODEL_NUMBER, FeetechMotorsBus
|
||||
from tests.mocks.mock_feetech import MockMotors, MockPortHandler
|
||||
|
||||
|
||||
@@ -93,15 +93,10 @@ def test_abc_implementation(dummy_motors):
|
||||
|
||||
|
||||
@pytest.mark.skip("TODO")
|
||||
@pytest.mark.parametrize(
|
||||
"idx, model_nb",
|
||||
[
|
||||
(1, 1190),
|
||||
(2, 1200),
|
||||
(3, 1120),
|
||||
],
|
||||
)
|
||||
def test_ping(idx, model_nb, mock_motors, dummy_motors):
|
||||
@pytest.mark.parametrize("idx", [1, 2, 3])
|
||||
def test_ping(idx, mock_motors, dummy_motors):
|
||||
expected_model = dummy_motors[f"dummy_{idx}"].model
|
||||
model_nb = MODEL_NUMBER[expected_model]
|
||||
stub_name = mock_motors.build_ping_stub(idx, model_nb)
|
||||
motors_bus = FeetechMotorsBus(
|
||||
port=mock_motors.port,
|
||||
@@ -111,27 +106,24 @@ def test_ping(idx, model_nb, mock_motors, dummy_motors):
|
||||
|
||||
ping_model_nb = motors_bus.ping(idx)
|
||||
|
||||
assert ping_model_nb == model_nb
|
||||
assert ping_model_nb == expected_model
|
||||
assert mock_motors.stubs[stub_name].called
|
||||
|
||||
|
||||
@pytest.mark.skip("TODO")
|
||||
def test_broadcast_ping(mock_motors, dummy_motors):
|
||||
expected_pings = {
|
||||
1: [1060, 50],
|
||||
2: [1120, 30],
|
||||
3: [1190, 10],
|
||||
}
|
||||
stub_name = mock_motors.build_broadcast_ping_stub(expected_pings)
|
||||
expected_models = {m.id: m.model for m in dummy_motors.values()}
|
||||
model_nbs = {id_: MODEL_NUMBER[model] for id_, model in expected_models.items()}
|
||||
stub_name = mock_motors.build_broadcast_ping_stub(model_nbs)
|
||||
motors_bus = FeetechMotorsBus(
|
||||
port=mock_motors.port,
|
||||
motors=dummy_motors,
|
||||
)
|
||||
motors_bus.connect()
|
||||
|
||||
ping_list = motors_bus.broadcast_ping()
|
||||
ping_model_nbs = motors_bus.broadcast_ping()
|
||||
|
||||
assert ping_list == expected_pings
|
||||
assert ping_model_nbs == expected_models
|
||||
assert mock_motors.stubs[stub_name].called
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user