Skip to content

Commit

Permalink
Merge pull request #56 from SamuelNoesslboeck/last-cad-changes
Browse files Browse the repository at this point in the history
New images and documentation material
  • Loading branch information
SamuelNoesslboeck committed Apr 9, 2024
2 parents 00f3b4e + 22eb5b5 commit f4efce8
Show file tree
Hide file tree
Showing 92 changed files with 160 additions and 87 deletions.
24 changes: 2 additions & 22 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@ All the important folders of this repository contains a *README.md*-file with ba
- [Software](#software)
- [Robot](#robot)
- [Construction](#construction)
- [Naming system](#naming-system)
- [About subassemblies](#about-subassemblies)
- [AI](#ai)
- [Electronics](#electronics)

Expand Down Expand Up @@ -61,33 +59,15 @@ The robot has to, as already mentioned, be able to draw lines on an A5 sheet of

The user interface should be as simple as possible, not more then two buttons even.

## Construction
## [Construction](./construction/)

![Old sketch](./documentation/images/main.PNG)

![New sketch](./documentation/images/main_new.PNG)

The construction is similar to the one of a 3D-Printer including three stepper-motor controlled linear axis, a BLTouch and endswitches to measure home position and more. A welded aluminum frame is the basis for the robot and with the vast majority of the other parts being 3D-printed, the manufactoring process turned out to be quite simple.

### Naming system

In order to keep the project clean, the filesystem for the construction has a strict naming scheme.

- Assemblies are referenced with an "a" prefix. Depending on the type of assembly a number can be added:
- The main assembly has no number (e.g. "a_drake")
- Subassemblies have a number attached to them (e.g. "a1_frame")
- There can be subassemblies of subassemblies (e.g. "a1.1_frame_base")
- Standard parts have an "n{part-number}_" prefix
- They are placed in a "standard" directory
- Modified parts (standard parts with modifications) have an "m{part-number}_" prefix
- They are placed in a "modified" directory
- Custom parts just have their part number as prefix "{part-number}_"
- They are placed into the assembies root

### About subassemblies

The important rule about subassemblies is, that they should always work on their own. This can of course mean that standard parts can be found multiple times in a construction.
The user interface has been kept as simple as possible, a button to start the process and an emergency-halt in case something goes wrong.
![CAD](./documentation/images/cad_model.PNG)

## AI

Expand Down
Binary file modified a_drake.asm
Binary file not shown.
Binary file modified a_drake.cfg
Binary file not shown.
Binary file modified a_drake_without_cover.asm
Binary file not shown.
Binary file modified a_drake_without_cover.cfg
Binary file not shown.
16 changes: 13 additions & 3 deletions code/scripts/README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ General purpose scripts
- [setup](setup.sh)(.sh/.bat): Setup script that should be called after installing to ensure functionality
- [update](update.sh)(.sh/.bat): Updates all repos if there are any available

## Start scripts
## [Start scripts](./start/)

Scripts for starting up the main processes for a specific device (e.g. drai-camera).

Expand All @@ -22,8 +22,18 @@ Scripts for starting up the main processes for a specific device (e.g. drai-came

Scripts for testing the functionallity of electronics and connections.

- [manual_switch_pos_x.sh](test/manual_switch_pos_x.sh): Tests whether the positive endswitch of the X-Axis is working
- [manual_switch_pos_y.sh](test/manual_switch_pos_x.sh): Tests whether the positive endswitch of the Y-Axis is working
- []

### Standard test routine

To run the full [standard test routine](./testing.sh) run:

```sh
# Go to the project root directory, default being:
cd ~/DrAI

sh "code/scripts/testing.sh"
```

## Calibration scripts

Expand Down
7 changes: 4 additions & 3 deletions code/scripts/test/endswitch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@ echo
echo Manually check if a endswitch is working
echo " -> ATTENTION: Must be executed in the projects root folder"
echo
echo Selected switch: $2
echo " -> Pin: $1"
echo

. "code/scripts/env.sh"
echo

cd "code/syact"

export SYACT_DEVICE_NAME=$2

cargo run --features=rasp --example hardware-meas-endswitch -- $1

unset SYACT_DEVICE_NAME

cd "../.."
3 changes: 0 additions & 3 deletions code/scripts/test/endswitch_pos_x.sh

This file was deleted.

3 changes: 0 additions & 3 deletions code/scripts/test/endswitch_pos_y.sh

This file was deleted.

3 changes: 3 additions & 0 deletions code/scripts/test/endswitches/endswitch_neg_x.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
. "code/scripts/env.sh"

sh "code/scripts/hardware/endswitch.sh" $DRAI_X_SWITCH_NEG_PIN "X-Axis Negative"
3 changes: 3 additions & 0 deletions code/scripts/test/endswitches/endswitch_neg_y.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
. "code/scripts/env.sh"

sh "code/scripts/hardware/endswitch.sh" $DRAI_Y_SWITCH_NEG_PIN "Y-Axis Negative"
3 changes: 3 additions & 0 deletions code/scripts/test/endswitches/endswitch_neg_z.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
. "code/scripts/env.sh"

sh "code/scripts/hardware/endswitch.sh" $DRAI_Z_SWITCH_NEG_PIN "Z-Axis Negative"
3 changes: 3 additions & 0 deletions code/scripts/test/endswitches/endswitch_pos_x.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
. "code/scripts/env.sh"

sh "code/scripts/hardware/endswitch.sh" $DRAI_X_SWITCH_POS_PIN "X-Axis Positive"
3 changes: 3 additions & 0 deletions code/scripts/test/endswitches/endswitch_pos_y.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
. "code/scripts/env.sh"

sh "code/scripts/hardware/endswitch.sh" $DRAI_Y_SWITCH_POS_PIN "Y-Axis Positive"
3 changes: 3 additions & 0 deletions code/scripts/test/endswitches/endswitch_pos_z.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
. "code/scripts/env.sh"

sh "code/scripts/hardware/endswitch.sh" $DRAI_Z_SWITCH_POS_PIN "Z-Axis Positive"
File renamed without changes.
File renamed without changes.
File renamed without changes.
3 changes: 3 additions & 0 deletions code/scripts/testing.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Standard testing routine

# Endswitches
2 changes: 1 addition & 1 deletion code/scripts/update.bat
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
echo.
echo DrAI - Update batch file
echo ============================
echo -> ATTENTION: This script must be executed from the projects root folder!
echo "-> ATTENTION: This script must be executed from the projects root folder!"
echo.
echo Checking for updates in the main repo ...
echo.
Expand Down
2 changes: 1 addition & 1 deletion code/syact
34 changes: 33 additions & 1 deletion construction/README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,45 @@ The construction is split up in many subassemblies and groups, which are feature

## General information

### Naming system

In order to keep the project clean, the filesystem for the construction has a strict naming scheme.

- Assemblies are referenced with an "a" prefix. Depending on the type of assembly a number can be added:
- The main assembly has no number (e.g. "a_drake")
- Subassemblies have a number attached to them (e.g. "a1_frame")
- There can be subassemblies of subassemblies (e.g. "a1.1_frame_base")
- Standard parts have an "n{part-number}_" prefix
- They are placed in a "standard" directory
- Modified parts (standard parts with modifications) have an "m{part-number}_" prefix
- They are placed in a "modified" directory
- Custom parts just have their part number as prefix "{part-number}_"
- They are placed into the assembies root

### Orientation



## Subassemblies

- [a1_frame](./a1_frame/): The base aluminium frame
The important rule about subassemblies is, that they should always work on their own. This can of course mean that standard parts can be found multiple times in a construction.
The user interface has been kept as simple as possible, a button to start the process and an emergency-halt in case something goes wrong.

- [[A1] Frame](./a1_frame/): Base aluminium frame
- [[A2] Y-Axis](./a2_yaxis/): Y-Axis without the drawing head
- [[A3] Sideaxis](./a3_sideaxis/): Sideaxes used to move the `Y-Axis` in Z direction
- [[A4] Drawing Table](./a4_paper/): Drawing table with servos and clamps
- [[A5] Head](./a5_head/): A simple head used to track the user while drawing for more interaction
- [[A6] Arm](./a6_arm/): Both arms, one equipped with a camera
- [[A7] Pen mount](./a7_pen_mount/): Drawing head with pen mount
- [[A8] User terminal](./a8_user_terminal/): User terminal with buttons to interact with the machine
- [[A9] Trunk](./a9_trunk/): Trunk with the electronics inside

## Groups

- [[C1] Front cover](./c1_cover_front/): Cover parts used in the front
- [[C2] Octagon cover](./c2_cover_octagon/): Cover parts placed around the octagon

## [Misc](./m_misc/)

Remaining parts that do not fit in a group or subassembly
Binary file not shown.
Binary file added construction/a4_drawing_table/11_table_body.par
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added construction/a4_drawing_table/2_plate_left.par
Binary file not shown.
File renamed without changes.
File renamed without changes.
Binary file added construction/a4_drawing_table/5_plate_right.par
Binary file not shown.
Binary file not shown.
Binary file added construction/a4_drawing_table/9_rolls.par
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,47 +1,47 @@
# Paperholder

## 3D-Printing

### 1_paper_bottom
- Accuracy: medium
- Stability: medium
- Amount: 1

### 4_paper_bottom_2
- Accuracy: medium
- Stability: medium
- Amount: 2

### 2_paper_floor
- Accuracy: medium
- Stability: low / medium
- Amount: 1
- Kommentar: Schöne oberste Schicht wäre am wichtigsten

### 5_paper_floor_2
- Accuracy: medium
- Stability: low / medium
- Amount: 1
- Kommentar: Schöne oberste Schicht wäre am wichtigsten

### 3_paper_holder
- Accuracy: medium
- Stability: medium
- Amount: 8

### 7_paper_holder_cover
- Accuracy: low
- Stability: high
- Amount: 4

### 6_paper_holder_cover
- Accuracy: low
- Stability: high
- Amount: 4


### 8_paper_markers
- accuracy: low
- Stability: low
- Amount: 4
# Paperholder

## 3D-Printing

### 1_paper_bottom
- Accuracy: medium
- Stability: medium
- Amount: 1

### 4_paper_bottom_2
- Accuracy: medium
- Stability: medium
- Amount: 2

### 2_paper_floor
- Accuracy: medium
- Stability: low / medium
- Amount: 1
- Kommentar: Schöne oberste Schicht wäre am wichtigsten

### 5_paper_floor_2
- Accuracy: medium
- Stability: low / medium
- Amount: 1
- Kommentar: Schöne oberste Schicht wäre am wichtigsten

### 3_paper_holder
- Accuracy: medium
- Stability: medium
- Amount: 8

### 7_paper_holder_cover
- Accuracy: low
- Stability: high
- Amount: 4

### 6_paper_holder_cover
- Accuracy: low
- Stability: high
- Amount: 4


### 8_paper_markers
- accuracy: low
- Stability: low
- Amount: 4
- Kommentar: Wenns geht weiß oder dunkelblaue Farbe
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added construction/a4_drawing_table/stl/9_rolls.stl
Binary file not shown.
Binary file removed construction/a4_paper/1_paper_bottom.par
Binary file not shown.
Binary file removed construction/a4_paper/2_paper_floor.par
Binary file not shown.
Binary file removed construction/a4_paper/5_paper_floor_2.par
Binary file not shown.
Binary file removed construction/a4_paper/a4_paper.asm
Binary file not shown.
Binary file removed construction/a4_paper/a4_paper.cfg
Binary file not shown.
Binary file removed construction/a4_paper/stl/1_paper_bottom.stl
Binary file not shown.
Binary file removed construction/a4_paper/stl/2_paper_floor.stl
Binary file not shown.
Binary file modified construction/a7_pen_mount/1_mounting_plate.par
Binary file not shown.
Binary file not shown.
Binary file not shown.
File renamed without changes.
File renamed without changes.
File renamed without changes.
3 changes: 2 additions & 1 deletion documentation/README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ Descriptions, schematics, general documentation and even the diploma thesis itse

## Other content

- [competitions](./competitions/): Information about all the competitions entered with this project
- [competitions](./competitions/): Information about all the competitions entered with this project
- [datasheets](./datasheets/): List of datasheets for the components used in the project
29 changes: 29 additions & 0 deletions documentation/competitions/ARS PRIX U19/README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,36 @@ Deadline:

### Kurzbeschreibung der Arbeit

Ziel dieses Projekts ist es, die Fähigkeiten von KI bei der Erledigung "kreativer" Aufgaben in Zusammenarbeit mit Menschen zu demonstrieren und menschliche Kreativität nachzuahnen. Der Roboter ist außerdem als Teil von Workshops oder sogar der Ausstellung des ARS Electronica Centers geplant.

Das Endergebnis ist ein interaktiver Roboter sein, der mit einer KI ausgestattet ist, die darauf trainiert ist, vorgezeichnete Skizzen des Benutzers zu interpretieren und sie mit ihrer eigenen "Kreativität" zu vervollständigen. Sobald sich das Blatt im Roboter befindet, ist es sein Ziel, sein Potenzial zu entfalten, indem er zusätzliche Linien auf das Papier des Benutzers zeichnet. Die Möglichkeiten sind hier grenzenlos, die KI kann z. B. einen Wald neben einem Häuschen erschaffen, oder einen Strand neben ein Meer und so weiter.

### Technische Details der Arbeit

Das Projekt beinhaltet ein komplexes Netz aus verschiedensten Algorithmen geschrieben in Python und der eher neuen Systemsprache Rust.

Zuerst wird die exakte Platzierung des Papiers mit der Skizze mithilfe von einer Verschachtelung verschiedener Bildanalysemethoden, wie Canny-Edge-Detection, Harris-Corner-Detection usw., überprüft. So kann der Roboter trotz Ungenauigkeiten des Users beim Einführen des Papiers korrekt zeichnen.
Die gezeichnete Skizze wird dann durch einen Clip-Interogator in einen Text-Prompt übertragen. Nun wird ein Large Language Model benutzt um der Zeichnung etwas hinzuzufügen. Hierbei ist Prompt Engeneering von nöten um den Output zu verbessern. Würden wir den neu generierten Prompt und das Originalbild durch eine Stable Diffusion Img2Img Pipeline laufen lassen würde zu wenig Kreativität im neuen Bild entstehen, da der Diffusion Algorithmus mit niedriger Strength keine neuen Ansätze generiert und mit zu hoher Strength das Originalbild verschwindet und etwas Unbrauchbares entsteht. Um dieses Problem zu umgehen werden zufällige Linien in das Originalbild gezeichnet. Durch diese simple Methode mit der Kombination der verschiedenen neuronalen Netzwerke und der restlichen komplexen Algorithmen, ist es möglich den Stable Diffusion Algorithmus Kreativität zu verleihen. Da der gesamte Algorithmus sehr leistungsaufwändig ist wurde das ganze Projekt auf die CPU / RAM und GPU / V-RAM diversifiziert und ausgelagert um optimale Leistung auf kostengünstiger Hardware zu ermöglichen.

Eine weiterer Aspekt ist die Steuerung des Roboters, die zu großen Teilen von uns in Rust angefertigt wurde, da es etwas vergleichbares in dieser Sprache noch nicht gibt. Rust hat uns durch ihre Eleganz, Sicherheit und überragende Performance überzeugt. Durch sie ist es möglich, die komplette Steuerung inklusive Bahnberechnungen auf einem simplen Raspberry Pi Einplatinencomputer laufen zu lassen. Da in einem Museum die Aufmerksamkeitsspanne der Besucher eher kurz ist, muss schnell gezeichnet werden. Was durch die robuste Konstruktion, die leistungsstarke Elektronik und die Software, die hochwertige Anlaufkurven für die Motoren berechnet, gewährleistet wird.

### Projektgeschichte

Eine Internetrecherche in Zusammenarbeit mit dem Projektleiter ergab, dass es zwar schon Zeichenroboter gab, die auf gewisse Datensätze trainiert wurden, jedoch funktionierten diese nur auf kleine Datensätze oder Zeichnungen und wiesen nicht die benötigte gewünschte Vielfältigkeit und Kreativität auf. Auch waren viele der existierenden Konzepte nicht für den Museumsbetrieb geeignet.
Die anfängliche Idee des Projektes war, zu einer bestehenden Zeichnung etwas Kreatives hinzuzufügen und die Besucher*innen mit der KI kollaborieren zu lassen. Das Projekt sollte zur Demonstration von kreativer Zusammenarbeit von Künstlicher Intelligenz und Mensch dienen.
Zu Beginn des Projektes existierte die Meinung, künstliche Intelligenz werde in den nächsten Jahren zu einem neuen Werkzeug für die Menschheit, wie die Erfindung des Taschenrechners. Bereits zu dieser Zeit existierten diverse Algorithmen, mit denen sich durch menschliches Einwirken Herausragendes entwickeln lässt. Durch Programme wie Github Copilot lassen sich komplexe Programme in beliebigen Programmiersprachen durch eine Textbeschreibung entwickeln. Oft genügt eine einfache Beschreibung des Lösungsansatzes und schon liefert ein Large Language Model (LLM) wie GPT-4 den Programmcode. Was jedoch hierbei wichtig ist, ist die Beschreibung des Lösungsansatzes. Neuronale Netzwerke sind nur so gut wie ihre Trainingsdaten. Befindet sich das Problem nicht in den Datensätzen, so fällt es dem Programm meist schwer, eine komplexe Lösung zu finden, die auch wirklich funktioniert. Hierbei wird die menschliche Kreativität benötigt, um einen Lösungsansatz zu finden, der dann beschrieben und in Code umgesetzt wird.
Mit Bildern ist es das gleiche, es wird menschliche Kreativität benötigt, um kreative Textbeschreibungen für Bilder zu finden, die im Anschluss gezeichnet werden. Je weiter die Forschung des Algorithmus fortschritt, desto mehr festigte sich die Erkenntnis, dass diese These inkorrekt ist. Der Programmcode hat einerseits die Möglichkeit, aus Bestehendem etwas Neues zu erzeugen und andererseits aus einem weißen Blatt Papier ohne textliche Beschreibungen oder menschliches Einwirken kreative Bilder zu malen. Es ist eine philosophische Frage, ob Maschinen kreativ sein können oder nicht, jedoch sehen die Resultate sehr vielversprechend aus. Die Frage, ob KI kreativ sein kann, wird eher zur Frage, wann KI kreativer wird, als die Menschheit es derzeit ist.
Der zunächst beschriebene Algorithmus versucht die menschliche Kreativität nachzuahmen, indem er generative Künstliche Intelligenz mit zufällig in das Eingangsbild generierten Inhalten kombiniert. Die Innovation liegt in dieser Interpretation menschlicher Kreativität als genau dieser Kombination von zufälligen Impulsen in der menschlichen Wahrnehmung, abgebildet durch die Zufallsgeneratoren, und der Erkennung von Mustern, abgebildet durch KI.

### Kurzbiographie Samuel

Schon lange bastelt Samuel Nösslböck an den verschiedensten Projekten im Bereich der Robotik. Dabei glaubt er an die Relevanz der Kunst und Kreativität in der sonst sehr regulierten und genormten Technik.

So entstand 2022 SyLa, eine für Netzwerkanwendungen optimierte Skriptsprache,
Im Jahre 2023 SyArm, ein Roboterarm gebaut aus simplen Teilen und im Jahr darauf in Kooperation mit Rene Schwarz DrAI, ein intelligenter Zeichenroboter mit neuen Ansätzen zur Interpretation und Nachahmung von Kreativität.

### Kurzbiographie Rene

Rene Schwarz war von klein auf sehr technikbegeistert. Schon lange kannte er Samuel Nösslböck, welcher ihn überredete, die Programmiersprache Python zu lernen. Die Faszination für den Marvel-Charakter Ironman und dessen interaktives Sprachprogramm Jarvis, setzen den ersten Grundstein für die Begeisterung für KI.

Mit 15 Jahren entdeckte er Deep Learning. 3 Jahre später folgte die erste Gesichteserkennungs- und Identifikationssoftware Facevec. Im Jahre 2023 entwickelte er eine Rechenleistungsoptimierte Speech to Text Software und im Jahr darauf in Kooperation mit Samuel Nösslböck DrAI, ein intelligenter Zeichenroboter mit neuen Ansätzen zur Interpretation und Nachahmung von Kreativität.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added documentation/datasheets/1_pca9685_board.pdf
Binary file not shown.
Binary file added documentation/datasheets/2_pca9685_chip.pdf
Binary file not shown.
6 changes: 6 additions & 0 deletions documentation/datasheets/README.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Datasheets

A list of datasheets for the components used in the project:

1. [PCA9685 Board](./1_pca9685_board.pdf): The servo driver board used in the drawing table
2. [PCA9685 Chip](./2_pca9685_chip.pdf): The servo driver chip
Binary file added documentation/images/AI/ai_example_image_6.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added documentation/images/robot/Aufbau_1.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added documentation/images/robot/Stifthalter.jpg
Binary file added documentation/images/robot/robot_1.jpg
Binary file added documentation/images/robot/robot_2.jpg
Binary file added documentation/images/robot/robot_3.jpg
2 changes: 1 addition & 1 deletion drake_printer_files
3 changes: 1 addition & 2 deletions electronics/README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,4 @@ The electronics of this project consist of multiple parts, explained below:

## Parts

- [drake_electronics](./drake_electronics/): The combinded electronics of the project, embedding the *robot_driver*
- [robot_driver](https://github.com/SamuelNoesslboeck/robot_driver): Subpart of this project used for controlling the stepper motors and more
- [drake_electronics](./drake_electronics/): The combinded electronics of the project, embedding the *robot_driver*

0 comments on commit f4efce8

Please sign in to comment.