askuric HF Staff commited on
Commit
ffcec0a
Β·
1 Parent(s): 5f94985

added reachy_mini

Browse files
This view is limited to 50 files because it contains too many changes. Β  See raw diff
Files changed (50) hide show
  1. .gitignore +2 -0
  2. assets/{index-CNd6_Jo_.js β†’ index-DML_FV0p.js} +0 -0
  3. index.html +1 -1
  4. reachy_mini +0 -1
  5. reachy_mini/.gitattributes +18 -0
  6. reachy_mini/.github/ISSUE_TEMPLATE/bug-report.yml +125 -0
  7. reachy_mini/.github/workflows/doc.yml +38 -0
  8. reachy_mini/.github/workflows/lint.yml +39 -0
  9. reachy_mini/.github/workflows/pytest.yml +39 -0
  10. reachy_mini/.github/workflows/wheels.yml +26 -0
  11. reachy_mini/.github/workflows/wheels.yml.bak +181 -0
  12. reachy_mini/.gitignore +258 -0
  13. reachy_mini/.pre-commit-config.yaml +10 -0
  14. reachy_mini/LICENSE +201 -0
  15. reachy_mini/MANIFEST.in +3 -0
  16. reachy_mini/README.md +92 -0
  17. reachy_mini/conftest.py +1 -0
  18. reachy_mini/docs/SDK/core-concept.md +55 -0
  19. reachy_mini/docs/SDK/gstreamer-installation.md +173 -0
  20. reachy_mini/docs/SDK/installation.md +295 -0
  21. reachy_mini/docs/SDK/integration.md +19 -0
  22. reachy_mini/docs/SDK/media-architecture.md +37 -0
  23. reachy_mini/docs/SDK/python-sdk.md +139 -0
  24. reachy_mini/docs/SDK/quickstart.md +119 -0
  25. reachy_mini/docs/SDK/readme.md +40 -0
  26. reachy_mini/docs/assets/back_interface.png +3 -0
  27. reachy_mini/docs/assets/battery_connector.png +3 -0
  28. reachy_mini/docs/assets/bluetooth_1.jpg +3 -0
  29. reachy_mini/docs/assets/bluetooth_2.jpg +3 -0
  30. reachy_mini/docs/assets/bluetooth_3.jpg +3 -0
  31. reachy_mini/docs/assets/bluetooth_4.jpg +3 -0
  32. reachy_mini/docs/assets/dashboard.png +3 -0
  33. reachy_mini/docs/assets/degrees_of_freedom.png +3 -0
  34. reachy_mini/docs/assets/digital_assembly_guide_preview_mini.jpg +3 -0
  35. reachy_mini/docs/assets/digital_assembly_guide_preview_mini_lite.jpg +3 -0
  36. reachy_mini/docs/assets/dof_table.png +3 -0
  37. reachy_mini/docs/assets/electronics.png +3 -0
  38. reachy_mini/docs/assets/head_frame.png +3 -0
  39. reachy_mini/docs/assets/head_parts.jpg +3 -0
  40. reachy_mini/docs/assets/marks_aligned.png +3 -0
  41. reachy_mini/docs/assets/mic_and_camera.png +3 -0
  42. reachy_mini/docs/assets/motors_detail.png +3 -0
  43. reachy_mini/docs/assets/motors_upward.png +3 -0
  44. reachy_mini/docs/assets/pcb_usb_and_switch.png +3 -0
  45. reachy_mini/docs/assets/qrcode-ap.png +3 -0
  46. reachy_mini/docs/assets/reachy_mini_components.png +3 -0
  47. reachy_mini/docs/assets/reachy_mini_dimensions.png +3 -0
  48. reachy_mini/docs/assets/reachy_mini_hello.gif +3 -0
  49. reachy_mini/docs/assets/reachymini_media_client.png +3 -0
  50. reachy_mini/docs/assets/reachymini_media_daemon.png +3 -0
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ *.wav
2
+ *.ttf
assets/{index-CNd6_Jo_.js β†’ index-DML_FV0p.js} RENAMED
The diff for this file is too large to render. See raw diff
 
index.html CHANGED
@@ -327,7 +327,7 @@
327
  display: none;
328
  }
329
  </style>
330
- <script type="module" crossorigin src="/assets/index-CNd6_Jo_.js"></script>
331
  </head>
332
  <body>
333
  <canvas id="canvas"></canvas>
 
327
  display: none;
328
  }
329
  </style>
330
+ <script type="module" crossorigin src="/assets/index-DML_FV0p.js"></script>
331
  </head>
332
  <body>
333
  <canvas id="canvas"></canvas>
reachy_mini DELETED
@@ -1 +0,0 @@
1
- Subproject commit dd918f4860ec95039bc168373b095325d24236f0
 
 
reachy_mini/.gitattributes ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.png filter=lfs diff=lfs merge=lfs -text
2
+ *.jpg filter=lfs diff=lfs merge=lfs -text
3
+ *.jpeg filter=lfs diff=lfs merge=lfs -text
4
+ *.gif filter=lfs diff=lfs merge=lfs -text
5
+ *.mp4 filter=lfs diff=lfs merge=lfs -text
6
+ *.avi filter=lfs diff=lfs merge=lfs -text
7
+ *.zip filter=lfs diff=lfs merge=lfs -text
8
+ *.tar.gz filter=lfs diff=lfs merge=lfs -text
9
+ *.pdf filter=lfs diff=lfs merge=lfs -text
10
+ *.obj filter=lfs diff=lfs merge=lfs -text
11
+ *.stl filter=lfs diff=lfs merge=lfs -text
12
+ *.npz filter=lfs diff=lfs merge=lfs -text
13
+ *.onnx filter=lfs diff=lfs merge=lfs -text
14
+ *.bin filter=lfs diff=lfs merge=lfs -text
15
+ *.svg filter=lfs diff=lfs merge=lfs -text
16
+ *.heic filter=lfs diff=lfs merge=lfs -text
17
+ *.webp filter=lfs diff=lfs merge=lfs -text
18
+
reachy_mini/.github/ISSUE_TEMPLATE/bug-report.yml ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Reachy Mini issue template modeled after LeRobot's for consistent reports.
2
+ name: "πŸš€ Reachy Mini Issue / Request"
3
+ description: Report a bug, request an improvement, or ask a technical question.
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ ### Thanks for contributing to Reachy Mini! πŸ™Œ
9
+ Please include as much detail as possible so we can help quickly.
10
+ **Before filing a ticket, you must read our [Troubleshooting Guide](https://github.com/pollen-robotics/reachy_mini/blob/develop/docs/troubleshooting.md).**
11
+
12
+ - type: dropdown
13
+ id: issue-type
14
+ attributes:
15
+ label: Ticket Type
16
+ description: What kind of ticket are you opening?
17
+ options:
18
+ - "πŸ› Bug Report"
19
+ - "πŸ’‘ Feature Request / Improvement"
20
+ - "❓ Technical Question"
21
+ - "🧹 Maintenance / Documentation"
22
+ validations:
23
+ required: true
24
+
25
+ - type: dropdown
26
+ id: robot-type
27
+ attributes:
28
+ label: Robot Type
29
+ description: Select the Reachy Mini hardware you are using.
30
+ options:
31
+ - Wireless
32
+ - Lite
33
+ validations:
34
+ required: true
35
+
36
+ - type: dropdown
37
+ id: operating-system
38
+ attributes:
39
+ label: Operating System
40
+ description: Choose the OS from which you are controlling Reachy Mini.
41
+ options:
42
+ - Windows
43
+ - macOS
44
+ - Linux
45
+ - Other (please describe below)
46
+ validations:
47
+ required: true
48
+
49
+ - type: checkboxes
50
+ id: browsers
51
+ attributes:
52
+ label: Browsers Used
53
+ description: Check all browsers you've tried when reproducing the issue.
54
+ options:
55
+ - label: Chrome
56
+ - label: Firefox
57
+ - label: Edge
58
+ - label: Safari
59
+ - label: Opera
60
+ - label: Other
61
+ validations:
62
+ required: true
63
+
64
+ - type: textarea
65
+ id: browser-version
66
+ attributes:
67
+ label: Browser version(s)
68
+ description: If relevant, list the browser versions you used.
69
+ placeholder: |
70
+ Chrome 130.0.6723.20, Firefox 131.0, etc.
71
+
72
+ - type: checkboxes
73
+ id: troubleshooting
74
+ attributes:
75
+ label: Troubleshooting
76
+ description: Confirm you reviewed the troubleshooting guide before opening this ticket.
77
+ options:
78
+ - label: I have read https://github.com/pollen-robotics/reachy_mini/blob/develop/docs/troubleshooting.md
79
+ validations:
80
+ required: true
81
+
82
+ - type: checkboxes
83
+ id: version-status
84
+ attributes:
85
+ label: Update Status
86
+ description: Select all that apply (at least one must be true).
87
+ options:
88
+ - label: My robot is up-to-date via the dashboard.
89
+ - label: I'm running the latest Reachy Mini release from this repo.
90
+ validations:
91
+ required: true
92
+
93
+ - type: textarea
94
+ id: description
95
+ attributes:
96
+ label: Description
97
+ description: Provide a clear summary of the issue or your proposal.
98
+ placeholder: |
99
+ A concise description of the issue or suggestion.
100
+ validations:
101
+ required: true
102
+
103
+ - type: textarea
104
+ id: context-repro
105
+ attributes:
106
+ label: Context & Reproduction
107
+ description: Steps to reproduce, commands run, or code snippets (use code blocks for clarity).
108
+ placeholder: |
109
+ Steps to reproduce / Usage example:
110
+ 1.
111
+ 2.
112
+ 3.
113
+
114
+ - type: textarea
115
+ id: logs
116
+ attributes:
117
+ label: Relevant logs or stack trace
118
+ description: Paste relevant logs, CLI output, or stack traces.
119
+ render: Shell
120
+
121
+ - type: textarea
122
+ id: workaround
123
+ attributes:
124
+ label: Additional Info / Workarounds
125
+ description: Anything else we should know? Include workarounds if you found any.
reachy_mini/.github/workflows/doc.yml ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Documentation
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+ jobs:
7
+ ai_doc:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v4
11
+ - name: Set up Python 3.12
12
+ uses: actions/setup-python@v5
13
+ with:
14
+ python-version: "3.12"
15
+ cache: 'pip' # caching pip dependencies
16
+ - name: Install dependencies
17
+ run: |
18
+ python -m pip install --upgrade pip
19
+ pip install pydoc-markdown
20
+ - name: Generate documentation and examples
21
+ run: |
22
+ pydoc-markdown -I src -p reachy_mini --no-render-toc > doc.md
23
+ VERSION=$(grep '^version =' pyproject.toml | head -n1 | cut -d'"' -f2)
24
+ DATE=$(date -u +'%Y-%m-%d %H:%M UTC')
25
+ echo -e "# Reachy Mini Documentation\n\n**Version:** $VERSION\n**Generated:** $DATE\n" > doc_reachy_mini_full.md
26
+ cat README.md doc.md $(find docs -type f -name '*.md' | sort) >> doc_reachy_mini_full.md
27
+ echo -e "\n# Examples\n" >> doc_reachy_mini_full.md
28
+ for f in $(find examples -type f -name '*.py' | sort); do
29
+ echo -e "\n## $(basename "$f")\n" >> doc_reachy_mini_full.md
30
+ cat "$f" >> doc_reachy_mini_full.md
31
+ done
32
+ - name: Install GitHub CLI
33
+ run: sudo apt-get update && sudo apt-get install -y gh
34
+ - name: Upload doc_reachy_mini_full.md to Gist
35
+ env:
36
+ GH_TOKEN: ${{ secrets.GH_TOKEN }}
37
+ run: |
38
+ gh gist edit 919e1d7468fb16e70dbe984bdc277bba doc_reachy_mini_full.md --desc "Reachy Mini documentation and examples"
reachy_mini/.github/workflows/lint.yml ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Linters
2
+ on:
3
+ push:
4
+ paths:
5
+ - "src/**"
6
+ - "tests/**"
7
+ - ".github/workflows/**"
8
+ - "pyproject.toml"
9
+ pull_request:
10
+ paths:
11
+ - "src/**"
12
+ - "tests/**"
13
+ - ".github/workflows/**"
14
+ - "pyproject.toml"
15
+ jobs:
16
+ ruff:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ - uses: astral-sh/ruff-action@v3
21
+ with:
22
+ version: "0.12.0"
23
+
24
+ mypy:
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - name: Set up Python 3.10
29
+ uses: actions/setup-python@v5
30
+ with:
31
+ python-version: "3.10"
32
+ cache: "pip" # caching pip dependencies
33
+ - name: Install dependencies
34
+ run: |
35
+ python -m pip install --upgrade pip
36
+ pip install .[dev]
37
+ - name: Lint with mypy
38
+ run: |
39
+ mypy --install-types --non-interactive
reachy_mini/.github/workflows/pytest.yml ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Pytest
2
+ on:
3
+ pull_request:
4
+ types: [opened, synchronize, reopened, ready_for_review]
5
+ paths:
6
+ - "src/**"
7
+ - "tests/**"
8
+ - ".github/workflows/**"
9
+ - "pyproject.toml"
10
+ jobs:
11
+ pytest:
12
+ runs-on: ${{ matrix.os }}
13
+ timeout-minutes: 10
14
+ strategy:
15
+ matrix:
16
+ os: [ubuntu-latest, macos-latest]
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ with:
20
+ lfs: "true"
21
+ - uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.10"
24
+ cache: "pip"
25
+ - name: Install system dependencies (Ubuntu)
26
+ if: matrix.os == 'ubuntu-latest'
27
+ run: sudo apt-get update && sudo apt-get install -y libportaudio2
28
+ - name: Create virtual environment and install dependencies
29
+ run: |
30
+ python -m venv venv
31
+ source venv/bin/activate
32
+ python -m pip install --upgrade pip
33
+ pip install .[dev]
34
+ - name: Run tests
35
+ run: |
36
+ source venv/bin/activate
37
+ pytest -vv -m 'not audio and not video and not audio_gstreamer and not video_gstreamer and not wireless and not wireless_gstreamer' --tb=short
38
+ env:
39
+ MUJOCO_GL: disable
reachy_mini/.github/workflows/wheels.yml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Publish
2
+
3
+ on:
4
+ release:
5
+ types:
6
+ - created
7
+
8
+ jobs:
9
+ publish:
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ id-token: write
13
+ steps:
14
+ - uses: actions/checkout@v5
15
+ with:
16
+ lfs: true
17
+ - name: Set up Python
18
+ uses: actions/setup-python@v6
19
+ with:
20
+ python-version: "3.10"
21
+ - name: Install build dependencies
22
+ run: pip install build
23
+ - name: Build distribution
24
+ run: python -m build
25
+ - name: Publish
26
+ uses: pypa/gh-action-pypi-publish@v1.13.0
reachy_mini/.github/workflows/wheels.yml.bak ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Build and Release Wheels
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "*"
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ linux:
11
+ runs-on: ${{ matrix.platform.runner }}
12
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
13
+ strategy:
14
+ matrix:
15
+ platform:
16
+ - runner: ubuntu-22.04
17
+ target: x86_64
18
+ - runner: ubuntu-22.04
19
+ target: x86
20
+ - runner: ubuntu-22.04
21
+ target: aarch64
22
+ - runner: ubuntu-22.04
23
+ target: armv7
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ - uses: actions/setup-python@v5
27
+ with:
28
+ python-version: |
29
+ 3.8
30
+ 3.9
31
+ 3.10
32
+ 3.11
33
+ 3.12
34
+ 3.13
35
+ - name: Build wheels
36
+ run: |
37
+ pip install build
38
+ python -m build --wheel --outdir dist
39
+ - name: Upload wheels
40
+ uses: actions/upload-artifact@v4
41
+ with:
42
+ name: wheels-linux-${{ matrix.platform.target }}
43
+ path: dist/*.whl
44
+
45
+ musllinux:
46
+ runs-on: ${{ matrix.platform.runner }}
47
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
48
+ strategy:
49
+ matrix:
50
+ platform:
51
+ - runner: ubuntu-22.04
52
+ target: x86_64
53
+ - runner: ubuntu-22.04
54
+ target: x86
55
+ - runner: ubuntu-22.04
56
+ target: aarch64
57
+ - runner: ubuntu-22.04
58
+ target: armv7
59
+ steps:
60
+ - uses: actions/checkout@v4
61
+ - uses: actions/setup-python@v5
62
+ with:
63
+ python-version: |
64
+ 3.8
65
+ 3.9
66
+ 3.10
67
+ 3.11
68
+ 3.12
69
+ 3.13
70
+ - name: Build wheels
71
+ run: |
72
+ pip install build
73
+ python -m build --wheel --outdir dist
74
+ - name: Upload wheels
75
+ uses: actions/upload-artifact@v4
76
+ with:
77
+ name: wheels-musllinux-${{ matrix.platform.target }}
78
+ path: dist/*.whl
79
+
80
+ windows:
81
+ runs-on: ${{ matrix.platform.runner }}
82
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
83
+ strategy:
84
+ matrix:
85
+ platform:
86
+ - runner: windows-latest
87
+ target: x64
88
+ - runner: windows-latest
89
+ target: x86
90
+ steps:
91
+ - uses: actions/checkout@v4
92
+ - uses: actions/setup-python@v5
93
+ with:
94
+ python-version: |
95
+ 3.8
96
+ 3.9
97
+ 3.10
98
+ 3.11
99
+ 3.12
100
+ 3.13
101
+ architecture: ${{ matrix.platform.target }}
102
+ - name: Build wheels
103
+ run: |
104
+ pip install build
105
+ python -m build --wheel --outdir dist
106
+ - name: Upload wheels
107
+ uses: actions/upload-artifact@v4
108
+ with:
109
+ name: wheels-windows-${{ matrix.platform.target }}
110
+ path: dist/*.whl
111
+
112
+ macos:
113
+ runs-on: ${{ matrix.platform.runner }}
114
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
115
+ strategy:
116
+ matrix:
117
+ platform:
118
+ - runner: macos-13
119
+ target: x86_64
120
+ - runner: macos-14
121
+ target: aarch64
122
+ steps:
123
+ - uses: actions/checkout@v4
124
+ - uses: actions/setup-python@v5
125
+ with:
126
+ python-version: |
127
+ 3.8
128
+ 3.9
129
+ 3.10
130
+ 3.11
131
+ 3.12
132
+ 3.13
133
+ - name: Build wheels
134
+ run: |
135
+ pip install build
136
+ python -m build --wheel --outdir dist
137
+ - name: Upload wheels
138
+ uses: actions/upload-artifact@v4
139
+ with:
140
+ name: wheels-macos-${{ matrix.platform.target }}
141
+ path: dist/*.whl
142
+
143
+ sdist:
144
+ runs-on: ubuntu-latest
145
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
146
+ steps:
147
+ - uses: actions/checkout@v4
148
+ - name: Build sdist
149
+ run: |
150
+ pip install build
151
+ python -m build --sdist --outdir dist
152
+ - name: Upload sdist
153
+ uses: actions/upload-artifact@v4
154
+ with:
155
+ name: wheels-sdist
156
+ path: dist/*.tar.gz
157
+
158
+ release:
159
+ name: Release
160
+ runs-on: ubuntu-latest
161
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
162
+ needs: [linux, musllinux, windows, macos, sdist]
163
+ permissions:
164
+ id-token: write
165
+ contents: write
166
+ attestations: write
167
+ steps:
168
+ - uses: actions/download-artifact@v4
169
+ with:
170
+ pattern: wheels-*
171
+ merge-multiple: true
172
+ path: dist
173
+ - name: Generate artifact attestation
174
+ uses: actions/attest-build-provenance@v1
175
+ with:
176
+ subject-path: 'dist/*'
177
+ - name: Publish to PyPI
178
+ if: ${{ startsWith(github.ref, 'refs/tags/') }}
179
+ uses: pypa/gh-action-pypi-publish@release/v1
180
+ with:
181
+ packages-dir: dist/
reachy_mini/.gitignore ADDED
@@ -0,0 +1,258 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ test/faulty_app/build
13
+ test/ok_app/build
14
+ develop-eggs/
15
+ dist/
16
+ downloads/
17
+ eggs/
18
+ .eggs/
19
+ lib/
20
+ lib64/
21
+ parts/
22
+ sdist/
23
+ var/
24
+ wheels/
25
+ share/python-wheels/
26
+ *.egg-info/
27
+ .installed.cfg
28
+ *.egg
29
+ MANIFEST
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Unit test / coverage reports
42
+ htmlcov/
43
+ .tox/
44
+ .nox/
45
+ .coverage
46
+ .coverage.*
47
+ .cache
48
+ nosetests.xml
49
+ coverage.xml
50
+ *.cover
51
+ *.py.cover
52
+ .hypothesis/
53
+ .pytest_cache/
54
+ cover/
55
+
56
+ # Translations
57
+ *.mo
58
+ *.pot
59
+
60
+ # Django stuff:
61
+ *.log
62
+ local_settings.py
63
+ db.sqlite3
64
+ db.sqlite3-journal
65
+
66
+ # Flask stuff:
67
+ instance/
68
+ .webassets-cache
69
+
70
+ # Scrapy stuff:
71
+ .scrapy
72
+
73
+ # Sphinx documentation
74
+ docs/_build/
75
+
76
+ # PyBuilder
77
+ .pybuilder/
78
+ target/
79
+
80
+ # Jupyter Notebook
81
+ .ipynb_checkpoints
82
+
83
+ # IPython
84
+ profile_default/
85
+ ipython_config.py
86
+
87
+ # pyenv
88
+ # For a library or package, you might want to ignore these files since the code is
89
+ # intended to run in multiple environments; otherwise, check them in:
90
+ # .python-version
91
+
92
+ # pipenv
93
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
94
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
95
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
96
+ # install all needed dependencies.
97
+ # Pipfile.lock
98
+
99
+ # UV
100
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
101
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
102
+ # commonly ignored for libraries.
103
+ # uv.lock
104
+
105
+ # poetry
106
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
107
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
108
+ # commonly ignored for libraries.
109
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
110
+ # poetry.lock
111
+ # poetry.toml
112
+
113
+ # pdm
114
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
115
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
116
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
117
+ # pdm.lock
118
+ # pdm.toml
119
+ .pdm-python
120
+ .pdm-build/
121
+
122
+ # pixi
123
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
124
+ # pixi.lock
125
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
126
+ # in the .venv directory. It is recommended not to include this directory in version control.
127
+ .pixi
128
+
129
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
130
+ __pypackages__/
131
+
132
+ # Celery stuff
133
+ celerybeat-schedule
134
+ celerybeat.pid
135
+
136
+ # Redis
137
+ *.rdb
138
+ *.aof
139
+ *.pid
140
+
141
+ # RabbitMQ
142
+ mnesia/
143
+ rabbitmq/
144
+ rabbitmq-data/
145
+
146
+ # ActiveMQ
147
+ activemq-data/
148
+
149
+ # SageMath parsed files
150
+ *.sage.py
151
+
152
+ # Environments
153
+ .env
154
+ .envrc
155
+ .venv
156
+ env/
157
+ venv/
158
+ ENV/
159
+ env.bak/
160
+ venv.bak/
161
+
162
+ # Spyder project settings
163
+ .spyderproject
164
+ .spyproject
165
+
166
+ # Rope project settings
167
+ .ropeproject
168
+
169
+ # mkdocs documentation
170
+ /site
171
+
172
+ # mypy
173
+ .mypy_cache/
174
+ .dmypy.json
175
+ dmypy.json
176
+
177
+ # Pyre type checker
178
+ .pyre/
179
+
180
+ # pytype static type analyzer
181
+ .pytype/
182
+
183
+ # Cython debug symbols
184
+ cython_debug/
185
+
186
+ # PyCharm
187
+ .idea/**/workspace.xml
188
+ .idea/**/tasks.xml
189
+ .idea/**/usage.statistics.xml
190
+ .idea/**/dictionaries
191
+ .idea/**/shelf
192
+ .idea/**/dataSources/
193
+ .idea/**/dataSources.ids
194
+ .idea/**/dataSources.local.xml
195
+ .idea/**/sqlDataSources.xml
196
+ .idea/**/dynamic.xml
197
+ .idea/**/uiDesigner.xml
198
+ .idea/**/dbnavigator.xml
199
+ .idea/**/contentModel.xml
200
+
201
+ # Abstra
202
+ # Abstra is an AI-powered process automation framework.
203
+ # Ignore directories containing user credentials, local state, and settings.
204
+ # Learn more at https://abstra.io/docs
205
+ .abstra/
206
+
207
+ # Visual Studio Code
208
+ .vscode/*
209
+ !.vscode/settings.json
210
+ !.vscode/tasks.json
211
+ !.vscode/launch.json
212
+ !.vscode/extensions.json
213
+ !.vscode/*.code-snippets
214
+ !*.code-workspace
215
+
216
+ # Ruff stuff:
217
+ .ruff_cache/
218
+
219
+ # PyPI configuration file
220
+ .pypirc
221
+
222
+ # Marimo
223
+ marimo/_static/
224
+ marimo/_lsp/
225
+ __marimo__/
226
+
227
+ # Streamlit
228
+ .streamlit/secrets.toml
229
+
230
+ # General for macOS
231
+ .DS_Store
232
+ __MACOSX/
233
+ .AppleDouble
234
+ .LSOverride
235
+ Icon[]
236
+
237
+ # General for Linux
238
+ *~
239
+ .fuse_hidden*
240
+ .directory
241
+ .Trash-*
242
+ .nfs*
243
+ nohup.out
244
+
245
+ # General for Windows
246
+ Thumbs.db
247
+ Thumbs.db:encryptable
248
+ ehthumbs.db
249
+ ehthumbs_vista.db
250
+ [Dd]esktop.ini
251
+ *.stackdump
252
+ $RECYCLE.BIN/
253
+ *.lnk
254
+
255
+ # Project specific ignores
256
+ src/reachy_mini_dashboard/installed_apps/*
257
+ examples/debug/measures/*
258
+ .DS_Store
reachy_mini/.pre-commit-config.yaml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ # Ruff version. Make sure it matches the version in .github/workflows/lint.yml.
4
+ rev: v0.12.0
5
+ hooks:
6
+ # Run the linter.
7
+ - id: ruff-check
8
+ args: ["--select", "I", "--select", "D", "--ignore", "D203", "--ignore", "D213"]
9
+ # Run the formatter.
10
+ - id: ruff-format
reachy_mini/LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright 2025 Pollen Robotics
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
reachy_mini/MANIFEST.in ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ recursive-include src/reachy_mini/assets *
2
+ recursive-include src/reachy_mini/templates *
3
+ recursive-include src/reachy_mini/descriptions *
reachy_mini/README.md ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Reachy Mini πŸ€–
2
+
3
+ [![Ask on HuggingChat](https://img.shields.io/badge/Ask_on-HuggingChat-yellow?logo=huggingface&logoColor=yellow&style=for-the-badge)](https://huggingface.co/chat/?attachments=https%3A%2F%2Fgist.githubusercontent.com%2FFabienDanieau%2F919e1d7468fb16e70dbe984bdc277bba%2Fraw%2Fdoc_reachy_mini_full.md&prompt=Read%20this%20documentation%20about%20Reachy%20Mini%20so%20I%20can%20ask%20questions%20about%20it.)
4
+ [![Discord](https://img.shields.io/badge/Discord-Join_the_Community-7289DA?logo=discord&logoColor=white)](https://discord.gg/Y7FgMqHsub)
5
+
6
+ **Reachy Mini is an open-source, expressive robot made for hackers and AI builders.**
7
+
8
+ πŸ›’ [**Buy Reachy Mini**](https://www.hf.co/reachy-mini/)
9
+
10
+ [![Reachy Mini Hello](/docs/assets/reachy_mini_hello.gif)](https://www.pollen-robotics.com/reachy-mini/)
11
+
12
+ ## ⚑️ Build and start your own robot
13
+
14
+ **Choose your platform to access the specific guide:**
15
+
16
+ | **πŸ€– Reachy Mini (Wireless)** | **πŸ”Œ Reachy Mini Lite** | **πŸ’» Simulation** |
17
+ | :---: | :---: | :---: |
18
+ | The full autonomous experience.<br>Raspberry Pi 4 + Battery + WiFi. | The developer version.<br>USB connection to your computer. | No hardware required.<br>Prototype in MuJoCo. |
19
+ | πŸ‘‰ [**Go to Wireless Guide**](docs/platforms/reachy_mini/get_started.md) | πŸ‘‰ [**Go to Lite Guide**](docs/platforms/reachy_mini_lite/get_started.md) | πŸ‘‰ [**Go to Simulation**](docs/platforms/simulation/get_started.md) |
20
+
21
+
22
+
23
+ > ⚑ **Pro tip:** Install [uv](https://docs.astral.sh/uv/getting-started/installation/) for 10-100x faster app installations (auto-detected, falls back to `pip`).
24
+
25
+ <br>
26
+
27
+ ## πŸ“± Apps & Ecosystem
28
+
29
+ Reachy Mini comes with an app store powered by Hugging Face Spaces. You can install these apps directly from your robot's dashboard with one click!
30
+
31
+ * **πŸ—£οΈ [Conversation App](https://huggingface.co/spaces/pollen-robotics/reachy_mini_conversation_app):** Talk naturally with Reachy Mini (powered by LLMs).
32
+ * **πŸ“» [Radio](https://huggingface.co/spaces/pollen-robotics/reachy_mini_radio):** Listen to the radio with Reachy Mini !
33
+ * **πŸ‘‹ [Hand Tracker](https://huggingface.co/spaces/pollen-robotics/hand_tracker_v2):** The robot follows your hand movements in real-time.
34
+
35
+ πŸ‘‰ [**Browse all apps on Hugging Face**](https://hf.co/reachy-mini/#/apps)
36
+
37
+ <br>
38
+
39
+ ## πŸš€ Getting Started with Reachy Mini SDK
40
+
41
+ ### Quick Look
42
+ Control your robot in just **a few lines of code**:
43
+
44
+ ```python
45
+ from reachy_mini import ReachyMini
46
+ from reachy_mini.utils import create_head_pose
47
+
48
+ with ReachyMini() as mini:
49
+ # Look up and tilt head
50
+ mini.goto_target(
51
+ head=create_head_pose(z=10, roll=15, degrees=True, mm=True),
52
+ duration=1.0
53
+ )
54
+ ```
55
+
56
+ ### User guides
57
+ * **[Installation](docs/SDK/installation.md)**: 5 minutes to set up your computer
58
+ * **[Quickstart Guide](docs/SDK/quickstart.md)**: Run your first behavior on Reachy Mini
59
+ * **[Python SDK](docs/SDK/python-sdk.md)**: Learn to move, see, speak, and hear.
60
+ * **[AI Integrations](docs/SDK/integration.md)**: Connect LLMs, build Apps, and publish to Hugging Face.
61
+ * **[Core Concepts](docs/SDK/core-concept.md)**: Architecture, coordinate systems, and safety limits.
62
+ * πŸ€—[**Share your app with the community**](https://huggingface.co/blog/pollen-robotics/make-and-publish-your-reachy-mini-apps)
63
+ * πŸ“‚ [**Browse the Examples Folder**](examples)
64
+
65
+
66
+ <br>
67
+
68
+ ## πŸ›  Hardware Overview
69
+
70
+ Reachy Mini robots are sold as kits and generally take **2 to 3 hours** to assemble. Detailed step-by-step guides are available in the platform-specific folders linked above.
71
+
72
+ * **Reachy Mini (Wireless):** Runs onboard (RPi 4), autonomous, includes IMU. [See specs](docs/platforms/reachy_mini/hardware.md).
73
+ * **Reachy Mini Lite:** Runs on your PC, powered via wall outlet. [See specs](docs/platforms/reachy_mini_lite/hardware.md).
74
+
75
+ <br>
76
+
77
+ ## ❓ Troubleshooting
78
+
79
+ Encountering an issue? πŸ‘‰ **[Check the Troubleshooting & FAQ Guide](/docs/troubleshooting.md)**
80
+
81
+ <br>
82
+
83
+ ## 🀝 Community & Contributing
84
+
85
+ * **Join the Community:** Join [Discord](https://discord.gg/2bAhWfXme9) to share your moments with Reachy, build apps together, and get help.
86
+ * **Found a bug?** Open an issue on this repository.
87
+
88
+
89
+ ## License
90
+
91
+ This project is licensed under the Apache 2.0 License. See the [LICENSE](LICENSE) file for details.
92
+ Hardware design files are licensed under Creative Commons BY-SA-NC.
reachy_mini/conftest.py ADDED
@@ -0,0 +1 @@
 
 
1
+
reachy_mini/docs/SDK/core-concept.md ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Core Concepts & Architecture
2
+
3
+ Understanding how Reachy Mini works under the hood will help you build robust applications and debug issues.
4
+
5
+ ## Software Architecture
6
+
7
+ Reachy Mini uses a **Client-Server** architecture:
8
+
9
+ 1. **The Daemon (Server):**
10
+ * Runs on the computer connected to the robot (or the simulation).
11
+ * Handles hardware I/O (USB/Serial), safety checks, and sensor reading.
12
+ * Exposes a REST API (`localhost:8000`) and WebSocket.
13
+
14
+ 2. **The SDK (Client):**
15
+ * Your Python code (`reachy_mini` package).
16
+ * Connects to the Daemon over the network.
17
+ * *Advantage:* You can run your AI code on a powerful server while the Daemon runs on a Raspberry Pi connected to the robot.
18
+
19
+ ## Coordinate Systems
20
+
21
+ When moving the robot, you will work with two main reference frames:
22
+
23
+ ### 1. Head Frame
24
+ Located at the base of the head. Used for `goto_target` and `set_target` commands.
25
+
26
+ [![Reachy Mini Head Frame](/docs/assets/head_frame.png)]()
27
+
28
+ ### 2. World Frame
29
+ Fixed relative to the robot's base. Used for `look_at_world` commands.
30
+
31
+ [![Reachy Mini World Frame](/docs/assets/world_frame.png)]()
32
+
33
+ ## Safety Limits ⚠️
34
+
35
+ Reachy Mini has physical and software limits to prevent self-collision and damage. The SDK will automatically clamp values to the closest valid position.
36
+
37
+ | Joint / Axis | Limit Range |
38
+ | :--- | :--- |
39
+ | **Head Pitch/Roll** | [-40Β°, +40Β°] |
40
+ | **Head Yaw** | [-180Β°, +180Β°] |
41
+ | **Body Yaw** | [-160Β°, +160Β°] |
42
+ | **Yaw Delta** | Max 65Β° difference between Head and Body Yaw |
43
+
44
+ ## Motor Modes
45
+
46
+ You can change how the motors behave:
47
+ * **`mini.enable_motors()`**: Stiff. Holds position.
48
+ * **`mini.disable_motors()`**: Limp. No power.
49
+ * **`mini.enable_gravity_compensation()`**: "Soft" mode. You can move the head by hand, and it will stay where you leave it. (Only works with the Placo kinematics backend.)
50
+
51
+
52
+ ## Next Steps
53
+ * **[Quickstart Guide](quickstart.md)**: Run your first behavior on Reachy Mini
54
+ * **[Python SDK](python-sdk.md)**: Learn to move, see, speak, and hear.
55
+ * **[AI Integrations](integration.md)**: Connect LLMs, build Apps, and publish to Hugging Face.
reachy_mini/docs/SDK/gstreamer-installation.md ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # πŸ“‘ GStreamer Installation for Wireless Reachy Mini
2
+
3
+ > This guide will help you install [GStreamer](https://gstreamer.freedesktop.org) to receive video and audio streams from your wireless Reachy Mini.
4
+
5
+ <div align="center">
6
+
7
+ | 🐧 **Linux** | 🍎 **macOS** | πŸͺŸ **Windows** |
8
+ |:---:|:---:|:---:|
9
+ | βœ… Supported | βœ… Supported | ⚠️ Partial Support |
10
+
11
+ </div>
12
+
13
+ > **Note**: Python wheels for easy install of GStreamer will be soon released an available on PyPI. They will be directly integrated. Meanwhile, please follow the instructions below to install GStreamer on your system.
14
+
15
+ ## πŸ”§ Install GStreamer
16
+
17
+ <details>
18
+ <summary>🐧 <strong>Linux</strong></summary>
19
+
20
+ ### Step 1: Install GStreamer
21
+
22
+ **For Ubuntu/Debian-based systems:**
23
+
24
+ In you terminal, run:
25
+
26
+ ```bash
27
+ sudo apt-get update
28
+ sudo apt-get install -y \
29
+ libgstreamer-plugins-bad1.0-dev \
30
+ libgstreamer-plugins-base1.0-dev \
31
+ libgstreamer1.0-dev \
32
+ libglib2.0-dev \
33
+ libssl-dev \
34
+ libgirepository1.0-dev \
35
+ libcairo2-dev \
36
+ libportaudio2 \
37
+ libnice10 \
38
+ gstreamer1.0-plugins-good \
39
+ gstreamer1.0-alsa \
40
+ gstreamer1.0-plugins-bad \
41
+ gstreamer1.0-nice \
42
+ python3-gi \
43
+ python3-gi-cairo
44
+ ```
45
+
46
+ ### Step 2: Install Rust
47
+
48
+ On Linux, the WebRTC plugin is not activated by default and needs to be compiled manually from the Rust source code. Install Rust from the commmand line using `rustup`:
49
+
50
+ ```bash
51
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
52
+ source $HOME/.cargo/env
53
+ ```
54
+
55
+ ### Step 3: Build and install WebRTC plugin
56
+
57
+ The build and install the WebRTC plugin, run the following commands :
58
+
59
+ ```bash
60
+ # Clone the GStreamer Rust plugins repository
61
+ git clone https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
62
+ cd gst-plugins-rs
63
+ git checkout 0.14.1
64
+
65
+ # Install the cargo-c build tool
66
+ cargo install cargo-c
67
+
68
+ # Create installation directory
69
+ sudo mkdir -p /opt/gst-plugins-rs
70
+ sudo chown $USER /opt/gst-plugins-rs
71
+
72
+ # Build and install the WebRTC plugin (this may take several minutes)
73
+ cargo cinstall -p gst-plugin-webrtc --prefix=/opt/gst-plugins-rs --release
74
+
75
+ # Add plugin path to your environment
76
+ echo 'export GST_PLUGIN_PATH=/opt/gst-plugins-rs/lib/x86_64-linux-gnu:$GST_PLUGIN_PATH' >> ~/.bashrc
77
+ source ~/.bashrc
78
+ ```
79
+
80
+ > **πŸ’‘ Note:** For ARM64 systems (like Raspberry Pi), replace `x86_64-linux-gnu` with `aarch64-linux-gnu` in the export command.
81
+
82
+ </details>
83
+
84
+ <details>
85
+ <summary>🍎 <strong>macOS</strong></summary>
86
+
87
+ ### Using Homebrew
88
+
89
+ ```bash
90
+ brew install gstreamer libnice-gstreamer
91
+ ```
92
+
93
+ The WebRTC plugin is activated by default in the Homebrew package.
94
+
95
+ </details>
96
+
97
+ <details>
98
+ <summary>πŸͺŸ <strong>Windows</strong></summary>
99
+
100
+ > ⚠️ **Note:** Windows support is currently partial. Some features may not work as expected.
101
+
102
+ ### Step 1: Install GStreamer using the official installer
103
+
104
+ <div align="center">
105
+
106
+ [![Download GStreamer for Windows](https://img.shields.io/badge/Download-GStreamer%20for%20Windows-blue?style=for-the-badge&logo=windows&logoColor=white)](https://gstreamer.freedesktop.org/download/)
107
+
108
+ </div>
109
+
110
+ 1. Download the **runtime** installer (MSVC version)
111
+ 2. Install with **Complete** installation option
112
+ 3. Edit the environment variables and Add to system PATH: `C:\Program Files\gstreamer\1.0\msvc_x86_64\bin`
113
+ 4. Add to PYTHONPATH: `C:\gstreamer\1.0\msvc_x86_64\lib\site-packages`
114
+
115
+ > **πŸ’‘ Important:** Replace `C:\Program Files\gstreamer` with your actual GStreamer installation folder if you installed it in a different location.
116
+
117
+
118
+
119
+ </details>
120
+
121
+ ## βœ… Verify Installation
122
+
123
+ Finally, you can test your GStreamer installation as follows:
124
+
125
+ ```bash
126
+ # Check version
127
+ gst-launch-1.0 --version
128
+
129
+ # Test basic functionalities
130
+ gst-launch-1.0 videotestsrc ! autovideosink
131
+
132
+ # Verify WebRTC plugin
133
+ gst-inspect-1.0 webrtcsrc
134
+ ```
135
+
136
+ You should also be able to import gstreamer libraries in a Python environment:
137
+ ```bash
138
+ python -c "import gi"
139
+ ```
140
+
141
+ ## πŸ”§ Python Dependencies
142
+
143
+ When installing Reachy Mini Python package, you will also need to add the `gstreamer` extra :
144
+
145
+ ### Install from PyPI
146
+
147
+ ```bash
148
+ uv pip install "reachy-mini[gstreamer]"
149
+ ```
150
+
151
+ ### Install from source
152
+
153
+ ```bash
154
+ uv sync --extra gstreamer
155
+ ```
156
+
157
+ ## Troubleshooting & Unit Tests
158
+
159
+ If you encounter issues with the stream, you can test the components individually.
160
+
161
+ **Test 1: Manually create the WebRTC Server**
162
+ Run this GStreamer pipeline on the robot to verify the camera and encoder stack:
163
+
164
+ ```bash
165
+ gst-launch-1.0 webrtcsink run-signalling-server=true meta="meta,name=reachymini" name=ws libcamerasrc ! capsfilter caps=video/x-raw,width=1280,height=720,framerate=60/1,format=YUY2,colorimetry=bt709,interlace-mode=progressive ! queue ! v4l2h264enc extra-controls="controls,repeat_sequence_header=1" ! 'video/x-h264,level=(string)4' ! ws. alsasrc device=hw:4 ! queue ! audioconvert ! audioresample ! opusenc ! audio/x-opus, rate=48000, channels=2 ! ws.
166
+ ```
167
+
168
+ **Test 2: Send Audio to Reachy**
169
+ Send an audio RTP stream to port 5000 to test the speakers:
170
+
171
+ ```bash
172
+ gst-launch-1.0 audiotestsrc ! audioconvert ! audioresample ! opusenc ! audio/x-opus, rate=48000, channels=2 ! rtpopuspay pt=96 ! udpsink host=<ROBOT_IP> port=5000
173
+ ```
reachy_mini/docs/SDK/installation.md ADDED
@@ -0,0 +1,295 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # πŸ“¦ Installation Guide
2
+
3
+ > **Welcome to Reachy Mini!** This guide will help you install the Python SDK and daemon to start controlling your robot.
4
+
5
+ <div align="center">
6
+
7
+ | 🐧 **Linux** | 🍎 **macOS** | πŸͺŸ **Windows** |
8
+ |:---:|:---:|:---:|
9
+ | βœ… Supported | βœ… Supported | βœ… Supported |
10
+
11
+ </div>
12
+
13
+ **Need help?** Feel free to open an [issue](https://github.com/pollen-robotics/reachy_mini/issues) if you encounter any problem.
14
+
15
+ ## First time using the command line? πŸ–₯️
16
+ <details>
17
+ <summary>Click here if you're new to using a terminal/command line</summary>
18
+
19
+ A **command line** (also called terminal or command prompt) is a text-based interface where you can type commands to interact with your computer. Don't worryβ€”it's simpler than it looks!
20
+
21
+ **How to open the command line:**
22
+ * **Windows:** Press `Win + R`, type `cmd` or `powershell`, and press Enter
23
+ * **macOS:** Press `Cmd + Space`, type `Terminal`, and press Enter
24
+ * **Linux:** Press `Ctrl + Alt + T` or search for "Terminal" in your applications
25
+
26
+ **Basic tips:**
27
+ * Type commands exactly as shown in the instructions
28
+ * Press `Enter` after typing each command to run it
29
+ * You can copy and paste commands (right-click to paste in most command line interfaces)
30
+
31
+ > **πŸ’‘ Don't be intimidated!** The command line is just another way to give instructions to your computer. Follow the commands step by step, and you'll be controlling your Reachy Mini in no time!
32
+
33
+ </details>
34
+
35
+ ## 1. πŸ“‹ Prerequisites
36
+
37
+ <div align="center">
38
+
39
+ | Tool | Version | Purpose |
40
+ |------|---------|---------|
41
+ | 🐍 **Python** | 3.10 - 3.12 | Run Reachy Mini SDK |
42
+ | πŸ“‚ **Git** | Latest | Download source code and apps |
43
+ | πŸ“¦ **Git LFS** | Latest | Download model assets |
44
+
45
+ </div>
46
+
47
+ ### 🐍 Install Python
48
+
49
+ We'll use `uv` - a fast Python package manager that makes installation simple!
50
+
51
+ #### Step 1: Install uv
52
+
53
+ <details>
54
+ <summary>🐧 <strong>Linux</strong> & 🍎 <strong>macOS</strong></summary>
55
+
56
+ In your terminal, run:
57
+ ```bash
58
+ curl -LsSf https://astral.sh/uv/install.sh | sh
59
+ ```
60
+
61
+ </details>
62
+
63
+ <details>
64
+ <summary>πŸͺŸ <strong>Windows</strong></summary>
65
+
66
+ In your terminal, run:
67
+ ```powershell
68
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
69
+ ```
70
+
71
+ </details>
72
+
73
+ **βœ… Verify installation:**
74
+
75
+ Once the installation is completed, close your terminal and open a new one. You can check if everything went well with :
76
+ ```bash
77
+ uv --version
78
+ ```
79
+
80
+ #### Step 2: Install Python
81
+
82
+ In your terminal, run:
83
+ ```bash
84
+ uv python install 3.12 --default
85
+ ```
86
+
87
+ > **πŸ’‘ Tip:** We recommend Python 3.12 as it's the latest supported version for Reachy Mini.
88
+
89
+
90
+ ### πŸ“‚ Install Git and Git LFS
91
+
92
+ <details>
93
+ <summary>🐧 <strong>Linux</strong></summary>
94
+
95
+ #### Install Git and Git LFS
96
+
97
+ In your terminal, run:
98
+ ```bash
99
+ sudo apt install git git-lfs
100
+ ```
101
+
102
+ </details>
103
+
104
+ <details>
105
+ <summary>🍎 <strong>macOS</strong></summary>
106
+
107
+ #### 1. Install Homebrew (if not already installed)
108
+
109
+ In your terminal, run:
110
+ ```zsh
111
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
112
+ ```
113
+
114
+ For Apple Silicon (M1, M2, etc.), you will also be prompted to run :
115
+
116
+ ```zsh
117
+ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
118
+ eval "$(/opt/homebrew/bin/brew shellenv)"
119
+ ```
120
+
121
+ βœ… Verify Homebrew:
122
+
123
+ Once the installation is completed you can check if it went fine with :
124
+ ```zsh
125
+ brew --version
126
+ ```
127
+
128
+ #### 2. Install Git and Git LFS
129
+
130
+ In your terminal, run:
131
+ ```zsh
132
+ brew install git git-lfs
133
+ ```
134
+
135
+ </details>
136
+
137
+ <details>
138
+ <summary>πŸͺŸ <strong>Windows</strong></summary>
139
+
140
+ #### Download and install Git for Windows
141
+
142
+ <div align="center">
143
+
144
+ [![Download Git for Windows](https://img.shields.io/badge/Download-Git%20for%20Windows-blue?style=for-the-badge&logo=git&logoColor=white)](https://git-scm.com/install/windows)
145
+
146
+ </div>
147
+
148
+ </details>
149
+
150
+ **βœ… Finalize installation:**
151
+
152
+ Finally, Git LFS then needs to be initialized with the command :
153
+
154
+ ```bash
155
+ git lfs install
156
+ ```
157
+
158
+ ## 2. 🏠 Set up a Virtual Environment
159
+
160
+ > **Why use a virtual environment?** It keeps your Reachy Mini installation isolated and prevents conflicts with other Python projects. Modern Python development requires this!
161
+
162
+ ### Create the environment
163
+
164
+ In your terminal, run:
165
+ ```bash
166
+ uv venv reachy_mini_env --python 3.12
167
+ ```
168
+
169
+ ### Activate the environment
170
+
171
+ <details>
172
+ <summary>🐧 <strong>Linux</strong> & 🍎 <strong>macOS</strong></summary>
173
+
174
+ In your terminal, run:
175
+ ```bash
176
+ source reachy_mini_env/bin/activate
177
+ ```
178
+
179
+ </details>
180
+
181
+ <details>
182
+ <summary>πŸͺŸ <strong>Windows</strong></summary>
183
+
184
+ > **⚠️ First-time setup:** Before you can activate your virtual environment, Windows needs permission to run scripts. You only need to do this once!
185
+
186
+ **Step 1:** Open terminal as Administrator
187
+ - Press `Win + R`, type `powershell`
188
+ - Right-click on "Windows PowerShell" and select "Run as administrator"
189
+
190
+ **Step 2:** Enable script execution
191
+
192
+ In the administrator terminal, run:
193
+ ```powershell
194
+ powershell Set-ExecutionPolicy RemoteSigned
195
+ ```
196
+
197
+ **Step 3:** Close the administrator terminal and open a regular terminal
198
+
199
+ Now you can activate your virtual environment by running:
200
+ ```powershell
201
+ reachy_mini_env\Scripts\activate
202
+ ```
203
+
204
+ </details>
205
+
206
+ > **βœ… Success indicator:** You should see `(reachy_mini_env)` at the start of your command line prompt!
207
+
208
+ ## 3. πŸš€ Install Reachy Mini
209
+
210
+ Choose your installation method:
211
+
212
+ <div align="center">
213
+
214
+ | πŸ“¦ **PyPI Installation** | πŸ”§ **Source Installation** |
215
+ |:---:|:---:|
216
+ | **For Everyone** | **For Developers** |
217
+ | Ready to use | Modify the code |
218
+
219
+ </div>
220
+
221
+ ### πŸ“¦ Option A: Install from PyPI
222
+ > **Recommended for most users** - Just want to control your robot? This is for you!
223
+
224
+ In your terminal, run:
225
+ ```bash
226
+ uv pip install "reachy-mini"
227
+ ```
228
+
229
+ If you want to use the simulation mode, you need to add the `mujoco` extra:
230
+ ```bash
231
+ uv pip install "reachy-mini[mujoco]"
232
+ ```
233
+
234
+ ### πŸ”§ Option B: Install from Source
235
+ > **For developers** - Want to modify the SDK or contribute? Choose this option!
236
+
237
+ In your terminal, run:
238
+ ```bash
239
+ git clone https://github.com/pollen-robotics/reachy_mini && cd reachy_mini
240
+ uv sync
241
+ ```
242
+
243
+ If you want to use the simulation mode, you need to add the `mujoco` extra:
244
+ ```bash
245
+ uv sync --extra mujoco
246
+ ```
247
+ ### 🐧 Linux Users: USB Permission Setup
248
+
249
+ > **Linux + USB connection?** You need to grant access to Reachy Mini's serial port.
250
+
251
+ <details>
252
+ <summary>πŸ”§ <strong>Click here to set up USB permissions</strong></summary>
253
+
254
+ <br>
255
+
256
+ Run these commands in your terminal:
257
+
258
+ ```bash
259
+ echo 'SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d3", MODE="0666", GROUP="dialout"
260
+ SUBSYSTEM=="tty", ATTRS{idVendor}=="38fb", ATTRS{idProduct}=="1001", MODE="0666", GROUP="dialout"' \
261
+ | sudo tee /etc/udev/rules.d/99-reachy-mini.rules
262
+
263
+ sudo udevadm control --reload-rules && sudo udevadm trigger
264
+ sudo usermod -aG dialout $USER
265
+ ```
266
+
267
+ > ⚠️ **Important:** Log out and log back in for the changes to take effect!
268
+
269
+ </details>
270
+
271
+ ## πŸ“‘ Wireless Reachy Mini Setup
272
+
273
+ > **Want to use the SDK from a remote laptop with a wireless Reachy Mini ?** You'll need to install GStreamer to receive video and audio streams.
274
+
275
+ ### πŸ”§ Install GStreamer
276
+
277
+ <div align="center">
278
+
279
+ [![GStreamer Installation Guide](https://img.shields.io/badge/πŸ“–-GStreamer%20Installation%20Guide-blue?style=for-the-badge)](gstreamer-installation.md)
280
+
281
+ </div>
282
+
283
+ ## πŸŽ‰ Congratulations!
284
+
285
+ You've successfully installed Reachy Mini! Your robot is ready to come to life.
286
+
287
+ ## ❓ Troubleshooting
288
+ Encountering an issue? πŸ‘‰ **[Check the Troubleshooting & FAQ Guide](/docs/troubleshooting.md)**
289
+
290
+ ## Next Steps
291
+ * **[Quickstart Guide](quickstart.md)**: Run your first behavior on Reachy Mini
292
+ * **[Python SDK](python-sdk.md)**: Learn to move, see, speak, and hear.
293
+ * **[AI Integrations](integration.md)**: Connect LLMs, build Apps, and publish to Hugging Face.
294
+ * **[Core Concepts](core-concept.md)**: Architecture, coordinate systems, and safety limits.
295
+
reachy_mini/docs/SDK/integration.md ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Integrations & Apps
2
+
3
+ Reachy Mini is designed for AI Builders. Here is how to integrate LLMs and share your work.
4
+
5
+ ## Building an App
6
+ We provide a CLI tool to generate, check and publish a standard App structure (compatible with Hugging Face Spaces).
7
+
8
+ *See our blog post tutorial: [Make and Publish Reachy Mini Apps](https://huggingface.co/blog/pollen-robotics/make-and-publish-your-reachy-mini-apps)*
9
+
10
+ ## HTTP & WebSocket API
11
+ Building a dashboard or a non-Python controller? The Daemon exposes full control via REST.
12
+
13
+ * **Docs:** `http://localhost:8000/docs`
14
+ * **Get State:** `GET /api/state/full`
15
+ * **WebSocket:** `ws://localhost:8000/api/state/ws/full`
16
+
17
+ ## AI Experimentation Tips
18
+
19
+ * **Conversation Demo:** Check out our reference implementation combining VAD (Voice Activity Detection), LLMs, and TTS: [reachy_mini_conversation_demo](https://github.com/pollen-robotics/reachy_mini_conversation_demo).
reachy_mini/docs/SDK/media-architecture.md ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Media Architecture
2
+
3
+ Understanding the media architecture of Reachy Mini is essential for effectively utilizing its audio and visual capabilities. They operate differently based on the specific model of Reachy Mini you are using.
4
+
5
+ > **Note** : There is ongoing work to unify the media architecture across all Reachy Mini models. The information below reflects the current state as of the latest update.
6
+
7
+ ## Reachy Mini
8
+
9
+ Video and audio streams can be accessed locally in the case of an embedded app, or remotely (through WebRTC protocol) with the Python SDK from a remote machine. GStreamer is used to handle this aspect.
10
+
11
+ The streams are managed by the Daemon so that multiple applications can access them simultaneously. Technically, the video stream is shared between a Unix socket and a WebRTC server. The audio card is configured with `.asoundrc` to be accessible by multiple applications, under the names `reachymini_audio_src` and `reachymini_audio_sink`.
12
+
13
+ [![Reachy Mini Media Daemon](/docs/assets/reachymini_media_daemon.png)]()
14
+
15
+ [![Reachy Mini Media Client](/docs/assets/reachymini_media_client.png)]()
16
+
17
+ Thanks to webrtc, the audio and video streams can also be accessed directly from a web browser. For instance the [desktop application](https://github.com/pollen-robotics/reachy-mini-desktop-app) uses this feature.
18
+
19
+ [![Reachy Mini Media Client](/docs/assets/reachymini_media_web.png)]()
20
+
21
+ ## Reachy Mini Lite
22
+
23
+ In the case of Reachy Mini Lite, the Daemon doesn't manage the camera, microphone, and speaker. It only plays a sound during startup and exit or if moves are triggered from the dashboard.
24
+
25
+ > **Note:** Sounddevice locks the audio card when playing a sound. Keep this in mind when you use the sound from the SDK and trigger a move from the dashboard.
26
+
27
+ [![Reachy Mini Media Daemon](/docs/assets/reachyminilite_media_daemon.png)]()
28
+
29
+ Two backends are available. The default one relies on the combination of OpenCV for the camera and sounddevice for the audio card.
30
+
31
+ An experimental GStreamer backend is also available. While it is mostly tuned for Linux systems, it should work on other platforms. It requires more manual installation at the moment (see [gstreamer-installation](/docs/SDK/gstreamer-installation.md))
32
+
33
+ [![Reachy Mini Media Client](/docs/assets/reachyminilite_media_client.png)]()
34
+
35
+ ## Advanced Controls
36
+
37
+ Please refer to the dedicated pages to fine-tune camera and microphone parameters for [Reachy Mini](/docs/platforms/reachy_mini/media_advanced_controls.md) and [Reachy Mini Lite](/docs/platforms/reachy_mini_lite/media_advanced_controls.md).
reachy_mini/docs/SDK/python-sdk.md ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python SDK Reference
2
+
3
+ > **πŸ’‘ Reminder:** The SDK now auto-detects whether it should connect over USB/localhost or over the network, so `ReachyMini()` works out of the box. You can still force a mode with `ReachyMini(connection_mode="localhost_only" | "network")` if needed.
4
+
5
+ ## Movement
6
+
7
+ ### Basic Control (`goto_target`)
8
+ Smooth interpolation between points. You can control `head`, `antennas`, and `body_yaw`.
9
+
10
+ ```python
11
+ from reachy_mini import ReachyMini
12
+ from reachy_mini.utils import create_head_pose
13
+ import numpy as np
14
+
15
+ with ReachyMini() as mini:
16
+ # Move everything at once
17
+ mini.goto_target(
18
+ head=create_head_pose(z=10, mm=True), # Up 10mm
19
+ antennas=np.deg2rad([45, 45]), # Antennas out
20
+ body_yaw=np.deg2rad(30), # Turn body
21
+ duration=2.0, # Take 2 seconds
22
+ method="minjerk" # Smooth acceleration
23
+ )
24
+ ```
25
+
26
+ **Interpolation methods:** `linear`, `minjerk` (default), `ease`, `cartoon`.
27
+
28
+ ### Instant Control (`set_target`)
29
+ Bypasses interpolation. Use this for high-frequency control (e.g., following a joystick or generated trajectory).
30
+
31
+ ## Sensors & Media
32
+
33
+ The media architecture is described in detail in the [Media Architecture](/docs/SDK/media-architecture.md) section. Although accesssing audio and video from the SDK is similar across Reachy Mini versions, the underlying implementation differs.
34
+
35
+ ### Camera πŸ“·
36
+
37
+ The frames of the camera can be accessed as follows :
38
+
39
+ ```python
40
+ from reachy_mini import ReachyMini
41
+
42
+ with ReachyMini(media_backend="default") as mini:
43
+ frame = mini.media.get_frame()
44
+ ```
45
+ The returned frame is a numpy array with shape `(height, width, 3)` and data type `uint8`.
46
+
47
+ ### IMU 🧭
48
+
49
+ > ⚠️ The IMU is only available with the wireless version of Reachy Mini
50
+
51
+ Take a look at [this example](../../examples/imu_example.py)
52
+ ```python
53
+ with ReachyMini() as mini:
54
+ imu_data = mini.imu
55
+ accel_x, accel_y, accel_z = imu_data["accelerometer"] # (m/s^2)
56
+ gyro_x, gyro_y, gyro_z = imu_data["gyroscope"] # (rad/s)
57
+ quat_w, quat_x, quat_y, quat_z = imu_data["quaternion"] #Β (w, x, y, z)
58
+ temperature = imu_data["temperature"] # (Β°C)
59
+
60
+ ```
61
+
62
+
63
+ ### Audio πŸŽ™οΈ πŸ”Š
64
+
65
+ Audio inputs (microphones) and outputs (speaker) is handled as follows:
66
+
67
+ ```python
68
+ from reachy_mini import ReachyMini
69
+ from scipy.signal import resample
70
+ import time
71
+
72
+ with ReachyMini(media_backend="default") as mini:
73
+ # Initialization - After this point, both audio devices (input/output) will be seen as busy by other applications!
74
+ mini.media.start_recording()
75
+ mini.media.start_playing()
76
+
77
+ # Record
78
+ samples = mini.media.get_audio_sample()
79
+
80
+ # Resample (if needed)
81
+ samples = resample(samples, mini.media.get_output_audio_samplerate()*len(samples)/mini.media.get_input_audio_samplerate())
82
+
83
+ # Play
84
+ mini.media.push_audio_sample(samples)
85
+ time.sleep(len(samples) / mini.media.get_output_audio_samplerate())
86
+
87
+ # Get Direction of Arrival
88
+ # 0 radians is left, Ο€/2 radians is front/back, Ο€ radians is right.
89
+ doa, is_speech_detected = mini.media.get_DoA()
90
+ print(doa, is_speech_detected)
91
+
92
+ # Release audio devices (input/output)
93
+ mini.media.stop_recording()
94
+ mini.media.stop_playing()
95
+ ```
96
+
97
+ **Audio data format:**
98
+ - `get_audio_sample()` returns a numpy array with shape `(samples, 2)` and data type `float32`, sampled at 16kHz.
99
+ - `push_audio_sample()` expects a numpy array with shape `(samples, 1 or 2)` and data type `float32`, sampled at 16kHz.
100
+
101
+ In both cases, the channels and samplerate information can be reliably retrieved with `get_input/output_audio_samplerate()` and `get_input/output_channels()`.
102
+
103
+ > **⚠️ Note:** `push_audio_sample()` is non-blocking, meaning it returns immediately while audio plays in the background. If you need to wait for playback completion, calculate the duration based on sample length and sample rate.
104
+
105
+ ## Media Backend Options
106
+
107
+ Choose the appropriate media backend based on your Reachy Mini version and requirements:
108
+
109
+ **Reachy Mini Lite:**
110
+ - `media_backend="default"` - Uses OpenCV for camera and Sounddevice for audio (recommended for most users)
111
+ - `media_backend="gstreamer"` - Uses GStreamer for both camera and audio ([installation required](gstreamer-installation.md))
112
+
113
+ **Reachy Mini Wireless:**
114
+ - **Local execution** (running on the robot with SSH): Automatically uses `"gstreamer"`
115
+ - **Remote execution** (controlling from your computer): Automatically uses `"webrtc"`. With this backend, GStreamer runs locally on the Raspberry Pi, and streams both audio and video on the remote computer using WebRTC.
116
+
117
+ > **πŸ’‘ Tip:** For wireless setups, the backend is automatically selected based on whether you're running locally or remotely. No need to specify the `media_backend` value !
118
+
119
+ > **πŸ’‘ Tip:** For wireless setups, the WebRTC backend is requires a specific installation see [gstreamer-installation.md](gstreamer-installation.md). For now only the Linux platform is supported as a client. Other platforms (Windows, macOS) will be supported in [future releases](https://github.com/pollen-robotics/reachy_mini/issues/572).
120
+
121
+ ## Recording Moves
122
+ You can record a motion by moving the robot (compliant mode) or sending commands, and save it for later replay.
123
+
124
+ ```python
125
+ from reachy_mini import ReachyMini
126
+ with ReachyMini() as mini:
127
+ mini.start_recording()
128
+ # ... robot moves ...
129
+ recorded_data = mini.stop_recording()
130
+ ```
131
+
132
+ ## Next Steps
133
+ * **[Browse the Examples Folder](/examples)**
134
+ * **[AI Integrations](integration.md)**: Connect LLMs, build Apps, and publish to Hugging Face.
135
+ * **[Core Concepts](core-concept.md)**: Architecture, coordinate systems, and safety limits.
136
+
137
+ ## ❓ Troubleshooting
138
+
139
+ Encountering an issue? πŸ‘‰ **[Check the Troubleshooting & FAQ Guide](/docs/troubleshooting.md)**
reachy_mini/docs/SDK/quickstart.md ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Quickstart Guide
2
+
3
+ Follow this guide to get your Reachy Mini up and running, either on real hardware or in simulation.
4
+
5
+ ## 1. Prerequisites
6
+
7
+ Make sure you have installed Reachy Mini on your computer following our [installation guide](/docs/SDK/installation.md).
8
+
9
+ > **πŸ’‘ Important:** Ensure you have created and activated your Python virtual environment. **Remember to activate it every time you open a new terminal!**
10
+
11
+ <details>
12
+ <summary><strong>πŸ”§ Run SDK directly on Wireless Reachy Mini (Optional)</strong></summary>
13
+
14
+ If you want to run the SDK directly on your wireless Reachy Mini instead of remotely on your computer, you can connect via SSH into it.
15
+
16
+ ### Step 1: SSH Connection
17
+
18
+ Open a terminal and run:
19
+
20
+ ```bash
21
+ ssh pollen@reachy-mini
22
+ ```
23
+
24
+ When prompted, use these **default credentials**:
25
+ - Username: `pollen`
26
+ - Password: `root`
27
+
28
+ ### Step 2: Activate the Python virtual environment
29
+
30
+ After connecting, activate the virtual environment:
31
+
32
+ ```bash
33
+ source /venvs/apps_venv/bin/activate
34
+ ```
35
+
36
+ ### Step 3: Run scripts locally
37
+
38
+ When running scripts on Reachy Mini itself, use the standard `ReachyMini()` constructor. Auto mode will keep the connection on localhost unless you explicitly override it:
39
+
40
+ ```python
41
+ from reachy_mini import ReachyMini
42
+
43
+ with ReachyMini() as mini:
44
+ # Your code here
45
+ ```
46
+
47
+ > **πŸ’‘ Benefits of running locally:** Lower latency, no network dependency, and direct access to all robot resources.
48
+ >
49
+ > **⚠️ Drawbacks:** Lower CPU power, and no GUI available.
50
+
51
+
52
+ </details>
53
+
54
+ ## 2. Ensure the Robot Server is running (Daemon)
55
+
56
+ The **Daemon** is a background service that handles the low-level communication with motors and sensors. It must be running for your code to work.
57
+
58
+ * **On Reachy Mini (Wireless)**: The daemon is running when the robot is powered on. Ensure your computer and Reachy Mini are on the same network.
59
+ * **On Reachy Mini Lite (USB)** - You have two options :
60
+ - Start the [desktop application](/docs/platforms/reachy_mini_lite/get_started.md)
61
+ - Open a terminal and run :
62
+ ```bash
63
+ uv run reachy-mini-daemon
64
+ ```
65
+ * **For Simulation (No robot needed)** - You have two options :
66
+ - Start the [desktop application](/docs/platforms/reachy_mini_lite/get_started.md)
67
+ - Open a terminal and run
68
+ ```bash
69
+ uv run reachy-mini-daemon --sim
70
+ ```
71
+
72
+
73
+ βœ… **Verification:** Open [http://localhost:8000](http://localhost:8000) in your browser. If you see the Reachy Dashboard, you are ready!
74
+
75
+ ## 3. Your First Script
76
+
77
+ > **⚠️ Important:** Keep the daemon terminal open and running! The daemon must stay active for your robot to work.
78
+
79
+ ### Create your Python script
80
+
81
+ **Step 1:** Open a new terminal window
82
+
83
+ **Step 2:** Create a new file called `hello.py` and copy-paste the following code into it:
84
+
85
+ > Tip: The constructor now auto-detects Lite vs Wireless and switches between localhost and network automatically. Only override it for advanced cases, e.g. `ReachyMini(connection_mode="network")`.
86
+ ```python
87
+ from reachy_mini import ReachyMini
88
+
89
+ # Connect to the running daemon
90
+ with ReachyMini() as mini:
91
+ print("Connected to Reachy Mini! ")
92
+
93
+ # Wiggle antennas
94
+ print("Wiggling antennas...")
95
+ mini.goto_target(antennas=[0.5, -0.5], duration=0.5)
96
+ mini.goto_target(antennas=[-0.5, 0.5], duration=0.5)
97
+ mini.goto_target(antennas=[0, 0], duration=0.5)
98
+
99
+ print("Done!")
100
+ ```
101
+
102
+ **Step 3:** Save the file and run your script:
103
+
104
+ In your new terminal, run:
105
+ ```bash
106
+ python hello.py
107
+ ```
108
+
109
+ πŸŽ‰ If everything went well, your robot should now wiggle its antennas!
110
+
111
+ ## ❓ Troubleshooting
112
+ Encountering an issue? πŸ‘‰ **[Check the Troubleshooting & FAQ Guide](/docs/troubleshooting.md)**
113
+
114
+
115
+ ## Next Steps
116
+ * **[Python SDK](python-sdk.md)**: Learn to move, see, speak, and hear.
117
+ * **[Browse the Examples Folder](/examples)**
118
+ * **[AI Integrations](integration.md)**: Connect LLMs, build Apps, and publish to Hugging Face.
119
+ * **[Core Concepts](core-concept.md)**: Architecture, coordinate systems, and safety limits.
reachy_mini/docs/SDK/readme.md ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Build, play, and innovate with Reachy Mini πŸ€–
2
+
3
+
4
+ ## ⚑️ Quick Look
5
+ Control your robot in just **a few lines of code**:
6
+
7
+ ```python
8
+ from reachy_mini import ReachyMini
9
+ from reachy_mini.utils import create_head_pose
10
+
11
+ with ReachyMini() as mini:
12
+ # Look up and tilt head
13
+ mini.goto_target(
14
+ head=create_head_pose(z=10, roll=15, degrees=True, mm=True),
15
+ duration=1.0
16
+ )
17
+ ```
18
+
19
+ ## πŸš€ Get Started
20
+ * **[Installation](installation.md)**: 5 minutes to set up your computer
21
+ * **[Quickstart Guide](quickstart.md)**: Run your first behavior on Reachy Mini
22
+ * **[Python SDK](python-sdk.md)**: Learn to move, see, speak, and hear.
23
+ * **[AI Integrations](integration.md)**: Connect LLMs, build Apps, and publish to Hugging Face.
24
+ * **[Core Concepts](core-concept.md)**: Architecture, coordinate systems, and safety limits.
25
+
26
+ ## πŸ“‚ Code Examples
27
+
28
+ We provide a collection of ready-to-run scripts to help you understand how to use specific features of the robot.
29
+
30
+ [**πŸ‘‰ Browse the Examples Folder**](../../examples)
31
+
32
+ ## ❓ Troubleshooting
33
+
34
+ Encountering an issue? πŸ‘‰ **[Check the Troubleshooting & FAQ Guide](/docs/troubleshooting.md)**
35
+
36
+ ## πŸ’¬ Community
37
+ * [Discord](https://discord.gg/Y7FgMqHsub) - Get help and share projects.
38
+ * [Hugging Face Spaces](https://huggingface.co/spaces?q=reachy_mini) - Discover community apps.
39
+ * [GitHub Discussions](https://github.com/pollen-robotics/reachy_mini/discussions) - Feature requests and bugs.
40
+
reachy_mini/docs/assets/back_interface.png ADDED

Git LFS Details

  • SHA256: b724f90ec8f5313edffd827e10df5a71a2a17bd1979f0266bddd4c1fe1e113e3
  • Pointer size: 131 Bytes
  • Size of remote file: 591 kB
reachy_mini/docs/assets/battery_connector.png ADDED

Git LFS Details

  • SHA256: 3b4fbc2322fdc9a97111f102c32c47a9927ea4a50f52332d01c29c89d31f8a67
  • Pointer size: 131 Bytes
  • Size of remote file: 981 kB
reachy_mini/docs/assets/bluetooth_1.jpg ADDED

Git LFS Details

  • SHA256: 8bbd3a4ee481c692c6bdef841089833d400982921ba2f03183c7c6cc09907a21
  • Pointer size: 130 Bytes
  • Size of remote file: 77.7 kB
reachy_mini/docs/assets/bluetooth_2.jpg ADDED

Git LFS Details

  • SHA256: 1523ef7f6d42e83cb99c40f9b0893b5442b0b3833be3a068d2a517de8e631518
  • Pointer size: 131 Bytes
  • Size of remote file: 139 kB
reachy_mini/docs/assets/bluetooth_3.jpg ADDED

Git LFS Details

  • SHA256: 89dbbe05b464c5890b47221a26407dba5d1a3a616878a87c7df3a12ea548ebfb
  • Pointer size: 130 Bytes
  • Size of remote file: 95.8 kB
reachy_mini/docs/assets/bluetooth_4.jpg ADDED

Git LFS Details

  • SHA256: c7d019a5e9fae04c370776263a18bf81ea7cdaf6e1814995c8c16727739de29c
  • Pointer size: 131 Bytes
  • Size of remote file: 137 kB
reachy_mini/docs/assets/dashboard.png ADDED

Git LFS Details

  • SHA256: fbc9f4b65f99579120616350cf4edbd5f917df4c5b70a10c0560d3b9222d933e
  • Pointer size: 131 Bytes
  • Size of remote file: 241 kB
reachy_mini/docs/assets/degrees_of_freedom.png ADDED

Git LFS Details

  • SHA256: 6ba664fc5b90ed2be17f0a75360ab475840667c7c9fc981c21f168f51fe4bb9c
  • Pointer size: 131 Bytes
  • Size of remote file: 550 kB
reachy_mini/docs/assets/digital_assembly_guide_preview_mini.jpg ADDED

Git LFS Details

  • SHA256: c5ae804779ddbfad3b10d154cb08f2a259aeee32876489ae3b71c8fb1f47466d
  • Pointer size: 131 Bytes
  • Size of remote file: 179 kB
reachy_mini/docs/assets/digital_assembly_guide_preview_mini_lite.jpg ADDED

Git LFS Details

  • SHA256: ecc493c4190e3828d5637a6b34424da69862ab380cb96bd33a563a6dc8b0cff4
  • Pointer size: 131 Bytes
  • Size of remote file: 174 kB
reachy_mini/docs/assets/dof_table.png ADDED

Git LFS Details

  • SHA256: 627d689fc93e3343d7ac968d9976640efd3486ceca91b8e1824fc284a7b3ccc7
  • Pointer size: 131 Bytes
  • Size of remote file: 574 kB
reachy_mini/docs/assets/electronics.png ADDED

Git LFS Details

  • SHA256: 78ef5b07e8043296ca0a6f3fc362dd8ff3209e5eee691e624fb065924df99293
  • Pointer size: 132 Bytes
  • Size of remote file: 1.1 MB
reachy_mini/docs/assets/head_frame.png ADDED

Git LFS Details

  • SHA256: 10bfc85054bdcf06fc5fd82a858fde16a62c440e239979223f657f6355a03892
  • Pointer size: 131 Bytes
  • Size of remote file: 581 kB
reachy_mini/docs/assets/head_parts.jpg ADDED

Git LFS Details

  • SHA256: 67e018b64fedcc3d0e728194ad433f96535a8679cddab0bafdd0758c4d604ee2
  • Pointer size: 132 Bytes
  • Size of remote file: 2.34 MB
reachy_mini/docs/assets/marks_aligned.png ADDED

Git LFS Details

  • SHA256: ca784ac5b5bbab27a7d37638a87e9d16d5732ea303d8d0636c289585c7afb28b
  • Pointer size: 132 Bytes
  • Size of remote file: 2.05 MB
reachy_mini/docs/assets/mic_and_camera.png ADDED

Git LFS Details

  • SHA256: 326dc451e1284b66054489ca08718be2b84c7387d0b33ab25aea34240699bc4a
  • Pointer size: 131 Bytes
  • Size of remote file: 663 kB
reachy_mini/docs/assets/motors_detail.png ADDED

Git LFS Details

  • SHA256: 0f771c26c078b368cd4a11a71d9b46eccb42a099f979f3593f237961f4ff955b
  • Pointer size: 131 Bytes
  • Size of remote file: 515 kB
reachy_mini/docs/assets/motors_upward.png ADDED

Git LFS Details

  • SHA256: c35d9d82d64126919926dc9e52efab28208906885b7960d305324a10f0148a22
  • Pointer size: 132 Bytes
  • Size of remote file: 2.62 MB
reachy_mini/docs/assets/pcb_usb_and_switch.png ADDED

Git LFS Details

  • SHA256: 45a0b9f3235a615b2113fcde2dac12b2b72f3d66aa026087996947d4931f3cdb
  • Pointer size: 132 Bytes
  • Size of remote file: 1.92 MB
reachy_mini/docs/assets/qrcode-ap.png ADDED

Git LFS Details

  • SHA256: 8de9ece109bb4befadeabc4991f42c56cb367555b06074e0e688f96070e07fec
  • Pointer size: 129 Bytes
  • Size of remote file: 3.82 kB
reachy_mini/docs/assets/reachy_mini_components.png ADDED

Git LFS Details

  • SHA256: e4f18b75047ba917392c5ea06d980bff923a800240438d3f4f0c3234ef0d55b0
  • Pointer size: 131 Bytes
  • Size of remote file: 650 kB
reachy_mini/docs/assets/reachy_mini_dimensions.png ADDED

Git LFS Details

  • SHA256: 082aaa2b283d8570e7938d7132ae43931fd955c9ed3c3802c856a04e54b1f97c
  • Pointer size: 131 Bytes
  • Size of remote file: 495 kB
reachy_mini/docs/assets/reachy_mini_hello.gif ADDED

Git LFS Details

  • SHA256: eeaa08cd92c11329cec8e72937eaecf4ad41ca8adc56572272cdfb8d2d65020a
  • Pointer size: 132 Bytes
  • Size of remote file: 7.13 MB
reachy_mini/docs/assets/reachymini_media_client.png ADDED

Git LFS Details

  • SHA256: aeda587371457deee8e50802c59f1cdab2600a3422824cbb33a7b29c47b30b3f
  • Pointer size: 131 Bytes
  • Size of remote file: 129 kB
reachy_mini/docs/assets/reachymini_media_daemon.png ADDED

Git LFS Details

  • SHA256: 591d626d000b3431428585fa92fae4a09ec88f6c7367d0e5b976d91f61e6e1e4
  • Pointer size: 131 Bytes
  • Size of remote file: 123 kB