Merge branch 'main' of github.com:Sharwin24/sharwin24.github.io

This commit is contained in:
Sharwin24 2025-01-21 18:10:17 -06:00
commit 151adab3d1
11 changed files with 69 additions and 4 deletions

View file

@ -1,3 +1,13 @@
.github-button {
text-align: center;
background-color: transparent;
border: 1px solid transparent;
border-radius: 0.25rem;
color: get-light-color('muted-text-color');
background-color: get-light-color('bg-card');
}
body.kind-page { body.kind-page {
background-color: get-light-color('bg-secondary'); background-color: get-light-color('bg-secondary');
position: relative; position: relative;

View file

@ -127,6 +127,7 @@ params:
maxVisibleSections: 5 maxVisibleSections: 5
# Enable and configure blog posts # Enable and configure blog posts
# site.Params.features.tags.enable
features: features:
readingTime: readingTime:
enable: true enable: true
@ -134,6 +135,8 @@ params:
title: "Project Posts" title: "Project Posts"
enable: true enable: true
showAuthor: true showAuthor: true
tags:
enable: true
analytics: analytics:
enabled: true enabled: true
services: services:

View file

Before

Width:  |  Height:  |  Size: 481 KiB

After

Width:  |  Height:  |  Size: 481 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 KiB

View file

@ -17,8 +17,56 @@ tags: ["3D Printing", "Arduino", "C++", "MATLAB"]
An educational kit designed to teach the fundamentals of kinematics and dynamics. The kit is intended to accompany the course ME3460: Robot Dynamics & Control at Northeastern University. The kit is a physical representation of the final project, which is currently done purely through MATLAB simulation. An educational kit designed to teach the fundamentals of kinematics and dynamics. The kit is intended to accompany the course ME3460: Robot Dynamics & Control at Northeastern University. The kit is a physical representation of the final project, which is currently done purely through MATLAB simulation.
## Kit Design ## Kit Design
The robot is a 3-link planar manipulator with 3 degrees of freedom. The end effector is a simple gripper that can grab small objects.
The entire kit is composed of 3D printed parts, and off-the-shelf hardware/electronics. Students can assemble the kit without any soldering and with minimal tools. The entire kit is composed of 3D printed parts, and off-the-shelf hardware/electronics. Students can assemble the kit without any soldering and with minimal tools.
<div align="center"> <div align="center" style="display: flex; flex-wrap: wrap; justify-content: center; gap: 15px;">
<img src="assembly_instructions.png" alt="Assembly Instructions" style="border-radius: 15px;"> <img src="step_1.png" alt="First Step of Instructions" style="border-radius: 15px; width: 45%;">
<img src="pcb_instructions.png" alt="PCB Instructions" style="border-radius: 15px; width: 45%;">
<img src="base_instructions.png" alt="Base Assembly" style="border-radius: 15px; width: 45%;">
<img src="full_assembly_instructions.png" alt="Full Assembly" style="border-radius: 15px; width: 45%;">
</div> </div>
The instructions are laid out in simple steps, akin to LEGO instructions. A custom PCB was developed to simplify the wiring process and off the shelf stepper motors and drivers were used for easy integration with the Arduino microcontroller.
<div align="center">
<img src="students_building.png" alt="Students Building Kit" style="border-radius: 15px;">
</div>
## Software
In order to control the robot arm, a custom library was written in C++ to handle the microstepping. The library followed the same technique as the AccelStepper library to enable concurrent motion of multiple motors at a time in addition to applying acceleration and velocity profiles. A custom library meant students could easily write and implement their own motion profiles without having to deal with the hardware specifics.
```cpp
void LinkStepperMotor::computeNewPulseInterval() {
// Acceleration curve is split into 3 parts: acceleration, steady-state, deceleration
int totalSteps = abs(this->targetPosition - this->previousTargetPosition);
int stepsRemaining = this->getStepsRemaining();
int stepsCompleted = totalSteps - stepsRemaining;
int n1 = totalSteps / 3;
int n2 = 2 * n1;
uint16_t speedSPS = this->currentSpeedSPS;
// Determine which range we are in to apply the correct part of the acceleration curve
if (stepsCompleted <= n1) {
// Acceleration
// a(n) = k * n1 + a0
// v(n) = 0.5 * k * n^2 + a0 * n + v0
speedSPS = (0.5f * this->accelerationRate * pow(stepsCompleted, 2)) + (this->initialAcceleration * stepsCompleted) + this->initialSpeedSPS;
} else if (stepsCompleted >= n1 && stepsCompleted <= n2) {
// Steady-state
// a(n) = a_max = k * n1 + a0
// v(n) = (k * n1 + a0) * n - 0.5 * k * n1^2 + v0
speedSPS = ((this->accelerationRate * n1 + this->initialAcceleration) * stepsCompleted) - (0.5f * this->accelerationRate * pow(n1, 2)) + this->initialSpeedSPS;
} else { // (stepsCompleted >= n2)
// Deceleration
// a(n) = -k * n + k * n2 + a_max
// v(n) = -0.5 * k * n^2 + (k * n1 + k * n2 + a0) * n - 0.5 * k * (n1^2 + n2^2) + v0
speedSPS = (-0.5f * this->accelerationRate * pow(stepsCompleted, 2))
+ (this->accelerationRate * n1 + this->accelerationRate * n2 + this->initialAcceleration) * stepsCompleted
- (0.5f * this->accelerationRate * (pow(n1, 2) + pow(n2, 2)))
+ this->initialSpeedSPS;
}
this->setSpeedSPS(speedSPS);
}
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 717 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 KiB

View file

@ -62,6 +62,11 @@
{{ if site.Params.features.tags.enable }} {{ if site.Params.features.tags.enable }}
{{partial "misc/tags.html" .Params.tags }} {{partial "misc/tags.html" .Params.tags }}
{{ end }} {{ end }}
<!-- <div class="github-button">
<a href="https://github.com/Sharwin24/" target="_blank" class="btn btn-primary">
<i class="fab fa-github"></i> View on GitHub
</a>
</div> -->
<div class="post-content" id="post-content"> <div class="post-content" id="post-content">
{{ .Page.Content }} {{ .Page.Content }}
</div> </div>

View file

@ -1,8 +1,7 @@
<div class="tags"> <div class="tags">
<ul style="padding-left: 0;"> <ul style="padding-left: 0;">
{{ range . }} {{ range . }}
{{ $url:= printf "tags/%s/" . }} <li class="rounded"><a class="btn btn-sm btn-info">{{ . }}</a></li>
<li class="rounded"><a href="{{ $url | urlize | relLangURL }}" class="btn btn-sm btn-info">{{ . }}</a></li>
{{ end }} {{ end }}
</ul> </ul>
</div> </div>