From 517b5f843828ad19b54d6a607486c363f3e2917b Mon Sep 17 00:00:00 2001 From: Luca Warmenhoven Date: Mon, 3 Jun 2024 13:41:10 +0200 Subject: [PATCH 01/36] Why --- code/src/Fitbot/.gitignore | 3 ++- .../java/com/example/fitbot/ui/activities/FitnessActivity.java | 1 + .../example/fitbot/ui/components/ExerciseStatusElement.java | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/src/Fitbot/.gitignore b/code/src/Fitbot/.gitignore index 732c947..203dde6 100644 --- a/code/src/Fitbot/.gitignore +++ b/code/src/Fitbot/.gitignore @@ -14,4 +14,5 @@ .cxx local.properties .idea -.vscode \ No newline at end of file +.vscode +/.idea/ diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 3c07cfb..fc29b4b 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -81,6 +81,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall motionProcessor.startListening(); motionProcessor.setInputHandler(personalMotionPreviewElement); + }, (n) -> { int randomMessageIndex = (int) Math.floor(Math.random() * EXERCISE_NOT_FOUND_MESSAGES.length); Pepper.say(EXERCISE_NOT_FOUND_MESSAGES[randomMessageIndex]); diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java index 606321b..93b1214 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java @@ -159,7 +159,7 @@ public class ExerciseStatusElement extends View implements IInputHandler { this.exercise = exercise; } - + /** TODO: Remove */ private Vector2f projectVertex(Vector3f point, int virtualWidth, int virtualHeight) { viewMatrix .identity() From 53bc94aba38ab18f6a06eee7cfa7762ad6b88e56 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 3 Jun 2024 14:21:42 +0200 Subject: [PATCH 02/36] Fixed it so it only pulls the ip once --- code/arduino/Movement-sensor-code/Connectivity.cpp | 6 +++--- code/arduino/Movement-sensor-code/Connectivity.h | 2 +- .../Movement-sensor-code/Movement-sensor-code.ino | 11 +++++++---- code/arduino/Movement-sensor-code/headerFIle.h | 2 ++ 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/code/arduino/Movement-sensor-code/Connectivity.cpp b/code/arduino/Movement-sensor-code/Connectivity.cpp index bfc3c04..955d7d0 100644 --- a/code/arduino/Movement-sensor-code/Connectivity.cpp +++ b/code/arduino/Movement-sensor-code/Connectivity.cpp @@ -21,9 +21,9 @@ void Connectivity::connectWiFi(char* ssid, char* pass){ // } const char* getServerURL = "http://145.92.8.132:443/get-ip"; -String ipAddress = ""; +char* ipAddress = ""; -String Connectivity::fetchIPAddress() { +const char* Connectivity::fetchIPAddress() { if (WiFi.status() == WL_CONNECTED) { HTTPClient http; WiFiClient client; @@ -32,7 +32,7 @@ String Connectivity::fetchIPAddress() { int httpCode = http.GET(); if (httpCode > 0) { if (httpCode == HTTP_CODE_OK) { - ipAddress = http.getString(); + ipAddress = strdup(http.getString().c_str()); } } else { Serial.printf("GET request failed, error: %s\n", http.errorToString(httpCode).c_str()); diff --git a/code/arduino/Movement-sensor-code/Connectivity.h b/code/arduino/Movement-sensor-code/Connectivity.h index 6de0109..37d528b 100644 --- a/code/arduino/Movement-sensor-code/Connectivity.h +++ b/code/arduino/Movement-sensor-code/Connectivity.h @@ -19,7 +19,7 @@ public: void websocketSetup(char* ip, uint16_t port, char* adress); void sendData(float roll, float pitch, float yaw); int httpPost(const char *serverAddress, const char *serverSubPath, const unsigned short serverPort, const char *data, const size_t dataLength, const char *contentType); - String fetchIPAddress(); + const char* fetchIPAddress(); private: ESP8266WiFiMulti wifi; diff --git a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino index 061f12d..6540384 100644 --- a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino +++ b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino @@ -7,8 +7,6 @@ void setup() { Serial.begin(9600); } -unsigned long lastTime = 0; // will store the last time the code was run - void loop() { SensorManager::eulerAngles eulerRotation = sensorManager.getEulerAngles(); // SensorManager::acceleration rotationAcceleration = sensorManager.getAcelleration(); @@ -19,6 +17,11 @@ struct acceleration { float z = 9; } accelData; + if (!ipAquired) { + serverIp = connectivity.fetchIPAddress(); + ipAquired = true; + } + unsigned long lastTime = 0; // will store the last time the code was run unsigned long currentTime = millis(); if (currentTime - lastTime >= 100) { // 100 ms has passed memset(buffer, 0, BUFFER_SIZE); @@ -34,10 +37,10 @@ struct acceleration { accelData.z, "data"); // %d = int, %f = floatation, %s = string - connectivity.httpPost(connectivity.fetchIPAddress(), "/", 3445, buffer, strlen(buffer), "application/json"); + connectivity.httpPost(serverIp, "/", 3445, buffer, strlen(buffer), "application/json"); lastTime = currentTime; } } //acceleration.X //acceleration.Y -//acceleration.Z +//acceleration.Z \ No newline at end of file diff --git a/code/arduino/Movement-sensor-code/headerFIle.h b/code/arduino/Movement-sensor-code/headerFIle.h index 8e3480e..bd6639b 100644 --- a/code/arduino/Movement-sensor-code/headerFIle.h +++ b/code/arduino/Movement-sensor-code/headerFIle.h @@ -15,3 +15,5 @@ WebSocketsClient webSocket; #define IP_ADDRESS "192.168.137.12" char *buffer = (char *)malloc(sizeof(char) * BUFFER_SIZE); +const char* serverIp = NULL; // Declare serverIp here +bool ipAquired = false; \ No newline at end of file From 868542dba92eff73bf12095757b63068519f09f6 Mon Sep 17 00:00:00 2001 From: Luca Warmenhoven Date: Mon, 3 Jun 2024 14:26:17 +0200 Subject: [PATCH 03/36] Updated InputProcessor and FitnessActivity, fixed some issues. --- .../com/example/fitbot/exercise/Exercise.java | 8 +- .../fitbot/exercise/ExerciseManager.java | 5 +- .../fitbot/ui/activities/FitnessActivity.java | 17 ++-- .../ui/components/ExerciseStatusElement.java | 77 ++----------------- .../util/processing/InputProcessor.java | 3 +- .../example/fitbot/DatabaseFetchingTest.java | 2 +- 6 files changed, 27 insertions(+), 85 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java index 331d356..f0a1e7a 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java @@ -7,7 +7,7 @@ public class Exercise { public final EMuscleGroup muscleGroup; public final GesturePath leftPath; public final GesturePath rightPath; - public final String title; + public final String name; public final String description; public final String imageUrl; public final String videoUrl; @@ -19,14 +19,14 @@ public class Exercise { * @param muscleGroup The muscle group of the exercise. * @param leftPath The path of the left hand. * @param rightPath The path of the right hand. - * @param title The title of the exercise. + * @param name The title of the exercise. * @param description The description of the exercise. * @param imageUrl The URL of the image. * @param videoUrl The URL of the video. */ - public Exercise(EMuscleGroup muscleGroup, String title, String description, String imageUrl, String videoUrl, GesturePath leftPath, GesturePath rightPath, float exerciseTimeInSeconds) { + public Exercise(EMuscleGroup muscleGroup, String name, String description, String imageUrl, String videoUrl, GesturePath leftPath, GesturePath rightPath, float exerciseTimeInSeconds) { + this.name = name; this.muscleGroup = muscleGroup; - this.title = title; this.description = description; this.leftPath = leftPath; this.rightPath = rightPath; diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java index dc045e5..613eb36 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java @@ -13,7 +13,7 @@ import java.net.URLConnection; public class ExerciseManager { - private static final String HOST_ADDRESS = "http://145.92.8.132:443/"; + private static final String HOST_ADDRESS = "http://145.92.8.132:443"; // The value of these property variables must be equivalent of // the JSON data that the database sends back. @@ -85,11 +85,12 @@ public class ExerciseManager { */ public static Exercise fetchExerciseFromDatabase() { String response = sendHTTP( - HOST_ADDRESS, "POST", "application/json", null + HOST_ADDRESS, "POST", "application/json", "{}" ); // Validate the response if (response != null) { try { + System.out.println(response); JsonObject content = JsonParser.parseString(response).getAsJsonObject(); // Ensure all required properties are present diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 3f39db6..f5422cb 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -4,6 +4,7 @@ import android.content.Context; import android.net.Uri; import android.os.Bundle; import android.util.Log; +import android.widget.TextView; import android.widget.VideoView; import com.aldebaran.qi.sdk.QiContext; @@ -24,9 +25,10 @@ import org.joml.Vector3f; public class FitnessActivity extends RobotActivity implements RobotLifecycleCallbacks { // Private fields for the FitnessActivity class. - private ExerciseStatusElement personalMotionPreviewElement; + private ExerciseStatusElement exerciseStatusElement; private InputProcessor motionProcessor; private Exercise currentExercise; + private TextView exerciseNameTextView; // Some nice little messages for the user private static final String[] EXERCISE_NOT_FOUND_MESSAGES = new String[]{ @@ -51,6 +53,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall // Remove the ugly ass bar on top of the view setSpeechBarDisplayStrategy(SpeechBarDisplayStrategy.IMMERSIVE); + this.exerciseNameTextView = findViewById(R.id.textViewFitnessTitle); // Find the VideoView by its ID VideoView videoView = findViewById(R.id.videoView); @@ -65,22 +68,23 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall // Provide the context so that all queued actions can be performed. Pepper.provideContext(qiContext, this.getClass()); - personalMotionPreviewElement = findViewById(R.id.personalMotionPreviewElement); + exerciseStatusElement = findViewById(R.id.personalMotionPreviewElement); // Initialize the element whenever it has been added to the screen. // This will provide the element with the appropriate dimensions for drawing // the canvas properly. - personalMotionPreviewElement.post(() -> { + exerciseStatusElement.post(() -> { this.fetchExerciseAsync((exercise) -> { // Acquire paths from the exercise and provide them to the motion processor Vector3f[][] vectors = new Vector3f[][]{exercise.leftPath.getVectors(), exercise.rightPath.getVectors()}; motionProcessor = new InputProcessor(vectors, exercise.exerciseTimeInSeconds, SENSOR_SAMPLE_RATE); - personalMotionPreviewElement.initialize(exercise, motionProcessor, EXERCISE_COUNT); - + exerciseStatusElement.initialize(exercise, motionProcessor, EXERCISE_COUNT); + motionProcessor.useExercise(exercise); + /* TODO: Remove if not needed */motionProcessor.setRecording(true, 10); motionProcessor.startListening(); - motionProcessor.setInputHandler(personalMotionPreviewElement); + motionProcessor.setInputHandler(exerciseStatusElement); }, (n) -> { int randomMessageIndex = (int) Math.floor(Math.random() * EXERCISE_NOT_FOUND_MESSAGES.length); @@ -106,6 +110,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall if (exercise == null) { onFailedFetch.handle(null); } else { + exerciseNameTextView.setText(exercise.name); onSuccessfulFetch.handle(exercise); } })).start(); diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java index 93b1214..c8b112b 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java @@ -38,16 +38,6 @@ public class ExerciseStatusElement extends View implements IInputHandler { private final Paint borderPaint = new Paint(); private final Paint backgroundPaint = new Paint(); - // TODO: Remove - private final Matrix4f viewMatrix = new Matrix4f(); // The view matrix for the 3D to 2D transformation. - private final Matrix4f projectionMatrix = new Matrix4f(); // The projection matrix for the 3D to 2D transformation. - private final Vector4f objectPosition = new Vector4f(0, 0, 0, 1); // The location of the object in 3D space. - private final ConcurrentLinkedQueue vectors = new ConcurrentLinkedQueue<>(); - - // TODO: Remove - private Vector2f[] axisVectors = new Vector2f[0]; - - private static final String[] STARTING_PHRASES = { "Veel success met de oefening!", "Je kan het!", @@ -93,16 +83,6 @@ public class ExerciseStatusElement extends View implements IInputHandler { this.exercise = exercise; this.exerciseCount = exerciseCount; - /* TODO: Remove */ - this.axisVectors = new Vector2f[]{ - projectVertex(new Vector3f(-5.0f, 0, 0), getWidth(), getHeight()), - projectVertex(new Vector3f(5.0f, 0, 0), getWidth(), getHeight()), - projectVertex(new Vector3f(0, -5.0f, 0), getWidth(), getHeight()), - projectVertex(new Vector3f(0, 5.0f, 0), getWidth(), getHeight()), - projectVertex(new Vector3f(0, 0, -5.0f), getWidth(), getHeight()), - projectVertex(new Vector3f(0, 0, 5.0f), getWidth(), getHeight()) - }; - Pepper.say(STARTING_PHRASES[(int) Math.floor(Math.random() * STARTING_PHRASES.length)]); // Handler that is called every time the motion processor receives new data. @@ -111,6 +91,10 @@ public class ExerciseStatusElement extends View implements IInputHandler { Log.i("MotionProcessor", "Rotation vector received: " + rotationVector); Log.i("MotionProcessor", "Last error offset:" + this.motionProcessor.getError(deviceId, this.motionProcessor.secondsPassed())); + // Check whether the current exercise has been completed. + // This is determined by the duration of the exercise, and the amount of time that has passed. + // The duration of the exercise originates from the database, and is stored in seconds. + // Whenever 'useExercise' is called, the timer resets and this method will be called again. if (this.motionProcessor.hasFinished()) { // If for some reason the parent activity is not defined, // move back to the main screen. @@ -124,6 +108,8 @@ public class ExerciseStatusElement extends View implements IInputHandler { this.exerciseCount--; this.parentActivity.fetchExerciseAsync((newExercise) -> { this.motionProcessor.useExercise(newExercise); + + // Whenever the database retrieval failed, we return to the main screen. }, (failed) -> { // Move to main screen NavigationManager.navigateToActivity(parentActivity, MainActivity.class); @@ -131,21 +117,8 @@ public class ExerciseStatusElement extends View implements IInputHandler { } else { // Finish the exercise. NavigationManager.navigateToActivity(parentActivity, EndScreenActivity.class); - return; } } - - /* TODO: Use raw vector */ - vectors.add(projectVertex(rotationVector, this.getWidth(), this.getHeight())); - - /* TODO: Remove */ - Vector2f parsed = projectVertex(rotationVector, this.getWidth(), this.getHeight()); - - this.vectors.add(parsed /* TODO: Add regular vertex once exercise data is stored in DB*/); - - // Remove the first element if the array is too big - if (this.vectors.size() > 100) - this.vectors.poll(); }); } @@ -159,50 +132,12 @@ public class ExerciseStatusElement extends View implements IInputHandler { this.exercise = exercise; } - /** TODO: Remove */ - private Vector2f projectVertex(Vector3f point, int virtualWidth, int virtualHeight) { - viewMatrix - .identity() - .lookAt(new Vector3f(0, 0, -2), new Vector3f(0, 0, 0), new Vector3f(0, 1, 0)); - - // Transform the projection matrix to a perspective projection matrix - // Perspective transformation conserves the depth of the object - projectionMatrix - .identity() - .perspective((float) Math.toRadians(70), (float) virtualWidth / virtualHeight, .01f, 1000.0f); - - // Convert world coordinates to screen-space using MVP matrix - Vector4f screenCoordinates = new Vector4f(point, 1.0f) - .mul(this.viewMatrix) - .mul(this.projectionMatrix); - - // Normalize screen coordinates from (-1, 1) to (0, virtualWidth) and (0, virtualHeight) - float normalizedX = (screenCoordinates.x / screenCoordinates.w + 1.0f) * 0.5f * virtualWidth; - float normalizedY = (1.0f - screenCoordinates.y / screenCoordinates.w) * 0.5f * virtualHeight; - return new Vector2f(normalizedX, normalizedY); - } - - @Override public void onDraw(Canvas canvas) { canvas.drawRect(0, 0, getWidth(), getHeight(), backgroundPaint); this.setBackgroundColor(0xFF000000); // Black /*if (this.exercise == null) return;*/ - - - /* TODO: Remove */ - for (int i = 0, startX, endX, startY, endY; i < axisVectors.length / 2; i++) { - startX = (int) Math.max(0, Math.min(this.getWidth(), (int) axisVectors[i * 2].x)); - endX = (int) Math.max(0, Math.min(this.getWidth(), (int) axisVectors[i * 2 + 1].x)); - startY = (int) Math.max(0, Math.min(this.getHeight(), (int) axisVectors[i * 2].y)); - endY = (int) Math.max(0, Math.min(this.getHeight(), (int) axisVectors[i * 2 + 1].y)); - canvas.drawLine(startX, startY, endX, endY, this.borderPaint); - } - - for (Vector2f point : this.vectors) { - canvas.drawRect(point.x, point.y, point.x + 5, point.y + 5, this.userProgressPaint); - } /* // Draw target circle float targetRadius = (this.screenDimensions.x + this.screenDimensions.y) / 5.0f; diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java index c78bd89..66c6d94 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java @@ -80,6 +80,8 @@ public class InputProcessor { this.selfRotationVectorPaths = new Vector3f[2][(int) (exercise.exerciseTimeInSeconds * this.sampleRate)]; this.targetRotationVectorPaths = new Vector3f[2][exercise.rightPath.getVectors().length]; + this.targetRotationVectorPaths[0] = exercise.leftPath.getVectors(); + this.targetRotationVectorPaths[1] = exercise.rightPath.getVectors(); this.exerciseDurationInSeconds = exercise.exerciseTimeInSeconds; this.secondsPassed = 0.0D; this.lastTime = System.currentTimeMillis(); @@ -99,7 +101,6 @@ public class InputProcessor { if (recording) { this.secondsPassed = 0.0D; this.lastTime = System.currentTimeMillis(); - } } diff --git a/code/src/Fitbot/app/src/test/java/com/example/fitbot/DatabaseFetchingTest.java b/code/src/Fitbot/app/src/test/java/com/example/fitbot/DatabaseFetchingTest.java index 4f5d387..03f2ffe 100644 --- a/code/src/Fitbot/app/src/test/java/com/example/fitbot/DatabaseFetchingTest.java +++ b/code/src/Fitbot/app/src/test/java/com/example/fitbot/DatabaseFetchingTest.java @@ -14,7 +14,7 @@ public class DatabaseFetchingTest { assert exercise != null; System.out.println("\n---------------------------------"); System.out.println("Exercise:"); - System.out.println("Name: " + exercise.title); + System.out.println("Name: " + exercise.name); System.out.println("Description: " + exercise.description); System.out.println("Muscle Group: " + exercise.muscleGroup); System.out.println("Image URL: " + exercise.imageUrl); From baffe8b9ac4dbc51d2cd74e28b421951ece28c1f Mon Sep 17 00:00:00 2001 From: SebasKoedam Date: Mon, 3 Jun 2024 14:28:00 +0200 Subject: [PATCH 04/36] chore: Update activity_fitness.xml layout and fix bug in ExerciseManager --- code/src/Fitbot/.idea/misc.xml | 2 +- .../java/com/example/fitbot/exercise/ExerciseManager.java | 2 +- .../com/example/fitbot/ui/activities/FitnessActivity.java | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/src/Fitbot/.idea/misc.xml b/code/src/Fitbot/.idea/misc.xml index b1965d6..48993be 100644 --- a/code/src/Fitbot/.idea/misc.xml +++ b/code/src/Fitbot/.idea/misc.xml @@ -35,7 +35,7 @@ - + diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java index 75b11ae..dc045e5 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java @@ -85,7 +85,7 @@ public class ExerciseManager { */ public static Exercise fetchExerciseFromDatabase() { String response = sendHTTP( - HOST_ADDRESS, "POST", "application/json", + HOST_ADDRESS, "POST", "application/json", null ); // Validate the response if (response != null) { diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index abde556..81f020d 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -63,8 +63,10 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall NavigationManager.setupButtonNavigation(this, R.id.homeButtonFitness, MainActivity.class); NavigationManager.setupButtonNavigation(this, R.id.skipButtonFitness, MainActivity.class); //Needs to skip exercises once those are implemented + // Hide system UI NavigationManager.hideSystemUI(this); + // Initiate info button Button infoButtonFitness = findViewById(R.id.infoButtonFitness); infoButtonFitness.setOnClickListener(new View.OnClickListener() { @Override @@ -96,6 +98,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall motionProcessor.startListening(); motionProcessor.setInputHandler(personalMotionPreviewElement); + }, (n) -> { int randomMessageIndex = (int) Math.floor(Math.random() * EXERCISE_NOT_FOUND_MESSAGES.length); Pepper.say(EXERCISE_NOT_FOUND_MESSAGES[randomMessageIndex]); @@ -177,12 +180,15 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.dialog_info); + // Hide the system UI NavigationManager.hideSystemUI(this); + // Set the dialog options dialog.getWindow().setDimAmount(0.5f); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); dialog.setCancelable(true); + // Close button for dialog Button closeButton = dialog.findViewById(R.id.closeButtonDialog); closeButton.setOnClickListener(new View.OnClickListener() { @Override From f1464653b042155a1496d7ef2a3ab51b85d29e0a Mon Sep 17 00:00:00 2001 From: Niels Gras Date: Mon, 3 Jun 2024 14:31:39 +0200 Subject: [PATCH 05/36] added comments --- code/arduino/Movement-sensor-code/Connectivity.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/arduino/Movement-sensor-code/Connectivity.cpp b/code/arduino/Movement-sensor-code/Connectivity.cpp index bfc3c04..2e9b69d 100644 --- a/code/arduino/Movement-sensor-code/Connectivity.cpp +++ b/code/arduino/Movement-sensor-code/Connectivity.cpp @@ -21,7 +21,7 @@ void Connectivity::connectWiFi(char* ssid, char* pass){ // } const char* getServerURL = "http://145.92.8.132:443/get-ip"; -String ipAddress = ""; +String ipAddress = ""; // string that will hold the server's IP address String Connectivity::fetchIPAddress() { if (WiFi.status() == WL_CONNECTED) { @@ -32,6 +32,7 @@ String Connectivity::fetchIPAddress() { int httpCode = http.GET(); if (httpCode > 0) { if (httpCode == HTTP_CODE_OK) { + // If successful (code 200), read the response body and store the IP address ipAddress = http.getString(); } } else { From c0d002c46b9ff5e23eed07cb023baa3ce3e10544 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 3 Jun 2024 14:47:31 +0200 Subject: [PATCH 06/36] Luca's attempt at fixing app --- .../fitbot/ui/activities/FitnessActivity.java | 2 +- .../ui/components/ExerciseStatusElement.java | 66 ++++++++++--------- .../util/processing/InputProcessor.java | 4 ++ 3 files changed, 40 insertions(+), 32 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 1d74427..7d970db 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -162,7 +162,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall Pepper.provideContext(null, this.getClass()); // Remove the context (unavailable) // Go to the main screen - NavigationManager.navigateToActivity(this, MainActivity.class); +// NavigationManager.navigateToActivity(this, MainActivity.class); } @Override diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java index c8b112b..e8b2351 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java @@ -86,40 +86,9 @@ public class ExerciseStatusElement extends View implements IInputHandler { Pepper.say(STARTING_PHRASES[(int) Math.floor(Math.random() * STARTING_PHRASES.length)]); // Handler that is called every time the motion processor receives new data. - this.motionProcessor.setInputHandler((rotationVector, deviceId) -> { - Log.i("MotionProcessor", "Rotation vector received: " + rotationVector); - Log.i("MotionProcessor", "Last error offset:" + this.motionProcessor.getError(deviceId, this.motionProcessor.secondsPassed())); - // Check whether the current exercise has been completed. - // This is determined by the duration of the exercise, and the amount of time that has passed. - // The duration of the exercise originates from the database, and is stored in seconds. - // Whenever 'useExercise' is called, the timer resets and this method will be called again. - if (this.motionProcessor.hasFinished()) { - // If for some reason the parent activity is not defined, - // move back to the main screen. - if (this.parentActivity == null) { - // Move to main screen - NavigationManager.navigateToActivity(getContext(), MainActivity.class); - return; - } - // Move on to the next exercise, or finish. - if (this.exerciseCount > 0) { - this.exerciseCount--; - this.parentActivity.fetchExerciseAsync((newExercise) -> { - this.motionProcessor.useExercise(newExercise); - // Whenever the database retrieval failed, we return to the main screen. - }, (failed) -> { - // Move to main screen - NavigationManager.navigateToActivity(parentActivity, MainActivity.class); - }); - } else { - // Finish the exercise. - NavigationManager.navigateToActivity(parentActivity, EndScreenActivity.class); - } - } - }); } /** @@ -130,6 +99,7 @@ public class ExerciseStatusElement extends View implements IInputHandler { public void setExercise(Exercise exercise) { this.motionProcessor.useExercise(exercise); this.exercise = exercise; + Log.i("MotionProcessor", "Updating exercise in ExerciseStatusElement"); } @Override @@ -157,6 +127,40 @@ public class ExerciseStatusElement extends View implements IInputHandler { @Override public void accept(Vector3f rotationVector, int sensorId) { + Log.i("MotionProcessor", "Rotation vector received: " + rotationVector); + Log.i("MotionProcessor", "Last error offset:" + this.motionProcessor.getError(sensorId, this.motionProcessor.secondsPassed())); + + // Check whether the current exercise has been completed. + // This is determined by the duration of the exercise, and the amount of time that has passed. + // The duration of the exercise originates from the database, and is stored in seconds. + // Whenever 'useExercise' is called, the timer resets and this method will be called again. + if (this.motionProcessor.hasFinished() && !this.motionProcessor.isRecording()) { + // If for some reason the parent activity is not defined, + // move back to the main screen. + if (this.parentActivity == null) { + // Move to main screen + Log.i("MotionProcessor", "Parent activity was null."); + NavigationManager.navigateToActivity(getContext(), MainActivity.class); + return; + } + // Move on to the next exercise, or finish. + if (this.exerciseCount > 0) { + this.exerciseCount--; + this.parentActivity.fetchExerciseAsync((newExercise) -> { + this.motionProcessor.useExercise(newExercise); + + // Whenever the database retrieval failed, we return to the main screen. + }, (failed) -> { + // Move to main screen + Log.i("MotionProcessor", "Failed to fetch exercise from database"); + NavigationManager.navigateToActivity(parentActivity, MainActivity.class); + }); + } else { + // Finish the exercise. + Log.i("MotionProcessor", "Exercise has finished"); + NavigationManager.navigateToActivity(parentActivity, EndScreenActivity.class); + } + } } } diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java index 66c6d94..52c8524 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java @@ -335,4 +335,8 @@ public class InputProcessor { public float secondsPassed() { return (float) secondsPassed; } + + public boolean isRecording() { + return this.recordingMovement; + } } From 902cc184ee6d9bcb158adf5384fa52b496bbe16f Mon Sep 17 00:00:00 2001 From: Niels Gras Date: Mon, 3 Jun 2024 14:47:51 +0200 Subject: [PATCH 07/36] added arm circle movement --- .../app/src/main/res/raw/armcircle.qianim | 275 ++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 code/src/Fitbot/app/src/main/res/raw/armcircle.qianim diff --git a/code/src/Fitbot/app/src/main/res/raw/armcircle.qianim b/code/src/Fitbot/app/src/main/res/raw/armcircle.qianim new file mode 100644 index 0000000..5d8005b --- /dev/null +++ b/code/src/Fitbot/app/src/main/res/raw/armcircle.qianim @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 9639d6ba3bd64b4e1bfd6eb5a2fbed5b37435eb1 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 3 Jun 2024 14:48:18 +0200 Subject: [PATCH 08/36] hardware docs update --- docs/documentation/hardware/pcb.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/documentation/hardware/pcb.md b/docs/documentation/hardware/pcb.md index 2142df2..80c28a0 100644 --- a/docs/documentation/hardware/pcb.md +++ b/docs/documentation/hardware/pcb.md @@ -20,5 +20,9 @@ We chose this pcb because its really small and it has a socket for a sensor and We are going to rotational data from the sensor and use that to give feedback to the user based on how well they did the exercise. ![alt text](../assets/pcbImage.png) +## How can i program this ESP? + +To program this you need to use the Arduino IDE. You need to install the ESP8266 board in the board manager. You need to go to File -> prefrences -> additional board manager url's. Then you need to add this link `https://arduino.esp8266.com/stable/package_esp8266com_index.json`. Then you can find the LOLIN(WEMOS) D1 mini lite. Thats the board you need to select. When compiling you will see a lot of warnings but you can ignore them. + ### Sources * https://github.com/Sorakage033/SlimeVR-CheeseCake \ No newline at end of file From 85c6e4e918673e53c10c9efb0154daedaf60c944 Mon Sep 17 00:00:00 2001 From: SebasKoedam Date: Mon, 3 Jun 2024 14:55:13 +0200 Subject: [PATCH 09/36] feat: Add short description field to Exercise class --- .../java/com/example/fitbot/exercise/Exercise.java | 4 +++- .../com/example/fitbot/exercise/ExerciseManager.java | 5 +++-- .../example/fitbot/ui/activities/FitnessActivity.java | 11 +++++++++++ .../app/src/main/res/layout/activity_fitness.xml | 2 +- .../Fitbot/app/src/main/res/layout/dialog_info.xml | 2 +- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java index f0a1e7a..d0c4dc9 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java @@ -8,6 +8,7 @@ public class Exercise { public final GesturePath leftPath; public final GesturePath rightPath; public final String name; + public final String shortDescription; public final String description; public final String imageUrl; public final String videoUrl; @@ -24,9 +25,10 @@ public class Exercise { * @param imageUrl The URL of the image. * @param videoUrl The URL of the video. */ - public Exercise(EMuscleGroup muscleGroup, String name, String description, String imageUrl, String videoUrl, GesturePath leftPath, GesturePath rightPath, float exerciseTimeInSeconds) { + public Exercise(EMuscleGroup muscleGroup, String name,String shortDescription, String description, String imageUrl, String videoUrl, GesturePath leftPath, GesturePath rightPath, float exerciseTimeInSeconds) { this.name = name; this.muscleGroup = muscleGroup; + this.shortDescription = shortDescription; this.description = description; this.leftPath = leftPath; this.rightPath = rightPath; diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java index 613eb36..94450be 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java @@ -21,10 +21,10 @@ public class ExerciseManager { private static final String PROPERTY_EXERCISE_DURATION = "duration"; private static final String PROPERTY_EXERCISE_ID = "exerciseId"; private static final String PROPERTY_MUSCLE_GROUP = "muscleGroup"; - private static final String PROPERTY_SHORT_DESC = "shortDescription"; private static final String PROPERTY_IMAGE_URL = "imageUrl"; private static final String PROPERTY_VIDEO_URL = "videoUrl"; private static final String PROPERTY_DESC = "description"; + private static final String PROPERTY_SHORT_DESC = "shortDescription"; private static final String PROPERTY_PATH = "path"; private static final String PROPERTY_NAME = "name"; @@ -34,7 +34,7 @@ public class ExerciseManager { public static final int SENSOR_COUNT = 2; private static final String[] REQUIRED_PROPERTIES = { - PROPERTY_MUSCLE_GROUP, PROPERTY_DESC, PROPERTY_IMAGE_URL, + PROPERTY_MUSCLE_GROUP, PROPERTY_DESC,PROPERTY_SHORT_DESC, PROPERTY_IMAGE_URL, PROPERTY_VIDEO_URL, PROPERTY_NAME, PROPERTY_PATH, PROPERTY_EXERCISE_DURATION, PROPERTY_EXERCISE_ID, PROPERTY_SHORT_DESC @@ -112,6 +112,7 @@ public class ExerciseManager { EMuscleGroup.parse(content.get(PROPERTY_MUSCLE_GROUP).getAsString()), content.get(PROPERTY_NAME).getAsString(), content.get(PROPERTY_DESC).getAsString(), + content.get(PROPERTY_SHORT_DESC).getAsString(), content.get(PROPERTY_IMAGE_URL).getAsString(), content.get(PROPERTY_VIDEO_URL).getAsString(), GesturePath.fromString(leftRightData[0]), diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 1d74427..67d4d31 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -33,7 +33,12 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall private ExerciseStatusElement exerciseStatusElement; private InputProcessor motionProcessor; private Exercise currentExercise; + + // Exercise status element data + private TextView exerciseMuscleGroupTextView; private TextView exerciseNameTextView; + private TextView exerciseShortDescriptionTextView; + private TextView exerciseDescriptionTextView; // Some nice little messages for the user private static final String[] EXERCISE_NOT_FOUND_MESSAGES = new String[]{ @@ -58,7 +63,11 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall // Remove the ugly ass bar on top of the view setSpeechBarDisplayStrategy(SpeechBarDisplayStrategy.IMMERSIVE); + + // Fill empty objects with exercise data this.exerciseNameTextView = findViewById(R.id.textViewFitnessTitle); + this.exerciseDescriptionTextView = findViewById(R.id.textViewDialogDescription); + this.exerciseShortDescriptionTextView = findViewById(R.id.textViewFitnessShortDescription); // Find the VideoView by its ID VideoView videoView = findViewById(R.id.videoView); @@ -128,6 +137,8 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall onFailedFetch.handle(null); } else { exerciseNameTextView.setText(exercise.name); + exerciseShortDescriptionTextView.setText(exercise.shortDescription); + exerciseDescriptionTextView.setText(exercise.description); onSuccessfulFetch.handle(exercise); } })).start(); diff --git a/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml b/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml index d72d83c..1eb25a3 100644 --- a/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml +++ b/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml @@ -84,7 +84,7 @@ android:layout_gravity="center_horizontal"> Date: Mon, 3 Jun 2024 14:55:24 +0200 Subject: [PATCH 10/36] Updated some stuff --- .../ui/components/ExerciseStatusElement.java | 71 +++++++++---------- .../example/fitbot/util/path/GesturePath.java | 2 + .../util/processing/InputProcessor.java | 2 + 3 files changed, 36 insertions(+), 39 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java index e8b2351..293068c 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/components/ExerciseStatusElement.java @@ -18,12 +18,7 @@ import com.example.fitbot.util.NavigationManager; import com.example.fitbot.util.processing.IInputHandler; import com.example.fitbot.util.processing.InputProcessor; -import org.joml.Matrix4f; -import org.joml.Vector2f; import org.joml.Vector3f; -import org.joml.Vector4f; - -import java.util.concurrent.ConcurrentLinkedQueue; public class ExerciseStatusElement extends View implements IInputHandler { @@ -87,8 +82,6 @@ public class ExerciseStatusElement extends View implements IInputHandler { // Handler that is called every time the motion processor receives new data. - - } /** @@ -127,40 +120,40 @@ public class ExerciseStatusElement extends View implements IInputHandler { @Override public void accept(Vector3f rotationVector, int sensorId) { - Log.i("MotionProcessor", "Rotation vector received: " + rotationVector); - Log.i("MotionProcessor", "Last error offset:" + this.motionProcessor.getError(sensorId, this.motionProcessor.secondsPassed())); + Log.i("MotionProcessor", "Rotation vector received: " + rotationVector); + Log.i("MotionProcessor", "Last error offset:" + this.motionProcessor.getError(sensorId, this.motionProcessor.secondsPassed())); - // Check whether the current exercise has been completed. - // This is determined by the duration of the exercise, and the amount of time that has passed. - // The duration of the exercise originates from the database, and is stored in seconds. - // Whenever 'useExercise' is called, the timer resets and this method will be called again. - if (this.motionProcessor.hasFinished() && !this.motionProcessor.isRecording()) { - // If for some reason the parent activity is not defined, - // move back to the main screen. - if (this.parentActivity == null) { - // Move to main screen - Log.i("MotionProcessor", "Parent activity was null."); - NavigationManager.navigateToActivity(getContext(), MainActivity.class); - return; - } - // Move on to the next exercise, or finish. - if (this.exerciseCount > 0) { - this.exerciseCount--; - this.parentActivity.fetchExerciseAsync((newExercise) -> { - this.motionProcessor.useExercise(newExercise); - - // Whenever the database retrieval failed, we return to the main screen. - }, (failed) -> { - // Move to main screen - Log.i("MotionProcessor", "Failed to fetch exercise from database"); - NavigationManager.navigateToActivity(parentActivity, MainActivity.class); - }); - } else { - // Finish the exercise. - Log.i("MotionProcessor", "Exercise has finished"); - NavigationManager.navigateToActivity(parentActivity, EndScreenActivity.class); - } + // Check whether the current exercise has been completed. + // This is determined by the duration of the exercise, and the amount of time that has passed. + // The duration of the exercise originates from the database, and is stored in seconds. + // Whenever 'useExercise' is called, the timer resets and this method will be called again. + if (this.motionProcessor.hasFinished() && !this.motionProcessor.isRecording()) { + // If for some reason the parent activity is not defined, + // move back to the main screen. + if (this.parentActivity == null) { + // Move to main screen + Log.i("MotionProcessor", "Parent activity was null."); + NavigationManager.navigateToActivity(getContext(), MainActivity.class); + return; } + // Move on to the next exercise, or finish. + if (this.exerciseCount > 0) { + this.exerciseCount--; + this.parentActivity.fetchExerciseAsync((newExercise) -> { + this.motionProcessor.useExercise(newExercise); + + // Whenever the database retrieval failed, we return to the main screen. + }, (failed) -> { + // Move to main screen + Log.i("MotionProcessor", "Failed to fetch exercise from database"); + NavigationManager.navigateToActivity(parentActivity, MainActivity.class); + }); + } else { + // Finish the exercise. + Log.i("MotionProcessor", "Exercise has finished"); + NavigationManager.navigateToActivity(parentActivity, EndScreenActivity.class); + } + } } } diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java index 14e7706..0b6a857 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java @@ -92,6 +92,8 @@ public class GesturePath { */ public static GesturePath fromString(String input) { + if (input == null) + throw new IllegalArgumentException("Input string cannot be null"); byte[] bytes = input.getBytes(); // Check if the input string contains a valid amount of bytes (12 bytes per vector) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java index 52c8524..a39dad6 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java @@ -101,6 +101,7 @@ public class InputProcessor { if (recording) { this.secondsPassed = 0.0D; this.lastTime = System.currentTimeMillis(); + this.selfRotationVectorPaths = new Vector3f[2][(int) (duration * this.sampleRate)]; } } @@ -179,6 +180,7 @@ public class InputProcessor { int deviceId = object.get("deviceId").getAsInt(); String type = object.get("type").getAsString(); + // Parse the retrieved data parseRotationVector(rotation, deviceId); } catch (Exception e) { Log.i("MotionProcessor", "Failed to parse packet data."); From f90bfb4d6e3ec5aaaa2d369b05a8a4ad0c77b98e Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 3 Jun 2024 14:55:36 +0200 Subject: [PATCH 11/36] Update infrastructure --- docs/documentation/diagrams/infrastructure.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/documentation/diagrams/infrastructure.md b/docs/documentation/diagrams/infrastructure.md index bbb68a7..eff2532 100644 --- a/docs/documentation/diagrams/infrastructure.md +++ b/docs/documentation/diagrams/infrastructure.md @@ -7,7 +7,7 @@ Raspberry pi --> NodeJS Raspberry pi --> Database NodeJS --> Androidapp : getExerciseData (Wifi, Rest API) Database <--> NodeJS : Database queries - +NodeJS --> ESP8266 ESP8266 --> Androidapp : getRotationalData (Wifi) namespace Server { @@ -32,6 +32,7 @@ namespace Server { class NodeJS { +MariaDB GetRandomExercise() + PassIpAddress() } } From 10b0421f90843c3c9308ae634f12d2b0dde07ca9 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 3 Jun 2024 15:05:25 +0200 Subject: [PATCH 12/36] Infrastructure update --- docs/documentation/diagrams/infrastructure.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/docs/documentation/diagrams/infrastructure.md b/docs/documentation/diagrams/infrastructure.md index eff2532..7d8ef0f 100644 --- a/docs/documentation/diagrams/infrastructure.md +++ b/docs/documentation/diagrams/infrastructure.md @@ -41,14 +41,7 @@ namespace Pepper { +Java +Android SDK +QiSDK - motionProcessing() - robotMovement() - showVideo() - fitnessCycle() - - } - } namespace Hardware { From d46c0a8a927b33d5269d3b59f78202cdbbe30c47 Mon Sep 17 00:00:00 2001 From: Niels Gras Date: Mon, 3 Jun 2024 15:18:59 +0200 Subject: [PATCH 13/36] changed file name --- docs/documentation/hardware/Ideasforfitbord.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/documentation/hardware/Ideasforfitbord.md diff --git a/docs/documentation/hardware/Ideasforfitbord.md b/docs/documentation/hardware/Ideasforfitbord.md new file mode 100644 index 0000000..8efdd05 --- /dev/null +++ b/docs/documentation/hardware/Ideasforfitbord.md @@ -0,0 +1,17 @@ +# Ideas for hardware + +# making a balance bord + +Since We are not able to connect the wii fit bord we have to come up with a solution. We thought of it for some time and what we want to do with it. Origanlly we wanted to use the balance bord for excersises such as standing on one leg. This is a simple leg excersise we wanted to have. We thaugt of multiple solutions to still have this excersise. However we still needed to think of a design for the frame. + +# the frame + +We wanted it to have a similar style to the balance bord. howevere since we can make or own we wanted to make it a bit taller. This makes it easier to implement some other excersise such as the step up. This is na excersise that benefits from a taller box than the wii fit box. + +## LDR + +We can use a LDR to determine if someone is standing on the bord + +## Knock sensor + +![alt text](../assets/knocksensor.png) \ No newline at end of file From 18ec63fcd1e2faad35f1ec369053b5054cbdb18c Mon Sep 17 00:00:00 2001 From: Luca Warmenhoven Date: Mon, 3 Jun 2024 15:23:57 +0200 Subject: [PATCH 14/36] Updated some stuff --- .../java/com/example/fitbot/exercise/ExerciseManager.java | 8 ++++++-- .../java/com/example/fitbot/util/path/GesturePath.java | 8 +++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java index 94450be..94599a9 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java @@ -29,7 +29,7 @@ public class ExerciseManager { private static final String PROPERTY_NAME = "name"; // The delimiter used to separate the paths of the sensors. - public static final String PATH_DELIMITER = ";"; + public static final String PATH_DELIMITER = ":"; public static final int SENSOR_COUNT = 2; @@ -96,6 +96,7 @@ public class ExerciseManager { // Ensure all required properties are present for (String property : REQUIRED_PROPERTIES) { if (!content.has(property)) { + System.out.println("Missing property: " + property); return null; } } @@ -103,10 +104,13 @@ public class ExerciseManager { // Path data is split into two parts, due to the left and right hand. // If one wants to add support for more sensors, one will have to adjust the Exercise // class to support more paths. + System.out.println(content.get(PROPERTY_PATH).getAsString()); String[] leftRightData = content.get(PROPERTY_PATH).getAsString().split(PATH_DELIMITER); - if (leftRightData.length != SENSOR_COUNT) + if (leftRightData.length != SENSOR_COUNT) { + System.out.println("Invalid path data."); return null; + } return new Exercise( EMuscleGroup.parse(content.get(PROPERTY_MUSCLE_GROUP).getAsString()), diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java index 0b6a857..9f9decd 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java @@ -13,8 +13,10 @@ public class GesturePath { * @param vectors The vectors that make up the path. */ public GesturePath(Vector3f[] vectors) { - if (vectors.length < 2) - throw new IllegalArgumentException("A path must have at least two points."); + if (vectors.length < 2) { + this.segments = new PathSegment[0]; + return; + } this.segments = new PathSegment[vectors.length - 1]; for (int i = 0; i < vectors.length - 1; i++) @@ -98,7 +100,7 @@ public class GesturePath { // Check if the input string contains a valid amount of bytes (12 bytes per vector) if (input.length() % 12 != 0) { - throw new IllegalArgumentException("Invalid input string length"); + throw new IllegalArgumentException("Invalid input string length (" + input.length() + " bytes provided - must be a multiple of 12)"); } Vector3f[] vectors = new Vector3f[input.length() / 12]; From d167aed8a6dc29934f83018ddcf82cf768d37715 Mon Sep 17 00:00:00 2001 From: Niels Gras Date: Mon, 3 Jun 2024 15:32:31 +0200 Subject: [PATCH 15/36] added sound --- .../res/raw/bubble-pop-ding-betacut-1-00-01.mp3 | Bin 0 -> 69989 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 code/src/Fitbot/app/src/main/res/raw/bubble-pop-ding-betacut-1-00-01.mp3 diff --git a/code/src/Fitbot/app/src/main/res/raw/bubble-pop-ding-betacut-1-00-01.mp3 b/code/src/Fitbot/app/src/main/res/raw/bubble-pop-ding-betacut-1-00-01.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9fe5526068e4a11dec88a9ab6e5909cc3ea57f70 GIT binary patch literal 69989 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 Date: Mon, 3 Jun 2024 15:51:17 +0200 Subject: [PATCH 16/36] changed movement --- code/src/Fitbot/app/src/main/res/raw/armcircle.qianim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/src/Fitbot/app/src/main/res/raw/armcircle.qianim b/code/src/Fitbot/app/src/main/res/raw/armcircle.qianim index 5d8005b..2c796e3 100644 --- a/code/src/Fitbot/app/src/main/res/raw/armcircle.qianim +++ b/code/src/Fitbot/app/src/main/res/raw/armcircle.qianim @@ -40,7 +40,7 @@ - + @@ -177,14 +177,14 @@ - + - + - + From 452aad6929c2e4602ad10671f9dc2eb8aa75294f Mon Sep 17 00:00:00 2001 From: Niels Gras Date: Mon, 3 Jun 2024 15:59:26 +0200 Subject: [PATCH 17/36] added squat --- .../Fitbot/app/src/main/res/raw/squat.qianim | 207 ++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 code/src/Fitbot/app/src/main/res/raw/squat.qianim diff --git a/code/src/Fitbot/app/src/main/res/raw/squat.qianim b/code/src/Fitbot/app/src/main/res/raw/squat.qianim new file mode 100644 index 0000000..a7fefff --- /dev/null +++ b/code/src/Fitbot/app/src/main/res/raw/squat.qianim @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ffb90c001d5ae18943b7bb424b915b3ffe79dfab Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Mon, 3 Jun 2024 16:17:27 +0200 Subject: [PATCH 18/36] Refactoring --- code/arduino/Movement-sensor-code/Connectivity.cpp | 3 ++- .../Movement-sensor-code/Movement-sensor-code.ino | 2 +- code/arduino/Movement-sensor-code/SensorManager.cpp | 10 +++++----- code/arduino/Movement-sensor-code/SensorManager.h | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/code/arduino/Movement-sensor-code/Connectivity.cpp b/code/arduino/Movement-sensor-code/Connectivity.cpp index 1f7252d..651e40c 100644 --- a/code/arduino/Movement-sensor-code/Connectivity.cpp +++ b/code/arduino/Movement-sensor-code/Connectivity.cpp @@ -24,6 +24,7 @@ const char* getServerURL = "http://145.92.8.132:443/get-ip"; String ipAddress = ""; // string that will hold the server's IP address const char* Connectivity::fetchIPAddress() { + char* ipAddress = NULL; // Declare ipAddress as a char* if (WiFi.status() == WL_CONNECTED) { HTTPClient http; WiFiClient client; @@ -33,7 +34,7 @@ const char* Connectivity::fetchIPAddress() { if (httpCode > 0) { if (httpCode == HTTP_CODE_OK) { // If successful (code 200), read the response body and store the IP address - ipAddress = http.getString(); + ipAddress = strdup(http.getString().c_str()); } } else { Serial.printf("GET request failed, error: %s\n", http.errorToString(httpCode).c_str()); diff --git a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino index 6540384..fbb0a11 100644 --- a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino +++ b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino @@ -37,7 +37,7 @@ struct acceleration { accelData.z, "data"); // %d = int, %f = floatation, %s = string - connectivity.httpPost(serverIp, "/", 3445, buffer, strlen(buffer), "application/json"); + connectivity.httpPost("192.168.137.30", "/", 3445, buffer, strlen(buffer), "application/json"); lastTime = currentTime; } } diff --git a/code/arduino/Movement-sensor-code/SensorManager.cpp b/code/arduino/Movement-sensor-code/SensorManager.cpp index 7fee39d..ab2216f 100644 --- a/code/arduino/Movement-sensor-code/SensorManager.cpp +++ b/code/arduino/Movement-sensor-code/SensorManager.cpp @@ -17,14 +17,14 @@ void SensorManager::sensorSetup() { // myIMU.enableStepCounter(500); //Send data update every 500ms } //get sensordata -SensorManager::RotationQuintillions SensorManager::getQuintillions() { +SensorManager::RotationQuaternions SensorManager::getQuaternions() { if (myIMU.dataAvailable() == true) { float i = myIMU.getQuatI(); float j = myIMU.getQuatJ(); float k = myIMU.getQuatK(); float w = myIMU.getQuatReal(); - RotationQuintillions rotation = { i, j, k, w }; + RotationQuaternions rotation = { i, j, k, w }; return rotation; } else { float i = myIMU.getQuatI(); @@ -32,13 +32,13 @@ SensorManager::RotationQuintillions SensorManager::getQuintillions() { float k = myIMU.getQuatK(); float w = myIMU.getQuatReal(); - RotationQuintillions rotation = { i, j, k, w }; + RotationQuaternions rotation = { i, j, k, w }; return rotation; } } -//calculate Quintillions to Euler angles from -1π to +1π +//calculate Quaternions to Euler angles from -1π to +1π SensorManager::eulerAngles SensorManager::getEulerAngles() { - SensorManager::RotationQuintillions rotation = getQuintillions(); + SensorManager::RotationQuaternions rotation = getQuaternions(); float roll = atan2(2.0f * (rotation.w * rotation.i + rotation.j * rotation.k), 1.0f - 2.0f * (rotation.i * rotation.i + rotation.j * rotation.j)); float pitch = asin(2.0f * (rotation.w * rotation.j - rotation.k * rotation.i)); float yaw = atan2(2.0f * (rotation.w * rotation.k + rotation.i * rotation.j), 1.0f - 2.0f * (rotation.j * rotation.j + rotation.k * rotation.k)); diff --git a/code/arduino/Movement-sensor-code/SensorManager.h b/code/arduino/Movement-sensor-code/SensorManager.h index aaf4d71..a7652e7 100644 --- a/code/arduino/Movement-sensor-code/SensorManager.h +++ b/code/arduino/Movement-sensor-code/SensorManager.h @@ -23,13 +23,13 @@ public: acceleration getAcelleration(); bool sensorTap(); private: - struct RotationQuintillions { + struct RotationQuaternions { float i; float j; float k; float w; }; - RotationQuintillions getQuintillions(); + RotationQuaternions getQuaternions(); BNO080 myIMU; }; From 46ba5dbdbd71d042c7e4eff7342ac8f139c8fc94 Mon Sep 17 00:00:00 2001 From: SebasKoedam Date: Mon, 3 Jun 2024 16:25:35 +0200 Subject: [PATCH 19/36] video will now be displayed with link from database --- .../fitbot/ui/activities/FitnessActivity.java | 13 +++++-------- .../app/src/main/res/layout/activity_fitness.xml | 5 ++++- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index fb84abd..faa10b9 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -40,6 +40,8 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall private TextView exerciseShortDescriptionTextView; private TextView exerciseDescriptionTextView; + private static String exerciseVideoUrl; + // Some nice little messages for the user private static final String[] EXERCISE_NOT_FOUND_MESSAGES = new String[]{ "Ik heb momenteel helaas wat moeite met het ophalen van oefeningen, sorry.", @@ -69,6 +71,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall this.exerciseDescriptionTextView = findViewById(R.id.textViewDialogDescription); this.exerciseShortDescriptionTextView = findViewById(R.id.textViewFitnessShortDescription); + // Find the VideoView by its ID VideoView videoView = findViewById(R.id.videoView); playVideo(videoView, this); @@ -139,6 +142,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall exerciseNameTextView.setText(exercise.name); exerciseShortDescriptionTextView.setText(exercise.shortDescription); exerciseDescriptionTextView.setText(exercise.description); + exerciseVideoUrl = exercise.videoUrl; onSuccessfulFetch.handle(exercise); } })).start(); @@ -153,14 +157,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall public static void playVideo(VideoView videoView, Context context) { // Set up the video player if (videoView != null) { - Uri videoUri = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.bicepvideo); - videoView.setVideoURI(videoUri); - - videoView.setOnCompletionListener(mp -> { - // Repeat the video when it finishes playing - videoView.start(); - }); - + videoView.setVideoPath(exerciseVideoUrl); videoView.start(); } else { Log.e("FitnessActivity", "VideoView is null. Check your layout XML."); diff --git a/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml b/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml index 1eb25a3..ea324d5 100644 --- a/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml +++ b/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml @@ -47,7 +47,10 @@ android:layout_width="300dp" android:layout_height="300dp" android:layout_centerInParent="true" - android:layout_margin="50dp" /> + android:layout_marginStart="50dp" + android:layout_marginTop="50dp" + android:layout_marginEnd="50dp" + android:layout_marginBottom="50dp" /> From d0d09aa2d22a9ef1ea61b5d59f587141b8da43ba Mon Sep 17 00:00:00 2001 From: SebasKoedam Date: Mon, 3 Jun 2024 16:28:56 +0200 Subject: [PATCH 20/36] Refactor FitnessActivity code to remove commented out video playback function --- .../fitbot/ui/activities/FitnessActivity.java | 2 +- .../res/raw/bubble-pop-ding-betacut-1-00-01.mp3 | Bin 69989 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 code/src/Fitbot/app/src/main/res/raw/bubble-pop-ding-betacut-1-00-01.mp3 diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index faa10b9..28c28c5 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -74,7 +74,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall // Find the VideoView by its ID VideoView videoView = findViewById(R.id.videoView); - playVideo(videoView, this); +// playVideo(videoView, this); NavigationManager.setupButtonNavigation(this, R.id.homeButtonFitness, MainActivity.class); NavigationManager.setupButtonNavigation(this, R.id.skipButtonFitness, MainActivity.class); //Needs to skip exercises once those are implemented diff --git a/code/src/Fitbot/app/src/main/res/raw/bubble-pop-ding-betacut-1-00-01.mp3 b/code/src/Fitbot/app/src/main/res/raw/bubble-pop-ding-betacut-1-00-01.mp3 deleted file mode 100644 index 9fe5526068e4a11dec88a9ab6e5909cc3ea57f70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69989 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 Date: Mon, 3 Jun 2024 16:30:07 +0200 Subject: [PATCH 21/36] fixed squat --- .../Fitbot/app/src/main/res/raw/squat.qianim | 132 ++---------------- 1 file changed, 12 insertions(+), 120 deletions(-) diff --git a/code/src/Fitbot/app/src/main/res/raw/squat.qianim b/code/src/Fitbot/app/src/main/res/raw/squat.qianim index a7fefff..a25766a 100644 --- a/code/src/Fitbot/app/src/main/res/raw/squat.qianim +++ b/code/src/Fitbot/app/src/main/res/raw/squat.qianim @@ -25,76 +25,22 @@ - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - + @@ -133,75 +79,21 @@ - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - + From 930553ffeae53b6389ec950115e7245109bf3b94 Mon Sep 17 00:00:00 2001 From: Niels Date: Tue, 4 Jun 2024 00:03:34 +0200 Subject: [PATCH 22/36] added dataprotocol research --- docs/documentation/brainstorm/Dataprotocols.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/documentation/brainstorm/Dataprotocols.md diff --git a/docs/documentation/brainstorm/Dataprotocols.md b/docs/documentation/brainstorm/Dataprotocols.md new file mode 100644 index 0000000..e69de29 From 3cfea7fc6fb12e8ebb6eb6a29983597dc1390de0 Mon Sep 17 00:00:00 2001 From: Niels Date: Tue, 4 Jun 2024 00:03:55 +0200 Subject: [PATCH 23/36] added the research? --- .../documentation/brainstorm/Dataprotocols.md | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/docs/documentation/brainstorm/Dataprotocols.md b/docs/documentation/brainstorm/Dataprotocols.md index e69de29..3ca3af3 100644 --- a/docs/documentation/brainstorm/Dataprotocols.md +++ b/docs/documentation/brainstorm/Dataprotocols.md @@ -0,0 +1,36 @@ +# Dataprotocols + + + +# different types + +### Hypertext Transfer Protocol (HTTP) +HTTP is the foundation of web communication, permitting the transport of data across the internet using a request-response architecture. It uses TCP/IP and stands out by its statelessness, with each request being independent, increasing the web's scalability and flexibility. While it does not encrypt data which makes it usable with sensible data it still makes an nice easy to use option. + +We decided to use this for our project because for communicating with the database it is easy to use and we are not usiong sensible data. If we were to use sensible data that we want to encrypt we can use HTTPS. We are only sending small amounts of data to our app and we are not transfering files to our app. This made HTTP it way more attractive option. + +### File Transfer Protocol (FTP) +FTP is the classic protocol for transferring files between computers. It establishes a connection between two computers and it has 2 modes. Passive mode for recieving files. This leaves a port open on the computer. You also have an active mode. This is were the client opens a port towards an other computer. If you want to encrypt your data you can use FTPS. + +When we started the project is thought of this as a option however since we are not only transfering videos but also stuff like titles and dicriptions i thought we were not going to enable it to its fullest potattional. On top of that we are also transfering only small amounts of videos and we switched the way we used videos on our project by hosting the videos on a service like youtube. This made FTP not usefull for our project. + +### User Datagram Protocol (UDP) +UDP is s connectionless protocol that prioritizes speed over reliability. It sends datagrams to a computer without establishing a connection with the reciever. It is not stable so you need to keep in mind that it will not be 100% accurate. However it is really fast so this makes it a suitible option for applications where a tiny amount of dataloss is not an issue. + +(to be added) + +### Message Queue Telemetry Transport (MQTT) +MQTT is s lightweight messaging protocol designed for machine-to-machine communication in Internet of Things applications. It uses a publish subscribe model. This is were one device publishes data on a server and the other devices need to subscribe to that publisher to recieve the data. It is commonly used to transmot sensor data to a server. + +(to be added) + +### Real-time Streaming Protocols (RTSP) +RTSP is collection of protocols used for streaming media such as videos over networks. However it requires additional software for it to work properly. RTSP shines in controlling live streams allowing features like pause. It's often used in IPTV's and video conferencing applications. + + +Due to its limited support we are not uising it in our project. We were already having issues with other things that are not supported on android or mobile apps and we did not want to risk getting more issues while working on our project since we were already using up our limited time. It is a very interesting option though since it will enable more advanced videos. It also is realy complex which makes it a less atractive option since we are already learning a lot of new things and if we were to want to learn more things we would rather learn something with a low learning curve. + + +# Conclusion + +We decide to just go for the simple solution wich is google drive how ever if we want to expend or had more time we could have used. \ No newline at end of file From 2118680b27e8ec0b3311085a39ed300a84a43061 Mon Sep 17 00:00:00 2001 From: Niels Date: Tue, 4 Jun 2024 00:04:58 +0200 Subject: [PATCH 24/36] removed wrong conclusion --- docs/documentation/brainstorm/Dataprotocols.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/documentation/brainstorm/Dataprotocols.md b/docs/documentation/brainstorm/Dataprotocols.md index 3ca3af3..c82c3c8 100644 --- a/docs/documentation/brainstorm/Dataprotocols.md +++ b/docs/documentation/brainstorm/Dataprotocols.md @@ -31,6 +31,4 @@ RTSP is collection of protocols used for streaming media such as videos over ne Due to its limited support we are not uising it in our project. We were already having issues with other things that are not supported on android or mobile apps and we did not want to risk getting more issues while working on our project since we were already using up our limited time. It is a very interesting option though since it will enable more advanced videos. It also is realy complex which makes it a less atractive option since we are already learning a lot of new things and if we were to want to learn more things we would rather learn something with a low learning curve. -# Conclusion - -We decide to just go for the simple solution wich is google drive how ever if we want to expend or had more time we could have used. \ No newline at end of file +# Conclusion \ No newline at end of file From 3b65fffec8bd4adc16dd9badc084189b13b3b07c Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Tue, 4 Jun 2024 10:31:24 +0200 Subject: [PATCH 25/36] motion processing stuff + logs + fix crash (luca) --- .../fitbot/ui/activities/FitnessActivity.java | 22 +++++++++++-------- .../example/fitbot/util/path/GesturePath.java | 6 ++++- .../util/processing/InputProcessor.java | 17 +++++++------- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index fb84abd..9339f71 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -40,6 +40,8 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall private TextView exerciseShortDescriptionTextView; private TextView exerciseDescriptionTextView; + private final Object lock = new Object(); + // Some nice little messages for the user private static final String[] EXERCISE_NOT_FOUND_MESSAGES = new String[]{ "Ik heb momenteel helaas wat moeite met het ophalen van oefeningen, sorry.", @@ -58,16 +60,14 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); QiSDK.register(this, this); - setContentView(R.layout.activity_fitness); - // Remove the ugly ass bar on top of the view - setSpeechBarDisplayStrategy(SpeechBarDisplayStrategy.IMMERSIVE); - // Fill empty objects with exercise data this.exerciseNameTextView = findViewById(R.id.textViewFitnessTitle); - this.exerciseDescriptionTextView = findViewById(R.id.textViewDialogDescription); + //this.exerciseDescriptionTextView = findViewById(R.id.textViewDialogDescription); this.exerciseShortDescriptionTextView = findViewById(R.id.textViewFitnessShortDescription); + // Remove the ugly ass bar on top of the view + setSpeechBarDisplayStrategy(SpeechBarDisplayStrategy.IMMERSIVE); // Find the VideoView by its ID VideoView videoView = findViewById(R.id.videoView); @@ -84,6 +84,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall @Override public void onClick(View v) { showInfoDialog(); + } }); } @@ -109,8 +110,8 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall exerciseStatusElement.initialize(exercise, motionProcessor, EXERCISE_COUNT); motionProcessor.useExercise(exercise); /* TODO: Remove if not needed */motionProcessor.setRecording(true, 10); - motionProcessor.startListening(); motionProcessor.setInputHandler(exerciseStatusElement); + motionProcessor.startListening(); }, (n) -> { int randomMessageIndex = (int) Math.floor(Math.random() * EXERCISE_NOT_FOUND_MESSAGES.length); @@ -136,14 +137,17 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall if (exercise == null) { onFailedFetch.handle(null); } else { - exerciseNameTextView.setText(exercise.name); - exerciseShortDescriptionTextView.setText(exercise.shortDescription); - exerciseDescriptionTextView.setText(exercise.description); onSuccessfulFetch.handle(exercise); + this.runOnUiThread(() -> { + exerciseNameTextView.setText(exercise.name); + exerciseShortDescriptionTextView.setText(exercise.shortDescription); + // exerciseDescriptionTextView.setText(exercise.description); + }); } })).start(); } + /** * Function for playing a video in a VideoView * diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java index 9f9decd..f3b8cb3 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/path/GesturePath.java @@ -14,7 +14,11 @@ public class GesturePath { */ public GesturePath(Vector3f[] vectors) { if (vectors.length < 2) { - this.segments = new PathSegment[0]; + this.segments = new PathSegment[1]; + this.segments[0] = new PathSegment( + new Vector3f(0, 0, 0), + new Vector3f(0, 0, 0) + ); return; } diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java index a39dad6..e95008a 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/util/processing/InputProcessor.java @@ -160,6 +160,8 @@ public class InputProcessor { try { + Log.i("MotionProcessor", "Time passed: " + this.secondsPassed + "s"); + Log.i("MotionProcessor", "Recording: " + this.recordingMovement + ", " + this.secondsPassed + " / " + this.recordingDurationInSeconds); Log.i("MotionProcessor", "Received packet data: " + data); JsonElement json = JsonParser.parseString(data); @@ -198,18 +200,12 @@ public class InputProcessor { // Re-calculate time for index calculation secondsPassed = (System.currentTimeMillis() - lastTime) / 1000.0d; - lastTime = System.currentTimeMillis(); + // Supposed index of the current rotation vector in the `rotationVectorPaths` array int selfIndex = (int) (secondsPassed * sampleRate); - motionDataConsumer.accept(rotation, deviceId); - if (selfIndex >= selfRotationVectorPaths[deviceId].length || selfIndex < 0) - return; - - selfRotationVectorPaths[deviceId][selfIndex] = rotation; - - if ( this.recordingMovement && this.hasFinished()) { + if ( this.recordingMovement && this.secondsPassed >= this.recordingDurationInSeconds) { // Do something with the recorded data. this.recordingMovement = false; // Convert recorded data from `selfRotationVectorPaths` to string, and @@ -221,6 +217,11 @@ public class InputProcessor { Log.i("MotionProcessor", "Converted data: "); Log.i("MotionProcessor", converted); } + motionDataConsumer.accept(rotation, deviceId); + if (selfIndex >= selfRotationVectorPaths[deviceId].length || selfIndex < 0) + return; + + selfRotationVectorPaths[deviceId][selfIndex] = rotation; } } From 0c98744bdd2657e19f3eb5c6b1a24ab1c738d0eb Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Tue, 4 Jun 2024 11:25:49 +0200 Subject: [PATCH 26/36] fix crashes and video player, changed loading elements to UI thread --- .../fitbot/ui/activities/FitnessActivity.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 47b8b76..3daf12c 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -72,8 +72,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall setSpeechBarDisplayStrategy(SpeechBarDisplayStrategy.IMMERSIVE); // Find the VideoView by its ID - VideoView videoView = findViewById(R.id.videoView); -// playVideo(videoView, this); + NavigationManager.setupButtonNavigation(this, R.id.homeButtonFitness, MainActivity.class); NavigationManager.setupButtonNavigation(this, R.id.skipButtonFitness, MainActivity.class); //Needs to skip exercises once those are implemented @@ -139,15 +138,18 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall if (exercise == null) { onFailedFetch.handle(null); } else { - exerciseNameTextView.setText(exercise.name); - exerciseShortDescriptionTextView.setText(exercise.shortDescription); - exerciseDescriptionTextView.setText(exercise.description); - exerciseVideoUrl = exercise.videoUrl; onSuccessfulFetch.handle(exercise); this.runOnUiThread(() -> { exerciseNameTextView.setText(exercise.name); exerciseShortDescriptionTextView.setText(exercise.shortDescription); + exerciseNameTextView.setText(exercise.name); + exerciseShortDescriptionTextView.setText(exercise.shortDescription); +// exerciseDescriptionTextView.setText(exercise.description); + exerciseVideoUrl = exercise.videoUrl; // exerciseDescriptionTextView.setText(exercise.description); + VideoView videoView = findViewById(R.id.videoView); + Log.e("exerciseVideoUrl", "videourl:" + exerciseVideoUrl); + playVideo(videoView, this); }); } })).start(); From 398389aa5e5785bdc23ace71c9d2622ddc2851bf Mon Sep 17 00:00:00 2001 From: SebasKoedam Date: Tue, 4 Jun 2024 11:32:05 +0200 Subject: [PATCH 27/36] added comments and optimized code --- .../fitbot/ui/activities/FitnessActivity.java | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 3daf12c..975a8b3 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -39,11 +39,10 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall private TextView exerciseNameTextView; private TextView exerciseShortDescriptionTextView; private TextView exerciseDescriptionTextView; + private static String exerciseVideoUrl; private final Object lock = new Object(); - private static String exerciseVideoUrl; - // Some nice little messages for the user private static final String[] EXERCISE_NOT_FOUND_MESSAGES = new String[]{ "Ik heb momenteel helaas wat moeite met het ophalen van oefeningen, sorry.", @@ -68,16 +67,14 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall this.exerciseNameTextView = findViewById(R.id.textViewFitnessTitle); //this.exerciseDescriptionTextView = findViewById(R.id.textViewDialogDescription); this.exerciseShortDescriptionTextView = findViewById(R.id.textViewFitnessShortDescription); - // Remove the ugly ass bar on top of the view - setSpeechBarDisplayStrategy(SpeechBarDisplayStrategy.IMMERSIVE); - - // Find the VideoView by its ID + // Navigation Buttons NavigationManager.setupButtonNavigation(this, R.id.homeButtonFitness, MainActivity.class); NavigationManager.setupButtonNavigation(this, R.id.skipButtonFitness, MainActivity.class); //Needs to skip exercises once those are implemented // Hide system UI NavigationManager.hideSystemUI(this); + setSpeechBarDisplayStrategy(SpeechBarDisplayStrategy.IMMERSIVE); // Initiate info button Button infoButtonFitness = findViewById(R.id.infoButtonFitness); @@ -85,7 +82,6 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall @Override public void onClick(View v) { showInfoDialog(); - } }); } @@ -121,8 +117,9 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall NavigationManager.navigateToActivity(this, EndScreenActivity.class); }); }); - - // FitnessCycle.playVideo(qiContext, videoView, this); + VideoView videoView = findViewById(R.id.videoView); + Log.e("exerciseVideoUrl", "videoUrl:" + exerciseVideoUrl); + playVideo(videoView, this); } /** @@ -142,20 +139,13 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall this.runOnUiThread(() -> { exerciseNameTextView.setText(exercise.name); exerciseShortDescriptionTextView.setText(exercise.shortDescription); - exerciseNameTextView.setText(exercise.name); - exerciseShortDescriptionTextView.setText(exercise.shortDescription); -// exerciseDescriptionTextView.setText(exercise.description); + // exerciseDescriptionTextView.setText(exercise.description); exerciseVideoUrl = exercise.videoUrl; - // exerciseDescriptionTextView.setText(exercise.description); - VideoView videoView = findViewById(R.id.videoView); - Log.e("exerciseVideoUrl", "videourl:" + exerciseVideoUrl); - playVideo(videoView, this); }); } })).start(); } - /** * Function for playing a video in a VideoView * From ae479087f7c78b4d63339ddc67496ac1e715cd73 Mon Sep 17 00:00:00 2001 From: Niels Gras Date: Tue, 4 Jun 2024 12:17:36 +0200 Subject: [PATCH 28/36] ideas for fitbord docs --- .../documentation/hardware/Ideasforfitbord.md | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/documentation/hardware/Ideasforfitbord.md b/docs/documentation/hardware/Ideasforfitbord.md index 8efdd05..b8ec804 100644 --- a/docs/documentation/hardware/Ideasforfitbord.md +++ b/docs/documentation/hardware/Ideasforfitbord.md @@ -10,8 +10,40 @@ We wanted it to have a similar style to the balance bord. howevere since we can ## LDR -We can use a LDR to determine if someone is standing on the bord +We can use a LDR to determine if someone is standing on the bord. We will have a small window where light can pass trought to let de LDR read out the light. We need to make clear that the user needs to stand on these points by providing an easy to udnerstand design. ## Knock sensor +A knock sensor is a sensor that detects impact. This could come in handy for us since it could detect impact on our fitbord. If we were to make a fitbord we would love to implement this sensor. We could use it to detect if someone is standing on the fitbord. This will not make the LDR useless since it only will detect one impact. This will be when someone will be standing on the fitbord it will not activate when someone is standing on the fitbord without moving. + +We could is it for excersises where u want someone to jog or walk in place. The knock sensor will detect the small impacts from walking. This will greatly expend our excersise pool since walking and running is really important for cardio excersises. We could also make people stamp on the ground. This is a fun and good excersise for your legs. + +```C++ +const int knockSensor = A0; +const int threshold = 200; + +int sensorReading = 0; + + +void setup() { + Serial.begin(9600); +} + +void loop() { + + sensorReading = analogRead(knockSensor); + + if (sensorReading >= threshold) { + + Serial.println(sensorReading); + } + + if (sensorReading >= 500) { +Serial.println(stamp detected) + } +} + delay(10); +``` + + ![alt text](../assets/knocksensor.png) \ No newline at end of file From ed1097bc0017bb1b9ab3ebe05d1b69f75e06010d Mon Sep 17 00:00:00 2001 From: Niels Gras Date: Tue, 4 Jun 2024 12:18:43 +0200 Subject: [PATCH 29/36] added expert docs --- .../Niels/Expertreview3.md | 42 ++++++++++++++++++ .../Niels/assets/Learningcard28.png | Bin 0 -> 164872 bytes 2 files changed, 42 insertions(+) create mode 100644 docs/personal-documentation/Niels/Expertreview3.md create mode 100644 docs/personal-documentation/Niels/assets/Learningcard28.png diff --git a/docs/personal-documentation/Niels/Expertreview3.md b/docs/personal-documentation/Niels/Expertreview3.md new file mode 100644 index 0000000..63ae69e --- /dev/null +++ b/docs/personal-documentation/Niels/Expertreview3.md @@ -0,0 +1,42 @@ +# K1 + +Voor k1 heb ik al beschreven wat ik wist van k1 in mijn vorige expert zoals hoe onze database infrastructuur werkt en hoe een android app maken werkt. + +### OOP + +Ik heb OOP gewerkt met java. Dit komt doordat java een object orianted language is. Ik heb een class gemaakt om makkelijk te kunnen navigeren tussen de menus. + +[Navigation Manager](../../../../code/src/Fitbot/app/src/main/java/com/example/fitbot/util/NavigationManager.java) + +Ik heb ook een class gemaakt in C++ dit komt doordat ik een class heb gemaakt die het IP get van pepper. hier praat ik verder over in k5 + +### Database + +ik heb de databse ingevuld met data. We hadden eerst alle videos op youtube prive geupload en wilden dat in de database doen. Dat hebben we veranderd naar een google docs. Wij slaan ook andere data op zoals de excersise discription deze wordt verstuurd naar de app en deze wordt dan weergegeven. + +# K2 + +Ik heb voor K2 onderzoeken geschreven over zicht en kleuren bij ouderen. Ook ben ik met de ouderen gaan wandelen en heb ik kleine gesprekken emt hun gevoerd. Ik had de test card al gemaakt in mijn vorige expert en heb nu de learning card gemaakt van mijn ervaring. + +![TESTCARD](../Niels/assets/Learningcard28.png) + +![Usertest](../../documentation/brainstorm/usertest.md) + +![Colorsforlayout](../../documentation/brainstorm/colorsforlayout.md) + + +# K3 +Wij hadden als team vorige sprint al gebrainstormt en besproken hoe wij onze infrastructuur gaan inrichten dit hebben wij met ze alle gedaan en ik in mijn vorige sprint review behandelt welke onderdelen wij gebruiken. Ik ben ook bezig geweest met een onderzoek over datatransfer protocolen. Ik wilde dit odnerzoeken doordat het wij een nieuwe manier van data transfers gebruiken. Ik had voor dit nognooit met fiel transfer gewerkt. Na mijn vorige sprint review kreeg ik als feedback dat het beter was om het met externe linkjes te doen en niet met direct files. Dit heb ik bij mijn team voorgelegt en we hadden het verandert naar youtube linkjes. Nadat wij erachter kwamen dat het niet heel handig is zijn we over gestapt naar google drive. + + +# K4 +Ik had graag willen werken met het wiifit bord helaas werkte dit neit omdat het heel moeilijk te intergreren was in een android app. Daarna wilden wij onze eigen maken maar dit is helaas niet van gekomen omdat onze ESP32 alleen BLE uitzend en dat zorgt ervoor dat de app maar 1 keer de data binnekrijgt. Doordat we weining tijd hebben voor een oplossing ben ik gaan onderzoeken wat voor andere sensoren en oefeningen we kunnen doen met een eigen gemaakte wii fit bord. + +[fetchIPAddress](../../documentation/hardware/Ideasforfitbord.md) + +# K5 +ik heb een get request gemaakt voor de motion trackers zodat zij het ip kunnen krijgen. Peppers IP is niet static waardoor ze elke keer weer een nieuwe IP nodig hebben. Ik heb ook pepper laten bewegen en ik kan makkelijk meer movement toevoegen. Pepper iets laten zeggen is ook gemakkelijk met de pepper.say command. + +[peppermovement](../../../code/src/Fitbot/app/src/main/res/raw/armcircle.qianim) + +[fetchIPAddress](../../../code/arduino/Movement-sensor-code/Connectivity.cpp) \ No newline at end of file diff --git a/docs/personal-documentation/Niels/assets/Learningcard28.png b/docs/personal-documentation/Niels/assets/Learningcard28.png new file mode 100644 index 0000000000000000000000000000000000000000..103d57ff062e9a824ce09b69c0fc11f2c73ed23f GIT binary patch literal 164872 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 E8+{TKa{vGU literal 0 HcmV?d00001 From 19e50eefea4f4b3495ea4c5cbb4e98f99647df50 Mon Sep 17 00:00:00 2001 From: SebasKoedam Date: Tue, 4 Jun 2024 12:31:29 +0200 Subject: [PATCH 30/36] Refactor database query to fetch a specific exercise by ExerciseID --- code/server/incoming_request_handlers.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/server/incoming_request_handlers.js b/code/server/incoming_request_handlers.js index ef583a1..9d23366 100644 --- a/code/server/incoming_request_handlers.js +++ b/code/server/incoming_request_handlers.js @@ -1,5 +1,5 @@ - -const databaseQuery = 'SELECT * FROM `Exercise` ORDER BY RAND() LIMIT 1'; +const databaseQuery = 'SELECT * FROM `Exercise` WHERE ExerciseID = 1'; +// const databaseQueryRand = 'SELECT * FROM `Exercise` ORDER BY RAND() LIMIT 1'; /** * From 13b2b2f8210e7154fca61c4a1ecdbf703a0844de Mon Sep 17 00:00:00 2001 From: SebasKoedam Date: Tue, 4 Jun 2024 12:58:14 +0200 Subject: [PATCH 31/36] Fixed description size --- .../com/example/fitbot/exercise/Exercise.java | 15 ++++++++------- .../example/fitbot/exercise/ExerciseManager.java | 3 +-- .../fitbot/ui/activities/FitnessActivity.java | 11 ++++++----- .../app/src/main/res/layout/activity_fitness.xml | 2 +- .../src/Fitbot/app/src/main/res/values/styles.xml | 7 +++++++ 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java index d0c4dc9..18153d7 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/Exercise.java @@ -17,13 +17,14 @@ public class Exercise { /** * Constructor for the AbstractExercise class. * - * @param muscleGroup The muscle group of the exercise. - * @param leftPath The path of the left hand. - * @param rightPath The path of the right hand. - * @param name The title of the exercise. - * @param description The description of the exercise. - * @param imageUrl The URL of the image. - * @param videoUrl The URL of the video. + * @param muscleGroup The muscle group of the exercise. + * @param leftPath The path of the left hand. + * @param rightPath The path of the right hand. + * @param name The title of the exercise. + * @param shortDescription The short description of the exercise. + * @param description The full description of the exercise. + * @param imageUrl The URL of the image. + * @param videoUrl The URL of the video. */ public Exercise(EMuscleGroup muscleGroup, String name,String shortDescription, String description, String imageUrl, String videoUrl, GesturePath leftPath, GesturePath rightPath, float exerciseTimeInSeconds) { this.name = name; diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java index 94599a9..f58a6fa 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/exercise/ExerciseManager.java @@ -36,8 +36,7 @@ public class ExerciseManager { private static final String[] REQUIRED_PROPERTIES = { PROPERTY_MUSCLE_GROUP, PROPERTY_DESC,PROPERTY_SHORT_DESC, PROPERTY_IMAGE_URL, PROPERTY_VIDEO_URL, PROPERTY_NAME, PROPERTY_PATH, - PROPERTY_EXERCISE_DURATION, PROPERTY_EXERCISE_ID, - PROPERTY_SHORT_DESC + PROPERTY_EXERCISE_DURATION, PROPERTY_EXERCISE_ID }; public static final int DEFAULT_EXERCISE_REPETITIONS = 10; diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index 975a8b3..a29fc5c 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -38,7 +38,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall private TextView exerciseMuscleGroupTextView; private TextView exerciseNameTextView; private TextView exerciseShortDescriptionTextView; - private TextView exerciseDescriptionTextView; + //private TextView exerciseDescriptionTextView; private static String exerciseVideoUrl; private final Object lock = new Object(); @@ -65,8 +65,8 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall // Fill empty objects with exercise data this.exerciseNameTextView = findViewById(R.id.textViewFitnessTitle); - //this.exerciseDescriptionTextView = findViewById(R.id.textViewDialogDescription); this.exerciseShortDescriptionTextView = findViewById(R.id.textViewFitnessShortDescription); + //this.exerciseDescriptionTextView = findViewById(R.id.textViewDialogDescription); // Navigation Buttons NavigationManager.setupButtonNavigation(this, R.id.homeButtonFitness, MainActivity.class); @@ -117,9 +117,6 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall NavigationManager.navigateToActivity(this, EndScreenActivity.class); }); }); - VideoView videoView = findViewById(R.id.videoView); - Log.e("exerciseVideoUrl", "videoUrl:" + exerciseVideoUrl); - playVideo(videoView, this); } /** @@ -141,6 +138,10 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall exerciseShortDescriptionTextView.setText(exercise.shortDescription); // exerciseDescriptionTextView.setText(exercise.description); exerciseVideoUrl = exercise.videoUrl; + + VideoView videoView = findViewById(R.id.videoView); + Log.e("exerciseVideoUrl", "videoUrl:" + exerciseVideoUrl); + playVideo(videoView, this); }); } })).start(); diff --git a/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml b/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml index ea324d5..fb8f702 100644 --- a/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml +++ b/code/src/Fitbot/app/src/main/res/layout/activity_fitness.xml @@ -88,7 +88,7 @@ 6dp + +