import{s as _e,o as Re,n as ce}from"../chunks/scheduler.eb244325.js";import{S as Ze,i as je,e as U,s as a,c as w,h as Qe,a as C,d as n,b as r,f as xe,g as T,j as v,k as ve,l as Ge,m as s,n as h,t as J,o as c,p as x}from"../chunks/index.3fe63ad3.js";import{C as X}from"../chunks/CodeBlock.934d290d.js";import{H as ne,E as Se}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.341974a5.js";import{H as ge,a as Je}from"../chunks/HfOption.0914e9f3.js";function Ie(E){let i,g="Example output on macOS:",p,M,o,$,_="Where the found port is: <code>/dev/tty.usbmodem575E0032081</code> corresponding to your leader or follower arm.",y;return M=new X({props:{code:"RmluZGluZyUyMGFsbCUyMGF2YWlsYWJsZSUyMHBvcnRzJTIwZm9yJTIwdGhlJTIwTW90b3JCdXMuJTBBJTVCJyUyRmRldiUyRnR0eS51c2Jtb2RlbTU3NUUwMDMyMDgxJyUyQyUyMCclMkZkZXYlMkZ0dHkudXNibW9kZW01NzVFMDAzMTc1MSclNUQlMEFSZW1vdmUlMjB0aGUlMjBVU0IlMjBjYWJsZSUyMGZyb20lMjB5b3VyJTIwTW90b3JzQnVzJTIwYW5kJTIwcHJlc3MlMjBFbnRlciUyMHdoZW4lMjBkb25lLiUwQSUwQSU1Qi4uLkRpc2Nvbm5lY3QlMjBjb3JyZXNwb25kaW5nJTIwbGVhZGVyJTIwb3IlMjBmb2xsb3dlciUyMGFybSUyMGFuZCUyMHByZXNzJTIwRW50ZXIuLi4lNUQlMEElMEFUaGUlMjBwb3J0JTIwb2YlMjB0aGlzJTIwTW90b3JzQnVzJTIwaXMlMjAlMkZkZXYlMkZ0dHkudXNibW9kZW01NzVFMDAzMjA4MSUwQVJlY29ubmVjdCUyMHRoZSUyMFVTQiUyMGNhYmxlLg==",highlighted:`<span class="hljs-symbol">Finding</span> all available ports for the <span class="hljs-symbol">MotorBus</span>.
[<span class="hljs-string">&#x27;/dev/tty.usbmodem575E0032081&#x27;</span>, <span class="hljs-string">&#x27;/dev/tty.usbmodem575E0031751&#x27;</span>]
<span class="hljs-symbol">Remove</span> the <span class="hljs-symbol">USB</span> cable from your <span class="hljs-symbol">MotorsBus</span> and press <span class="hljs-symbol">Enter</span> when done.

[...<span class="hljs-symbol">Disconnect</span> corresponding leader or follower arm and press <span class="hljs-symbol">Enter</span>...]

<span class="hljs-symbol">The</span> port of this <span class="hljs-symbol">MotorsBus</span> is /dev/tty.usbmodem575E0032081
<span class="hljs-symbol">Reconnect</span> the <span class="hljs-symbol">USB</span> cable.`,wrap:!1}}),{c(){i=U("p"),i.textContent=g,p=a(),w(M.$$.fragment),o=a(),$=U("p"),$.innerHTML=_},l(u){i=C(u,"P",{"data-svelte-h":!0}),v(i)!=="svelte-17cm1af"&&(i.textContent=g),p=r(u),T(M.$$.fragment,u),o=r(u),$=C(u,"P",{"data-svelte-h":!0}),v($)!=="svelte-cknsqd"&&($.innerHTML=_)},m(u,b){s(u,i,b),s(u,p,b),h(M,u,b),s(u,o,b),s(u,$,b),y=!0},p:ce,i(u){y||(J(M.$$.fragment,u),y=!0)},o(u){c(M.$$.fragment,u),y=!1},d(u){u&&(n(i),n(p),n(o),n($)),x(M,u)}}}function ke(E){let i,g="On Linux, we strongly recommend using udev rules to assign persistent and human-readable device names to the OMX leader and follower arms. This avoids issues where device names such as ttyACM0 and ttyACM1 change when the robot is unplugged, replugged, or when the system is rebooted.",p,M,o,$,_=`You should have obtained the port numbers like ../../ttyACM? for the leader and follower using <code>lerobot-find-port</code>. You can match those results with the serial numbers using the <code>ls -l /dev/serial/by-id/</code> command.
To create udev rules, you need the unique serial number for each OMX device. The easiest way is to list devices under:`,y,u,b,I,G="You will see output similar to:",R,Q,Z,j,S="In each line, the serial number is the long string after <code>usb-ROBOTIS_OpenRB-150_</code> and before <code>-if00</code>.",l,d,Me="Follower serial: <code>228BDD7B503059384C2E3120FF0A2B19</code>",z,se,de="Leader serial: <code>67E1ED68503059384C2E3120FF092234</code>",V,A,W,L,oe="Create a new udev rule file:",ye,N,D,H,ie="Paste the following lines, replacing the serial numbers with the values you found above:",be,P,F,Y,ae="Save the file and reload udev rules:",pe,k,Ue,q,le="Now unplug and replug both devices once.",fe,B,Ce,O,re="Check that the persistent device names exist:",we,K,ee,te,ue="You should see them pointing to ttyACM* devices:",$e,e,m,me,Te="These names remain stable across reboots and reconnections.",he;return M=new ne({props:{title:"1. Find your device serial numbers",local:"1-find-your-device-serial-numbers",headingTag:"h4"}}),u=new X({props:{code:"bHMlMjAtbCUyMCUyRmRldiUyRnNlcmlhbCUyRmJ5LWlkJTJG",highlighted:'<span class="hljs-built_in">ls</span> -l /dev/serial/by-id/',wrap:!1}}),Q=new X({props:{code:"dXNiLVJPQk9USVNfT3BlblJCLTE1MF8yMjhCREQ3QjUwMzA1OTM4NEMyRTMxMjBGRjBBMkIxOS1pZjAwJTIwLSUzRSUyMC4uJTJGLi4lMkZ0dHlBQ00wJTBBdXNiLVJPQk9USVNfT3BlblJCLTE1MF82N0UxRUQ2ODUwMzA1OTM4NEMyRTMxMjBGRjA5MjIzNC1pZjAwJTIwLSUzRSUyMC4uJTJGLi4lMkZ0dHlBQ00x",highlighted:`usb-ROBOTIS_OpenRB-150_228BDD7B503059384C2E3120FF0A2B19-if00 -&gt; ../../ttyACM0
usb-ROBOTIS_OpenRB-150_67E1ED68503059384C2E3120FF092234-if00 -&gt; ../../ttyACM1`,wrap:!1}}),A=new ne({props:{title:"2. Create the udev rule",local:"2-create-the-udev-rule",headingTag:"h4"}}),N=new X({props:{code:"c3VkbyUyMG5hbm8lMjAlMkZldGMlMkZ1ZGV2JTJGcnVsZXMuZCUyRjk5LW9teC5ydWxlcw==",highlighted:"sudo nano /etc/udev/rules.d/99-omx.rules",wrap:!1}}),P=new X({props:{code:"U1VCU1lTVEVNJTNEJTNEJTIydHR5JTIyJTJDJTIwQVRUUlMlN0JpZFZlbmRvciU3RCUzRCUzRCUyMjA0MDMlMjIlMkMlMjBBVFRSUyU3QnNlcmlhbCU3RCUzRCUzRCUyMjIyOEJERDdCNTAzMDU5Mzg0QzJFMzEyMEZGMEEyQjE5JTIyJTJDJTIwU1lNTElOSyUyQiUzRCUyMm9teF9mb2xsb3dlciUyMiUwQVNVQlNZU1RFTSUzRCUzRCUyMnR0eSUyMiUyQyUyMEFUVFJTJTdCaWRWZW5kb3IlN0QlM0QlM0QlMjIwNDAzJTIyJTJDJTIwQVRUUlMlN0JzZXJpYWwlN0QlM0QlM0QlMjI2N0UxRUQ2ODUwMzA1OTM4NEMyRTMxMjBGRjA5MjIzNCUyMiUyQyUyMFNZTUxJTkslMkIlM0QlMjJvbXhfbGVhZGVyJTIy",highlighted:`SUBSYSTEM==<span class="hljs-string">&quot;tty&quot;</span>, ATTRS{idVendor}==<span class="hljs-string">&quot;0403&quot;</span>, ATTRS{serial}==<span class="hljs-string">&quot;228BDD7B503059384C2E3120FF0A2B19&quot;</span>, SYMLINK+=<span class="hljs-string">&quot;omx_follower&quot;</span>
SUBSYSTEM==<span class="hljs-string">&quot;tty&quot;</span>, ATTRS{idVendor}==<span class="hljs-string">&quot;0403&quot;</span>, ATTRS{serial}==<span class="hljs-string">&quot;67E1ED68503059384C2E3120FF092234&quot;</span>, SYMLINK+=<span class="hljs-string">&quot;omx_leader&quot;</span>`,wrap:!1}}),k=new X({props:{code:"c3VkbyUyMHVkZXZhZG0lMjBjb250cm9sJTIwLS1yZWxvYWQtcnVsZXMlMEFzdWRvJTIwdWRldmFkbSUyMHRyaWdnZXI=",highlighted:`sudo udevadm control --reload-rules
sudo udevadm trigger`,wrap:!1}}),B=new ne({props:{title:"3. Verify the symlinks",local:"3-verify-the-symlinks",headingTag:"h4"}}),K=new X({props:{code:"bHMlMjAtbCUyMCUyRmRldiUyRm9teF9mb2xsb3dlciUyMCUyRmRldiUyRm9teF9sZWFkZXI=",highlighted:'<span class="hljs-built_in">ls</span> -l /dev/omx_follower /dev/omx_leader',wrap:!1}}),e=new X({props:{code:"JTJGZGV2JTJGb214X2ZvbGxvd2VyJTIwLSUzRSUyMHR0eUFDTSolMEElMkZkZXYlMkZvbXhfbGVhZGVyJTIwJTIwJTIwLSUzRSUyMHR0eUFDTSo=",highlighted:`/dev/omx_follower -&gt; ttyACM*
/dev/omx_leader   -&gt; ttyACM*`,wrap:!1}}),{c(){i=U("p"),i.textContent=g,p=a(),w(M.$$.fragment),o=a(),$=U("p"),$.innerHTML=_,y=a(),w(u.$$.fragment),b=a(),I=U("p"),I.textContent=G,R=a(),w(Q.$$.fragment),Z=a(),j=U("p"),j.innerHTML=S,l=a(),d=U("p"),d.innerHTML=Me,z=a(),se=U("p"),se.innerHTML=de,V=a(),w(A.$$.fragment),W=a(),L=U("p"),L.textContent=oe,ye=a(),w(N.$$.fragment),D=a(),H=U("p"),H.textContent=ie,be=a(),w(P.$$.fragment),F=a(),Y=U("p"),Y.textContent=ae,pe=a(),w(k.$$.fragment),Ue=a(),q=U("p"),q.textContent=le,fe=a(),w(B.$$.fragment),Ce=a(),O=U("p"),O.textContent=re,we=a(),w(K.$$.fragment),ee=a(),te=U("p"),te.textContent=ue,$e=a(),w(e.$$.fragment),m=a(),me=U("p"),me.textContent=Te},l(t){i=C(t,"P",{"data-svelte-h":!0}),v(i)!=="svelte-eyxv5r"&&(i.textContent=g),p=r(t),T(M.$$.fragment,t),o=r(t),$=C(t,"P",{"data-svelte-h":!0}),v($)!=="svelte-t6p8k3"&&($.innerHTML=_),y=r(t),T(u.$$.fragment,t),b=r(t),I=C(t,"P",{"data-svelte-h":!0}),v(I)!=="svelte-1m6dz7f"&&(I.textContent=G),R=r(t),T(Q.$$.fragment,t),Z=r(t),j=C(t,"P",{"data-svelte-h":!0}),v(j)!=="svelte-12xpmg0"&&(j.innerHTML=S),l=r(t),d=C(t,"P",{"data-svelte-h":!0}),v(d)!=="svelte-mabr60"&&(d.innerHTML=Me),z=r(t),se=C(t,"P",{"data-svelte-h":!0}),v(se)!=="svelte-r529z1"&&(se.innerHTML=de),V=r(t),T(A.$$.fragment,t),W=r(t),L=C(t,"P",{"data-svelte-h":!0}),v(L)!=="svelte-1eow2yr"&&(L.textContent=oe),ye=r(t),T(N.$$.fragment,t),D=r(t),H=C(t,"P",{"data-svelte-h":!0}),v(H)!=="svelte-bkx49t"&&(H.textContent=ie),be=r(t),T(P.$$.fragment,t),F=r(t),Y=C(t,"P",{"data-svelte-h":!0}),v(Y)!=="svelte-rh86e9"&&(Y.textContent=ae),pe=r(t),T(k.$$.fragment,t),Ue=r(t),q=C(t,"P",{"data-svelte-h":!0}),v(q)!=="svelte-aohqxs"&&(q.textContent=le),fe=r(t),T(B.$$.fragment,t),Ce=r(t),O=C(t,"P",{"data-svelte-h":!0}),v(O)!=="svelte-17ruuja"&&(O.textContent=re),we=r(t),T(K.$$.fragment,t),ee=r(t),te=C(t,"P",{"data-svelte-h":!0}),v(te)!=="svelte-pkk357"&&(te.textContent=ue),$e=r(t),T(e.$$.fragment,t),m=r(t),me=C(t,"P",{"data-svelte-h":!0}),v(me)!=="svelte-f9vc4i"&&(me.textContent=Te)},m(t,f){s(t,i,f),s(t,p,f),h(M,t,f),s(t,o,f),s(t,$,f),s(t,y,f),h(u,t,f),s(t,b,f),s(t,I,f),s(t,R,f),h(Q,t,f),s(t,Z,f),s(t,j,f),s(t,l,f),s(t,d,f),s(t,z,f),s(t,se,f),s(t,V,f),h(A,t,f),s(t,W,f),s(t,L,f),s(t,ye,f),h(N,t,f),s(t,D,f),s(t,H,f),s(t,be,f),h(P,t,f),s(t,F,f),s(t,Y,f),s(t,pe,f),h(k,t,f),s(t,Ue,f),s(t,q,f),s(t,fe,f),h(B,t,f),s(t,Ce,f),s(t,O,f),s(t,we,f),h(K,t,f),s(t,ee,f),s(t,te,f),s(t,$e,f),h(e,t,f),s(t,m,f),s(t,me,f),he=!0},p:ce,i(t){he||(J(M.$$.fragment,t),J(u.$$.fragment,t),J(Q.$$.fragment,t),J(A.$$.fragment,t),J(N.$$.fragment,t),J(P.$$.fragment,t),J(k.$$.fragment,t),J(B.$$.fragment,t),J(K.$$.fragment,t),J(e.$$.fragment,t),he=!0)},o(t){c(M.$$.fragment,t),c(u.$$.fragment,t),c(Q.$$.fragment,t),c(A.$$.fragment,t),c(N.$$.fragment,t),c(P.$$.fragment,t),c(k.$$.fragment,t),c(B.$$.fragment,t),c(K.$$.fragment,t),c(e.$$.fragment,t),he=!1},d(t){t&&(n(i),n(p),n(o),n($),n(y),n(b),n(I),n(R),n(Z),n(j),n(l),n(d),n(z),n(se),n(V),n(W),n(L),n(ye),n(D),n(H),n(be),n(F),n(Y),n(pe),n(Ue),n(q),n(fe),n(Ce),n(O),n(we),n(ee),n(te),n($e),n(m),n(me)),x(M,t),x(u,t),x(Q,t),x(A,t),x(N,t),x(P,t),x(k,t),x(B,t),x(K,t),x(e,t)}}}function Be(E){let i,g,p,M;return i=new Je({props:{id:"find_port",option:"Mac",$$slots:{default:[Ie]},$$scope:{ctx:E}}}),p=new Je({props:{id:"find_port",option:"Linux",$$slots:{default:[ke]},$$scope:{ctx:E}}}),{c(){w(i.$$.fragment),g=a(),w(p.$$.fragment)},l(o){T(i.$$.fragment,o),g=r(o),T(p.$$.fragment,o)},m(o,$){h(i,o,$),s(o,g,$),h(p,o,$),M=!0},p(o,$){const _={};$&2&&(_.$$scope={dirty:$,ctx:o}),i.$set(_);const y={};$&2&&(y.$$scope={dirty:$,ctx:o}),p.$set(y)},i(o){M||(J(i.$$.fragment,o),J(p.$$.fragment,o),M=!0)},o(o){c(i.$$.fragment,o),c(p.$$.fragment,o),M=!1},d(o){o&&n(g),x(i,o),x(p,o)}}}function Ee(E){let i,g,p,M,o,$="During teleoperation, motions of the leader arm are mirrored in real time by the follower arm. OMX is already preconfigured, teleoperation can begin immediately without any calibration steps.",_,y,u,b,I="You can also enable camera input during teleoperation by providing a camera configuration for the follower arm.",G,R,Q,Z,j="When the camera is enabled, the camera stream is displayed in real time and synchronized with the robot state. This setup is useful for visual monitoring and can be reused later for demonstration recording and imitation learning.",S;return i=new ne({props:{title:"Teleoperate without camera",local:"teleoperate-without-camera",headingTag:"h3"}}),p=new X({props:{code:"bGVyb2JvdC10ZWxlb3BlcmF0ZSUyMCU1QyUwQSUyMCUyMC0tcm9ib3QudHlwZSUzRG9teF9mb2xsb3dlciUyMCU1QyUwQSUyMCUyMC0tcm9ib3QucG9ydCUzRCUzQ3lvdXJfZm9sbG93ZXJfcG9ydCUzRSUyMCU1QyUwQSUyMCUyMC0tcm9ib3QuaWQlM0RvbXhfZm9sbG93ZXJfYXJtJTIwJTVDJTBBJTIwJTIwLS10ZWxlb3AudHlwZSUzRG9teF9sZWFkZXIlMjAlNUMlMEElMjAlMjAtLXRlbGVvcC5wb3J0JTNEJTNDeW91cl9sZWFkZXJfcG9ydCUzRSUyMCU1QyUwQSUyMCUyMC0tdGVsZW9wLmlkJTNEb214X2xlYWRlcl9hcm0=",highlighted:`lerobot-teleoperate \\
  --robot.type=omx_follower \\
  --robot.port=&lt;your_follower_port&gt; \\
  --robot.id=omx_follower_arm \\
  --teleop.type=omx_leader \\
  --teleop.port=&lt;your_leader_port&gt; \\
  --teleop.id=omx_leader_arm`,wrap:!1}}),y=new ne({props:{title:"Teleoperate with camera",local:"teleoperate-with-camera",headingTag:"h3"}}),R=new X({props:{code:"bGVyb2JvdC10ZWxlb3BlcmF0ZSUyMCU1QyUwQSUyMCUyMC0tcm9ib3QudHlwZSUzRG9teF9mb2xsb3dlciUyMCU1QyUwQSUyMCUyMC0tcm9ib3QucG9ydCUzRCUzQ3lvdXJfZm9sbG93ZXJfcG9ydCUzRSUyMCU1QyUwQSUyMCUyMC0tcm9ib3QuaWQlM0RvbXhfZm9sbG93ZXJfYXJtJTIwJTVDJTBBJTIwJTIwLS1yb2JvdC5jYW1lcmFzJTNEJTIyJTdCZnJvbnQlM0ElMjAlN0J0eXBlJTNBJTIwb3BlbmN2JTJDJTIwaW5kZXhfb3JfcGF0aCUzQSUyMCclMkZkZXYlMkZ2aWRlbzAnJTJDJTIwd2lkdGglM0ElMjA2NDAlMkMlMjBoZWlnaHQlM0ElMjA0ODAlMkMlMjBmcHMlM0ElMjAzMCU3RCU3RCUyMiUyMCU1QyUwQSUyMCUyMC0tdGVsZW9wLnR5cGUlM0RvbXhfbGVhZGVyJTIwJTVDJTBBJTIwJTIwLS10ZWxlb3AucG9ydCUzRCUzQ3lvdXJfbGVhZGVyX3BvcnQlM0UlMjAlNUMlMEElMjAlMjAtLXRlbGVvcC5pZCUzRG9teF9sZWFkZXJfYXJtJTIwJTVDJTBBJTIwJTIwLS1kaXNwbGF5X2RhdGElM0R0cnVl",highlighted:`lerobot-teleoperate \\
  --robot.type=omx_follower \\
  --robot.port=&lt;your_follower_port&gt; \\
  --robot.id=omx_follower_arm \\
  --robot.cameras=<span class="hljs-string">&quot;{front: {type: opencv, index_or_path: &#x27;/dev/video0&#x27;, width: 640, height: 480, fps: 30}}&quot;</span> \\
  --teleop.type=omx_leader \\
  --teleop.port=&lt;your_leader_port&gt; \\
  --teleop.id=omx_leader_arm \\
  --display_data=<span class="hljs-literal">true</span>`,wrap:!1}}),{c(){w(i.$$.fragment),g=a(),w(p.$$.fragment),M=a(),o=U("p"),o.textContent=$,_=a(),w(y.$$.fragment),u=a(),b=U("p"),b.textContent=I,G=a(),w(R.$$.fragment),Q=a(),Z=U("p"),Z.textContent=j},l(l){T(i.$$.fragment,l),g=r(l),T(p.$$.fragment,l),M=r(l),o=C(l,"P",{"data-svelte-h":!0}),v(o)!=="svelte-je4q8s"&&(o.textContent=$),_=r(l),T(y.$$.fragment,l),u=r(l),b=C(l,"P",{"data-svelte-h":!0}),v(b)!=="svelte-m36cn9"&&(b.textContent=I),G=r(l),T(R.$$.fragment,l),Q=r(l),Z=C(l,"P",{"data-svelte-h":!0}),v(Z)!=="svelte-164229t"&&(Z.textContent=j)},m(l,d){h(i,l,d),s(l,g,d),h(p,l,d),s(l,M,d),s(l,o,d),s(l,_,d),h(y,l,d),s(l,u,d),s(l,b,d),s(l,G,d),h(R,l,d),s(l,Q,d),s(l,Z,d),S=!0},p:ce,i(l){S||(J(i.$$.fragment,l),J(p.$$.fragment,l),J(y.$$.fragment,l),J(R.$$.fragment,l),S=!0)},o(l){c(i.$$.fragment,l),c(p.$$.fragment,l),c(y.$$.fragment,l),c(R.$$.fragment,l),S=!1},d(l){l&&(n(g),n(M),n(o),n(_),n(u),n(b),n(G),n(Q),n(Z)),x(i,l),x(p,l),x(y,l),x(R,l)}}}function Xe(E){let i,g,p,M,o,$="During teleoperation, motions of the leader arm are mirrored in real time by the follower arm. OMX is already preconfigured, teleoperation can begin immediately without any calibration steps.",_,y,u,b,I="You can also enable camera input during teleoperation by providing a camera configuration for the follower arm.",G,R,Q,Z,j="When the camera is enabled, the camera stream is displayed in real time and synchronized with the robot state. This setup is useful for visual monitoring and can be reused later for demonstration recording and imitation learning.",S;return i=new ne({props:{title:"Teleoperate without camera",local:"teleoperate-without-camera",headingTag:"h3"}}),p=new X({props:{code:"bGVyb2JvdC10ZWxlb3BlcmF0ZSUyMCU1QyUwQSUyMCUyMC0tcm9ib3QudHlwZSUzRG9teF9mb2xsb3dlciUyMCU1QyUwQSUyMCUyMC0tcm9ib3QucG9ydCUzRCUyRmRldiUyRm9teF9mb2xsb3dlciUyMCU1QyUwQSUyMCUyMC0tcm9ib3QuaWQlM0RvbXhfZm9sbG93ZXJfYXJtJTIwJTVDJTBBJTIwJTIwLS10ZWxlb3AudHlwZSUzRG9teF9sZWFkZXIlMjAlNUMlMEElMjAlMjAtLXRlbGVvcC5wb3J0JTNEJTJGZGV2JTJGb214X2xlYWRlciUyMCU1QyUwQSUyMCUyMC0tdGVsZW9wLmlkJTNEb214X2xlYWRlcl9hcm0=",highlighted:`lerobot-teleoperate \\
  --robot.type=omx_follower \\
  --robot.port=/dev/omx_follower \\
  --robot.id=omx_follower_arm \\
  --teleop.type=omx_leader \\
  --teleop.port=/dev/omx_leader \\
  --teleop.id=omx_leader_arm`,wrap:!1}}),y=new ne({props:{title:"Teleoperate with camera",local:"teleoperate-with-camera",headingTag:"h3"}}),R=new X({props:{code:"bGVyb2JvdC10ZWxlb3BlcmF0ZSUyMCU1QyUwQSUyMCUyMC0tcm9ib3QudHlwZSUzRG9teF9mb2xsb3dlciUyMCU1QyUwQSUyMCUyMC0tcm9ib3QucG9ydCUzRCUyRmRldiUyRm9teF9mb2xsb3dlciUyMCU1QyUwQSUyMCUyMC0tcm9ib3QuaWQlM0RvbXhfZm9sbG93ZXJfYXJtJTIwJTVDJTBBJTIwJTIwLS1yb2JvdC5jYW1lcmFzJTNEJTIyJTdCZnJvbnQlM0ElMjAlN0J0eXBlJTNBJTIwb3BlbmN2JTJDJTIwaW5kZXhfb3JfcGF0aCUzQSUyMCclMkZkZXYlMkZ2aWRlbzAnJTJDJTIwd2lkdGglM0ElMjA2NDAlMkMlMjBoZWlnaHQlM0ElMjA0ODAlMkMlMjBmcHMlM0ElMjAzMCU3RCU3RCUyMiUyMCU1QyUwQSUyMCUyMC0tdGVsZW9wLnR5cGUlM0RvbXhfbGVhZGVyJTIwJTVDJTBBJTIwJTIwLS10ZWxlb3AucG9ydCUzRCUyRmRldiUyRm9teF9sZWFkZXIlMjAlNUMlMEElMjAlMjAtLXRlbGVvcC5pZCUzRG9teF9sZWFkZXJfYXJtJTIwJTVDJTBBJTIwJTIwLS1kaXNwbGF5X2RhdGElM0R0cnVl",highlighted:`lerobot-teleoperate \\
  --robot.type=omx_follower \\
  --robot.port=/dev/omx_follower \\
  --robot.id=omx_follower_arm \\
  --robot.cameras=<span class="hljs-string">&quot;{front: {type: opencv, index_or_path: &#x27;/dev/video0&#x27;, width: 640, height: 480, fps: 30}}&quot;</span> \\
  --teleop.type=omx_leader \\
  --teleop.port=/dev/omx_leader \\
  --teleop.id=omx_leader_arm \\
  --display_data=<span class="hljs-literal">true</span>`,wrap:!1}}),{c(){w(i.$$.fragment),g=a(),w(p.$$.fragment),M=a(),o=U("p"),o.textContent=$,_=a(),w(y.$$.fragment),u=a(),b=U("p"),b.textContent=I,G=a(),w(R.$$.fragment),Q=a(),Z=U("p"),Z.textContent=j},l(l){T(i.$$.fragment,l),g=r(l),T(p.$$.fragment,l),M=r(l),o=C(l,"P",{"data-svelte-h":!0}),v(o)!=="svelte-je4q8s"&&(o.textContent=$),_=r(l),T(y.$$.fragment,l),u=r(l),b=C(l,"P",{"data-svelte-h":!0}),v(b)!=="svelte-m36cn9"&&(b.textContent=I),G=r(l),T(R.$$.fragment,l),Q=r(l),Z=C(l,"P",{"data-svelte-h":!0}),v(Z)!=="svelte-164229t"&&(Z.textContent=j)},m(l,d){h(i,l,d),s(l,g,d),h(p,l,d),s(l,M,d),s(l,o,d),s(l,_,d),h(y,l,d),s(l,u,d),s(l,b,d),s(l,G,d),h(R,l,d),s(l,Q,d),s(l,Z,d),S=!0},p:ce,i(l){S||(J(i.$$.fragment,l),J(p.$$.fragment,l),J(y.$$.fragment,l),J(R.$$.fragment,l),S=!0)},o(l){c(i.$$.fragment,l),c(p.$$.fragment,l),c(y.$$.fragment,l),c(R.$$.fragment,l),S=!1},d(l){l&&(n(g),n(M),n(o),n(_),n(u),n(b),n(G),n(Q),n(Z)),x(i,l),x(p,l),x(y,l),x(R,l)}}}function Fe(E){let i,g,p,M;return i=new Je({props:{id:"teleoperate",option:"Mac",$$slots:{default:[Ee]},$$scope:{ctx:E}}}),p=new Je({props:{id:"teleoperate",option:"Linux",$$slots:{default:[Xe]},$$scope:{ctx:E}}}),{c(){w(i.$$.fragment),g=a(),w(p.$$.fragment)},l(o){T(i.$$.fragment,o),g=r(o),T(p.$$.fragment,o)},m(o,$){h(i,o,$),s(o,g,$),h(p,o,$),M=!0},p(o,$){const _={};$&2&&(_.$$scope={dirty:$,ctx:o}),i.$set(_);const y={};$&2&&(y.$$scope={dirty:$,ctx:o}),p.$set(y)},i(o){M||(J(i.$$.fragment,o),J(p.$$.fragment,o),M=!0)},o(o){c(i.$$.fragment,o),c(p.$$.fragment,o),M=!1},d(o){o&&n(g),x(i,o),x(p,o)}}}function ze(E){let i,g,p,M,o,$,_,y="First, assemble the OMX hardware following the official assembly guide.",u,b,I='OMX Assembly Guide: <a href="https://ai.robotis.com/omx/assembly_guide_omx.html" rel="nofollow">https://ai.robotis.com/omx/assembly_guide_omx.html</a>',G,R,Q="OMX robots are shipped preconfigured from the factory. Motor IDs, communication parameters, and joint offsets are already set, so no additional motor setup or calibration is required before using LeRobot.",Z,j,S,l,d='To install LeRobot, follow our <a href="./installation">Installation Guide</a>',Me,z,se="In addition to these instructions, you need to install the Dynamixel SDK:",de,V,A,W,L,oe,ye="To find the port for each bus servo adapter, run this script:",N,D,H,ie,be="This command runs and when prompted, disconnect the USB cable from either the leader or follower arm and press Enter. The output will show ‘The port of this MotorsBus is [port]’. This identifies the port for the disconnected arm. Repeat for the other arm to identify both ports.",P,F,Y,ae,pe,k,Ue="After identifying the correct ports, you can directly teleoperate the follower arm using the leader arm.",q,le,fe,B,Ce="Congrats 🎉, your robot is all set to learn a task on its own.",O,re,we='<p>If you have any questions or need help, please reach out on <a href="https://discord.com/invite/robotis" rel="nofollow">Discord</a>.</p>',K,ee,te,ue,$e;return o=new ne({props:{title:"Order and Assemble the parts",local:"order-and-assemble-the-parts",headingTag:"h2"}}),j=new ne({props:{title:"Install LeRobot 🤗",local:"install-lerobot-",headingTag:"h2"}}),V=new X({props:{code:"cGlwJTIwaW5zdGFsbCUyMC1lJTIwJTIyLiU1QmR5bmFtaXhlbCU1RCUyMg==",highlighted:'pip install -e <span class="hljs-string">&quot;.[dynamixel]&quot;</span>',wrap:!1}}),W=new ne({props:{title:"Connect the robot",local:"connect-the-robot",headingTag:"h2"}}),D=new X({props:{code:"bGVyb2JvdC1maW5kLXBvcnQ=",highlighted:"lerobot-find-port",wrap:!1}}),F=new ge({props:{id:"find_port",options:["Mac","Linux"],$$slots:{default:[Be]},$$scope:{ctx:E}}}),ae=new ne({props:{title:"Teleoperate",local:"teleoperate",headingTag:"h2"}}),le=new ge({props:{id:"teleoperate",options:["Mac","Linux"],$$slots:{default:[Fe]},$$scope:{ctx:E}}}),ee=new Se({props:{source:"https://github.com/huggingface/lerobot/blob/main/docs/source/omx.mdx"}}),{c(){i=U("meta"),g=a(),p=U("p"),M=a(),w(o.$$.fragment),$=a(),_=U("p"),_.textContent=y,u=a(),b=U("p"),b.innerHTML=I,G=a(),R=U("p"),R.textContent=Q,Z=a(),w(j.$$.fragment),S=a(),l=U("p"),l.innerHTML=d,Me=a(),z=U("p"),z.textContent=se,de=a(),w(V.$$.fragment),A=a(),w(W.$$.fragment),L=a(),oe=U("p"),oe.textContent=ye,N=a(),w(D.$$.fragment),H=a(),ie=U("p"),ie.textContent=be,P=a(),w(F.$$.fragment),Y=a(),w(ae.$$.fragment),pe=a(),k=U("p"),k.textContent=Ue,q=a(),w(le.$$.fragment),fe=a(),B=U("p"),B.textContent=Ce,O=a(),re=U("blockquote"),re.innerHTML=we,K=a(),w(ee.$$.fragment),te=a(),ue=U("p"),this.h()},l(e){const m=Qe("svelte-u9bgzb",document.head);i=C(m,"META",{name:!0,content:!0}),m.forEach(n),g=r(e),p=C(e,"P",{}),xe(p).forEach(n),M=r(e),T(o.$$.fragment,e),$=r(e),_=C(e,"P",{"data-svelte-h":!0}),v(_)!=="svelte-1tse95y"&&(_.textContent=y),u=r(e),b=C(e,"P",{"data-svelte-h":!0}),v(b)!=="svelte-mv6zqx"&&(b.innerHTML=I),G=r(e),R=C(e,"P",{"data-svelte-h":!0}),v(R)!=="svelte-19pz0sw"&&(R.textContent=Q),Z=r(e),T(j.$$.fragment,e),S=r(e),l=C(e,"P",{"data-svelte-h":!0}),v(l)!=="svelte-141t05y"&&(l.innerHTML=d),Me=r(e),z=C(e,"P",{"data-svelte-h":!0}),v(z)!=="svelte-kjnash"&&(z.textContent=se),de=r(e),T(V.$$.fragment,e),A=r(e),T(W.$$.fragment,e),L=r(e),oe=C(e,"P",{"data-svelte-h":!0}),v(oe)!=="svelte-1qt1z72"&&(oe.textContent=ye),N=r(e),T(D.$$.fragment,e),H=r(e),ie=C(e,"P",{"data-svelte-h":!0}),v(ie)!=="svelte-1mwwt73"&&(ie.textContent=be),P=r(e),T(F.$$.fragment,e),Y=r(e),T(ae.$$.fragment,e),pe=r(e),k=C(e,"P",{"data-svelte-h":!0}),v(k)!=="svelte-anacf9"&&(k.textContent=Ue),q=r(e),T(le.$$.fragment,e),fe=r(e),B=C(e,"P",{"data-svelte-h":!0}),v(B)!=="svelte-13hbqe8"&&(B.textContent=Ce),O=r(e),re=C(e,"BLOCKQUOTE",{"data-svelte-h":!0}),v(re)!=="svelte-193wo90"&&(re.innerHTML=we),K=r(e),T(ee.$$.fragment,e),te=r(e),ue=C(e,"P",{}),xe(ue).forEach(n),this.h()},h(){ve(i,"name","hf:doc:metadata"),ve(i,"content",Ve)},m(e,m){Ge(document.head,i),s(e,g,m),s(e,p,m),s(e,M,m),h(o,e,m),s(e,$,m),s(e,_,m),s(e,u,m),s(e,b,m),s(e,G,m),s(e,R,m),s(e,Z,m),h(j,e,m),s(e,S,m),s(e,l,m),s(e,Me,m),s(e,z,m),s(e,de,m),h(V,e,m),s(e,A,m),h(W,e,m),s(e,L,m),s(e,oe,m),s(e,N,m),h(D,e,m),s(e,H,m),s(e,ie,m),s(e,P,m),h(F,e,m),s(e,Y,m),h(ae,e,m),s(e,pe,m),s(e,k,m),s(e,q,m),h(le,e,m),s(e,fe,m),s(e,B,m),s(e,O,m),s(e,re,m),s(e,K,m),h(ee,e,m),s(e,te,m),s(e,ue,m),$e=!0},p(e,[m]){const me={};m&2&&(me.$$scope={dirty:m,ctx:e}),F.$set(me);const Te={};m&2&&(Te.$$scope={dirty:m,ctx:e}),le.$set(Te)},i(e){$e||(J(o.$$.fragment,e),J(j.$$.fragment,e),J(V.$$.fragment,e),J(W.$$.fragment,e),J(D.$$.fragment,e),J(F.$$.fragment,e),J(ae.$$.fragment,e),J(le.$$.fragment,e),J(ee.$$.fragment,e),$e=!0)},o(e){c(o.$$.fragment,e),c(j.$$.fragment,e),c(V.$$.fragment,e),c(W.$$.fragment,e),c(D.$$.fragment,e),c(F.$$.fragment,e),c(ae.$$.fragment,e),c(le.$$.fragment,e),c(ee.$$.fragment,e),$e=!1},d(e){e&&(n(g),n(p),n(M),n($),n(_),n(u),n(b),n(G),n(R),n(Z),n(S),n(l),n(Me),n(z),n(de),n(A),n(L),n(oe),n(N),n(H),n(ie),n(P),n(Y),n(pe),n(k),n(q),n(fe),n(B),n(O),n(re),n(K),n(te),n(ue)),n(i),x(o,e),x(j,e),x(V,e),x(W,e),x(D,e),x(F,e),x(ae,e),x(le,e),x(ee,e)}}}const Ve='{"title":"Order and Assemble the parts","local":"order-and-assemble-the-parts","sections":[],"depth":2}';function Ae(E){return Re(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Pe extends Ze{constructor(i){super(),je(this,i,Ae,ze,_e,{})}}export{Pe as component};
