|
26 | 26 | <table align="center"> |
27 | 27 | <tr> |
28 | 28 | <td width="50%"> |
29 | | -<a href="https://github.com/robot-learning-co/trlc-dk1/blob/main/hardware/TRLC-DK1-Follower_v0.2.0.step" target="_blank"> |
30 | | -TRLC-DK1 v0.2.0 Follower CAD (Fusion)<br> |
| 29 | +<a href="https://github.com/robot-learning-co/trlc-dk1/blob/main/hardware/TRLC-DK1-Follower_v0.3.0.step" target="_blank"> |
| 30 | +TRLC-DK1 v0.3.0 Follower CAD<br> |
31 | 31 | <img src="media/follower_cad.png" width="100%"> |
32 | 32 | </a> |
33 | 33 | </td> |
34 | 34 | <td width="50%"> |
35 | 35 | <a href="https://a360.co/481PSQH" target="_blank"> |
36 | | -TRLC-DK1 v0.2.0 Leader CAD (Fusion)<br> |
| 36 | +TRLC-DK1 v0.2.0 Leader CAD<br> |
37 | 37 | <img src="media/leader_cad.png" width="100%"> |
38 | 38 | </a> |
39 | 39 | </td> |
40 | 40 | </tr> |
41 | 41 | </table> |
42 | | -Copyright 2025 The Robot Learning Company UG (haftungsbeschränkt). All rights reserved. |
| 42 | +Copyright 2025-2026 The Robot Learning Company UG (haftungsbeschränkt). All rights reserved. |
43 | 43 |
|
44 | 44 | ## Installation |
45 | 45 |
|
46 | 46 | ``` |
47 | | -conda create -n dk1 python=3.10 |
48 | | -conda activate dk1 |
49 | | -pip install -e . |
| 47 | +git clone https://github.com/robot-learning-co/trlc-dk1.git |
| 48 | +uv venv |
| 49 | +uv pip install -e . |
50 | 50 | ``` |
| 51 | +This repo uses [LeRobot's plugin conventions](https://huggingface.co/docs/lerobot/integrate_hardware#using-your-own-lerobot-devices-) to be automatically detected by a LeRobot installation in the same Python environment. |
51 | 52 |
|
52 | | -(This should also install [TRLC's fork of LeRobot](https://github.com/robot-learning-co/lerobot) and use branch `trlc-dk1`) |
53 | 53 |
|
54 | 54 | ## Examples |
55 | 55 |
|
56 | | -Use [LeRobot's CLI](https://huggingface.co/docs/lerobot/il_robots) to identify your teleop and robot ports: |
| 56 | +Use [LeRobot's CLI](https://huggingface.co/docs/lerobot/il_robots) to identify your teleop, robot, and camera ports: |
57 | 57 |
|
58 | 58 | ``` |
59 | | -lerobot-find-port |
| 59 | +uv run lerobot-find-port |
| 60 | +uv run lerobot-find-cameras |
60 | 61 | ``` |
61 | 62 |
|
62 | 63 | <details> |
63 | | -<summary>Teleoperation |
| 64 | +<summary>Example I: Single Arm Teleoperation |
64 | 65 | </summary> |
65 | 66 |
|
66 | 67 | ```bash |
67 | | -lerobot-teleoperate \ |
| 68 | +uv run lerobot-teleoperate \ |
68 | 69 | --robot.type=dk1_follower \ |
69 | | - --robot.port=/dev/tty.usbmodem00000000050C1 \ |
70 | | - --robot.joint_velocity_scaling=0.5 \ |
| 70 | + --robot.port=/dev/ttyACM0 \ |
| 71 | + --robot.joint_velocity_scaling=0.2 \ |
| 72 | + --teleop.type=dk1_leader \ |
| 73 | + --teleop.port=/dev/ttyACM1 \ |
71 | 74 | --robot.cameras="{ |
72 | | - context: {type: opencv, index_or_path: 0, width: 1280, height: 720, fps: 30}, |
73 | | - wrist: {type: opencv, index_or_path: 1, width: 1280, height: 720, fps: 30} |
| 75 | + context: {type: opencv, index_or_path: 0, width: 1280, height: 720, fps: 60, fourcc: "MJPG"}, |
| 76 | + wrist: {type: opencv, index_or_path: 1, width: 1280, height: 720, fps: 60, rotation: 180, fourcc: "MJPG"} |
74 | 77 | }" \ |
75 | | - --teleop.type=dk1_leader \ |
76 | | - --teleop.port=/dev/tty.usbmodem58FA0824311 \ |
77 | 78 | --display_data=true |
78 | 79 | ``` |
79 | 80 | </details> |
80 | 81 |
|
81 | 82 | <details> |
82 | | -<summary>Recording |
| 83 | +<summary>Example II: Bimanual Recording |
83 | 84 | </summary> |
84 | 85 |
|
85 | 86 | ```bash |
86 | 87 | lerobot-record \ |
87 | | - --robot.type=dk1_follower \ |
88 | | - --robot.port=/dev/tty.usbmodem00000000050C1 \ |
89 | | - --robot.joint_velocity_scaling=1.0 \ |
90 | | - --robot.cameras="{ |
91 | | - context: {type: opencv, index_or_path: 0, width: 640, height: 360, fps: 30}, |
92 | | - wrist: {type: opencv, index_or_path: 1, width: 640, height: 360, fps: 30} |
93 | | - }" \ |
94 | | - --teleop.type=dk1_leader \ |
95 | | - --teleop.port=/dev/tty.usbmodem58FA0824311 \ |
96 | | - --display_data=true \ |
97 | | - --dataset.repo_id=$USER/my_dataset \ |
98 | | - --dataset.push_to_hub=false \ |
99 | | - --dataset.num_episodes=50 \ |
100 | | - --dataset.episode_time_s=30 \ |
101 | | - --dataset.reset_time_s=15 \ |
102 | | - --dataset.single_task="My task description." |
103 | | -``` |
104 | | -```bash |
105 | | - --resume=true |
106 | | -``` |
107 | | -</details> |
108 | | - |
109 | | -<details> |
110 | | -<summary>Inference |
111 | | -</summary> |
112 | | - |
113 | | -```bash |
114 | | -lerobot-record \ |
115 | | - --robot.type=dk1_follower \ |
116 | | - --robot.port=/dev/tty.usbmodem00000000050C1 \ |
117 | | - --robot.joint_velocity_scaling=0.5 \ |
118 | | - --robot.cameras="{ |
119 | | - context: {type: opencv, index_or_path: 0, width: 640, height: 360, fps: 30}, |
120 | | - wrist: {type: opencv, index_or_path: 1, width: 640, height: 360, fps: 30} |
121 | | - }" |
122 | | - --display_data=true \ |
123 | | - --dataset.repo_id=$USER/eval_my_model \ |
124 | | - --dataset.single_task="My task description." \ |
125 | | - --dataset.push_to_hub=false \ |
126 | | - --policy.path=outputs/my_model/checkpoints/last/pretrained_model |
127 | | -``` |
128 | | -</details> |
129 | | - |
130 | | -<details> |
131 | | -<summary>Bimanual Teleoperation |
132 | | -</summary> |
133 | | - |
134 | | -```bash |
135 | | -lerobot-teleoperate \ |
136 | 88 | --robot.type=bi_dk1_follower \ |
137 | 89 | --robot.right_arm_port=/dev/ttyACM0 \ |
138 | 90 | --robot.left_arm_port=/dev/ttyACM1 \ |
139 | 91 | --robot.joint_velocity_scaling=1.0 \ |
140 | | - --robot.cameras="{ |
141 | | - context: {type: opencv, index_or_path: 2, width: 640, height: 360, fps: 30}, |
142 | | - right_wrist: {type: opencv, index_or_path: 4, width: 640, height: 360, fps: 30}, |
143 | | - left_wrist: {type: opencv, index_or_path: 0, width: 640, height: 360, fps: 30}, |
144 | | - }" \ |
145 | 92 | --teleop.type=bi_dk1_leader \ |
146 | 93 | --teleop.right_arm_port=/dev/ttyACM2 \ |
147 | 94 | --teleop.left_arm_port=/dev/ttyACM3 \ |
148 | | - --display_data=true \ |
149 | | - --display_url=100.88.6.81 |
150 | | -``` |
151 | | -</details> |
152 | | - |
153 | | -<details> |
154 | | -<summary>Bimanual Recording |
155 | | -</summary> |
156 | | - |
157 | | -```bash |
158 | | -lerobot-record \ |
159 | | - --robot.type=bi_dk1_follower \ |
160 | | - --robot.right_arm_port=/dev/ttyACM0 \ |
161 | | - --robot.left_arm_port=/dev/ttyACM1 \ |
162 | | - --robot.joint_velocity_scaling=1.0 \ |
163 | 95 | --robot.cameras="{ |
164 | | - context: {type: opencv, index_or_path: 2, width: 640, height: 360, fps: 30}, |
165 | | - right_wrist: {type: opencv, index_or_path: 4, width: 640, height: 360, fps: 30}, |
166 | | - left_wrist: {type: opencv, index_or_path: 0, width: 640, height: 360, fps: 30}, |
| 96 | + head: {type: opencv, index_or_path: /dev/video0, width: 960, height: 540, fps: 60, fourcc: "MJPG"}, |
| 97 | + right_wrist: {type: opencv, index_or_path: /dev/video2, width: 960, height: 540, fps: 60, rotation: 180, fourcc: "MJPG"}, |
| 98 | + left_wrist: {type: opencv, index_or_path: /dev/video4, width: 960, height: 540, fps: 60, rotation: 180, fourcc: "MJPG"}, |
167 | 99 | }" \ |
168 | | - --teleop.type=bi_dk1_leader \ |
169 | | - --teleop.right_arm_port=/dev/ttyACM2 \ |
170 | | - --teleop.left_arm_port=/dev/ttyACM3 \ |
171 | | - --dataset.repo_id=$USER/disassemble_lego \ |
| 100 | + --dataset.repo_id=$USER/my_test_dataset \ |
172 | 101 | --dataset.push_to_hub=false \ |
173 | | - --dataset.num_episodes=40 \ |
174 | | - --dataset.episode_time_s=180 \ |
175 | | - --dataset.reset_time_s=120 \ |
176 | | - --dataset.single_task="Disassemble the Lego and sort it." \ |
177 | | - --dataset.reset_time_s=120 \ |
178 | | - --resume=true |
| 102 | + --dataset.num_episodes=3 \ |
| 103 | + --dataset.episode_time_s=30 \ |
| 104 | + --dataset.reset_time_s=20 \ |
| 105 | + --dataset.single_task="Test the LeRobot recording pipeling." |
179 | 106 | ``` |
180 | 107 | </details> |
181 | 108 |
|
182 | | -## URDF |
| 109 | +## URDF (v0.2) |
183 | 110 |
|
184 | 111 | <p align="center"> |
185 | 112 | <img src="https://github.com/andreaskoepf/trlc-dk1-follower-urdf/blob/main/assets/dk1_vsual_right.png"> |
|
0 commit comments