diff --git a/lerobot/common/robot_devices/motors/dynamixel.py b/lerobot/common/robot_devices/motors/dynamixel.py index e6bc4d44..e3f64685 100644 --- a/lerobot/common/robot_devices/motors/dynamixel.py +++ b/lerobot/common/robot_devices/motors/dynamixel.py @@ -377,8 +377,10 @@ class DynamixelMotorsBus: self.port_handler.setPacketTimeoutMillis(TIMEOUT_MS) - # Set expected baudrate for the bus - self.set_bus_baudrate(BAUDRATE) + if not self.are_motors_configured(): + raise OSError( + "Motors are not configured. Please use configure_motors.py to configure motors before continuing." + ) def reconnect(self): self.port_handler = PortHandler(self.port) diff --git a/lerobot/common/robot_devices/motors/feetech.py b/lerobot/common/robot_devices/motors/feetech.py index e2134add..53c92950 100644 --- a/lerobot/common/robot_devices/motors/feetech.py +++ b/lerobot/common/robot_devices/motors/feetech.py @@ -350,8 +350,10 @@ class FeetechMotorsBus: self.port_handler.setPacketTimeoutMillis(TIMEOUT_MS) - # Set expected baudrate for the bus - self.set_bus_baudrate(BAUDRATE) + if not self.are_motors_configured(): + raise OSError( + "Motors are not configured. Please use configure_motors.py to configure motors before continuing." + ) def reconnect(self): self.port_handler = PortHandler(self.port) diff --git a/lerobot/scripts/find_motors_bus_port.py b/lerobot/scripts/find_motors_bus_port.py new file mode 100644 index 00000000..3e547b25 --- /dev/null +++ b/lerobot/scripts/find_motors_bus_port.py @@ -0,0 +1,36 @@ +import time +from pathlib import Path + + +def find_available_ports(): + ports = [] + for path in Path("/dev").glob("tty*"): + ports.append(str(path)) + return ports + + +def find_port(): + print("Finding all available ports for the DynamixelMotorsBus.") + ports_before = find_available_ports() + print(ports_before) + + print("Remove the usb cable from your DynamixelMotorsBus and press Enter when done.") + input() + + time.sleep(0.5) + ports_after = find_available_ports() + ports_diff = list(set(ports_before) - set(ports_after)) + + if len(ports_diff) == 1: + port = ports_diff[0] + print(f"The port of this DynamixelMotorsBus is '{port}'") + print("Reconnect the usb cable.") + elif len(ports_diff) == 0: + raise OSError(f"Could not detect the port. No difference was found ({ports_diff}).") + else: + raise OSError(f"Could not detect the port. More than one port was found ({ports_diff}).") + + +if __name__ == "__main__": + # Helper to find the usb port associated to all your DynamixelMotorsBus. + find_port()