Merge branch 'main' of https://gitlab.fdmci.hva.nl/propedeuse-hbo-ict/onderwijs/2023-2024/out-a-se-ti/blok-4/muupooviixee66
This commit is contained in:
35
.idea/workspace.xml
generated
35
.idea/workspace.xml
generated
@@ -14,10 +14,9 @@
|
||||
</configurations>
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="00599d5b-7eb5-44da-ad7f-98bf42384c16" name="Changes" comment="Final update onderzoek-formulier.md" />
|
||||
<list default="true" id="00599d5b-7eb5-44da-ad7f-98bf42384c16" name="Changes" comment="Updated onderzoek-voorbeeld.md & motion-tracking-system-analysis.md">
|
||||
<list default="true" id="00599d5b-7eb5-44da-ad7f-98bf42384c16" name="Changes" comment="Merge">
|
||||
<change afterPath="$PROJECT_DIR$/docs/personal-documentation/Luca/persoonlijke-reflectie-opdracht.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/docs/documentation/research-questions/motion-tracking-system-analysis.md" beforeDir="false" afterPath="$PROJECT_DIR$/docs/documentation/research-questions/motion-tracking-system-analysis.md" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@@ -27,7 +26,6 @@
|
||||
<component name="ClangdSettings">
|
||||
<option name="formatViaClangd" value="false" />
|
||||
</component>
|
||||
<component name="ExecutionTargetManager" SELECTED_TARGET="device_and_snapshot_combo_box_target[C:\Users\Niels\.android\avd\Pepper_1.9_API_29.avd]" />
|
||||
<component name="ExternalProjectsData">
|
||||
<projectState path="$PROJECT_DIR$">
|
||||
<ProjectState />
|
||||
@@ -75,6 +73,9 @@
|
||||
<component name="MarkdownSettingsMigration">
|
||||
<option name="stateVersion" value="1" />
|
||||
</component>
|
||||
<component name="ProjectColorInfo">{
|
||||
"associatedIndex": 5
|
||||
}</component>
|
||||
<component name="ProjectId" id="2fE3N2CwEPDo9wBtexBLxU20tCJ" />
|
||||
<component name="ProjectLevelVcsManager">
|
||||
<ConfirmationsSetting value="2" id="Add" />
|
||||
@@ -83,13 +84,6 @@
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
|
||||
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||
<property name="RunOnceActivity.cidr.known.project.marker" value="true" />
|
||||
<property name="cidr.known.project.marker" value="true" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/code/src/Fitbot" />
|
||||
</component>
|
||||
<component name="PropertiesComponent">{
|
||||
"keyToString": {
|
||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
@@ -202,6 +196,11 @@
|
||||
<workItem from="1715765990621" duration="8538000" />
|
||||
<workItem from="1715777647522" duration="725000" />
|
||||
<workItem from="1715779408605" duration="3840000" />
|
||||
<workItem from="1715957538891" duration="2000" />
|
||||
<workItem from="1716126955744" duration="1102000" />
|
||||
<workItem from="1716286107331" duration="6057000" />
|
||||
<workItem from="1716308427931" duration="28000" />
|
||||
<workItem from="1716318640952" duration="7000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="Changes">
|
||||
<created>1713528225837</created>
|
||||
@@ -295,7 +294,15 @@
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1715780873394</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="13" />
|
||||
<task id="LOCAL-00013" summary="Merge">
|
||||
<option name="closed" value="true" />
|
||||
<created>1715951036170</created>
|
||||
<option name="number" value="00013" />
|
||||
<option name="presentableId" value="LOCAL-00013" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1715951036170</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="14" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
@@ -311,7 +318,6 @@
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
<option name="oldMeFiltersMigrated" value="true" />
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="Changes" />
|
||||
@@ -327,6 +333,7 @@
|
||||
<MESSAGE value="Renamed files, added motion-tracking-system-analysis.md" />
|
||||
<MESSAGE value="Updated onderzoek-voorbeeld.md and motion-tracking-system-analysis.md" />
|
||||
<MESSAGE value="Updated onderzoek-voorbeeld.md & motion-tracking-system-analysis.md" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="Updated onderzoek-voorbeeld.md & motion-tracking-system-analysis.md" />
|
||||
<MESSAGE value="Merge" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="Merge" />
|
||||
</component>
|
||||
</project>
|
1
code/src/Fitbot/.idea/misc.xml
generated
1
code/src/Fitbot/.idea/misc.xml
generated
@@ -31,6 +31,7 @@
|
||||
<entry key="..\:/Users/sebas/Documents/HvA/Reposetories/muupooviixee66/code/src/Fitbot/app/src/main/res/layout/activity_sport_menu.xml" value="0.1" />
|
||||
<entry key="..\:/Users/sebas/Documents/HvA/Reposetories/muupooviixee66/code/src/Fitbot/app/src/main/res/layout/header.xml" value="0.125" />
|
||||
<entry key="..\:/Users/sebas/Documents/HvA/Reposetories/muupooviixee66/code/src/Fitbot/app/src/main/res/layout/toolbar.xml" value="0.125" />
|
||||
<entry key="app/src/main/res/layout/activity_end_screen.xml" value="0.1" />
|
||||
<entry key="app/src/main/res/layout/activity_fitness.xml" value="0.23550724637681159" />
|
||||
<entry key="app/src/main/res/layout/activity_main.xml" value="0.1" />
|
||||
<entry key="app/src/main/res/layout/activity_sport_item.xml" value="0.2341485507246377" />
|
||||
|
@@ -8,14 +8,17 @@ import com.example.fitbot.util.server.WebSocket;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public abstract class AbstractExercise implements IWebSocketHandler {
|
||||
public class Exercise implements IWebSocketHandler {
|
||||
|
||||
private EMuscleGroup muscleGroup;
|
||||
private GesturePath path;
|
||||
private String title;
|
||||
private String description;
|
||||
private float segmentsPerSecond;
|
||||
|
||||
// Static fields.
|
||||
private static WebSocket webSocket;
|
||||
private static AbstractExercise currentExercise = null;
|
||||
private static Exercise currentExercise = null;
|
||||
|
||||
|
||||
/**
|
||||
@@ -23,10 +26,17 @@ public abstract class AbstractExercise implements IWebSocketHandler {
|
||||
*
|
||||
* @param muscleGroup The muscle group of the exercise.
|
||||
* @param path The path of the exercise.
|
||||
* @param title The title of the exercise.
|
||||
* @param description The description of the exercise.
|
||||
* @param segmentsPerSecond The number of segments per second.
|
||||
* This determines how fast the exercise should be performed.
|
||||
*/
|
||||
public AbstractExercise(EMuscleGroup muscleGroup, GesturePath path) {
|
||||
public Exercise(EMuscleGroup muscleGroup, String title, String description, GesturePath path, float segmentsPerSecond) {
|
||||
this.muscleGroup = muscleGroup;
|
||||
this.title = title;
|
||||
this.description = description;
|
||||
this.path = path;
|
||||
this.segmentsPerSecond = segmentsPerSecond;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -101,4 +111,19 @@ public abstract class AbstractExercise implements IWebSocketHandler {
|
||||
public GesturePath getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the speed of the exercise.
|
||||
*/
|
||||
public double getSegmentsPerSecond() {
|
||||
return segmentsPerSecond;
|
||||
}
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
package com.example.fitbot.exercise;
|
||||
|
||||
import com.example.fitbot.util.processing.IMotionDataConsumer;
|
||||
import com.example.fitbot.util.processing.MotionData;
|
||||
import com.example.fitbot.util.processing.MotionProcessor;
|
||||
import com.example.fitbot.util.server.IWebSocketHandler;
|
||||
import com.example.fitbot.util.server.WebSocket;
|
||||
|
||||
import org.joml.Vector3f;
|
||||
|
||||
import java.net.Socket;
|
||||
|
||||
public class ExerciseBuilder implements IWebSocketHandler, IMotionDataConsumer {
|
||||
|
||||
private MotionProcessor processor;
|
||||
|
||||
public ExerciseBuilder() {
|
||||
this.processor = new MotionProcessor();
|
||||
this.processor.setMotionDataEventHandler(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnected(Socket socket) {
|
||||
IWebSocketHandler.super.onDisconnected(socket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessageReceived(WebSocket.Message message, WebSocket.MessageReply replier) {
|
||||
IWebSocketHandler.super.onMessageReceived(message, replier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Socket socket, String error) {
|
||||
IWebSocketHandler.super.onError(socket, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept(Vector3f transformedVector, MotionData motionData, int sampleIndex, double sampleRate, int sensorId) {
|
||||
|
||||
}
|
||||
}
|
@@ -50,7 +50,7 @@ public class FitnessManager {
|
||||
* @param uniqueIdentifier The unique identifier of the exercise
|
||||
* @return The exercise, if it exists on the server. Otherwise null.
|
||||
*/
|
||||
public static <T extends AbstractExercise> AbstractExercise acquireExercise(String uniqueIdentifier, Class<T> referenceClass) {
|
||||
public static <T extends Exercise> Exercise acquireExercise(String uniqueIdentifier, Class<T> referenceClass) {
|
||||
String response = sendHTTP(
|
||||
HOST_ADDRESS + "/acquire", "GET", "application/json", "{\"kind\":\"" + uniqueIdentifier + "\"}"
|
||||
);
|
||||
|
@@ -1,12 +1,8 @@
|
||||
package com.example.fitbot.ui.activities;
|
||||
|
||||
import static com.example.fitbot.sports.Animations.Animate;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.util.Log;
|
||||
import android.widget.MediaController;
|
||||
import android.widget.VideoView;
|
||||
|
||||
@@ -14,38 +10,67 @@ import com.aldebaran.qi.sdk.QiContext;
|
||||
import com.aldebaran.qi.sdk.QiSDK;
|
||||
import com.aldebaran.qi.sdk.RobotLifecycleCallbacks;
|
||||
import com.aldebaran.qi.sdk.design.activity.RobotActivity;
|
||||
import com.example.fitbot.ui.activities.EndScreenActivity;
|
||||
import com.example.fitbot.R;
|
||||
import com.example.fitbot.sports.Animations;
|
||||
import com.example.fitbot.ui.components.PersonalMotionPreviewElement;
|
||||
import com.example.fitbot.util.path.GesturePath;
|
||||
|
||||
import org.joml.Vector3f;
|
||||
|
||||
public class FitnessActivity extends RobotActivity implements RobotLifecycleCallbacks {
|
||||
|
||||
// PersonalMotionPreviewElement personalMotionPreviewElement;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// Set the content view to the appropriate layout
|
||||
setContentView(R.layout.activity_fitness);
|
||||
|
||||
// Find the VideoView by its ID
|
||||
VideoView videoView = findViewById(R.id.videoView);
|
||||
videoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.bicepvideo));
|
||||
|
||||
MediaController mediaController = new MediaController(this);
|
||||
videoView.setMediaController(mediaController);
|
||||
videoView.start();
|
||||
if (videoView != null) {
|
||||
Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.bicepvideo);
|
||||
videoView.setVideoURI(videoUri);
|
||||
videoView.start();
|
||||
} else {
|
||||
Log.e("FitnessActivity", "VideoView is null. Check your layout XML.");
|
||||
}
|
||||
|
||||
com.example.fitbot.util.ButtonNavigation.setupButtonNavigation(this, R.id.homeButton, MainActivity.class);
|
||||
com.example.fitbot.util.ButtonNavigation.setupButtonNavigation(this, R.id.buttonComplete, EndScreenActivity.class);
|
||||
|
||||
GesturePath.Builder gesturePathBuilder = new GesturePath.Builder();
|
||||
|
||||
gesturePathBuilder.addVector(new Vector3f(-.5f, -.5f, -.5f));
|
||||
gesturePathBuilder.addVector(new Vector3f(.5f, -.5f, -.5f));
|
||||
gesturePathBuilder.addVector(new Vector3f(.5f, -.5f, .5f));
|
||||
gesturePathBuilder.addVector(new Vector3f(-.5f, -.5f, .5f));
|
||||
gesturePathBuilder.addVector(new Vector3f(-.5f, -.5f, -.5f));
|
||||
|
||||
gesturePathBuilder.addVector(new Vector3f(-.5f, .5f, -.5f));
|
||||
gesturePathBuilder.addVector(new Vector3f(.5f, .5f, -.5f));
|
||||
gesturePathBuilder.addVector(new Vector3f(.5f, .5f, .5f));
|
||||
gesturePathBuilder.addVector(new Vector3f(-.5f, .5f, .5f));
|
||||
gesturePathBuilder.addVector(new Vector3f(-.5f, .5f, -.5f));
|
||||
|
||||
// Uncomment and fix if needed for personalMotionPreviewElement
|
||||
// personalMotionPreviewElement = findViewById(R.id.personalMotionPreviewElement);
|
||||
// personalMotionPreviewElement.post(() -> {
|
||||
// Log.i("FitnessActivity", "PersonalMotionPreviewElement.post()");
|
||||
//
|
||||
// Exercise exercise = new Exercise(EMuscleGroup.ARMS, "Bicep Curls", "Oefening voor de biceps.", gesturePathBuilder.build(), 1);
|
||||
//
|
||||
// personalMotionPreviewElement.initialize(exercise);
|
||||
// });
|
||||
}
|
||||
|
||||
|
||||
// QiSDK.register(this, this);
|
||||
//
|
||||
//
|
||||
|
||||
@Override
|
||||
public void onRobotFocusGained(QiContext qiContext) {
|
||||
// Implement your logic when the robot focus is gained
|
||||
Animate("bicepcurl", qiContext);
|
||||
|
||||
Animations.Animate("bicepcurl", qiContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -61,15 +86,6 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
QiSDK.unregister(this, this);
|
||||
|
||||
super.onDestroy();
|
||||
}
|
||||
public static class PersonalMotionPreviewElement extends View {
|
||||
|
||||
public PersonalMotionPreviewElement(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
// Initialize your custom view here (optional)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -4,9 +4,11 @@ import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Path;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import com.example.fitbot.exercise.Exercise;
|
||||
import com.example.fitbot.util.path.GesturePath;
|
||||
import com.example.fitbot.util.path.PathSegment;
|
||||
import com.example.fitbot.util.processing.MotionData;
|
||||
@@ -22,50 +24,116 @@ public class PersonalMotionPreviewElement extends View {
|
||||
private GesturePath path;
|
||||
private double pathTime = 0.0D; // The timestamp at which the path is currently at.
|
||||
private MotionProcessor motionProcessor;
|
||||
private Path referencePath, performingPath;
|
||||
private Paint referencePaint, performingPaint;
|
||||
|
||||
private Exercise exercise;
|
||||
|
||||
private Path referencePath; // The path the user is supposed to follow.
|
||||
private Path performingPath; // The path the user is currently following.
|
||||
private Path stickmanPath; // The path of the stickman that is drawn on the screen.
|
||||
|
||||
private Paint referencePaint;
|
||||
private Paint performingPaint;
|
||||
private Paint textPaint;
|
||||
|
||||
// Matrices for the projection of the path segments onto the screen.
|
||||
// Depth buffering sadly is not supported yet due to brain dysfunction
|
||||
private Matrix4f modelViewMatrix = new Matrix4f();
|
||||
private Matrix4f projectionMatrix = new Matrix4f();
|
||||
|
||||
private double timePassed = 0.0D; // The time that has passed since the start of the exercise, in seconds.
|
||||
private long startingTime = 0L;
|
||||
|
||||
private Paint backgroundColor = new Paint();
|
||||
|
||||
/**
|
||||
* Constants for the preview path projection.
|
||||
*/
|
||||
private final float FOV = 70.0f; // The field of view of the preview path
|
||||
private final float FOV = 80.0f; // The field of view of the preview path
|
||||
private final float Z_NEAR = 0.1f; // The near clipping plane
|
||||
private final float Z_FAR = 1000.0f; // The far clipping plane
|
||||
private Vector3f cameraPosition = new Vector3f(0.0f, 0.0f, 0.0f); // The position of the camera
|
||||
private Vector3f objectPosition = new Vector3f(0.0f, 0.0f, 0.0f); // The position of the camera
|
||||
private Vector2f screenDimensions = new Vector2f(); // Width and height dimensions of the screen
|
||||
private Vector2f rotation = new Vector2f(); // Rotation vector (yaw, pitch)
|
||||
|
||||
/**
|
||||
* Constructor for the PersonalMotionPreviewElement class.
|
||||
*
|
||||
* @param context The context in which this element is created.
|
||||
* @param path The gesture path that will be drawn on the canvas.
|
||||
*/
|
||||
public PersonalMotionPreviewElement(Context context, GesturePath path) {
|
||||
super(context);
|
||||
Log.i("PersonalMotionPreviewElement", "Creating new PersonalMotionPreviewElement.");
|
||||
this.backgroundColor = new Paint();
|
||||
this.backgroundColor.setColor(0xFF000000); // Black
|
||||
this.path = path;
|
||||
this.motionProcessor = new MotionProcessor();
|
||||
this.motionProcessor.startListening();
|
||||
this.motionProcessor.setMotionDataEventHandler((processed, preprocessed, sampleIndex, sampleRate) -> {
|
||||
// TODO: Implement the calculation of the `performingPath` based on the motion data
|
||||
});
|
||||
|
||||
this.referencePath = getDrawablePath(path.getSegments());
|
||||
this.performingPath = new Path();
|
||||
public PersonalMotionPreviewElement(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
this.referencePaint = new Paint();
|
||||
this.referencePaint.setColor(-1); // White
|
||||
this.referencePaint.setColor(0xFFFF0000); // Red
|
||||
this.referencePaint.setStyle(Paint.Style.STROKE);
|
||||
this.referencePaint.setStrokeWidth(5.0f);
|
||||
|
||||
this.performingPaint = new Paint();
|
||||
this.performingPaint.setColor(0xFF0000FF); // Blue
|
||||
this.performingPaint.setStyle(Paint.Style.STROKE);
|
||||
this.performingPaint.setStrokeWidth(5.0f);
|
||||
|
||||
this.textPaint = new Paint();
|
||||
this.textPaint.setColor(-1);
|
||||
this.textPaint.setStyle(Paint.Style.FILL);
|
||||
this.textPaint.setTextSize(50.0f);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for updating the stickman gestures.
|
||||
*
|
||||
* This method will update the stickman gestures based on the current
|
||||
* motion data that is being processed.
|
||||
*/
|
||||
private void updateStickmanGestures() {
|
||||
// Reset previous path
|
||||
stickmanPath.reset();
|
||||
|
||||
// TODO: Define all arm segments:
|
||||
// - Upper left and right arm
|
||||
// - Lower left and right arm
|
||||
// - Upper left and right leg
|
||||
// - Lower left and right leg
|
||||
// Update all segments based on the perceived motion data.
|
||||
PathSegment upperLeftArm = new PathSegment(
|
||||
new Vector3f(),
|
||||
new Vector3f()
|
||||
);
|
||||
|
||||
PathSegment[] bodySegments = new PathSegment[] {
|
||||
new PathSegment(new Vector3f(0.0f, -.5f, -.5f), new Vector3f(0, 0, 0)), // Left leg
|
||||
new PathSegment(new Vector3f(0.0f, -.5f, .5f), new Vector3f(0, 0, 0)), // Right leg
|
||||
new PathSegment(new Vector3f(0.0f, .5f, 0.0f), new Vector3f(0, 0, 0)), // Body
|
||||
new PathSegment(new Vector3f(-.25f, .25f, 0f), new Vector3f(0, 0, 0)), // Left arm
|
||||
new PathSegment(new Vector3f(.25f, .25f, 0f), new Vector3f(0, 0, 0)) // Right arm
|
||||
};
|
||||
|
||||
// TODO: Generate new path for stickman
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for initializing the PersonalMotionPreviewElement.
|
||||
* This method has to be called with a "post" function when the element has been
|
||||
* created, otherwise the dimensions of the element aren't initialized yet, which
|
||||
* will cause the vertex projections to fail (0 width and height).
|
||||
*
|
||||
* @param exercise The exercise that the user is currently performing.
|
||||
*/
|
||||
public void initialize(Exercise exercise) {
|
||||
Log.i("PersonalMotionPreviewElement", "Creating new PersonalMotionPreviewElement.");
|
||||
this.backgroundColor = new Paint();
|
||||
this.backgroundColor.setColor(0xFF000000); // Black
|
||||
|
||||
this.screenDimensions.x = this.getWidth();
|
||||
this.screenDimensions.y = this.getHeight();
|
||||
this.performingPath = new Path();
|
||||
this.referencePath = new Path();
|
||||
|
||||
this.startingTime = System.nanoTime(); // Set the last time to the current time
|
||||
|
||||
this.exercise = exercise;
|
||||
this.path = exercise.getPath();
|
||||
this.motionProcessor = new MotionProcessor();
|
||||
this.motionProcessor.startListening();
|
||||
this.motionProcessor.setMotionDataEventHandler((processed, preprocessed, sampleIndex, sampleRate, deviceId) -> {
|
||||
// TODO: Implement the calculation of the `performingPath` based on the motion data
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -90,7 +158,7 @@ public class PersonalMotionPreviewElement extends View {
|
||||
/**
|
||||
* Method for setting the rotation of the preview path.
|
||||
*
|
||||
* @param yaw The yaw rotation of the preview path.
|
||||
* @param yaw The yaw rotation of the preview path.
|
||||
* @param pitch The pitch rotation of the preview path.
|
||||
*/
|
||||
public void setRotation(float yaw, float pitch) {
|
||||
@@ -98,38 +166,38 @@ public class PersonalMotionPreviewElement extends View {
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for projecting a 3D point onto the screen.
|
||||
* This method converts the 3D point to 2D space using a Model-View-Projection matrix transformation.
|
||||
* Method for projecting a 3D point onto the screen.
|
||||
* This method converts the 3D point to 2D space using a Model-View-Projection matrix transformation.
|
||||
*
|
||||
* @param point The point to cast to the screen.
|
||||
* @param virtualWidth The width of the virtual screen.
|
||||
* This is used to normalize the screen coordinates.
|
||||
* @param point The point to cast to the screen.
|
||||
* @param virtualWidth The width of the virtual screen.
|
||||
* This is used to normalize the screen coordinates.
|
||||
* @param virtualHeight The height of the virtual screen.
|
||||
* @return The transformed vector in screen coordinates ranging from (0, 0) to (virtualWidth, virtualHeight).
|
||||
*/
|
||||
private Vector2f projectVertex(Vector3f point, int virtualWidth, int virtualHeight) {
|
||||
|
||||
Matrix4f modelViewMatrix = new Matrix4f()
|
||||
.rotateX((float) Math.toRadians(rotation.x))
|
||||
.rotateY((float) Math.toRadians(rotation.y))
|
||||
.translate(cameraPosition);
|
||||
modelViewMatrix
|
||||
.identity()
|
||||
.translate(-objectPosition.x, -objectPosition.y, -objectPosition.z)
|
||||
.rotateX((float) Math.toRadians(rotation.y))
|
||||
.rotateY((float) Math.toRadians(rotation.x));
|
||||
|
||||
Matrix4f projectionMatrix = new Matrix4f()
|
||||
// Transform the projection matrix to a perspective projection matrix
|
||||
// Perspective transformation conserves the depth of the object
|
||||
projectionMatrix
|
||||
.identity()
|
||||
.perspective((float) Math.toRadians(FOV), (float) virtualWidth / virtualHeight, Z_NEAR, Z_FAR);
|
||||
|
||||
// Calculate Model-View-Projection matrix
|
||||
Matrix4f MVP = new Matrix4f()
|
||||
.set(projectionMatrix)
|
||||
.mul(modelViewMatrix);
|
||||
|
||||
// Convert to screen coordinates
|
||||
// Convert world coordinates to screen-space using MVP matrix
|
||||
Vector4f screenCoordinates = new Vector4f(point, 1.0f)
|
||||
.mul(MVP);
|
||||
.mul(this.modelViewMatrix)
|
||||
.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;
|
||||
|
||||
Log.i("VertexProjection", "Projected vertex to screen coordinates: (" + normalizedX + ", " + normalizedY + ").");
|
||||
return new Vector2f(normalizedX, normalizedY);
|
||||
}
|
||||
|
||||
@@ -137,9 +205,9 @@ public class PersonalMotionPreviewElement extends View {
|
||||
* Method that converts a sequence of vectors to a Path object.
|
||||
* This path is a set of bezier curves that will be drawn on the canvas.
|
||||
*
|
||||
* @param segments The path segments in the path.
|
||||
* These segments will be connected by bezier curves, which
|
||||
* all have unique curvature values.
|
||||
* @param segments The path segments in the path.
|
||||
* These segments will be connected by bezier curves, which
|
||||
* all have unique curvature values.
|
||||
* @return The generated path object.
|
||||
*/
|
||||
private Path getDrawablePath(PathSegment... segments) {
|
||||
@@ -152,8 +220,8 @@ public class PersonalMotionPreviewElement extends View {
|
||||
|
||||
// Draw the path segments
|
||||
for (PathSegment segment : segments) {
|
||||
Vector2f startProjected = projectVertex(segment.getStart(), getWidth()/2, getHeight());
|
||||
Vector2f endProjected = projectVertex(segment.getEnd(), getWidth()/2, getHeight());
|
||||
Vector2f startProjected = projectVertex(segment.getStart(), getWidth(), getHeight());
|
||||
Vector2f endProjected = projectVertex(segment.getEnd(), getWidth(), getHeight());
|
||||
calculatedPath.lineTo(startProjected.x, startProjected.y);
|
||||
calculatedPath.lineTo(endProjected.x, endProjected.y);
|
||||
}
|
||||
@@ -165,8 +233,19 @@ public class PersonalMotionPreviewElement extends View {
|
||||
@Override
|
||||
public void onDraw(Canvas canvas) {
|
||||
canvas.drawRect(0, 0, getWidth(), getHeight(), backgroundColor);
|
||||
this.setBackgroundColor(0xFF000000); // Black
|
||||
if (this.exercise == null)
|
||||
return;
|
||||
// Draw the sport preview canvas
|
||||
canvas.drawPath(referencePath, referencePaint);
|
||||
canvas.drawPath(performingPath, performingPaint);
|
||||
|
||||
canvas.drawText(this.exercise.getTitle(), 10, 40, textPaint);
|
||||
|
||||
timePassed = (System.nanoTime() - startingTime) / 1E9D;
|
||||
|
||||
this.rotation.add(1f, 0);
|
||||
this.referencePath = getDrawablePath(this.path.getSegments());
|
||||
this.invalidate(); // Causes a redraw.
|
||||
}
|
||||
}
|
||||
|
@@ -11,17 +11,12 @@ public class GesturePath {
|
||||
// The vectors that make up the path.
|
||||
private final PathSegment[] segments;
|
||||
|
||||
public GesturePath(Vector3f[] vectors) {
|
||||
this(vectors, 0.0D);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new gesture path with a given set of vectors and curvature.
|
||||
*
|
||||
* @param vectors The vectors that make up the path.
|
||||
* @param curvature The curvature of the path.
|
||||
*/
|
||||
public GesturePath(Vector3f[] vectors, double curvature)
|
||||
public GesturePath(Vector3f[] vectors)
|
||||
{
|
||||
if ( vectors.length < 2)
|
||||
throw new IllegalArgumentException("A path must have at least two points.");
|
||||
|
@@ -11,6 +11,6 @@ public interface IMotionDataConsumer {
|
||||
* @param sampleIndex The index of the current sample
|
||||
* @param sampleRate The sample rate.
|
||||
*/
|
||||
void accept(Vector3f transformedVector, MotionData motionData, int sampleIndex, double sampleRate);
|
||||
void accept(Vector3f transformedVector, MotionData motionData, int sampleIndex, double sampleRate, int sensorId);
|
||||
|
||||
}
|
@@ -8,6 +8,7 @@ public class MotionData {
|
||||
|
||||
// Data of the motion sensor
|
||||
public Vector3f acceleration, rotation;
|
||||
public int sensorId;
|
||||
|
||||
// Delimiter for the data received from the motion sensor
|
||||
private static final String DATA_DELIMITER = ";";
|
||||
@@ -21,10 +22,10 @@ public class MotionData {
|
||||
* @param rotationX The rotation in the X axis in degrees.
|
||||
* @param rotationY The rotation in the Y axis in degrees.
|
||||
* @param rotationZ The rotation in the Z axis in degrees.
|
||||
* @param sensorId The sensor id.
|
||||
*/
|
||||
public MotionData(float accelerationX, float accelerationY, float accelerationZ, float rotationX, float rotationY, float rotationZ) {
|
||||
this.acceleration = new Vector3f(accelerationX, accelerationY, accelerationZ);
|
||||
this.rotation = new Vector3f(rotationX, rotationY, rotationZ);
|
||||
public MotionData(float accelerationX, float accelerationY, float accelerationZ, float rotationX, float rotationY, float rotationZ, int sensorId) {
|
||||
this(new Vector3f(accelerationX, accelerationY, accelerationZ), new Vector3f(rotationX, rotationY, rotationZ), sensorId);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -33,9 +34,10 @@ public class MotionData {
|
||||
* @param acceleration The acceleration vector in m/s^2.
|
||||
* @param rotation The rotation vector in degrees.
|
||||
*/
|
||||
public MotionData(Vector3f acceleration, Vector3f rotation) {
|
||||
public MotionData(Vector3f acceleration, Vector3f rotation, int sensorId) {
|
||||
this.acceleration = acceleration;
|
||||
this.rotation = rotation;
|
||||
this.sensorId = sensorId;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -50,7 +52,7 @@ public class MotionData {
|
||||
Objects.requireNonNull(data); // Ensure data is not null
|
||||
|
||||
String[] parts = data.split(DATA_DELIMITER);
|
||||
if (parts.length != 6)
|
||||
if (parts.length != 7)
|
||||
return null;
|
||||
|
||||
return new MotionData(
|
||||
@@ -59,7 +61,8 @@ public class MotionData {
|
||||
Float.parseFloat(parts[2]),
|
||||
Float.parseFloat(parts[3]),
|
||||
Float.parseFloat(parts[4]),
|
||||
Float.parseFloat(parts[5])
|
||||
Float.parseFloat(parts[5]),
|
||||
Integer.parseInt(parts[6])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@ public class MotionProcessor {
|
||||
private Vector3f ZERO = new Vector3f(0, 0, 0);
|
||||
|
||||
private float sampleRate = 1.0F; // samples/second
|
||||
private IMotionDataConsumer motionDataConsumer = (p1, p2, p3, p4) -> {};
|
||||
private IMotionDataConsumer motionDataConsumer = (p1, p2, p3, p4, p5) -> {};
|
||||
private GesturePath path;
|
||||
private WebSocket socket;
|
||||
|
||||
@@ -110,7 +110,7 @@ public class MotionProcessor {
|
||||
Vector3f previous = this.relativePath.isEmpty() ? ZERO : this.relativePath.get(this.relativePath.size() - 1);
|
||||
Vector3f relativeVector = getRelativeVector(data).add(previous);
|
||||
this.relativePath.add(relativeVector);
|
||||
motionDataConsumer.accept(relativeVector, data, this.relativePath.size(), this.sampleRate);
|
||||
motionDataConsumer.accept(relativeVector, data, this.relativePath.size(), this.sampleRate, data.sensorId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -9,67 +9,77 @@
|
||||
tools:context=".ui.activities.MainActivity"
|
||||
tools:openDrawer="start">
|
||||
|
||||
<LinearLayout
|
||||
<android.support.constraint.ConstraintLayout
|
||||
android:id="@+id/linearLayout2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
android:orientation="horizontal">
|
||||
|
||||
<include
|
||||
android:id="@+id/toolbar"
|
||||
layout="@layout/toolbar" />
|
||||
layout="@layout/toolbar"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView2"
|
||||
android:layout_width="524dp"
|
||||
android:layout_height="77dp"
|
||||
android:layout_marginStart="378dp"
|
||||
android:layout_marginTop="80dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="300dp"
|
||||
android:text="@string/welkom_bij_fitbot"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="64sp" />
|
||||
android:textSize="64sp"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView3"
|
||||
android:layout_width="510dp"
|
||||
android:layout_height="39dp"
|
||||
android:layout_marginStart="385dp"
|
||||
android:layout_marginTop="0dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="300dp"
|
||||
android:layout_marginTop="80dp"
|
||||
android:text="@string/robot_helpt"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="32sp" />
|
||||
android:textSize="32sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/startButton"
|
||||
android:layout_width="300dp"
|
||||
android:layout_height="150dp"
|
||||
android:layout_marginStart="490dp"
|
||||
android:layout_marginTop="100dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="400dp"
|
||||
android:layout_marginTop="350dp"
|
||||
android:background="@drawable/red_button_gradient"
|
||||
android:text="@string/start"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="80sp"
|
||||
android:textAllCaps="false"
|
||||
android:background="@drawable/red_button_gradient"/>
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/helpButton"
|
||||
android:layout_width="160dp"
|
||||
android:layout_height="80dp"
|
||||
android:layout_marginStart="560dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="450dp"
|
||||
android:layout_marginTop="500dp"
|
||||
android:background="@drawable/darkred_button_gradient"
|
||||
android:text="@string/help"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="40sp"
|
||||
android:textAllCaps="false"
|
||||
android:background="@drawable/darkred_button_gradient"/>
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageView2"
|
||||
android:layout_width="375dp"
|
||||
android:layout_height="375dp"
|
||||
android:layout_marginStart="0dp"
|
||||
android:layout_marginTop="-180dp"
|
||||
app:srcCompat="@drawable/robot_logo_inverted"
|
||||
android:contentDescription="@string/todo" />
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="260dp"
|
||||
android:contentDescription="@string/todo"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/robot_logo_inverted" />
|
||||
|
||||
<!-- <Button-->
|
||||
<!-- android:id="@+id/menu_switch_btn"-->
|
||||
@@ -81,7 +91,7 @@
|
||||
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
|
||||
<!-- android:focusable="true" />-->
|
||||
|
||||
</LinearLayout>
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
|
||||
<android.support.design.widget.NavigationView
|
||||
android:id="@+id/nav_view"
|
||||
|
Binary file not shown.
6
code/src/Fitbot/app/src/main/res/values/attrs.xml
Normal file
6
code/src/Fitbot/app/src/main/res/values/attrs.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<declare-styleable name="PersonalMotionPreviewElement">
|
||||
|
||||
</declare-styleable>
|
||||
</resources>
|
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Fitbot" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
|
BIN
docs/personal-documentation/Luca/Skills Ontwikkelings Plan.docx
Normal file
BIN
docs/personal-documentation/Luca/Skills Ontwikkelings Plan.docx
Normal file
Binary file not shown.
@@ -0,0 +1,62 @@
|
||||
STARR
|
||||
|
||||
## Reflectie Opdracht Blok 1 - Climate Measuring Box
|
||||
|
||||
### Situatie
|
||||
|
||||
Voor het eerste blok was de opdracht het maken van een meetsysteem om bepaalde omgevingswaarden te meten, waarbij deze metingen
|
||||
op een webpagina live weergeven worden.
|
||||
Daarnaast moesten er ook bepaalde waarden gestuurd worden naar de HvA server, om deze vervolgens op de website op een map te weergeven.
|
||||
Een voorbeeld van meetwaarden die gestuurd moesten worden waren temperatuur, luchtvochtigheid en lichtintensiteit.
|
||||
|
||||
### Taak
|
||||
|
||||
Als taak van dit project was het noodzakelijk om een hardware systeem te bouwen met behulp van de ESP32.
|
||||
Hierbij was het nodig om meerdere sensoren te verbinden aan de ESP32 en deze sensoren uit te lezen.
|
||||
De waarden van deze sensoren moesten vervolgens via een seriële connectie naar een webpagina gestuurd worden.
|
||||
Daarnaast moest er ook een van deze waarden naar de HvA server gestuurd worden, om vervolgens op een map weergegeven te worden.
|
||||
Al deze meetwaarden moesten live getoond worden op de website.
|
||||
|
||||
### Actie
|
||||
|
||||
Om te voldoen aan de criteria voor het project heb ik gebruik gemaakt van een luchtvochtigheidsensor gepaard met een temperatuursensor (DHT11)
|
||||
en een lichtsensor (GL5528). Deze sensoren leverde adequate data voor het project. Daarnaast heb ik een simpele website gemaakt
|
||||
waarbij de waarden van deze sensoren live in het midden van de website getoond werden.
|
||||
|
||||
### Resultaat
|
||||
|
||||
Het resultaat van het project was een werkend meetsysteem dat de waarden van de sensoren live weergaf op een website.
|
||||
|
||||
|
||||
### Reflectie
|
||||
|
||||
In het eerste blok heb ik behoorlijk veel nieuwe gedragscriteria geleerd.
|
||||
Ik heb geleerd om beter mijn werk bij te houden door het te actief te documenteren en het bij te houden met een version control system (VSC) zoals git.
|
||||
Ik vond het aan het begin wel lastig om hieraan te voldoen, gezien ik hiervoor vrij weinig aan documentatie als git heb gedaan.
|
||||
|
||||
|
||||
### Transfer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Reflectie opdracht Blok 2 - TI Game Controller
|
||||
|
||||
## Reflectie opdracht Blok 3 - Optimalisatie Studieomgeving
|
||||
|
||||
Skills ontwikkelingsplan SMART
|
||||
|
||||
|
||||
|
||||
Professional Skills
|
||||
|
||||
Persoonlijk Leiderschap
|
||||
|
||||
Toekomstgericht organiseren
|
||||
|
||||
Doelgericht interacteren
|
||||
|
||||
Onderzoekend probleemoplossen
|
||||
|
||||
Essential Skills: Nederlands, Engels en Wiskunde
|
@@ -1,7 +1,12 @@
|
||||
# climate measering box (blok 1)
|
||||
|
||||
In blok 1 kwam
|
||||
In blok 1 kwam zonder enige codeer ervaring. Ik wist amper hoe ik extra html-pagina maakte. Naarmate ik doorgroeide in het blok kwamen die skills langzaam van zelf. Hierdoor zou ik zeggen dat ik veel zwakke punten had en niet veel sterke. Ondanks mijn lage niveau op dat moment ben ik toch goed door gegroeid en heb ik het blok gehaald. Ik heb ook veel van mijn klas genoten geleerd. Zonder mijn klasgenoten zou ik zeggen dat ik veel meer moeite zou krijgen met het eerste blok omdat er niet zoveel ondersteuning is wat ik vaak wel nodig heb als ik met iets nieuws begin. Ik documenteerde weinig omdat ik het eerst niet leuk vond, maar ook omdat ik het nut er niet van inzag in het begin. In blok 2 kwam ik er achter dat het toch belangrijker is dan gedacht.
|
||||
|
||||
Sterke punten
|
||||
Snel lerend. Gemotiveerd. Niet verlegen om vragen te stellen
|
||||
|
||||
Zwakke punten
|
||||
Weinig ervaring met coderen. Geen scrum ervaring. Weinig documentatie.
|
||||
|
||||
**Situatie**
|
||||
**Taak/Opgave**
|
||||
@@ -13,7 +18,13 @@ In blok 1 kwam
|
||||
|
||||
# TI game controller (blok 2)
|
||||
|
||||
In blok 2 leerde ik samenwerken samen met 1 teamgenoot. Dit was wel in het begin lastig omdat je dan echt met scrum moet werken en ook veel documentatie moet schrijven. ALs je alleen werkt, is dit niet per se heel belangrijk, maar in een team wel. Ik had wel veel samenwerkingsproject op mijn middelbare school, hierdoor ben ik wel goed in het communiceren naar elkaar. Helaas waren er wat mankementen met mijn commits. Ik commiten heel veel tegelijk waardoor dingen onoverzichtelijk werden. Ik was enorm tevreden met mijn teamgenoot en heb veel ervan kunnen leren.
|
||||
|
||||
Sterke punten
|
||||
Goede communicatie. Oplossingen zoeken.
|
||||
|
||||
Zwakke punten
|
||||
Coding conventions. Scrum werken. Commits van code.
|
||||
|
||||
**Situatie**
|
||||
**Taak/Opgave**
|
||||
@@ -24,9 +35,15 @@ In blok 1 kwam
|
||||
|
||||
|
||||
|
||||
# verbeting leer omgeving (blok 3)
|
||||
# Verbetering leer omgeving (blok 3)
|
||||
In blok moesten we in een team van 4 werken. Dit was wel een stuk fijner dan 2 omdat je dan met een groep dingen kan bepalen. Wij hadden in het begin problemen met een goed idee te verzinnen voor het blok. Dit kwam voor mij door een tekort aan creativiteit bij mij en het inbeelden van tekorten op de school omdat ik er nog niet zo vaak en lang ben. Maar wij hebben ons hierdoorheen gewerkt en wij konden aan de slag. Tijdens blok 3 kwam ik er achter dat ik vrij ontevreden was met de huidige staat van de opleiding. Hierdoor wist ik niet zeker of ik wel verder wou gaan met de opleiding. Dit zorgde voor een tekort aan motivatie bij mij voor een tijd. In sprint 3 had ik besloten om in ieder geval mijn propedeuse te halen.
|
||||
|
||||
|
||||
Sterke punten
|
||||
Goede communicatie. Soepel te werk. Taak gericht.
|
||||
|
||||
Zwakke punten
|
||||
Vertical Slice, Het werken naar MVP, Weinig verstand van Back-end, creativiteit en motivatie.
|
||||
|
||||
**Situatie**
|
||||
**Taak/Opgave**
|
||||
|
11
docs/personal-documentation/Sam/reflectiesOpdracht.md
Normal file
11
docs/personal-documentation/Sam/reflectiesOpdracht.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Reflectie 3 blokken
|
||||
|
||||
## Blok 1
|
||||
In blok 1 heb ik de professionele skills Persoonlijk leiderschap en Toekomstgericht organiseren. Ik had veel moeite met documenteren en het scrumboard te gebruiken, omdat ik er nog geen ervaring mee had. Ik had op dat moment al het hele project in blokjes opgedeeld voor mezelf en keer daarna nooit meer naar het scrumboard. Door die manier van werken deed ik ook 5 dingen tegelijk waardoor ik af en toe het overzicht kwijtraakte . Ik had als doel opgesteld om in de volgende blokken meer het scrumboard te gaan gebruiken. Mijn aanpak was proberen zelf wat user story’s te maken, zodat ik ook wat meer betrokken was bij het scrumboard. Uiteindelijk heb ik daardoor wel wat meer gebruik gemaakt van het scrumboard, maar ik ging nog wel veel mijn eigen weg. Ik was niet helemaal tevreden met het resultaat, maar de aanpak werkte wel. Wat ik heb geleerd is als ik veel gebruik van iets wil maken moet ik er zelf ook bij betrokken zijn. Volgende keren zorg ik er voor dat ik betrokken ben bij het scrum board wat nu ook moet, waardoor ik meer het scrumboard gebruik.
|
||||
|
||||
## Blok 2
|
||||
In blok 2 gingen we voor het eerst samenwerken in een duo, waarbij we ook deels onze eigen user story’s moesten maken, dat heeft me ook geholpen om door het hele blok heen het scrumboard meer te gebruiken. Communicatie ging over het algemeen in dat blok redelijk goed. Als we vragen aan elkaar hadden werden die gewoon gesteld en als een van ons vastliep hielpen we elkaar. In sprint 2 werden classes aan ons geïntroduceerd waarbij ik best wat moeite had om dat te begrijpen. Dus ik had maar 1 class gemaakt en verder alles in functies gestopt. Pas eind sprint 2 probeerde ik de feedback te verwerken om alles in classes te stoppen, maar omdat je code uiteindelijk zo complex is. Is het bijna onmogelijk om het in classes te stoppen. Waarbij het resultaat was een heel lastig leesbaar programma. Ik was niet tevreden of over het resultaat aan het einde van het blok. Mijn aanpak was bij het volgende blok. Meteen alles in classes maken. Wat uiteindelijk wel goed heeft gewerkt. Ben daardoor ook achter gekomen hoe handig classes zijn en dat ze enorm veel overzicht geven van wat je aan het maken bent.
|
||||
|
||||
## Blok 3
|
||||
In blok 3 stond doelgericht interacteren en persoonlijke leiderschap centraal. Het groepje in blok 3 was te gezellig waardoor we vaak meer zaten te lollen dan we aan het werk waren. Ik had mezelf de taak gegeven om proberen om meer gefocust te werken zonder dat ik afgeleid raakte door mijn groepje. Mijn aanpak was door mezelf af te schermen met een koptelefoon of eventjes ergens anders te gaan zitten, wat ook goed hielp was even een rondje lopen. Op die manier kon ik de laatste sprint heel efficiënt werken en in blok 4 merk ik ook dat die techniek enorm erg helpt met meer gefocust en productief blijven op een dag. Dit resultaat was eigenlijk een beetje laat het liefst deed ik dit al eind sprint 1, zodat ik heel het blok beter kon doorwerken.
|
||||
|
@@ -2,22 +2,33 @@
|
||||
|
||||
## Inhoudsopgave
|
||||
|
||||
- [Inleiding](#inleiding)
|
||||
- [Reflectie](#reflectie)
|
||||
* [Blok 1](#blok-1)
|
||||
* [Blok 2](#blok-2)
|
||||
* [Blok 3](#blok-3)
|
||||
- [Conclusie](#conclusie)
|
||||
* [Inleiding](#inleiding)
|
||||
* [Reflectie](#reflectie)
|
||||
+ [Blok 1](#blok-1)
|
||||
+ [Blok 2](#blok-2)
|
||||
+ [Blok 3](#blok-3)
|
||||
* [Conclusie](#conclusie)
|
||||
|
||||
## Inleiding
|
||||
|
||||
In dit document zal ik een skill ontwikkelplan schrijven voor mijn persoonlijk leiderschap. Dit plan zal bestaan uit een reflectie van de afgelopen blokken, mijn sterke en zwakke punten en mijn smart leerdoelen voor de komende blokken.
|
||||
|
||||
De vier profecional skills:
|
||||
|
||||
* Toekomstgericht organiseren
|
||||
* Onderzoekend probleemoplossen
|
||||
* Persoonlijk leiderschap
|
||||
* Doelgericht interacteren
|
||||
|
||||
## Reflectie
|
||||
|
||||
In het volgende stuk zal ik reflecteren op de afgelopen blokken. Hierbij kijk ik naar de feedback die ik heb gekregen, waar ik op dat moment stond en wat ik heb geleerd. Bij het reflecteren zal ik de vier profecional skills gebruiken als leidraad.
|
||||
|
||||
### Blok 1
|
||||
|
||||
In het eerste blok heb ik op veel verschillende vlakken geleerd wat mijn sterke en zwakke punten zijn. Groot en deels van de eerste periode in blok 1 heb ik gespendeerd aan mezelf leren kennen binnen de opleiding. Het werken binnen een nieuwe omgeving en met nieuwe mensen was voor mij goed te doen. Ik heb de leeromgeving snel leren kennen en heb geen moeite gehad met het communiceren met mijn medestudenten en docenten.
|
||||
In het eerste blok heb ik op veel verschillende vlakken geleerd wat mijn sterke en zwakke punten zijn. Groot en deels van de eerste periode in blok 1 heb ik gespendeerd aan mezelf leren kennen binnen de opleiding. Het werken binnen een nieuwe omgeving en met nieuwe mensen was voor mij goed te doen. Ik heb de leeromgeving snel leren kennen en heb geen moeite gehad met het communiceren met mijn medestudenten en docenten. Enekele problemen die ik tijdens dit blok tegen kwam heb ik snel kunnen oplossen door vragen te stellen aan de docenten.
|
||||
|
||||
Door dagelijks mijn bezigheden te documenteren heb ik een goed overzicht kunnen houden van mijn werkzaamheden dit heeft mij geholpen om snel te kunnen schakelen tussen verschillende taken. Aan het begin van de sprints plannde ik mijn werkzaamheden in en zorgde ik ervoor dat ik mijn werkzaamheden op tijd af had. Ik heb in blok 1 veel tijd gestoken in het voorbereiden en het documenteren van mijn werk. Dit heeft mij geholpen om het beste uit mezelf te halen.
|
||||
|
||||
Als ik een aantal sterke en zwakke punten moet noemen van blok 1 dan zijn dat:
|
||||
|
||||
@@ -25,9 +36,9 @@ Sterke punten:
|
||||
- Goed kunnen communiceren
|
||||
- Snel kunnen schakelen tussen verschillende taken
|
||||
- Snelle ontwikkeling in nieuwe omgevingen
|
||||
- Documenteren van het werk
|
||||
- Voorbereiden van presentaties
|
||||
- Het beste uit mezelf halen
|
||||
- Voorbereiden en documenteren van werkzaamheden
|
||||
- Goed kunnen plannen
|
||||
- Het meeste uit mezelf halen
|
||||
|
||||
Zwakke punten:
|
||||
- Meer gebruik maken van coding conventions
|
||||
@@ -35,13 +46,53 @@ Zwakke punten:
|
||||
|
||||
Ik heb in blok 1 enorm veel kunnen leren en heb echt het meeste uit mezelf kunnen halen. Ik ben erg tevreden met de resultaten die ik heb behaald en ben blij met de manier waarop ik mezelf heb kunnen ontwikkelen.
|
||||
|
||||

|
||||
|
||||
### Blok 2
|
||||
|
||||
Niet alles op mij nemen en meer vertrouwen hebben in anderen
|
||||
In blok 2 heb ik voor het eerst moeten samenwerken met een teamgenoot. Aan het begin heb ik veel moeite gehad met het toe vertrouwen van werk aan mijn teamgenoot. Ik heb hier veel van kunnen leren en gerealiseerd dat ik te perfectionistisch aan het werk was. Ik heb in blok 2 veel tijd gestoken in het leren vertrouwen van mijn teamgenoot en het loslaten van de controle. Dit heeft mij geholpen om beter te kunnen samenwerken en om meer te kunnen focussen op mijn eigen werkzaamheden. Een voordeel van deze perfectionistische houding was dat ik de werkzaamheden van het project goed kon overzien en kon bijsturen waar nodig. Door dagelijks eerder aanwezig te zijn heb ik met mijn teamgenoot de tijd kunnen nemen om de werkzaamheden te bespreken en te plannen.
|
||||
|
||||
De eerste 2 weken (sprint 1) van blok 2 hebben ik en mijn teamgenoot aan een game gewerkt voor ons project. We hebben uiteindelijk besloten om deze game niet voor te zetten en zijn overgestapt naar een nieuwe game. We hebben allebei de realisatie gehad dat de gekozen game te hoog gegrepen was en dat we beter een andere game konden kiezen. Dit was een goede keuze en heeft ons geholpen om de rest van het project goed te kunnen afronden.
|
||||
|
||||
Als ik een aantal sterke en zwakke punten moet noemen van blok 2 dan zijn dat:
|
||||
|
||||
Sterke punten:
|
||||
- Goed kunnen communiceren
|
||||
- Snel kunnen schakelen tussen verschillende taken
|
||||
- Snelle ontwikkeling in nieuwe omgevingen
|
||||
- Inzicht om problemen te voorkomen
|
||||
|
||||
Zwakke punten:
|
||||
- Gebruik maken van UML
|
||||
- Te perfectionistisch aan het werk
|
||||
|
||||
Ik heb in blok 2 veel kunnen leren over het samenwerken met een teamgenoot en het loslaten van de controle. In het begin was dit erg lastig maar naarmate de weken vorderde heb ik hier veel van kunnen leren. De behaalde resultaten in blok 2 zijn goed en ik ben tevreden dat ik controle heb kunnen loslaten en heb kunnen samenwerken met mijn teamgenoot.
|
||||
|
||||

|
||||
|
||||
### Blok 3
|
||||
|
||||
eerder aan de bel trekken wanneer het team niet goed functioneert
|
||||
Blok 3 is voor mij het blok geweest met de meeste leer punten. Het blok is begonnen met het leren van je nieuwe klas, er is door de opleiding een keuze gemaakt op klassen te vormen met leerlingen van de zelfde richting. Dit hield in dat ik in een nieuwe klas terecht kwam met nieuwe mensen. Dit was voor mij een grote verandering omdat ik gewend was geraakt aan mijn oude klas. Ik hierdoor ook kunnen ontdekken dat ik moeite heb met grote veranderingen. Het onbekende en niet wetende is voor mij een grote uitdaging.
|
||||
|
||||
In blok 3 zijn we gaan werken in teams van 4, aan het begin was ik hier erg enthousiast over omdat je met een groter team een beter product neer zou kunnen zetten. Dit bleek in de praktijk toch lastiger dan gedacht. De teams van blok 3 moest je zelf maken en binnen het team moesten leerlingen van de verschillende klassen zitten. Helaas zat niet iedereen binnen het team op het zelfde niveau. Ik heb in de eerste sprint de rol van scrum master op mij genomen. Hierdoor heb ik het project kunnen uitplannen en heb ik een werk structuur voor het team opgezet.
|
||||
|
||||
Naarmate het project zich vorderede werdt duidelijk dat het niveau verschil een probleem begon te worden. Halverwege sprint 2 heb ik met een docent gesproken over de problemen binnen het team. Hier uit kwam voort dat een spoed overleg met het team nodig was. Een week later vond dit overleg plaats. Hier uit bleek dat door het niveau verschil maakte dat sommige teamleden niet mee konden komen. Deze leerlingen gingen met hun problemen niet naar de docenten maar vroegen dit aan de andere teamleden. Dit heeft er voor gezorgd dat de andere teamleden niet aan hun eigen werkzaamheden toe kwamen. De uitkomst van dit overleg was de teamleden die niet mee konden komen met hun problemen naar docenten zouden gaan. Als binnen 1 week geen verbetering zou zijn dan zou het team uit elkaar worden gehaald. Na dit overleg is de samenwerking verbeterd maar het niveau verschil bleef een probleem. Dit heeft er voor gezorgd dat het project niet op het gewenste niveau is afgerond.
|
||||
|
||||
Als ik een aantal sterke en zwakke punten moet noemen van blok 3 dan zijn dat:
|
||||
|
||||
Sterke punten:
|
||||
- Leiderschap nemen
|
||||
- Doorzettingsvermogen
|
||||
- Doelgericht werken
|
||||
|
||||
Zwakke punten:
|
||||
- Moeite met grote veranderingen
|
||||
- Moeite met onbekende situaties
|
||||
- Te laat aan de bel trekken bij problemen
|
||||
|
||||
In blok 3 heb ik veel kunnen leren over het samenwerken in een team waar niveau verschil is. Ik heb geleerd dat ik eerder deze problemen moet aangeven bij de docenten en niet moet wachten tot het te laat is. Ik heb in blok 3 veel tijd gestoken in het leren van het leiden van een team en het nemen van leiderschap.
|
||||
|
||||

|
||||
|
||||
## Sterke en zwakke punten (Profesional skills)
|
||||
|
||||
@@ -49,14 +100,13 @@ eerder aan de bel trekken wanneer het team niet goed functioneert
|
||||
|
||||
## Conclusie
|
||||
|
||||
|
||||
## Profesional skills
|
||||
|
||||
https://www.hva.nl/binaries/content/assets/serviceplein-a-z/media-creatie-en-informatie/hbo-ict/competenties/professional-skills-hbo-ict-2023-2024.pdf
|
||||
|
||||
De vier profecional skills:
|
||||
|
||||
- Toekomstgericht organiseren
|
||||
- Onderzoekend probleemoplossen
|
||||
- Persoonlijk leiderschap
|
||||
- Doelgericht interacteren
|
||||
* Toekomstgericht organiseren
|
||||
* Onderzoekend probleemoplossen
|
||||
* Persoonlijk leiderschap
|
||||
* Doelgericht interacteren
|
BIN
docs/personal-documentation/sebas/assets/beoordelingBlok1.png
Normal file
BIN
docs/personal-documentation/sebas/assets/beoordelingBlok1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 125 KiB |
BIN
docs/personal-documentation/sebas/assets/beoordelingBlok2.png
Normal file
BIN
docs/personal-documentation/sebas/assets/beoordelingBlok2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 166 KiB |
BIN
docs/personal-documentation/sebas/assets/beoordelingBlok3.png
Normal file
BIN
docs/personal-documentation/sebas/assets/beoordelingBlok3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 97 KiB |
@@ -255,6 +255,14 @@ Done
|
||||
|
||||
**18 May**
|
||||
|
||||
- Weekend
|
||||
|
||||
**19 May**
|
||||
|
||||
- Weekend
|
||||
|
||||
**20 May**
|
||||
|
||||
To do
|
||||
|
||||
- LDR sensor
|
||||
@@ -262,43 +270,27 @@ To do
|
||||
|
||||
Done
|
||||
|
||||
-
|
||||
|
||||
**19 May**
|
||||
|
||||
To do
|
||||
|
||||
-
|
||||
|
||||
Done
|
||||
|
||||
-
|
||||
|
||||
**20 May**
|
||||
|
||||
To do
|
||||
|
||||
-
|
||||
|
||||
Done
|
||||
|
||||
-
|
||||
- Ethics research
|
||||
|
||||
**21 May**
|
||||
|
||||
To do
|
||||
|
||||
-
|
||||
- Ethics research besrpeken met pieta
|
||||
- Skill ontwikkeling plan
|
||||
- LDR sensor
|
||||
|
||||
Done
|
||||
|
||||
-
|
||||
- Ethics research besrpeken met pieta
|
||||
- LDR sensor
|
||||
|
||||
**22 May**
|
||||
|
||||
To do
|
||||
|
||||
-
|
||||
- Skill ontwikkeling plan
|
||||
- Fitness activity videos/database
|
||||
|
||||
Done
|
||||
|
||||
|
@@ -232,3 +232,6 @@ Voor het embed systeem van FibBot is de volgende research gedaan om de positie v
|
||||
Voor het schrijven van software voor een intelligente controller voorzien van actuatoren en sensoren ben ik begonnen met het schrijven van software voor het Wii Balance Board. Het Wii Balance Board is een controller die wordt gebruikt om de positie van een gebruiker te tracken. De software die ik aan het schrijven ben verbind de android app met een Wii Balance Board en trackt de positie van de gebruiker.
|
||||
|
||||
Op dit moment kan het device nog niet worden verbonden met de app. Het is mogelijk om het board te discoveren maar de verbinding kan nog niet gemaakt worden.
|
||||
|
||||
|
||||
test
|
Reference in New Issue
Block a user