Drop-in replacement for the Nuwa-HP60C camera container, exposing RGB +
aligned depth + intrinsics via REST/WebSocket so the existing
pestello-pose-detector pipeline can consume frames without changes.
Key adaptations for D4xx on USB 2.0 (this robot has no USB 3 port exposed
externally — see STATUS.md):
- pyrealsense2 built from source; the librealsense v2.55.1 install rule
doesn't ship the main .so, so we copy it from the build dir and add an
__init__.py that re-exports the submodule.
- Color stream uses YUYV format on USB 2.x (BGR8/RGB8 time out on this
bus); converted to BGR via cv2.cvtColor in capture().
- rs.align is skipped on USB 2 (incompatible with YUYV); color is
cv2-resized to depth shape for approximate per-pixel alignment.
- Driver auto-detects usb_type_descriptor and falls back to the
full-resolution BGR8 + rs.align pipeline when on USB 3.
Tested: /api/{health,status,discover,rgb,depth,depth/color,capture,
intrinsics} all return 200 with valid payloads at 640x480.
26 lines
926 B
Python
26 lines
926 B
Python
from src.backend.models.api import ok, fail, ApiResponse, ApiError
|
|
|
|
|
|
class TestApiEnvelope:
|
|
def test_ok_response(self):
|
|
result = ok({"status": "running"})
|
|
assert result["success"] is True
|
|
assert result["data"]["status"] == "running"
|
|
assert result["error"] is None
|
|
|
|
def test_fail_response(self):
|
|
result = fail("TIMEOUT", "Frame capture timeout")
|
|
assert result["success"] is False
|
|
assert result["data"] is None
|
|
assert result["error"]["code"] == "TIMEOUT"
|
|
assert result["error"]["message"] == "Frame capture timeout"
|
|
|
|
def test_api_response_model(self):
|
|
resp = ApiResponse(success=True, data={"key": "value"})
|
|
assert resp.success is True
|
|
assert resp.data == {"key": "value"}
|
|
|
|
def test_api_error_model(self):
|
|
err = ApiError(code="NOT_FOUND", message="Resource not found")
|
|
assert err.code == "NOT_FOUND"
|