Address Jess comments
This commit is contained in:
@@ -33,7 +33,7 @@ def find_camera_indices(raise_when_empty=True, mock=False) -> list[int]:
|
|||||||
connected to the computer.
|
connected to the computer.
|
||||||
"""
|
"""
|
||||||
if mock:
|
if mock:
|
||||||
from tests.mock_intelrealsense import (
|
from tests.mock_pyrealsense2 import (
|
||||||
RSCameraInfo,
|
RSCameraInfo,
|
||||||
RSContext,
|
RSContext,
|
||||||
)
|
)
|
||||||
@@ -82,7 +82,7 @@ def save_images_from_cameras(
|
|||||||
camera_ids = find_camera_indices(mock=mock)
|
camera_ids = find_camera_indices(mock=mock)
|
||||||
|
|
||||||
if mock:
|
if mock:
|
||||||
from tests.mock_opencv import COLOR_RGB2BGR, cvtColor
|
from tests.mock_cv2 import COLOR_RGB2BGR, cvtColor
|
||||||
else:
|
else:
|
||||||
from cv2 import COLOR_RGB2BGR, cvtColor
|
from cv2 import COLOR_RGB2BGR, cvtColor
|
||||||
|
|
||||||
@@ -263,7 +263,7 @@ class IntelRealSenseCamera:
|
|||||||
)
|
)
|
||||||
|
|
||||||
if self.mock:
|
if self.mock:
|
||||||
from tests.mock_intelrealsense import (
|
from tests.mock_pyrealsense2 import (
|
||||||
RSConfig,
|
RSConfig,
|
||||||
RSFormat,
|
RSFormat,
|
||||||
RSPipeline,
|
RSPipeline,
|
||||||
@@ -373,7 +373,7 @@ class IntelRealSenseCamera:
|
|||||||
# IntelRealSense uses RGB format as default (red, green, blue).
|
# IntelRealSense uses RGB format as default (red, green, blue).
|
||||||
if requested_color_mode == "bgr":
|
if requested_color_mode == "bgr":
|
||||||
if self.mock:
|
if self.mock:
|
||||||
from tests.mock_opencv import COLOR_RGB2BGR, cvtColor
|
from tests.mock_cv2 import COLOR_RGB2BGR, cvtColor
|
||||||
else:
|
else:
|
||||||
from cv2 import COLOR_RGB2BGR, cvtColor
|
from cv2 import COLOR_RGB2BGR, cvtColor
|
||||||
|
|
||||||
@@ -430,6 +430,7 @@ class IntelRealSenseCamera:
|
|||||||
|
|
||||||
num_tries = 0
|
num_tries = 0
|
||||||
while self.color_image is None:
|
while self.color_image is None:
|
||||||
|
# TODO(rcadene, aliberts): intelrealsense has diverged compared to opencv over here
|
||||||
num_tries += 1
|
num_tries += 1
|
||||||
time.sleep(1 / self.fps)
|
time.sleep(1 / self.fps)
|
||||||
if num_tries > self.fps and (self.thread.ident is None or not self.thread.is_alive()):
|
if num_tries > self.fps and (self.thread.ident is None or not self.thread.is_alive()):
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ def find_camera_indices(raise_when_empty=False, max_index_search_range=MAX_OPENC
|
|||||||
possible_camera_ids = range(max_index_search_range)
|
possible_camera_ids = range(max_index_search_range)
|
||||||
|
|
||||||
if mock:
|
if mock:
|
||||||
from tests.mock_opencv import VideoCapture
|
from tests.mock_cv2 import VideoCapture
|
||||||
else:
|
else:
|
||||||
from cv2 import VideoCapture
|
from cv2 import VideoCapture
|
||||||
|
|
||||||
@@ -244,24 +244,24 @@ class OpenCVCamera:
|
|||||||
raise RobotDeviceAlreadyConnectedError(f"OpenCVCamera({self.camera_index}) is already connected.")
|
raise RobotDeviceAlreadyConnectedError(f"OpenCVCamera({self.camera_index}) is already connected.")
|
||||||
|
|
||||||
if self.mock:
|
if self.mock:
|
||||||
from tests.mock_opencv import (
|
from tests.mock_cv2 import (
|
||||||
CAP_PROP_FPS,
|
CAP_PROP_FPS,
|
||||||
CAP_PROP_FRAME_HEIGHT,
|
CAP_PROP_FRAME_HEIGHT,
|
||||||
CAP_PROP_FRAME_WIDTH,
|
CAP_PROP_FRAME_WIDTH,
|
||||||
VideoCapture,
|
VideoCapture,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
import cv2
|
|
||||||
from cv2 import (
|
from cv2 import (
|
||||||
CAP_PROP_FPS,
|
CAP_PROP_FPS,
|
||||||
CAP_PROP_FRAME_HEIGHT,
|
CAP_PROP_FRAME_HEIGHT,
|
||||||
CAP_PROP_FRAME_WIDTH,
|
CAP_PROP_FRAME_WIDTH,
|
||||||
VideoCapture,
|
VideoCapture,
|
||||||
|
setNumThreads,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Use 1 thread to avoid blocking the main thread. Especially useful during data collection
|
# Use 1 thread to avoid blocking the main thread. Especially useful during data collection
|
||||||
# when other threads are used to save the images.
|
# when other threads are used to save the images.
|
||||||
cv2.setNumThreads(1)
|
setNumThreads(1)
|
||||||
|
|
||||||
camera_idx = f"/dev/video{self.camera_index}" if platform.system() == "Linux" else self.camera_index
|
camera_idx = f"/dev/video{self.camera_index}" if platform.system() == "Linux" else self.camera_index
|
||||||
with self.lock:
|
with self.lock:
|
||||||
@@ -356,7 +356,7 @@ class OpenCVCamera:
|
|||||||
# so we convert the image color from BGR to RGB.
|
# so we convert the image color from BGR to RGB.
|
||||||
if requested_color_mode == "rgb":
|
if requested_color_mode == "rgb":
|
||||||
if self.mock:
|
if self.mock:
|
||||||
from tests.mock_opencv import COLOR_BGR2RGB, cvtColor
|
from tests.mock_cv2 import COLOR_BGR2RGB, cvtColor
|
||||||
else:
|
else:
|
||||||
from cv2 import COLOR_BGR2RGB, cvtColor
|
from cv2 import COLOR_BGR2RGB, cvtColor
|
||||||
|
|
||||||
@@ -409,10 +409,6 @@ class OpenCVCamera:
|
|||||||
num_tries += 1
|
num_tries += 1
|
||||||
if num_tries > self.fps * 2:
|
if num_tries > self.fps * 2:
|
||||||
raise TimeoutError("Timed out waiting for async_read() to start.")
|
raise TimeoutError("Timed out waiting for async_read() to start.")
|
||||||
# if num_tries > self.fps and (self.thread.ident is None or not self.thread.is_alive()):
|
|
||||||
# raise Exception(
|
|
||||||
# "The thread responsible for `self.async_read()` took too much time to start. There might be an issue. Verify that `self.thread.start()` has been called."
|
|
||||||
# )
|
|
||||||
|
|
||||||
def disconnect(self):
|
def disconnect(self):
|
||||||
if not self.is_connected:
|
if not self.is_connected:
|
||||||
|
|||||||
@@ -143,8 +143,6 @@ MODEL_BAUDRATE_TABLE = {
|
|||||||
NUM_READ_RETRY = 10
|
NUM_READ_RETRY = 10
|
||||||
NUM_WRITE_RETRY = 10
|
NUM_WRITE_RETRY = 10
|
||||||
|
|
||||||
COMM_SUCCESS = 0
|
|
||||||
|
|
||||||
|
|
||||||
def convert_degrees_to_steps(degrees: float | np.ndarray, models: str | list[str]) -> np.ndarray:
|
def convert_degrees_to_steps(degrees: float | np.ndarray, models: str | list[str]) -> np.ndarray:
|
||||||
"""This function converts the degree range to the step range for indicating motors rotation.
|
"""This function converts the degree range to the step range for indicating motors rotation.
|
||||||
@@ -363,7 +361,7 @@ class DynamixelMotorsBus:
|
|||||||
)
|
)
|
||||||
|
|
||||||
if self.mock:
|
if self.mock:
|
||||||
from tests.mock_dynamixel import PacketHandler, PortHandler
|
from tests.mock_dynamixel_sdk import PacketHandler, PortHandler
|
||||||
else:
|
else:
|
||||||
from dynamixel_sdk import PacketHandler, PortHandler
|
from dynamixel_sdk import PacketHandler, PortHandler
|
||||||
|
|
||||||
@@ -401,7 +399,7 @@ class DynamixelMotorsBus:
|
|||||||
|
|
||||||
def reconnect(self):
|
def reconnect(self):
|
||||||
if self.mock:
|
if self.mock:
|
||||||
from tests.mock_dynamixel import PacketHandler, PortHandler
|
from tests.mock_dynamixel_sdk import PacketHandler, PortHandler
|
||||||
else:
|
else:
|
||||||
from dynamixel_sdk import PacketHandler, PortHandler
|
from dynamixel_sdk import PacketHandler, PortHandler
|
||||||
|
|
||||||
@@ -797,9 +795,9 @@ class DynamixelMotorsBus:
|
|||||||
|
|
||||||
def _read_with_motor_ids(self, motor_models, motor_ids, data_name):
|
def _read_with_motor_ids(self, motor_models, motor_ids, data_name):
|
||||||
if self.mock:
|
if self.mock:
|
||||||
from tests.mock_dynamixel import GroupSyncRead
|
from tests.mock_dynamixel_sdk import COMM_SUCCESS, GroupSyncRead
|
||||||
else:
|
else:
|
||||||
from dynamixel_sdk import GroupSyncRead
|
from dynamixel_sdk import COMM_SUCCESS, GroupSyncRead
|
||||||
|
|
||||||
return_list = True
|
return_list = True
|
||||||
if not isinstance(motor_ids, list):
|
if not isinstance(motor_ids, list):
|
||||||
@@ -838,9 +836,9 @@ class DynamixelMotorsBus:
|
|||||||
start_time = time.perf_counter()
|
start_time = time.perf_counter()
|
||||||
|
|
||||||
if self.mock:
|
if self.mock:
|
||||||
from tests.mock_dynamixel import GroupSyncRead
|
from tests.mock_dynamixel_sdk import COMM_SUCCESS, GroupSyncRead
|
||||||
else:
|
else:
|
||||||
from dynamixel_sdk import GroupSyncRead
|
from dynamixel_sdk import COMM_SUCCESS, GroupSyncRead
|
||||||
|
|
||||||
if motor_names is None:
|
if motor_names is None:
|
||||||
motor_names = self.motor_names
|
motor_names = self.motor_names
|
||||||
@@ -902,9 +900,9 @@ class DynamixelMotorsBus:
|
|||||||
|
|
||||||
def _write_with_motor_ids(self, motor_models, motor_ids, data_name, values):
|
def _write_with_motor_ids(self, motor_models, motor_ids, data_name, values):
|
||||||
if self.mock:
|
if self.mock:
|
||||||
from tests.mock_dynamixel import GroupSyncWrite
|
from tests.mock_dynamixel_sdk import COMM_SUCCESS, GroupSyncWrite
|
||||||
else:
|
else:
|
||||||
from dynamixel_sdk import GroupSyncWrite
|
from dynamixel_sdk import COMM_SUCCESS, GroupSyncWrite
|
||||||
|
|
||||||
if not isinstance(motor_ids, list):
|
if not isinstance(motor_ids, list):
|
||||||
motor_ids = [motor_ids]
|
motor_ids = [motor_ids]
|
||||||
@@ -934,9 +932,9 @@ class DynamixelMotorsBus:
|
|||||||
start_time = time.perf_counter()
|
start_time = time.perf_counter()
|
||||||
|
|
||||||
if self.mock:
|
if self.mock:
|
||||||
from tests.mock_dynamixel import GroupSyncWrite
|
from tests.mock_dynamixel_sdk import COMM_SUCCESS, GroupSyncWrite
|
||||||
else:
|
else:
|
||||||
from dynamixel_sdk import GroupSyncWrite
|
from dynamixel_sdk import COMM_SUCCESS, GroupSyncWrite
|
||||||
|
|
||||||
if motor_names is None:
|
if motor_names is None:
|
||||||
motor_names = self.motor_names
|
motor_names = self.motor_names
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ def require_robot(func):
|
|||||||
|
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
# Access the pytest request context to get the mockeypatch fixture
|
# Access the pytest request context to get the is_robot_available fixture
|
||||||
request = kwargs.get("request")
|
request = kwargs.get("request")
|
||||||
robot_type = kwargs.get("robot_type")
|
robot_type = kwargs.get("robot_type")
|
||||||
mock = kwargs.get("mock")
|
mock = kwargs.get("mock")
|
||||||
@@ -228,6 +228,7 @@ def require_robot(func):
|
|||||||
def require_camera(func):
|
def require_camera(func):
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
|
# Access the pytest request context to get the is_camera_available fixture
|
||||||
request = kwargs.get("request")
|
request = kwargs.get("request")
|
||||||
camera_type = kwargs.get("camera_type")
|
camera_type = kwargs.get("camera_type")
|
||||||
mock = kwargs.get("mock")
|
mock = kwargs.get("mock")
|
||||||
@@ -250,7 +251,7 @@ def require_camera(func):
|
|||||||
def require_motor(func):
|
def require_motor(func):
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
# Access the pytest request context to get the mockeypatch fixture
|
# Access the pytest request context to get the is_motor_available fixture
|
||||||
request = kwargs.get("request")
|
request = kwargs.get("request")
|
||||||
motor_type = kwargs.get("motor_type")
|
motor_type = kwargs.get("motor_type")
|
||||||
mock = kwargs.get("mock")
|
mock = kwargs.get("mock")
|
||||||
|
|||||||
Reference in New Issue
Block a user