mirror of
https://github.com/huggingface/lerobot.git
synced 2026-07-24 18:26:11 +00:00
fix(gamepad): Gamepad on macos often does not need fallback (#4125)
* gamepad does often work on macos * review comments * fix(gamepad): expose hidapi fallback in config --------- Co-authored-by: Maxim Bonnaerens <maxim@bonnaerens.be>
This commit is contained in:
@@ -23,3 +23,5 @@ from ..config import TeleoperatorConfig
|
|||||||
@dataclass
|
@dataclass
|
||||||
class GamepadTeleopConfig(TeleoperatorConfig):
|
class GamepadTeleopConfig(TeleoperatorConfig):
|
||||||
use_gripper: bool = True
|
use_gripper: bool = True
|
||||||
|
# Use hidapi instead of pygame for controllers that pygame cannot detect reliably.
|
||||||
|
hidapi_fallback: bool = False
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import logging
|
||||||
import sys
|
import sys
|
||||||
from enum import IntEnum
|
from enum import IntEnum
|
||||||
from typing import Any
|
from typing import Any
|
||||||
@@ -27,6 +28,8 @@ from ..teleoperator import Teleoperator
|
|||||||
from ..utils import TeleopEvents
|
from ..utils import TeleopEvents
|
||||||
from .configuration_gamepad import GamepadTeleopConfig
|
from .configuration_gamepad import GamepadTeleopConfig
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class GripperAction(IntEnum):
|
class GripperAction(IntEnum):
|
||||||
CLOSE = 0
|
CLOSE = 0
|
||||||
@@ -56,6 +59,13 @@ class GamepadTeleop(Teleoperator):
|
|||||||
|
|
||||||
self.gamepad = None
|
self.gamepad = None
|
||||||
|
|
||||||
|
self.hidapi_fallback = config.hidapi_fallback
|
||||||
|
if sys.platform == "darwin" and not self.hidapi_fallback:
|
||||||
|
logger.warning(
|
||||||
|
"On macOS, pygame may not reliably detect input from some controllers. "
|
||||||
|
"If you experience issues, set `hidapi_fallback=true`."
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def action_features(self) -> dict:
|
def action_features(self) -> dict:
|
||||||
if self.config.use_gripper:
|
if self.config.use_gripper:
|
||||||
@@ -76,9 +86,7 @@ class GamepadTeleop(Teleoperator):
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
def connect(self) -> None:
|
def connect(self) -> None:
|
||||||
# use HidApi for macos
|
if self.hidapi_fallback:
|
||||||
if sys.platform == "darwin":
|
|
||||||
# NOTE: On macOS, pygame doesn’t reliably detect input from some controllers so we fall back to hidapi
|
|
||||||
from .gamepad_utils import GamepadControllerHID as Gamepad
|
from .gamepad_utils import GamepadControllerHID as Gamepad
|
||||||
else:
|
else:
|
||||||
from .gamepad_utils import GamepadController as Gamepad
|
from .gamepad_utils import GamepadController as Gamepad
|
||||||
|
|||||||
Reference in New Issue
Block a user