Update docstrings
This commit is contained in:
parent
bd5b181dfd
commit
eeeccdba53
|
@ -202,41 +202,9 @@ def convert_to_bytes(value, n_bytes: int):
|
||||||
|
|
||||||
class DynamixelMotorsBus(MotorsBus):
|
class DynamixelMotorsBus(MotorsBus):
|
||||||
"""
|
"""
|
||||||
The DynamixelMotorsBus class allows to efficiently read and write to the attached motors. It relies on
|
The Dynamixel implementation for a MotorsBus. It relies on the python dynamixel sdk to communicate with
|
||||||
the python dynamixel sdk to communicate with the motors. For more info, see the [Dynamixel SDK Documentation](https://emanual.robotis.com/docs/en/software/dynamixel/dynamixel_sdk/sample_code/python_read_write_protocol_2_0/#python-read-write-protocol-20).
|
the motors. For more info, see the Dynamixel SDK Documentation:
|
||||||
|
https://emanual.robotis.com/docs/en/software/dynamixel/dynamixel_sdk/sample_code/python_read_write_protocol_2_0/#python-read-write-protocol-20).
|
||||||
A DynamixelMotorsBus instance requires a port (e.g. `DynamixelMotorsBus(port="/dev/tty.usbmodem575E0031751"`)).
|
|
||||||
To find the port, you can run our utility script:
|
|
||||||
```bash
|
|
||||||
python lerobot/scripts/find_motors_bus_port.py
|
|
||||||
>>> Finding all available ports for the MotorBus.
|
|
||||||
>>> ['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
|
|
||||||
>>> Remove the usb cable from your DynamixelMotorsBus and press Enter when done.
|
|
||||||
>>> The port of this DynamixelMotorsBus is /dev/tty.usbmodem575E0031751.
|
|
||||||
>>> Reconnect the usb cable.
|
|
||||||
```
|
|
||||||
|
|
||||||
Example of usage for 1 motor connected to the bus:
|
|
||||||
```python
|
|
||||||
motor_name = "gripper"
|
|
||||||
motor_index = 6
|
|
||||||
motor_model = "xl330-m288"
|
|
||||||
|
|
||||||
motors_bus = DynamixelMotorsBus(
|
|
||||||
port="/dev/tty.usbmodem575E0031751",
|
|
||||||
motors={motor_name: (motor_index, motor_model)},
|
|
||||||
)
|
|
||||||
motors_bus.connect()
|
|
||||||
|
|
||||||
position = motors_bus.read("Present_Position")
|
|
||||||
|
|
||||||
# move from a few motor steps as an example
|
|
||||||
few_steps = 30
|
|
||||||
motors_bus.write("Goal_Position", position + few_steps)
|
|
||||||
|
|
||||||
# when done, consider disconnecting
|
|
||||||
motors_bus.disconnect()
|
|
||||||
```
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
model_ctrl_table = deepcopy(MODEL_CONTROL_TABLE)
|
model_ctrl_table = deepcopy(MODEL_CONTROL_TABLE)
|
||||||
|
|
|
@ -215,41 +215,8 @@ def convert_to_bytes(value, n_bytes: int):
|
||||||
|
|
||||||
class FeetechMotorsBus(MotorsBus):
|
class FeetechMotorsBus(MotorsBus):
|
||||||
"""
|
"""
|
||||||
The FeetechMotorsBus class allows to efficiently read and write to the attached motors. It relies on
|
The FeetechMotorsBus class allows to efficiently read and write to the attached motors. It relies on the
|
||||||
the python feetech sdk to communicate with the motors. For more info, see the [feetech SDK Documentation](https://emanual.robotis.com/docs/en/software/feetech/feetech_sdk/sample_code/python_read_write_protocol_2_0/#python-read-write-protocol-20).
|
python feetech sdk to communicate with the motors, which is itself based on the dynamixel sdk.
|
||||||
|
|
||||||
A FeetechMotorsBus instance requires a port (e.g. `FeetechMotorsBus(port="/dev/tty.usbmodem575E0031751"`)).
|
|
||||||
To find the port, you can run our utility script:
|
|
||||||
```bash
|
|
||||||
python lerobot/scripts/find_motors_bus_port.py
|
|
||||||
>>> Finding all available ports for the MotorsBus.
|
|
||||||
>>> ['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
|
|
||||||
>>> Remove the usb cable from your FeetechMotorsBus and press Enter when done.
|
|
||||||
>>> The port of this FeetechMotorsBus is /dev/tty.usbmodem575E0031751.
|
|
||||||
>>> Reconnect the usb cable.
|
|
||||||
```
|
|
||||||
|
|
||||||
Example of usage for 1 motor connected to the bus:
|
|
||||||
```python
|
|
||||||
motor_name = "gripper"
|
|
||||||
motor_index = 6
|
|
||||||
motor_model = "sts3215"
|
|
||||||
|
|
||||||
motors_bus = FeetechMotorsBus(
|
|
||||||
port="/dev/tty.usbmodem575E0031751",
|
|
||||||
motors={motor_name: (motor_index, motor_model)},
|
|
||||||
)
|
|
||||||
motors_bus.connect()
|
|
||||||
|
|
||||||
position = motors_bus.read("Present_Position")
|
|
||||||
|
|
||||||
# move from a few motor steps as an example
|
|
||||||
few_steps = 30
|
|
||||||
motors_bus.write("Goal_Position", position + few_steps)
|
|
||||||
|
|
||||||
# when done, consider disconnecting
|
|
||||||
motors_bus.disconnect()
|
|
||||||
```
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
model_ctrl_table = deepcopy(MODEL_CONTROL_TABLE)
|
model_ctrl_table = deepcopy(MODEL_CONTROL_TABLE)
|
||||||
|
|
|
@ -154,7 +154,46 @@ class PacketHandler(Protocol):
|
||||||
|
|
||||||
|
|
||||||
class MotorsBus(abc.ABC):
|
class MotorsBus(abc.ABC):
|
||||||
"""The main LeRobot class for implementing motors buses."""
|
"""The main LeRobot class for implementing motors buses.
|
||||||
|
|
||||||
|
There are currently two implementations of this abstract class:
|
||||||
|
- DynamixelMotorsBus
|
||||||
|
- FeetechMotorsBus
|
||||||
|
|
||||||
|
Note: This class may evolve in the future should we add support for other manufacturers SDKs.
|
||||||
|
|
||||||
|
A MotorsBus allows to efficiently read and write to the attached motors.
|
||||||
|
It represents a several motors daisy-chained together and connected through a serial port.
|
||||||
|
|
||||||
|
A MotorsBus subclass instance requires a port (e.g. `FeetechMotorsBus(port="/dev/tty.usbmodem575E0031751"`)).
|
||||||
|
To find the port, you can run our utility script:
|
||||||
|
```bash
|
||||||
|
python lerobot/scripts/find_motors_bus_port.py
|
||||||
|
>>> Finding all available ports for the MotorsBus.
|
||||||
|
>>> ['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
|
||||||
|
>>> Remove the usb cable from your MotorsBus and press Enter when done.
|
||||||
|
>>> The port of this MotorsBus is /dev/tty.usbmodem575E0031751.
|
||||||
|
>>> Reconnect the usb cable.
|
||||||
|
```
|
||||||
|
|
||||||
|
Example of usage for 1 Feetech sts3215 motor connected to the bus:
|
||||||
|
```python
|
||||||
|
motors_bus = FeetechMotorsBus(
|
||||||
|
port="/dev/tty.usbmodem575E0031751",
|
||||||
|
motors={"gripper": (6, "sts3215")},
|
||||||
|
)
|
||||||
|
motors_bus.connect()
|
||||||
|
|
||||||
|
position = motors_bus.read("Present_Position")
|
||||||
|
|
||||||
|
# Move from a few motor steps as an example
|
||||||
|
few_steps = 30
|
||||||
|
motors_bus.write("Goal_Position", position + few_steps)
|
||||||
|
|
||||||
|
# When done, properly disconnect the port using
|
||||||
|
motors_bus.disconnect()
|
||||||
|
```
|
||||||
|
"""
|
||||||
|
|
||||||
model_ctrl_table: dict[str, dict]
|
model_ctrl_table: dict[str, dict]
|
||||||
model_resolution_table: dict[str, int]
|
model_resolution_table: dict[str, int]
|
||||||
|
|
Loading…
Reference in New Issue