diff --git a/assets/illustration/meshbit_illustration/meshbit_illustration.3dm b/assets/illustration/meshbit_illustration/meshbit_illustration.3dm new file mode 100644 index 00000000..10ed1c69 Binary files /dev/null and b/assets/illustration/meshbit_illustration/meshbit_illustration.3dm differ diff --git a/assets/illustration/meshbit_illustration/meshbit_illustration.3dm.rhl b/assets/illustration/meshbit_illustration/meshbit_illustration.3dm.rhl new file mode 100644 index 00000000..ad4022d7 --- /dev/null +++ b/assets/illustration/meshbit_illustration/meshbit_illustration.3dm.rhl @@ -0,0 +1,3 @@ +andre +LAPTOP-RR341PAC +Saturday, December 21, 2024 \ No newline at end of file diff --git a/docs/assets/images/getting_started/hardware_mounts/mount_ex_1.png b/docs/assets/images/getting_started/hardware_mounts/mount_ex_1.png new file mode 100644 index 00000000..d6ae5125 Binary files /dev/null and b/docs/assets/images/getting_started/hardware_mounts/mount_ex_1.png differ diff --git a/docs/assets/images/getting_started/hardware_mounts/mount_ex_10.png b/docs/assets/images/getting_started/hardware_mounts/mount_ex_10.png new file mode 100644 index 00000000..f1706d04 Binary files /dev/null and b/docs/assets/images/getting_started/hardware_mounts/mount_ex_10.png differ diff --git a/docs/assets/images/getting_started/hardware_mounts/mount_ex_2.png b/docs/assets/images/getting_started/hardware_mounts/mount_ex_2.png new file mode 100644 index 00000000..181a26ca Binary files /dev/null and b/docs/assets/images/getting_started/hardware_mounts/mount_ex_2.png differ diff --git a/docs/assets/images/getting_started/hardware_mounts/mount_ex_3.png b/docs/assets/images/getting_started/hardware_mounts/mount_ex_3.png new file mode 100644 index 00000000..10b57c7a Binary files /dev/null and b/docs/assets/images/getting_started/hardware_mounts/mount_ex_3.png differ diff --git a/docs/assets/images/getting_started/hardware_mounts/mount_ex_4.png b/docs/assets/images/getting_started/hardware_mounts/mount_ex_4.png new file mode 100644 index 00000000..fd79bf4e Binary files /dev/null and b/docs/assets/images/getting_started/hardware_mounts/mount_ex_4.png differ diff --git a/docs/assets/images/getting_started/hardware_mounts/mount_ex_5.png b/docs/assets/images/getting_started/hardware_mounts/mount_ex_5.png new file mode 100644 index 00000000..65694239 Binary files /dev/null and b/docs/assets/images/getting_started/hardware_mounts/mount_ex_5.png differ diff --git a/docs/assets/images/getting_started/hardware_mounts/mount_ex_6.png b/docs/assets/images/getting_started/hardware_mounts/mount_ex_6.png new file mode 100644 index 00000000..747634df Binary files /dev/null and b/docs/assets/images/getting_started/hardware_mounts/mount_ex_6.png differ diff --git a/docs/assets/images/getting_started/hardware_mounts/mount_ex_7.png b/docs/assets/images/getting_started/hardware_mounts/mount_ex_7.png new file mode 100644 index 00000000..8fd2cf8f Binary files /dev/null and b/docs/assets/images/getting_started/hardware_mounts/mount_ex_7.png differ diff --git a/docs/assets/images/getting_started/hardware_mounts/mount_ex_8.png b/docs/assets/images/getting_started/hardware_mounts/mount_ex_8.png new file mode 100644 index 00000000..5318f5e3 Binary files /dev/null and b/docs/assets/images/getting_started/hardware_mounts/mount_ex_8.png differ diff --git a/docs/assets/images/getting_started/hardware_mounts/mount_ex_9.png b/docs/assets/images/getting_started/hardware_mounts/mount_ex_9.png new file mode 100644 index 00000000..c7020290 Binary files /dev/null and b/docs/assets/images/getting_started/hardware_mounts/mount_ex_9.png differ diff --git a/docs/developer-guide/AR-engine/AR-rendering.md b/docs/developer-guide/AR-engine/AR-rendering.md index 14a098b8..44213e3a 100644 --- a/docs/developer-guide/AR-engine/AR-rendering.md +++ b/docs/developer-guide/AR-engine/AR-rendering.md @@ -1,3 +1,10 @@ +--- +tags: + - AREngine + - render +--- + + # AR rendering ## Main Rendering Pipeline diff --git a/docs/developer-guide/AR-engine/feedback-system.md b/docs/developer-guide/AR-engine/feedback-system.md index aef1a360..c721e888 100644 --- a/docs/developer-guide/AR-engine/feedback-system.md +++ b/docs/developer-guide/AR-engine/feedback-system.md @@ -1,3 +1,9 @@ +--- +tags: + - AREngine + - feedback-system +--- + # Feedback system ![Dataflow for the functioning of the Augmented Carpentry's feedback system. ><](../../assets/images/AR_engine/fig_feedback-sys.svg){align=center width=100% style='fill-color: #000000; filter: invert(100%);'} @@ -31,7 +37,29 @@ Each feedback category inherits from an interface class ([`AIAC/Feedback/FabFeed ``` cpp title="src/AIAC/Feedback/FabFeedback.h" linenums="1" hl_lines="5-6 16-18" ---8<-- "src/AIAC/Feedback/FabFeedback.h" +#pragma once + +#include "AIAC/Config.h" + +#define AC_FF_COMP AIAC_APP.GetLayer()->GetACInfoModel().GetTimberInfo().GetCurrentComponent() +#define AC_FF_TOOL AIAC_APP.GetLayer()->ACInfoToolheadManager->GetActiveToolhead() + +namespace AIAC { + class FabFeedback { + public: + FabFeedback() { + this->m_ScaleFactor = AIAC::Config::Get(AIAC::Config::SEC_AIAC, AIAC::Config::SCALE_FACTOR, 1.0f); + }; + ~FabFeedback() = default; + + virtual void Update() {}; + virtual void Activate() {}; + virtual void Deactivate() {}; + + protected: + float m_ScaleFactor = 0.0f; + }; +} ``` !!! Tip diff --git a/docs/developer-guide/AR-engine/geometry-framework.md b/docs/developer-guide/AR-engine/geometry-framework.md index 5061d9f9..92b5b8a0 100644 --- a/docs/developer-guide/AR-engine/geometry-framework.md +++ b/docs/developer-guide/AR-engine/geometry-framework.md @@ -1,3 +1,9 @@ +--- +tags: + - AREngine + - go +--- + # Geometry framework The geometry framework provides a unified infrastructure for handling all 3D objects in the scene, including CAD models, scanned models, and fabrication instructions. This framework enables easy interaction between application layers and 3D objects while being tightly integrated with the rendering system, which implicitly manages OpenGL resources, simplifying the workload for application layers. diff --git a/docs/developer-guide/AR-engine/layer-stack.md b/docs/developer-guide/AR-engine/layer-stack.md index 39805ef3..0af67a74 100644 --- a/docs/developer-guide/AR-engine/layer-stack.md +++ b/docs/developer-guide/AR-engine/layer-stack.md @@ -1,7 +1,7 @@ --- tags: + - AREngine - layer-stack - - backend --- # Layer stack diff --git a/docs/developer-guide/toolheads.md b/docs/developer-guide/toolheads.md new file mode 100644 index 00000000..be54d831 --- /dev/null +++ b/docs/developer-guide/toolheads.md @@ -0,0 +1,8 @@ +--- +tags: + - toolheads +--- + +# Toolheads + +Here we give more information about how toolheads are itnegrated in the AC system. diff --git a/docs/hardware/woodworking-tools.md b/docs/hardware/woodworking-tools.md index 347b1a8c..0ee91628 100644 --- a/docs/hardware/woodworking-tools.md +++ b/docs/hardware/woodworking-tools.md @@ -1,7 +1,5 @@ -# Tools - - +# Woodworking tools /// html | div[style='float: left; width: 52%;'] @@ -11,8 +9,6 @@ /// html | div[style='float: right;width: 45%;'] - - AC is designed to seamlessly integrate with virtually any woodworking tool, new or old, provided you can: - [x] securely mount the AC camera and display unit onto the tool itself @@ -30,25 +26,49 @@ If you want to add your own 3d-printable mount or tool head model and share it w /// +## Available Toolheads + + -## Tool mounts +The following is a list of the available toolheads that are already integrated into the AC system. You will need to use or acquire the corresponding physical toolhead to use the AC system. - +The Zenodo repository containing the dataset is [here](https://zenodo.org/records/12578820). -The camera and the display needs to be mounted on the tool itself and follow its movement. To do so we share here the system we designed for our current prototype. You can download + {{ run_python_script('docs/scripts/get_zenodo_toolheads.py') }} +!!! tip "Want to add a new toolhead?" + If you want to add your own toolhead to the AC system, follow the instructions in the section [contributing](../contributing/index.md). + +!!! note "Toolhead integration" + If you want to know more about the details of the integration and how toolhead are managed in the AC system, you can read the [developer guide](../developer-guide/toolheads.md). + + +## Available 3D mounts + +
+![](../assets/images/getting_started/hardware_mounts/mount_ex_1.png){width="200"} ![](../assets/images/getting_started/hardware_mounts/mount_ex_2.png){width="200"} ![](../assets/images/getting_started/hardware_mounts/mount_ex_3.png){width="200"} ![](../assets/images/getting_started/hardware_mounts/mount_ex_4.png){width="200"} ![](../assets/images/getting_started/hardware_mounts/mount_ex_9.png){width="200"} ![](../assets/images/getting_started/hardware_mounts/mount_ex_5.png){width="200"} ![](../assets/images/getting_started/hardware_mounts/mount_ex_6.png){width="200"} ![](../assets/images/getting_started/hardware_mounts/mount_ex_7.png){width="200"} ![](../assets/images/getting_started/hardware_mounts/mount_ex_8.png){width="200"} ![](../assets/images/getting_started/hardware_mounts/mount_ex_10.png){width="200"} +
+ +Each mount is designed with a flexible integration mechanism, allowing for the attachment of various clipping solutions. Our reference implementation utilizes magnetic clips and a loc-line arm to ensure secure, tool-safe mounting of the sensors and interfaces and easy removal. However, the design files allow users to incorporate their preferred fastening methods—ranging from simple clips to more complex spring-loaded solutions—enabling adaptation to a broad range of tool geometries. + +- Identify the corresponding mount file that matches your tool brand and model. +- Download and 3D print the STL file(s). +- Integrate your desired clipping mechanism. +- Attach the completed mount to your woodworking tool. + +The Zenodo repository containing the dataset is [here](https://zenodo.org/records/14531724). -## Tool heads dataset +For convinience, here is a list of the available mounts regrouped by brands: - - +{{ run_python_script('docs/scripts/get_zenodo_mounts.py') }} +!!! tip "Want to add a new mount?" + If you want to add your own toolhead to the AC system, follow the instructions in the section [contributing](../contributing/index.md). -AC is designed to be *machine independent*, meaning that it is only dependent on the toolheads (e.g.: drill bits, circular saw blades and chainsaw boards). This means that you can attach any toolhead to the machine and the system will adapt to it if the toolhead is in the list of those integrated in AC. + -You can find a list of the available toolheads already available here [here](https://zenodo.org/records/12578820). If you want to add your own and share it with the community, follow the ## Components list diff --git a/docs/scripts/get_zenodo_mounts.py b/docs/scripts/get_zenodo_mounts.py new file mode 100644 index 00000000..0e71a269 --- /dev/null +++ b/docs/scripts/get_zenodo_mounts.py @@ -0,0 +1,81 @@ +import requests +import re + +def list_zenodo_entries(zenodo_record_id): + url = f'https://zenodo.org/api/records/{zenodo_record_id}' + response = requests.get(url) + if response.status_code == 200: + data = response.json() + + mount_kits = {} + + for file in data.get('files', []): + filename = file['key'] + filename = filename.split('.')[0] + download_link = file['links']['self'] + file_size = file['size'] / (1024 * 1024) + + filename_lower = filename.lower() + name_pool = re.split('[_]', filename_lower) + + mount_type = name_pool[0] + mount_brand = name_pool[1] + mount_model = name_pool[2] + try: + mount_part = name_pool[3] + except: + mount_part = "a" + + for key in name_pool: + if 'drill' in name_pool: + mount_type = ":material-screw-machine-flat-top:`drill`" + elif 'chainsaw' in name_pool: + mount_type = ":material-hand-saw:`chain saw`" + elif 'circularsaw' in name_pool: + mount_type = ":material-saw-blade:`circular saw`" + elif 'sabersaw' in name_pool: + mount_type = ":material-hand-saw:`saber saw`" + elif 'mitersaw' in name_pool: + mount_type = ":material-circular-saw:`miter saw`" + + # Group parts by model name + if mount_model not in mount_kits: + mount_kits[mount_model] = [] + mount_kits[mount_model].append({ + 'filename': filename, + 'type': mount_type, + 'brand': mount_brand, + 'part': mount_part, + 'size': file_size, + 'download_link': download_link + }) + else: + print('!!! bug \n\tError fetching data from Zenodo') + + for mount_model, parts in mount_kits.items(): + mount_kits[mount_model] = sorted(parts, key=lambda x: x['part']) + + brands = [] + for mount_model, parts in mount_kits.items(): + for part in parts: + if part['brand'] not in brands: + brands.append(part['brand']) + brands.sort() + + print('| Model name | Mount parts | Brand | type | size (MB) | Download |') + print('|------------|-------------|-------|------|-----------|----------|') + for brand in brands: + for mount_model, parts in mount_kits.items(): + for part in parts: + if part['brand'] == brand: + filename = part['filename'] + mount_type = part['type'] + mount_brand = part['brand'] + mount_part = part['part'] + file_size = part['size'] + download_link = part['download_link'] + print(f'| {mount_model} | {mount_part} | {mount_brand} | {mount_type} | {file_size:.2f} | [:octicons-download-24:]({download_link}) |') + +if __name__ == '__main__': + zenodo_record_id = '14531724' + list_zenodo_entries(zenodo_record_id) \ No newline at end of file diff --git a/docs/scripts/get_zenodo_toolheads.py b/docs/scripts/get_zenodo_toolheads.py index c218787a..488bfe9d 100644 --- a/docs/scripts/get_zenodo_toolheads.py +++ b/docs/scripts/get_zenodo_toolheads.py @@ -7,7 +7,7 @@ def list_zenodo_entries(zenodo_record_id): if response.status_code == 200: data = response.json() - print('| Filename | type | size (MB) | Download |') + print('| Toolhead | type | size (MB) | Download |') print('|----------|------|-----------|----------|') for file in data.get('files', []): @@ -17,7 +17,7 @@ def list_zenodo_entries(zenodo_record_id): file_size = file['size'] / (1024 * 1024) # Convert size to MB # Detect type of object - obj_type = "test" + obj_type = "none" type_pool = re.split('[-_]', filename) type_drill_keys = ['drill', 'mesh', 'bit'] type_saw_keys = ['saw', 'blade'] @@ -27,21 +27,21 @@ def list_zenodo_entries(zenodo_record_id): for key in type_drill_keys: if key in type_pool: - obj_type = 'drill' + obj_type = ":material-screw-machine-flat-top:`drill`" break for key in type_saw_keys: if key in type_pool: if 'chain' in type_pool: - obj_type = 'chain saw' + obj_type = ":material-hand-saw:`chain saw`" elif 'circular' in type_pool: - obj_type = 'circular saw' + obj_type = ":material-saw-blade:`circular saw`" elif 'saber' in type_pool: - obj_type = 'saber saw' + obj_type = ":material-hand-saw:`saber saw`" else: - obj_type = 'saw' + obj_type = 'None' break - print(f"| {filename} | `{obj_type}` | {file_size:.2f} | [:octicons-download-24:]({download_link}) |") + print(f"| {filename} | {obj_type} | {file_size:.2f} | [:octicons-download-24:]({download_link}) |") else: print('!!! bug \n\tError fetching data from Zenodo') diff --git a/material/overrides/.icons/tools/chainsaw.svg b/material/overrides/.icons/tools/chainsaw.svg new file mode 100644 index 00000000..5840b404 --- /dev/null +++ b/material/overrides/.icons/tools/chainsaw.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/material/overrides/.icons/tools/circularsaw.svg b/material/overrides/.icons/tools/circularsaw.svg new file mode 100644 index 00000000..99af1e87 --- /dev/null +++ b/material/overrides/.icons/tools/circularsaw.svg @@ -0,0 +1,24 @@ + + + + + con-circular-saw + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/material/overrides/.icons/tools/drill.svg b/material/overrides/.icons/tools/drill.svg new file mode 100644 index 00000000..7977f01b --- /dev/null +++ b/material/overrides/.icons/tools/drill.svg @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/material/overrides/.icons/tools/sabersaw.svg b/material/overrides/.icons/tools/sabersaw.svg new file mode 100644 index 00000000..c029361f --- /dev/null +++ b/material/overrides/.icons/tools/sabersaw.svg @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 55992253..31d00d3c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -254,6 +254,7 @@ nav: - Geometry framework: developer-guide/AR-engine/geometry-framework.md - Feedback system: developer-guide/AR-engine/feedback-system.md - AR rendering: developer-guide/AR-engine/AR-rendering.md + - Toolhead: developer-guide/toolhead.md - Guidelines: - Code: developer-guide/CONTRIBUTING_copy.md # TODO: add a copy in the githhub action