diff --git a/docs/.obsidian/app.json b/docs/.obsidian/app.json deleted file mode 100644 index 9e26dfe..0000000 --- a/docs/.obsidian/app.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/docs/.obsidian/appearance.json b/docs/.obsidian/appearance.json deleted file mode 100644 index c8c365d..0000000 --- a/docs/.obsidian/appearance.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "accentColor": "" -} \ No newline at end of file diff --git a/docs/.obsidian/core-plugins-migration.json b/docs/.obsidian/core-plugins-migration.json deleted file mode 100644 index 436f43c..0000000 --- a/docs/.obsidian/core-plugins-migration.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "file-explorer": true, - "global-search": true, - "switcher": true, - "graph": true, - "backlink": true, - "canvas": true, - "outgoing-link": true, - "tag-pane": true, - "properties": false, - "page-preview": true, - "daily-notes": true, - "templates": true, - "note-composer": true, - "command-palette": true, - "slash-command": false, - "editor-status": true, - "bookmarks": true, - "markdown-importer": false, - "zk-prefixer": false, - "random-note": false, - "outline": true, - "word-count": true, - "slides": false, - "audio-recorder": false, - "workspaces": false, - "file-recovery": true, - "publish": false, - "sync": false -} \ No newline at end of file diff --git a/docs/.obsidian/core-plugins.json b/docs/.obsidian/core-plugins.json deleted file mode 100644 index 9405bfd..0000000 --- a/docs/.obsidian/core-plugins.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - "file-explorer", - "global-search", - "switcher", - "graph", - "backlink", - "canvas", - "outgoing-link", - "tag-pane", - "page-preview", - "daily-notes", - "templates", - "note-composer", - "command-palette", - "editor-status", - "bookmarks", - "outline", - "word-count", - "file-recovery" -] \ No newline at end of file diff --git a/docs/.obsidian/graph.json b/docs/.obsidian/graph.json deleted file mode 100644 index 42a46ec..0000000 --- a/docs/.obsidian/graph.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "collapse-filter": true, - "search": "", - "showTags": false, - "showAttachments": false, - "hideUnresolved": false, - "showOrphans": true, - "collapse-color-groups": true, - "colorGroups": [], - "collapse-display": true, - "showArrow": false, - "textFadeMultiplier": 0, - "nodeSizeMultiplier": 1, - "lineSizeMultiplier": 1, - "collapse-forces": true, - "centerStrength": 0.518713248970312, - "repelStrength": 10, - "linkStrength": 1, - "linkDistance": 250, - "scale": 1, - "close": true -} \ No newline at end of file diff --git a/docs/.obsidian/workspace.json b/docs/.obsidian/workspace.json deleted file mode 100644 index 89a1b1b..0000000 --- a/docs/.obsidian/workspace.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "main": { - "id": "8b44d57b1a695470", - "type": "split", - "children": [ - { - "id": "0f6870d21abbef0f", - "type": "tabs", - "children": [ - { - "id": "e338073e64d4becc", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "readme.md", - "mode": "source", - "source": false - } - } - } - ] - } - ], - "direction": "vertical" - }, - "left": { - "id": "5c08c524be7411d8", - "type": "split", - "children": [ - { - "id": "b39b2ecb9b6de94f", - "type": "tabs", - "children": [ - { - "id": "9fb90e3ddd4ac294", - "type": "leaf", - "state": { - "type": "file-explorer", - "state": { - "sortOrder": "alphabetical" - } - } - }, - { - "id": "d6029e2cd4a8ff3b", - "type": "leaf", - "state": { - "type": "search", - "state": { - "query": "", - "matchingCase": false, - "explainSearch": false, - "collapseAll": false, - "extraContext": false, - "sortOrder": "alphabetical" - } - } - }, - { - "id": "6d5c800258715bb2", - "type": "leaf", - "state": { - "type": "bookmarks", - "state": {} - } - } - ] - } - ], - "direction": "horizontal", - "width": 300 - }, - "right": { - "id": "8c119a814abdc419", - "type": "split", - "children": [ - { - "id": "217e54d2fca6f865", - "type": "tabs", - "children": [ - { - "id": "7b61ee2cb94d62bd", - "type": "leaf", - "state": { - "type": "backlink", - "state": { - "file": "readme.md", - "collapseAll": false, - "extraContext": false, - "sortOrder": "alphabetical", - "showSearch": false, - "searchQuery": "", - "backlinkCollapsed": false, - "unlinkedCollapsed": true - } - } - }, - { - "id": "7270cec1f614c957", - "type": "leaf", - "state": { - "type": "outgoing-link", - "state": { - "file": "readme.md", - "linksCollapsed": false, - "unlinkedCollapsed": true - } - } - }, - { - "id": "826b7bf946dc9374", - "type": "leaf", - "state": { - "type": "tag", - "state": { - "sortOrder": "frequency", - "useHierarchy": true - } - } - }, - { - "id": "d1e92da23bbd283b", - "type": "leaf", - "state": { - "type": "outline", - "state": { - "file": "readme.md" - } - } - } - ] - } - ], - "direction": "horizontal", - "width": 300, - "collapsed": true - }, - "left-ribbon": { - "hiddenItems": { - "switcher:Open quick switcher": false, - "graph:Open graph view": false, - "canvas:Create new canvas": false, - "daily-notes:Open today's daily note": false, - "templates:Insert template": false, - "command-palette:Open command palette": false - } - }, - "active": "e338073e64d4becc", - "lastOpenFiles": [ - "spot.md", - "Electronic connections.canvas", - "media/diagram.png", - "media/image.png", - "Getting started.md", - "Getting_started.md", - "Getting.md", - "readme.md", - "Spot.md", - "api.md", - "Simulation/Simulation.md", - "Simulation/Pasted image 20240319103157.png", - "Simulation", - "media/PIO-upload.png", - "media", - "Untitled.canvas", - "Architecture & Design principles.md" - ] -} \ No newline at end of file diff --git a/docs/1_components.md b/docs/1_components.md new file mode 100644 index 0000000..6ebff26 --- /dev/null +++ b/docs/1_components.md @@ -0,0 +1,40 @@ +# Components + +Spot is comprised of a 3D printed body, some hardware and list of electronic components. + +## Body + +Spot is 3D printed and is a combination of different Spot Micro designs, with some minor modification on top. +The original design is developed by KDY0523. + +* [robjk reinforced shoulder remix](https://www.thingiverse.com/thing:4937631) +* [Kooba SpotMicroESP32 remix](https://www.thingiverse.com/thing:4559827) +* [KDY0532 original design](https://www.thingiverse.com/thing:3445283) + +The 3D prints is assembled with some additional component: + +* 84x M2x8 screws + M2 nuts +* 92x M3x8 screws + M3 nuts +* 64x M3x20 screws + M3 nuts +* 12x 625ZZ ball bearings + +## Electronics + +These are the electronics i used for mine and can easily be switched up to suit your Spot's needs. + +* ESP32 cam - Brain +* OV2640 160° - Camera +* PCA9685 - Servo board +* 12x 20kg(or higher) servo motors +* MPU6050 - Inertial measurement unit +* GY-271 - Magnetometer +* SZBK07 - 20A DC-DC Buck Converter +* LM2596 or XL4015 - DC-DC Stepdown Module +* 2x HC-SR04 - Ultrasonic Distance Sensor +* 0.96" SD1306 - OLED diplay +* ACS712 - Current sensor +* ADS1115 - 16 bit analog to digital converter +* Power button w/ led +* 4x 18650 Li-ion battery in 2P2S configuration +* Couple of resistors (10K, 47.7k, 33K) +* 4x Servo extension cables diff --git a/docs/2_assembly.md b/docs/2_assembly.md new file mode 100644 index 0000000..c58216a --- /dev/null +++ b/docs/2_assembly.md @@ -0,0 +1,10 @@ +# Assembly + +There exist a number of great resources for the assembly of the spot micro. For this reason I refer to these, as the steps are the same for this version: + +- [Michael Kubina SpotMicroESP32 assembly](https://github.com/michaelkubina/SpotMicroESP32/tree/master/assembly) +- [Spot Micro AI assembly](https://spotmicroai.readthedocs.io/en/latest/assembly/) + +## Circuit diagram + +![Electronics diagram](media/circuit.png "Title") diff --git a/docs/getting_started.md b/docs/3_software.md similarity index 64% rename from docs/getting_started.md rename to docs/3_software.md index e26201e..5990852 100644 --- a/docs/getting_started.md +++ b/docs/3_software.md @@ -1,4 +1,6 @@ -# Getting started +# Software + +The robots firmware is built using platform io using the arduino framework over ESP-IDF. ## Prerequisites @@ -13,13 +15,13 @@ Install the following software to ensure all functionalities: - A package manager of your choice (npm, pnpm, yarn) - [Python](https://www.python.org/downloads/) - Used for firmware build scripts -### Project Structure + ## Setting up PlatformIO @@ -40,43 +42,11 @@ board_build.mcu = esp32c3 For additional boards, refer to the [official board list](https://docs.platformio.org/en/latest/boards/index.html#espressif-32). +### Factory settings + +Update the `esp32/factory_setting.ini` with new wifi settings, app name and other device information. + ### Build & Upload Process -Update the `platformio.ini` file for your board, then navigate to the PlatformIO tab, select your environment, click `Upload Filesystem Image` and after uploading finish, click `Upload and Monitor`. The filesystem image only has to be uploaded the first time and will override config files on the microcontroller. +Update the `platformio.ini` file for your board, then navigate to the PlatformIO tab, select your environment, click `Upload Filesystem Image` and after uploading finish, click `Upload and Monitor`. The filesystem image only has to be uploaded the first time and will override config files on the microcontroller. When uploading new firmware the app is evaluated and if necessary will be rebuild. - -## Setting up SvelteKit - -### Proxy Configuration for Development - -Configure the proxy settings in the `vite.config.ts` file to direct API calls to your ESP32 device. By default it used the factory MDNS address, but can be changed to the ip if preferred. - -```ts -server: { - proxy: { - '/api': { - target: 'http://spot-micro.local', // Here - changeOrigin: true, - ws: true - }, - '/ws': { - target: 'ws://spot-micro.local', // Here - changeOrigin: true, - ws: true - } - } -}, -``` - -Changes require a restart of the development server. - -### Start the Development Server - -Use the following commands to launch the development server with Vite, enabling instant updates: - -```sh -cd app -pnpm run dev -``` - -Access the frontend via the provided browser link. diff --git a/docs/4_configuring.md b/docs/4_configuring.md new file mode 100644 index 0000000..6db031e --- /dev/null +++ b/docs/4_configuring.md @@ -0,0 +1,13 @@ +# Configuration + +> *Prerequisites*: The robot is assembled and has the newest firmware flashed + +## Connecting to the network + +If the wifi settings were configured using `esp32/factory_settings.ini` the robot will try to connect to the network. + +If it fails to connect, it will host a AP with a captive portal where it's possible to configure wifi settings. + +When the robot connect successfully the ip address will be printed to the serial monitor + + diff --git a/docs/5_running.md b/docs/5_running.md new file mode 100644 index 0000000..0b114c4 --- /dev/null +++ b/docs/5_running.md @@ -0,0 +1,10 @@ +# Running the spot + +> *Prerequsition*: You have successfully build, flashed and configured your robot. + +Navigate to `/controller` + +![Controller](media/controller.png) + + diff --git a/docs/6_developing.md b/docs/6_developing.md new file mode 100644 index 0000000..15be2b0 --- /dev/null +++ b/docs/6_developing.md @@ -0,0 +1,39 @@ +# Developing + +> *Prerequsition*: You have successfully build, flashed and configured your robot. + +## Setting up SvelteKit + +### Proxy Configuration for Development + +Configure the proxy settings in the `vite.config.ts` file to direct API calls to your ESP32 device. By default it used the factory MDNS address, but can be changed to the ip if preferred. + +```ts +server: { + proxy: { + '/api': { + target: 'http://spot-micro.local', // Here + changeOrigin: true, + ws: true + }, + '/ws': { + target: 'ws://spot-micro.local', // Here + changeOrigin: true, + ws: true + } + } +}, +``` + +Changes require a restart of the development server. + +### Start the Development Server + +Use the following commands to launch the development server with Vite, enabling instant updates: + +```sh +cd app +pnpm run dev +``` + +Access the frontend via the provided browser link. diff --git a/docs/7_contributing.md b/docs/7_contributing.md new file mode 100644 index 0000000..98a7098 --- /dev/null +++ b/docs/7_contributing.md @@ -0,0 +1,38 @@ +# Contributing + +> *Prerequsition*: You have made it through the documentation and are wondering what you can do to make the robot dogs bark even louder. + +## Getting Started + +1. Fork the Repository + - Click the Fork button at the top right corner to create a copy of this repository on your account. + +1. Clone Your Fork + - On your GitHub fork, click the “Clone or download” button, copy the URL, and run git clone [URL] in your terminal. + +1. Create a Branch + - Navigate into the repository directory on your computer. + - Create a new branch using git checkout -b your-branch-name. + +## Making Changes + +1. Make Your Changes + - Open the project in your editor/IDE and make your changes or additions. + +1. Commit Your Changes + - After making changes, stage them using git add . + - Commit the changes with a meaningful message using git commit -m "Brief description of changes". + +## Submitting Contributions + +1. Push to Your Fork + - Push your branch changes to your fork with git push origin your-branch-name. +1. Create a Pull Request + - Go to the original repository on GitHub. + - You’ll see a "Compare & pull request" button. Click it, review your changes, then submit your pull request with a clear description of the enhancements or fixes. + +## After Submission + +- Wait for the project maintainers to review your pull request. They might suggest some changes. Keep an eye on your GitHub notifications for feedback or merge information. + +Thank you for contributing! diff --git a/docs/Spot.md b/docs/Spot.md index ce6f716..67ef6b5 100644 --- a/docs/Spot.md +++ b/docs/Spot.md @@ -1,22 +1,39 @@ # ABOUT SPOT MICRO -## Cameras + ## Robot specifications ### Dimensions +| Specification | Value | +| --- | --- | +| Length | 43 cm | +| Width | 24 cm | +| Height (standing) | 22 cm | +| Height | 10 cm | +| Weight | 2 kg | +| Degrees of freedom | 12 | + ### Environment | Specification | Value | | --- | --- | | Ingress protection | *IP42 | | Operating temperature | 0C to 30C | +| Max step height | 30 mm | ### Power +| Specification | Value | +| --- | --- | +| Battery capacity | 37 Wh | +| Max battery voltage | 8.4V | +| Typical runtime | 30 min | + ### Sensing | Specification | Value | @@ -29,3 +46,4 @@ | Specification | Value | | --- | --- | | Wifi | 802.11 | +| Bluetooth | V4.2 BR/EDR, LE | diff --git a/docs/media/circuit.png b/docs/media/circuit.png new file mode 100644 index 0000000..f9c48b0 Binary files /dev/null and b/docs/media/circuit.png differ diff --git a/docs/media/controller.png b/docs/media/controller.png new file mode 100644 index 0000000..25d5d67 Binary files /dev/null and b/docs/media/controller.png differ diff --git a/docs/readme.md b/docs/readme.md index 2835fd7..7f79d85 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -1,10 +1,21 @@ # Welcome to the docs -The docs a structured as obsidian notes to allow for better writing and more expressive content. +Here you will find the current documentation for the ESP32 based spot micro project, Leika. -## Table of content +## Guide -- [Robot build](robot_build.md) -- [Getting started](getting_started.md) +These are the steps it takes to get a fresh new robot up and barking. + +1. [Components](1_components.md) +1. [Assembly](2_assembly.md) +1. [Software](3_software.md) +1. [Turning on for the first time](4_configuring.md) +1. [Running](5_running.md) +1. [Developing](6_developing.md) +1. [Contributing](7_contributing.md) + +## About Spot + + - [API](api.md) - [Robots capabilities](spot.md) diff --git a/docs/robot_build.md b/docs/robot_build.md deleted file mode 100644 index 52a1c80..0000000 --- a/docs/robot_build.md +++ /dev/null @@ -1,22 +0,0 @@ -# Robot build - -## Electronics - -- ESP32 cam - Brain -- OV2640 160° - Camera -- PCA9685 - Servo board -- 12x 20kg(or higher) servo motors -- MPU6050 - Inertial measurement unit -- GY-271 - Magnetometer -- SZBK07 - 20A DC-DC Buck Converter -- LM2596 or XL4015 - DC-DC Stepdown Module -- 2x HC-SR04 - Ultrasonic Distance Sensor -- 0.96" SD1306 - OLED diplay -- ACS712 - Current sensor -- ADS1115 - 16 bit analog to digital converter -- Power button w/ led -- 4x 18650 Li-ion battery in 2P2S configuration -- Couple of resistors (10K, 47.7k, 33K) -- 4x Servo extension cables - -![Electronics diagram](media/diagram.png "Title")