Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Reachy Mini FAQ - Support & Documentation</title> | |
| <meta name="description" content="Frequently asked questions about Reachy Mini robots - Beta, Lite, and Wireless versions. Get help with setup, SDK, hardware, and more."> | |
| <link rel="stylesheet" href="style.css"> | |
| <link rel="preconnect" href="https://fonts.googleapis.com"> | |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
| <link href="https://fonts.googleapis.com/css2?family=Archivo:wght@400;500;600&family=Asap:wght@400;700&family=Space+Mono:wght@700&display=swap" rel="stylesheet"> | |
| </head> | |
| <body> | |
| <div class="app-container"> | |
| <!-- Header --> | |
| <header class="header"> | |
| <div class="header-content"> | |
| <div class="header-top"> | |
| <img src="reachy-mini-icon.png" alt="Reachy Mini" class="header-icon"> | |
| <div class="header-text"> | |
| <h1>Reachy Mini FAQ</h1> | |
| <p class="subtitle">Your guide to getting started and beyond</p> | |
| </div> | |
| </div> | |
| <div class="product-tabs"> | |
| <button class="product-tab beta active" data-product="beta">Beta</button> | |
| <button class="product-tab lite" data-product="lite">Lite</button> | |
| <button class="product-tab wireless" data-product="wireless">Wireless</button> | |
| </div> | |
| </div> | |
| </header> | |
| <!-- FAQ Content --> | |
| <main class="faq-container" id="faq-container"> | |
| <!-- Search --> | |
| <div class="search-container"> | |
| <svg class="search-icon" width="20" height="20" viewBox="0 0 20 20" fill="none"> | |
| <circle cx="9" cy="9" r="6" stroke="currentColor" stroke-width="2"/> | |
| <path d="M14 14L18 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/> | |
| </svg> | |
| <input type="text" id="search-input" placeholder="Search FAQ..." class="search-input"> | |
| </div> | |
| <!-- FAQ Sections --> | |
| <div class="faq-sections" id="faq-sections"> | |
| <!-- Section 1: Getting Started --> | |
| <section class="faq-section" data-section="getting-started"> | |
| <div class="section-header"> | |
| <div class="section-icon">π§</div> | |
| <h2>1. Getting Started</h2> | |
| </div> | |
| <!-- Subsection: SDK Basics --> | |
| <div class="subsection"> | |
| <h3>1.1 General / SDK Basics</h3> | |
| <div class="media-placeholder"> | |
| <span>Product overview image / GIF</span> | |
| </div> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I connect to Reachy Mini from Python?</span> | |
| <div class="tags"> | |
| <span class="tag">SDK</span> | |
| <span class="tag">PYTHON</span> | |
| <span class="tag">START</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>To control Reachy Mini, you mainly use the <code>ReachyMini</code> class from the <code>reachy_mini</code> package:</p> | |
| <pre><code>from reachy_mini import ReachyMini | |
| mini = ReachyMini()</code></pre> | |
| <p>This connects to the Reachy Mini daemon (started via <code>reachy-mini-daemon</code> or <code>reachy_mini.daemon.app.main</code>) and initializes motors and sensors.</p> | |
| <p><strong>Recommended pattern:</strong> use a context manager to automatically handle connection and cleanup:</p> | |
| <pre><code>from reachy_mini import ReachyMini | |
| with ReachyMini() as mini: | |
| # your code here | |
| ...</code></pre> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">Do I need to start the daemon manually?</span> | |
| <div class="tags"> | |
| <span class="tag">SDK</span> | |
| <span class="tag">START</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Yes. All examples assume you have already started the Reachy Mini daemon:</p> | |
| <ul> | |
| <li>Either via command line: <code>reachy-mini-daemon</code></li> | |
| <li>Or via Python: <code>reachy_mini.daemon.app.main</code></li> | |
| </ul> | |
| <p>The <code>ReachyMini</code> instance will then connect to this daemon.</p> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| </div> | |
| <!-- Subsection: Assembly --> | |
| <div class="subsection"> | |
| <h3>1.2 Assembly</h3> | |
| <div class="media-placeholder"> | |
| <span>Assembly guide image / GIF</span> | |
| </div> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How long does assembly usually take?</span> | |
| <div class="tags"> | |
| <span class="tag">ASSEMBLY</span> | |
| <span class="tag">HARDWARE</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Most testers report <strong>1.5β2 hours</strong>, with some up to <strong>4 hours</strong> depending on experience.</p> | |
| <p class="source">Source: Feedback β "What's your background?" = hobbyist / developer / experienced technology professional.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">What do testers consider an ideal assembly time?</span> | |
| <div class="tags"> | |
| <span class="tag">ASSEMBLY</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Most testers consider <strong>about 2 hours</strong> to be an ideal assembly time.</p> | |
| <p class="source">Source: Feedback β "What's your background?"</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">What were the trickiest parts of assembly?</span> | |
| <div class="tags"> | |
| <span class="tag">ASSEMBLY</span> | |
| <span class="tag">HARDWARE</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Testers highlighted:</p> | |
| <ul> | |
| <li>Cable routing</li> | |
| <li>Correct torque on screws</li> | |
| </ul> | |
| <p class="source">Source: Feedback β "What's your background?"</p> | |
| </div> | |
| </details> | |
| </div> | |
| <!-- Subsection: Dashboard --> | |
| <div class="subsection"> | |
| <h3>1.3 Dashboard & First Run</h3> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">The dashboard at http://localhost:8000 doesn't work β what should I check?</span> | |
| <div class="tags"> | |
| <span class="tag">DASHBOARD</span> | |
| <span class="tag">NETWORK</span> | |
| <span class="tag">SDK</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Typical checks:</p> | |
| <ol> | |
| <li>You are using a proper Python virtual environment (<code>.venv</code>).</li> | |
| <li>You installed/updated the Reachy Mini SDK inside that environment: | |
| <pre><code>pip install -U reachy-mini</code></pre> | |
| </li> | |
| <li>The daemon is running.</li> | |
| </ol> | |
| <p>This combination fixed most dashboard issues.</p> | |
| <p class="source">Source: Discord β author: <strong>matth_lap</strong> (trusted).</p> | |
| </div> | |
| </details> | |
| </div> | |
| </section> | |
| <!-- Section 2: Using & Developing Applications --> | |
| <section class="faq-section" data-section="applications"> | |
| <div class="section-header"> | |
| <div class="section-icon">π§©</div> | |
| <h2>2. Using & Developing Applications</h2> | |
| </div> | |
| <!-- Subsection: Moving the robot --> | |
| <div class="subsection"> | |
| <h3>2.1 Moving the Robot</h3> | |
| <div class="media-placeholder"> | |
| <span>Robot movement demo GIF</span> | |
| </div> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I move Reachy Mini's head to a specific pose?</span> | |
| <div class="tags"> | |
| <span class="tag">MOVEMENT</span> | |
| <span class="tag">HEAD</span> | |
| <span class="tag">SDK</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Use <code>goto_target</code> with a pose created by <code>create_head_pose</code>:</p> | |
| <pre><code>from reachy_mini import ReachyMini | |
| from reachy_mini.utils import create_head_pose | |
| with ReachyMini() as mini: | |
| mini.goto_target(head=create_head_pose(y=-10, mm=True))</code></pre> | |
| <p>Here:</p> | |
| <ul> | |
| <li><code>create_head_pose</code> builds a 4x4 transform matrix (position + orientation).</li> | |
| <li><code>mm=True</code> means translation arguments are in millimeters.</li> | |
| <li>The <code>head</code> frame is located at the base of the head.</li> | |
| </ul> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I control head orientation (roll, pitch, yaw)?</span> | |
| <div class="tags"> | |
| <span class="tag">MOVEMENT</span> | |
| <span class="tag">HEAD</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>You can add orientation arguments to <code>create_head_pose</code>, for example:</p> | |
| <pre><code>pose = create_head_pose(z=10, roll=15, degrees=True, mm=True) | |
| mini.goto_target(head=pose, duration=2.0)</code></pre> | |
| <ul> | |
| <li><code>degrees=True</code> β angles are given in degrees.</li> | |
| <li>You can combine translation (x, y, z) and orientation (roll, pitch, yaw).</li> | |
| </ul> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I move head, body, and antennas at the same time?</span> | |
| <div class="tags"> | |
| <span class="tag">MOVEMENT</span> | |
| <span class="tag">HEAD</span> | |
| <span class="tag">ANTENNAS</span> | |
| <span class="tag">BODY</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Use <code>goto_target</code> with multiple named arguments:</p> | |
| <pre><code>import numpy as np | |
| from reachy_mini import ReachyMini | |
| from reachy_mini.utils import create_head_pose | |
| with ReachyMini() as mini: | |
| mini.goto_target( | |
| head=create_head_pose(y=-10, mm=True), | |
| antennas=np.deg2rad([45, 45]), | |
| duration=2.0, | |
| body_yaw=np.deg2rad(30), | |
| )</code></pre> | |
| <ul> | |
| <li><code>antennas</code> is a 2-element array in radians [right, left].</li> | |
| <li><code>body_yaw</code> controls body rotation.</li> | |
| </ul> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">What's the difference between goto_target and set_target?</span> | |
| <div class="tags"> | |
| <span class="tag">MOVEMENT</span> | |
| <span class="tag">CONTROL</span> | |
| <span class="tag">REALTIME</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p><strong>goto_target:</strong></p> | |
| <ul> | |
| <li>Interpolates motion over a duration (default 0.5s).</li> | |
| <li>Supports different interpolation methods (<code>linear</code>, <code>minjerk</code>, <code>ease</code>, <code>cartoon</code>).</li> | |
| <li>Ideal for smooth, timed motions.</li> | |
| </ul> | |
| <p><strong>set_target:</strong></p> | |
| <ul> | |
| <li>Sets the target immediately, without interpolation.</li> | |
| <li>Suited for high-frequency control (e.g. sinusoidal trajectories, teleoperation).</li> | |
| </ul> | |
| <p>Example (sinusoidal motion):</p> | |
| <pre><code>y = 10 * np.sin(2 * np.pi * 0.5 * t) | |
| mini.set_target(head=create_head_pose(y=y, mm=True))</code></pre> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I choose the interpolation method for movements?</span> | |
| <div class="tags"> | |
| <span class="tag">MOVEMENT</span> | |
| <span class="tag">INTERPOLATION</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Use the <code>method</code> argument in <code>goto_target</code>:</p> | |
| <pre><code>mini.goto_target( | |
| head=create_head_pose(y=10, mm=True), | |
| antennas=np.deg2rad([-45, -45]), | |
| duration=2.0, | |
| method="cartoon", # "linear", "minjerk", "ease", or "cartoon" | |
| )</code></pre> | |
| <p>For a visual comparison of methods, you can run the example:</p> | |
| <ul> | |
| <li><code>examples/goto_interpolation_playground.py</code></li> | |
| </ul> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| </div> | |
| <!-- Subsection: Writing Apps --> | |
| <div class="subsection"> | |
| <h3>2.2 Writing & Sharing Apps</h3> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I write a Reachy Mini app?</span> | |
| <div class="tags"> | |
| <span class="tag">APPS</span> | |
| <span class="tag">SDK</span> | |
| <span class="tag">PROGRAMMING</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Inherit from <code>ReachyMiniApp</code> and implement <code>run</code>:</p> | |
| <pre><code>import threading | |
| from reachy_mini.apps.app import ReachyMiniApp | |
| from reachy_mini import ReachyMini | |
| class MyApp(ReachyMiniApp): | |
| def run(self, reachy_mini: ReachyMini, stop_event: threading.Event): | |
| # your app logic | |
| ...</code></pre> | |
| <ul> | |
| <li><code>stop_event</code> tells you when the app should stop.</li> | |
| <li>This pattern is used for standalone apps and for HF Spaces.</li> | |
| </ul> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How can I generate a new app template quickly?</span> | |
| <div class="tags"> | |
| <span class="tag">APPS</span> | |
| <span class="tag">TOOLING</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Use the app template generator:</p> | |
| <pre><code>reachy-mini-make-app my_app_name</code></pre> | |
| <p>This creates:</p> | |
| <pre><code>my_app_name/ | |
| βββ pyproject.toml | |
| βββ README.md | |
| βββ my_app_name/ | |
| β βββ __init__.py | |
| β βββ main.py</code></pre> | |
| <p>You can run it via:</p> | |
| <pre><code>python my_app_name/main.py</code></pre> | |
| <p>Or install it as a package:</p> | |
| <pre><code>pip install -e my_app_name/</code></pre> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">Is there a recommended way to share apps with the community?</span> | |
| <div class="tags"> | |
| <span class="tag">APPS</span> | |
| <span class="tag">COMMUNITY</span> | |
| <span class="tag">CONTRIBUTING</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Yes, via <strong>Hugging Face Spaces</strong>:</p> | |
| <ul> | |
| <li>Example hub: <em>Reachy Mini Apps</em></li> | |
| <li>Official example space: <em>reachy_mini_app_example</em></li> | |
| </ul> | |
| <p class="source">Source: API documentation + Discord β author: <strong>annecharlotte_pollen</strong> (trusted).</p> | |
| </div> | |
| </details> | |
| </div> | |
| <!-- Subsection: Playing Moves --> | |
| <div class="subsection"> | |
| <h3>2.3 Playing Recorded Moves</h3> | |
| <div class="media-placeholder"> | |
| <span>Dance / emotion demo GIF</span> | |
| </div> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I play predefined moves?</span> | |
| <div class="tags"> | |
| <span class="tag">MOVEMENT</span> | |
| <span class="tag">DATASET</span> | |
| <span class="tag">PLAYBACK</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Use <code>RecordedMoves</code> and <code>play_move</code>:</p> | |
| <pre><code>from reachy_mini import ReachyMini | |
| from reachy_mini.motion.recorded_move import RecordedMoves | |
| with ReachyMini() as mini: | |
| recorded_moves = RecordedMoves("pollen-robotics/reachy-mini-dances-library") | |
| for move_name in recorded_moves.list_moves(): | |
| mini.play_move(recorded_moves.get(move_name), initial_goto_duration=1.0)</code></pre> | |
| <ul> | |
| <li><code>initial_goto_duration</code> smoothly brings the robot to the starting pose of the move.</li> | |
| <li>Datasets are hosted on Hugging Face (e.g. emotions / dances libraries).</li> | |
| </ul> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I record my own moves for later replay?</span> | |
| <div class="tags"> | |
| <span class="tag">MOVEMENT</span> | |
| <span class="tag">RECORDING</span> | |
| <span class="tag">TELEOP</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Call <code>start_recording()</code> and <code>stop_recording()</code>, which record all <code>set_target</code> calls:</p> | |
| <pre><code>with ReachyMini() as mini: | |
| mini.start_recording() | |
| # run your teleop / control code... | |
| recorded_motion = mini.stop_recording()</code></pre> | |
| <p>You can then unpack <code>time</code>, <code>head</code>, <code>antennas</code>, <code>body_yaw</code> from each frame and save them.</p> | |
| <p>Tools to record/upload datasets are available in:</p> | |
| <ul> | |
| <li><code>reachy_mini_toolbox/tools/moves</code></li> | |
| </ul> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| </div> | |
| </section> | |
| <!-- Section 3: Hardware Guide --> | |
| <section class="faq-section" data-section="hardware"> | |
| <div class="section-header"> | |
| <div class="section-icon">π</div> | |
| <h2>3. Hardware Guide & Motion Limits</h2> | |
| </div> | |
| <div class="media-placeholder"> | |
| <span>Motion limits diagram</span> | |
| </div> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">What are the safety limits of the head and body?</span> | |
| <div class="tags"> | |
| <span class="tag">MOTORS</span> | |
| <span class="tag">LIMITS</span> | |
| <span class="tag">SAFETY</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Physical & software limits include:</p> | |
| <ol> | |
| <li>Motors have limited range of motion.</li> | |
| <li>Head can collide with the body.</li> | |
| <li>Body yaw: <code>[-180Β°, 180Β°]</code>.</li> | |
| <li>Head pitch/roll: <code>[-40Β°, 40Β°]</code>.</li> | |
| <li>Head yaw: <code>[-180Β°, 180Β°]</code>.</li> | |
| <li>Difference (body_yaw - head_yaw): <code>[-65Β°, 65Β°]</code>.</li> | |
| </ol> | |
| <p>If you command a pose outside these limits, Reachy Mini will automatically clamp to the nearest safe pose (no exception is raised).</p> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">What happens if I ask for an impossible pose (beyond limits)?</span> | |
| <div class="tags"> | |
| <span class="tag">MOTORS</span> | |
| <span class="tag">LIMITS</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Example:</p> | |
| <pre><code>reachy.goto_target(head=create_head_pose(roll=-50, degrees=True))</code></pre> | |
| <ul> | |
| <li>This exceeds the roll limit (Β±40Β°).</li> | |
| <li>The robot will <strong>not</strong> throw an error but will move to the closest safe pose.</li> | |
| </ul> | |
| <p>You can inspect the actual pose using:</p> | |
| <pre><code>head_pose = reachy.get_current_head_pose()</code></pre> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">Are power supply specs documented in the API docs?</span> | |
| <div class="tags"> | |
| <span class="tag">POWER</span> | |
| <span class="tag">HARDWARE</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>No, the API documentation does not specify the exact power supply specs (voltage, current). This was also requested in the Discord chat but not answered there.</p> | |
| <p class="source">Source: [NO DIRECT DATA in API docs] + Discord question with no official answer.</p> | |
| </div> | |
| </details> | |
| </section> | |
| <!-- Section 4: Sensors & Media --> | |
| <section class="faq-section" data-section="sensors"> | |
| <div class="section-header"> | |
| <div class="section-icon">π§ </div> | |
| <h2>4. Sensors & Media</h2> | |
| </div> | |
| <div class="subsection"> | |
| <h3>4.1 Camera</h3> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I grab camera frames from Reachy Mini?</span> | |
| <div class="tags"> | |
| <span class="tag">VISION</span> | |
| <span class="tag">CAMERA</span> | |
| <span class="tag">MEDIA</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Use the <code>media</code> object:</p> | |
| <pre><code>from reachy_mini import ReachyMini | |
| with ReachyMini() as mini: | |
| frame = mini.media.get_frame() | |
| # frame is a numpy array as returned by OpenCV</code></pre> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| </div> | |
| <div class="subsection"> | |
| <h3>4.2 Microphone</h3> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I access microphone audio samples?</span> | |
| <div class="tags"> | |
| <span class="tag">AUDIO</span> | |
| <span class="tag">MEDIA</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <pre><code>from reachy_mini import ReachyMini | |
| with ReachyMini() as mini: | |
| sample = mini.media.get_audio_sample() | |
| # sample is a numpy array as output by sounddevice</code></pre> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| </div> | |
| <div class="subsection"> | |
| <h3>4.3 Speaker</h3> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I send audio to the speaker?</span> | |
| <div class="tags"> | |
| <span class="tag">AUDIO</span> | |
| <span class="tag">MEDIA</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <pre><code>from reachy_mini import ReachyMini | |
| with ReachyMini() as mini: | |
| mini.media.push_audio_sample(chunk) # chunk = numpy array of audio samples</code></pre> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| </div> | |
| <div class="subsection"> | |
| <h3>4.4 GStreamer Backend</h3> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How can I use the GStreamer backend instead of the default OpenCV/sounddevice?</span> | |
| <div class="tags"> | |
| <span class="tag">AUDIO</span> | |
| <span class="tag">VIDEO</span> | |
| <span class="tag">GSTREAMER</span> | |
| <span class="tag">ADVANCED</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Install with the GStreamer extra:</p> | |
| <pre><code>pip install -e ".[gstreamer]"</code></pre> | |
| <p>Then run examples with:</p> | |
| <ul> | |
| <li><code>--backend gstreamer</code></li> | |
| </ul> | |
| <p>You need GStreamer binaries properly installed on your system. You can also define custom pipelines (see <code>camera_gstreamer.py</code> in the repo).</p> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| </div> | |
| </section> | |
| <!-- Section 5: Interaction Features --> | |
| <section class="faq-section" data-section="interaction"> | |
| <div class="section-header"> | |
| <div class="section-icon">π</div> | |
| <h2>5. Interaction Features</h2> | |
| </div> | |
| <div class="media-placeholder"> | |
| <span>Look-at feature demo GIF</span> | |
| </div> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How can I make Reachy Mini look at a point in the image?</span> | |
| <div class="tags"> | |
| <span class="tag">VISION</span> | |
| <span class="tag">LOOK_AT_IMAGE</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Use the <code>look_at_image</code> method (see example <code>look_at_image.py</code>):</p> | |
| <ul> | |
| <li>Provide a 2D point in image coordinates (0,0 = top-left).</li> | |
| <li>You can specify a duration, similar to <code>goto_target</code>.</li> | |
| </ul> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How can I make Reachy Mini look at a 3D point in the world?</span> | |
| <div class="tags"> | |
| <span class="tag">VISION</span> | |
| <span class="tag">LOOK_AT_WORLD</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Use <code>look_at_world</code>, which accepts 3D coordinates in the robot world frame (see world frame illustration in docs).</p> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| </section> | |
| <!-- Section 6: Motors & Compliancy --> | |
| <section class="faq-section" data-section="motors"> | |
| <div class="section-header"> | |
| <div class="section-icon">π¦΄</div> | |
| <h2>6. Motors, Compliancy & Manual Manipulation</h2> | |
| </div> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How do I enable, disable, or make motors compliant?</span> | |
| <div class="tags"> | |
| <span class="tag">MOTORS</span> | |
| <span class="tag">COMPLIANCY</span> | |
| <span class="tag">SAFETY</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Three main methods:</p> | |
| <ol> | |
| <li><strong><code>enable_motors</code></strong> | |
| <ul> | |
| <li>Powers motors ON.</li> | |
| <li>Robot holds position, cannot be moved by hand.</li> | |
| </ul> | |
| </li> | |
| <li><strong><code>disable_motors</code></strong> | |
| <ul> | |
| <li>Powers motors OFF.</li> | |
| <li>Robot is limp; you can move it freely by hand.</li> | |
| </ul> | |
| </li> | |
| <li><strong><code>make_motors_compliant</code></strong> | |
| <ul> | |
| <li>Motors ON but compliant (soft).</li> | |
| <li>Good for demonstrations or teaching-by-demonstration.</li> | |
| <li>Used in the "gravity compensation" example.</li> | |
| </ul> | |
| </li> | |
| </ol> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| </section> | |
| <!-- Section 7: Software Setup --> | |
| <section class="faq-section" data-section="software"> | |
| <div class="section-header"> | |
| <div class="section-icon">π§ͺ</div> | |
| <h2>7. Software Setup & Environment</h2> | |
| </div> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">Why do examples assume a virtual environment?</span> | |
| <div class="tags"> | |
| <span class="tag">SDK</span> | |
| <span class="tag">PYTHON</span> | |
| <span class="tag">ENVIRONMENT</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>While not strictly required, using a virtual environment:</p> | |
| <ul> | |
| <li>Avoids dependency conflicts.</li> | |
| <li>Makes upgrading the SDK (<code>pip install -U reachy-mini</code>) safer.</li> | |
| </ul> | |
| <p>This pattern is also used by beta testers who had fewer installation issues inside a <code>.venv</code>.</p> | |
| <p class="source">Source: API documentation (implicit) + Discord β author: <strong>matth_lap</strong>.</p> | |
| </div> | |
| </details> | |
| </section> | |
| <!-- Section 8: Customization --> | |
| <section class="faq-section" data-section="customization"> | |
| <div class="section-header"> | |
| <div class="section-icon">π¨</div> | |
| <h2>8. Customization & CAD</h2> | |
| </div> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">Are CAD files mentioned in the API documentation?</span> | |
| <div class="tags"> | |
| <span class="tag">CAD</span> | |
| <span class="tag">3D_PRINTING</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>The API documentation doesn't mention CAD files directly. Some testers requested them; no official link was provided in the logs.</p> | |
| <p class="source">Source: [NO DIRECT DATA in API docs] + Feedback / Discord.</p> | |
| </div> | |
| </details> | |
| </section> | |
| <!-- Section 9: Contributing --> | |
| <section class="faq-section" data-section="contributing"> | |
| <div class="section-header"> | |
| <div class="section-icon">π€</div> | |
| <h2>9. Contributing & Community</h2> | |
| </div> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How can I share my app with other users?</span> | |
| <div class="tags"> | |
| <span class="tag">APPS</span> | |
| <span class="tag">COMMUNITY</span> | |
| <span class="tag">CONTRIBUTING</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Recommended workflow:</p> | |
| <ul> | |
| <li>Wrap your behavior in a <code>ReachyMiniApp</code>.</li> | |
| <li>Publish as a HF Space or Python package.</li> | |
| <li>Look at the official example space <em>reachy_mini_app_example</em>.</li> | |
| </ul> | |
| <p class="source">Source: API documentation + Discord β author: <strong>annecharlotte_pollen</strong>.</p> | |
| </div> | |
| </details> | |
| <details class="faq-item"> | |
| <summary> | |
| <span class="question">How can I contribute to datasets of moves (dances/emotions)?</span> | |
| <div class="tags"> | |
| <span class="tag">DATASET</span> | |
| <span class="tag">CONTRIBUTING</span> | |
| <span class="tag">MOVEMENT</span> | |
| </div> | |
| </summary> | |
| <div class="answer"> | |
| <p>Use the tools in:</p> | |
| <ul> | |
| <li><code>reachy_mini_toolbox/tools/moves</code></li> | |
| </ul> | |
| <p>They help you:</p> | |
| <ul> | |
| <li>Record moves (via <code>start_recording</code> / <code>stop_recording</code>)</li> | |
| <li>Upload them to the Hugging Face Hub for reuse by others.</li> | |
| </ul> | |
| <p class="source">Source: API documentation.</p> | |
| </div> | |
| </details> | |
| </section> | |
| </div> | |
| </main> | |
| <!-- Footer --> | |
| <footer class="footer"> | |
| <p>Reachy Mini FAQ β’ <span id="footer-year">2024</span></p> | |
| </footer> | |
| </div> | |
| <script src="script.js"></script> | |
| </body> | |
| </html> |