diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 72b0fa7..91220f7 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -4,38 +4,39 @@ on: pull_request: types: [opened, reopened, synchronize, closed] -concurrency: preview-${{ github.ref }} +concurrency: + group: preview-${{ github.ref }} + cancel-in-progress: true jobs: deploy-preview: runs-on: ubuntu-latest + permissions: contents: write pull-requests: write + steps: - name: Checkout Code uses: actions/checkout@v4 - # Set up Ruby and cache gems for faster builds - name: Set up Ruby if: github.event.action != 'closed' uses: ruby/setup-ruby@v1 with: - ruby-version: '3.2' # Match your local Ruby version + ruby-version: '3.2' bundler-cache: true - # Compile Jekyll with a custom baseurl pointing to the preview folder - name: Build Jekyll Site if: github.event.action != 'closed' run: | - bundle install - bundle exec jekyll build --baseurl "/${{ github.event.repository.name }}/pr-preview/pr-${{ github.event.number }}" + bundle exec jekyll build \ + --baseurl "/${{ github.event.repository.name }}/pr-preview/pr-${{ github.event.number }}" - # Deploy the compiled static folder to GitHub Pages - name: Deploy PR Preview to GitHub Pages uses: rossjrw/pr-preview-action@v1 with: - source-dir: ./_site # Default output folder for Jekyll - preview-branch: gh-pages # The branch your live GitHub Pages site serves from - umbrella-dir: pr-preview # Parent folder for previews on the gh-pages branch + source-dir: ./_site + preview-branch: main + umbrella-dir: pr-preview action: auto diff --git a/Abdullah_Khaled_CV_Extended.yaml b/Abdullah_Khaled_CV_Extended.yaml index ae72164..c11c365 100644 --- a/Abdullah_Khaled_CV_Extended.yaml +++ b/Abdullah_Khaled_CV_Extended.yaml @@ -105,7 +105,7 @@ cv: - Implemented driver-input buffering for teleop handoff to automated placement; built match logging/debug tooling and simulation workflows to validate behavior during an 8-week build season with limited robot access; taught mechanism simulation to supporting students - Mentored rookie FTC teams 26357 and 28931 (2024–2025); supported ~30 students (6 programmers) from prototyping through competition, including ~25 hrs/week at peak ITKAN FTC build season - "Applied FRC sensor-fusion experience to a custom FTC pose estimator (wheel odometry, IMU, vision) with Kalman filtering for localization and automated turret targeting; improved targeting/scoring accuracy by ~35%; [FTC codebase](https://github.com/itkan-of-icf/ftc-26357-2526-v2)" - - Delivered three 1-hour ICF FLL workshops (7 students/session) for refugee students using the self-developed OARobotics curriculum ([OARobotics](https://www.aakhaled.com/personal/oarobotics/)); students built FLL-class robots and completed block-code autonomous maze navigation by session end + - Delivered three 1-hour ICF FLL workshops (7 students/session) for refugee students using the self-developed OARobotics curriculum ([OARobotics](https://www.aakhaled.com/oarobotics/)); students built FLL-class robots and completed block-code autonomous maze navigation by session end - company: ITKAN Robotics - FIRST Robotics Competition (FRC 9128) position: Chief Technical Advisor date: @@ -164,7 +164,7 @@ cv: - Lead pre-session briefings for peer instructors; assign age-banded groups and smaller ratios for newer volunteers; supervise instructional delivery while maintaining a direct tutoring load; train peers on Gideon-based methods informed by parallel Gideon student, TA, and instructor roles - Recruit high-school volunteers from five schools via robotics networks and onboard them into the program; provide periodic updates to the volunteer coordinator - Run multilingual sessions with peer interpretation when available, mid-session breaks, and age-separated groupings to stabilize pacing and engagement - - Deliver monthly robotics enrichment for Project Taleem using the OARobotics curriculum (www.aakhaled.com/personal/oarobotics) + - Deliver monthly robotics enrichment for Project Taleem using the OARobotics curriculum (www.aakhaled.com/oarobotics) - Measured average ~15-point IXL SmartScore increase over four months (Nov–Feb; n=10 students) - company: Mu Alpha Theta Math Honor Society, Wakeland High School position: Vice President diff --git a/Gemfile.lock b/Gemfile.lock index 06d8b58..58f95de 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -47,6 +47,7 @@ GEM faraday-net_http (3.4.1) net-http (>= 0.5.0) ffi (1.17.2-x64-mingw-ucrt) + ffi (1.17.2-x86_64-linux-gnu) forwardable-extended (2.6.0) gemoji (4.1.0) github-pages (232) @@ -244,6 +245,8 @@ GEM uri nokogiri (1.18.10-x64-mingw-ucrt) racc (~> 1.4) + nokogiri (1.18.10-x86_64-linux-gnu) + racc (~> 1.4) octokit (4.25.1) faraday (>= 1, < 3) sawyer (~> 0.9) @@ -283,6 +286,7 @@ GEM PLATFORMS x64-mingw-ucrt + x86_64-linux DEPENDENCIES github-pages diff --git a/_config.yml b/_config.yml index 1e04cd0..fde0d51 100644 --- a/_config.yml +++ b/_config.yml @@ -25,7 +25,7 @@ title : "Abdullah Khaled" title_separator : "|" subtitle : "Engineering Portfolio" name : "Abdullah Khaled" -description : "Engineering portfolio of Abdullah Khaled (akhaled247)—robotics, FRC/FTC competition work, and software projects. Contact me@aakhaled.com." +description : "Engineering portfolio of Abdullah Khaled (akhaled247): robotics, FRC/FTC competition work, and software projects. Contact me@aakhaled.com." url : "https://www.aakhaled.com" baseurl : "" # empty string for root domain deployment repository : akhaled247/akhaled247.github.io @@ -125,7 +125,7 @@ analytics: author: name : "Abdullah Khaled" avatar : # path of avatar image, e.g. "/assets/images/bio-photo.jpg" - bio : "Abdullah Khaled (akhaled247)—engineering portfolio at www.aakhaled.com. Robotics, vision, and on-device ML. Contact me@aakhaled.com or connect on GitHub and LinkedIn." + bio : "Abdullah Khaled (akhaled247): engineering portfolio at www.aakhaled.com. Robotics, vision, and on-device ML. Contact me@aakhaled.com or connect on GitHub and LinkedIn." location : "Frisco, Texas" email : me@aakhaled.com links: diff --git a/_data/navigation.yml b/_data/navigation.yml index 67d9cd8..e4da027 100644 --- a/_data/navigation.yml +++ b/_data/navigation.yml @@ -4,13 +4,5 @@ main: url: / - title: "Projects" url: /projects/ - - title: "FIRST®" - url: /first/ - - title: "Personal" - url: /personal/ - - title: "PLTW" - url: /pltw-engineering/ - - title: "Resume" - url: /resume/ - title: "About" url: /about/ diff --git a/_includes/carousel.html b/_includes/carousel.html new file mode 100644 index 0000000..3e6035f --- /dev/null +++ b/_includes/carousel.html @@ -0,0 +1,219 @@ +{% assign letterstring = "a,b,c,d,e,f,g,h,i,j,k,l,m,n" %} +{% assign letters = letterstring | split: ',' %} +{% assign number = include.number | minus: 1 %} + + + + + \ No newline at end of file diff --git a/_includes/masthead.html b/_includes/masthead.html index 7e94ff9..741c9ba 100644 --- a/_includes/masthead.html +++ b/_includes/masthead.html @@ -1,5 +1,21 @@ {% capture logo_path %}{{ site.logo }}{% endcapture %} +
diff --git a/_includes/pdf b/_includes/pdf index 9e49e67..797a2a5 100644 --- a/_includes/pdf +++ b/_includes/pdf @@ -1,10 +1,29 @@ -{% assign pdf_path = include.path | relative_url %} -{% assign pdf_width = include.width | default: "700px" %} -{% assign pdf_height = include.height | default: "700px" %} - -
- -
-
- Open PDF in new tab -
\ No newline at end of file +{% assign w_raw = include.width | default: "100%" %} +{% assign h_raw = include.height | default: "56.25%" %} +{% assign pdf_float = include.float | default: "none" %} +{% comment %} Calculate correct aspect ratio for nested percentage containers {% endcomment %} +{% if w_raw contains "%" and h_raw contains "%" %} +{% assign w_num = w_raw | replace: "%", "" | plus: 0.0 %} +{% assign h_num = h_raw | replace: "%", "" | plus: 0.0 %} +{% assign pdf_padding = h_num | divided_by: w_num | times: 100 %} +{% assign pdf_padding_str = pdf_padding | append: "%" %} +{% else %} +{% assign pdf_padding_str = h_raw %} +{% endif %} +{% assign pdf_margin = "" %} +{% if include.float %} +{% if include.float == 'left' %} + {% assign pdf_margin = "margin-right: 1.5rem; margin-bottom: 1rem;" %} +{% else %} + {% assign pdf_margin = "margin-left: 1.5rem; margin-bottom: 1rem;" %} +{% endif %} +{% endif %} + +
+
+ +
+
+ Open PDF in new tab +
+
\ No newline at end of file diff --git a/_pages/about.md b/_pages/about.md index cfaa5fb..9f1892d 100644 --- a/_pages/about.md +++ b/_pages/about.md @@ -1,18 +1,16 @@ --- title: "About Abdullah Khaled" -description: "About Abdullah Khaled (akhaled247)—robotics, software engineering, and community work. Engineering portfolio at www.aakhaled.com. Contact me@aakhaled.com." +description: "About Abdullah Khaled (akhaled247): robotics, software engineering, and community work. Engineering portfolio at www.aakhaled.com. Contact me@aakhaled.com." permalink: /about/ author_profile: false --- -Abdullah Khaled headshot -Welcome to my engineering portfolio! My name is Abdullah Khaled ([akhaled247](https://github.com/akhaled247)), and I am currently a junior at Wakeland High School in Frisco, TX. I enjoy both the hardware and software side of engineering and am always searching for ways to dive deeper into the field of engineering while helping others along the way. I am especially interested in robotics and how best to integrate the knowledge I have—from CAD to vision to sensor fusion—to create low-cost, reliable autonomous systems for use in disaster-stricken areas. +Abdullah Khaled headshot +Project Taleem volunteers with students at Ma'ruf Dallas +FIRST robotics demo for Senator Chris Van Hollen with ITKAN team +Picture of the Smoot Standard at MIT {% include videotextbreak %} -Project Taleem volunteers with students at Ma'ruf Dallas -
-When I'm not working on engineering or school, I try helping out in my community where I can. A lot of my efforts go towards the refugee agency Ma'ruf in Dallas. There, I operate Project Taleem, a program to teach refugee students ages K-8 math and reading skills to help them reach their peers academically. Additionally, I enjoy playing tennis (though I'm not as good as I used to, what with school and everything). -{% include videotextbreak %} -FIRST robotics demo for Senator Chris Van Hollen with ITKAN team -
-I've also had the chance to talk with a lot of people through my robotics team, from the founder of Glorious to Maryland Senator Chris Van Hollen, where I was able to talk to him about my experience in FIRST and robotics in general, even providing him a demonstration of our robot! -{% include videotextbreak %} -Feel free to follow my [GitHub](https://github.com/akhaled247) or connect with me on [LinkedIn](https://www.linkedin.com/in/akhaled247/), and I'd love to talk more! +Welcome to my engineering portfolio! My name is Abdullah Khaled ([akhaled247](https://github.com/akhaled247)), and I am an aspiring robotics engineer in the Dallas area! I enjoy both the hardware and software side of engineering and am always searching for ways to dive deeper into the field of engineering while helping others along the way. I am especially interested in robotics and how best to integrate the knowledge I have, from CAD to vision to sensor fusion, to create low-cost, reliable autonomous systems for use in disaster-stricken areas. I've also had the chance to talk with a lot of people through my robotics team, from the founder of Glorious to Maryland Senator Chris Van Hollen, where I was able to talk to him about my experience in FIRST and robotics in general, even providing him a demonstration of our robot! + +When I'm not working on engineering or school, I try helping out in my community where I can. A lot of my efforts go towards the refugee agency Ma'ruf in Dallas. There, I operate Project Taleem, a program to teach refugee students ages K-8 math and reading skills to help them reach their peers academically. Additionally, I enjoy playing tennis (though I'm not as good as I used to, what with school and everything). I have also started getting more invested in photography, which is something I've always liked to do but haven't had the time to pursue until recently. + +Feel free to follow my [GitHub](https://github.com/akhaled247), connect with me on [LinkedIn](https://www.linkedin.com/in/akhaled247/), or message me on my [photography account](https://www.instagram.com/247aak) and I'd love to talk more! \ No newline at end of file diff --git a/_pages/first/DECODE.md b/_pages/first/DECODE.md index c656a93..ed704ae 100644 --- a/_pages/first/DECODE.md +++ b/_pages/first/DECODE.md @@ -1,6 +1,6 @@ --- title: "2025-26 FTC Season" -description: "DECODE 2025-26 FTC season by Abdullah Khaled (akhaled247): Programming Lead for ITKAN of ICF teams 26357 and 28391—Limelight vision, Bezier pathing, Kalman filter, UIL State 3rd." +description: "DECODE 2025-26 FTC season by Abdullah Khaled (akhaled247): Programming Lead for ITKAN of ICF teams 26357 and 28391. Limelight vision, Bezier pathing, Kalman filter, UIL State 3rd." permalink: /first/decode/ author_profile: false project_schema: true @@ -8,19 +8,20 @@ project_schema: true In this season of the FIRST® Tech Challenge (FTC) game, robot were tasked with the deceptively simple task of shooting multicolored balls into a triangular goal as fast as possible. This year, I was the Programming Lead and Co-Founder of my school's team, coding all of the robot's functions, particularly the shooter, auto align, and autonomous routines. Through our efforts, our team won the Control Award (which "celebrates a team that uses sensors and software to increase the ROBOT’S functionality during gameplay") at two of our events, were the event winners at the Semi-Regional Tournament, and placed 3rd at the UIL State Championship! -However, from the start, our team faced time constraints unlike what I had experienced during my previous FRC season ([REEFSCAPE](/first/reefscape/)); because of latent funding and approval from my school, we started from 0 with only 11 days before our first official competition. As such, we were in a time scramble to build and program the robot. Since the majority of our funding was through the school ($4,070 in total), we decided that hardware iteration would be too costly—meaning that software would have to cover the lost ground. Therefore, I built off of my previous experience and focused on three main aspects to maximize our robot's capabilities in that time frame: shooter consistency, autonomous alignment, and autonomous routines. +However, from the start, our team faced time constraints unlike what I had experienced during my previous FRC season ([REEFSCAPE](/first/reefscape/)); because of latent funding and approval from my school, we started from 0 with only 11 days before our first official competition. As such, we were in a time scramble to build and program the robot. Since the majority of our funding was through the school ($4,070 in total), we decided that hardware iteration would be too costly, meaning that software would have to cover the lost ground. Therefore, I built off of my previous experience and focused on three main aspects to maximize our robot's capabilities in that time frame: shooter consistency, autonomous alignment, and autonomous routines.
- To score in DECODE, you had to be able to shoot. So, due to the incredibly short timeline I faced, I originally had two hard-coded shooter presets. While these worked in the short-term, the restrictions on where the driver could shoot limited the capabilities of our robot. I realized the importance of being able to shoot anywhere on the field. So, I implemented an interpolated lookup table. Using our camera data, I created an algorithm to calculate our distance from the target and find the optimal velocity for the shooter based on our location on the field. In turn, we reduced our cycle time from 6.5s to 3.8s, a 41.5% decrease. + To score in DECODE, you had to be able to shoot. So, due to the incredibly short timeline I faced, I originally had two hard-coded shooter presets. While these worked in the short-term, the restrictions on where the driver could shoot limited the capabilities of our robot. I realized the importance of being able to shoot anywhere on the field. So, I implemented an interpolated lookup table. Using our camera data, I created an algorithm to calculate our distance from the target and find the optimal velocity for the shooter based on our location on the field (graph pictured left). In turn, we reduced our cycle time from 6.5s to 3.8s, a 41.5% decrease.
- FTC Pose Estimation

+ FTC Pose Estimation FTC Pose Estimation + +
- FTC Pose Estimation
- I used our camera not only to automatically adjust our shooter, but also to align our robot's angle to the goal. After our first competition, where our driver struggled to manually align to the target, I applied techniques I learned in REEFSCAPE to support them. By fusing sensor data from the onboard camera with dead-reckoning wheel odometry, I built a custom pose estimation class—similar to what I used in FRC—that calculated the optimal angle for the robot to turn, ensuring precise alignment with the goal. + I used our camera not only to automatically adjust our shooter, but also to align our robot's angle to the goal. After our first competition, where our driver struggled to manually align to the target, I applied techniques I learned in REEFSCAPE to support them. By fusing sensor data from the onboard camera with dead-reckoning wheel odometry, I built a custom pose estimation class (similar to what I used in FRC) that calculated the optimal angle for the robot to turn, ensuring precise alignment with the goal (pictured right).

diff --git a/_pages/first/REBUILT.md b/_pages/first/REBUILT.md new file mode 100644 index 0000000..b711feb --- /dev/null +++ b/_pages/first/REBUILT.md @@ -0,0 +1,55 @@ +--- +title: "REBUILT 2026 FRC Season | Team 9128" +description: "REBUILT 2026 FRC season by Abdullah Khaled (akhaled247): autonomous pathing, auto-align, automated driver-controls for Team 9128." +permalink: /first/rebuilt/ +author_profile: false +project_schema: true +carousels: + - images: + - image: /assets/images/first/9128-2026-queue.jpg + - image: /assets/images/first/9128-2026-btb.jpg + - image: /assets/images/first/9128-2026-impact.jpg + - image: /assets/images/first/9128-2026-ei.png + - image: /assets/images/first/9128-2026-states.jpg + - image: /assets/images/first/9128-2026-farmersville.png + - image: /assets/images/first/9128-2026-space-city-1.jpg + - image: /assets/images/first/9128-2026-robot-banners.png + - images: + - image: /assets/images/first/9128-2026-autoalign.gif + - image: /assets/images/first/9128-2026-sotm.gif + - images: + - image: /assets/images/first/9128-2026-auto.gif + - image: /assets/images/first/9128-2026-auto-pp.png +--- +
+ +
+{% include videotextbreak %} +{% include carousel.html width="48" height="36" unit="%" duration="10" number="1" float="left" %} + +After a somewhat disappointing season in [2025](/first/reefscape/), I was set on making sure our team bounced back as hard as possible. Using [Mantik](/mantik/) as a foundation and my new position as Technical Advisor, I improved our programming team enough so that much of the subsystem-level logic could be done without my intervention. As a result, I was able to direct my full attention to improving the QoL of my driver and bulletproofing our autonomous, which I describe in detail below. + +As I say in this [ChiefDelphi post](https://www.chiefdelphi.com/t/itkan-robotics-2026-robot-reveal-triple-threat/515730/12), I truly believe that this season was the best in our program's history. Our accolades include: **4 event wins** (including the *Texas District Championship*), **1st Impact award** in team history, **1st Engineering Inspiration award** in team history, 1st **World Division Captain** in team history, **highest EPA rank** in team history (*19/3700+*), **10th best record** in the world (*60-7 in official play*), and an undefeated **53-0 autonomous record** in our District (*1/2300+ district teams*)! And, personally, I achieved what I set out to do, as our team was the **4th most improved team** year over year. +{% include videotextbreak %} +

Automated Shooting

+{% include carousel.html width="36" height="36" unit="%" duration="10" number="2" float="right" %} +

Auto-Align

+One of the first programming tools we identified we needed was some sort of auto-align. With the rapid-fire nature of the game, it was going to be crucial that our driver could operate as quickly as possible. With our newly-developed vision system, this process was a lot easier than previous years. Using trigonometry, we could calculate the angle the robot's heading would need to be in the field frame, and then feed those values into our existing drive method so the robot would snap to a desired angle. Doing the auto-align this way had the dual benefit of improving as we tuned our drivetrain for quicker turns and allowed for expansion to using shoot-on-the-move in the future. +

Shoot-On-The-Move (SOTM)

+Our robot compensates for translational and rotational motion during shooting by predicting the robot’s future pose at projectile release. The software models time of flight based on a lookup table we found using the HUB at our workspace. Shooter RPM and auto align angle are continuously updated using measured velocity and angular rate to maintain accuracy while driving. We implemented a quadratic time-of-flight model and iterative convergence based on one of our members' previous experience with SOTM from their time in FTC. + +However, after our first event, we realized that SOTM would not be feasible at higher levels of competition. The robot draws huge amounts of current from the battery when using SOTM (from the drivetrain, intake, transfer, conveyor, and shooter i.e. all subsystems), and we faced constant brownouts even after adjusting our strategy to use SOTM less. In addition, because we did not lock our wheels when shooting, we would be pushed around more easily against defense. Ultimately, these factors led us to focus on making sure we would stay planted in our shooting position as much as possible and rely on our driver's skill to make up for the difference, if any. +

Autonomous Routines

+{% include carousel.html width="48" height="36" unit="%" duration="20" number="3" float="left" %} +

Path Planning

+During the autonmous period, the robot uses PathPlanner to quickly collect and score fuel. This improves cycle speed by optimizing our paths based on our drivetrain’s constraints, and supports our overall match strategy by ensuring we score the most amount of fuel possible during auto in order to have an inactive hub during the first shift. We made a few key decisions when designing our autonomous. We decided to prioritize 2 cycles in autonomous to allow us to have a higher chance of winning autonomous, which gives us a stronger start in teleop. Additionally, we designed our paths to work with a variety of alliances as we stick to our half for our first cycle, going into the neutral zone further when an alliance robot is less likely to be there, increasing our scoring capacity while maintaining compatability. +

Vision Pose Estimation

+We use our Limelight to constantly relocalize our robot when we can see an AprilTag. We reject new poses based on a variety of factors, including tag count, ambiguity, Z error, and field bounds. Our pose estimate standard deviation scales with averageTagDistance² / tagCount, with extra factors for MegaTag 2 and per-camera weights. Each accepted pose observation is sent to our drive’s pose estimator, which combines vision-based poses and the robot's current pose with regard to standard deviations. This allows us to maintain accuracy while driving, and mitigate the risks to accuracy caused by traversing over the bump. + +

Quick Links

+[GitHub Code](https://github.com/itkan-robotics/RobotCode2026Public){: .btn .btn--purple .btn--large} +[Match Video](https://youtu.be/T_10eehuXz4){: .btn .btn--danger .btn--large} +[Software Explanation Video](https://www.youtube.com/watch?v=5HtLpv4AtlE&t=264s){: .btn .btn--warning .btn--large} +{% include videotextbreak %} +

Engineering Notebook

+{% include pdf path="/assets/images/first/rebuilt-en-worlds.pdf" width="34%" height="44%" float="left" %} \ No newline at end of file diff --git a/_pages/index.md b/_pages/index.md index beeadab..494620f 100644 --- a/_pages/index.md +++ b/_pages/index.md @@ -1,40 +1,11 @@ --- layout: home title: "Engineering Portfolio | Abdullah Khaled" -description: "Abdullah Khaled (akhaled247) engineering portfolio—robotics, FRC/FTC, and software projects. Browse projects, resume, and contact me@aakhaled.com." +description: "Abdullah Khaled (akhaled247) engineering portfolio: robotics, FRC/FTC, and software projects. Browse projects, resume, and contact me@aakhaled.com." permalink: / author_profile: false header: og_image: /assets/images/first/9128_2025.jpg - -feature_row_projects: - - image_path: /assets/images/personal/oralvision/main.png - title: "OralVision" - excerpt: "For the Conrad Challenge, my team and I designed a low-cost oral disease detector that used federated learning to create HIPAA-compliant data sets." - url: "/personal/oralvision/" - btn_label: "Read More" - btn_class: "btn--inverse" - tags: - - Competition - - Electrical - - - image_path: /assets/images/personal/solvefortomorrow.png - title: "WatchFall" - excerpt: "For the Samsung Solve for Tomorrow competition, my team and I designed a small, low-cost camera device to detect seniors falling and alert caretakers audially." - url: "/personal/watchfall/" - btn_label: "Read More" - btn_class: "btn--inverse" - tags: - - Competition - - image_path: /assets/images/first/9128_2025.jpg - title: "REEFSCAPE - 2025 FRC" - excerpt: "The 2025 FRC Season, during which I competed with team 9128 ITKAN Robotics." - url: "/first/reefscape/" - btn_label: "Read More" - btn_class: "btn--inverse" - tags: - - Robotics - - Competition ---
@@ -43,22 +14,46 @@ feature_row_projects:

Engineering Portfolio

-
---- -Passionate about combining my skills in design, software, and electronics to create cool robots that do cool things. -{: .text-center} ---- -

Quick Links

-{: .text-left} -[Browse all projects](/projects/){: .btn .btn--warning .btn--x-large} -[Download my resume](/resume/){: .btn .btn--primary .btn--x-large} -[View my GitHub profile](https://github.com/akhaled247){: .btn .btn--purple .btn--x-large} -{: .text-center} ----

Background

-I am Abdullah Khaled ([akhaled247](https://github.com/akhaled247)), currently a junior at Wakeland High School in Frisco, TX, and have been working with robots since I was in kindergarten when I participated in a local LEGO BattleBots using EV3s. While I don't play with LEGOs as much as I used to (though I still find myself drawn to them at times), I now indulge in big LEGOs—actual robots made using real-world manufacturing and assembly techniques. -Through my background in engineering both through academic courses and extracurricular activites, I have developed my skills in design, software, and electronics to become a (hopefully) well-rounded student. For more information about me, see my [about me](/about/) or my [resume](/resume/)! - ---- +My name is Abdullah Khaled ([akhaled247](https://github.com/akhaled247)), and I am an aspiring robotics engineer in the Dallas area. I have been working with robots since I was in kindergarten when I participated in a local LEGO BattleBots using EV3s. While I don't play with LEGOs as much as I used to (though I still find myself drawn to them at times), I now indulge in big LEGOs: actual robots made using real-world manufacturing and assembly techniques! +Through my background in engineering both through academic courses and extracurricular activites, I have developed my skills in design, software, and electronics to become a (hopefully) well-rounded student. For more information about me, see my [about me](/about/) or my featured projects below!

Featured Projects

-{% include feature_row id="feature_row_projects"%} +
+ Picture of me at the RISE Poster Symposium, with my poster present on the left. +
+

BU RISE: Benchmarking Reinforcement Learning Algorithms with Search and Rescue Tasks

+
+ As part of the Boston University Research in Science and Engineering program, I was mentored by Dr. Wenchao Li and Zijian Guo. Specification-guided (spec-guided) reinforcement learning (RL) attempts to improve the performance of traditional RL algorithms in long-horizon tasks, or tasks that require goals to be met in a certain order. Search and rescue (SAR) is one such task, as agents often must complete rescues in a specified order (e.g. based on risk level). In this work, we propose an extension to existing spec-guided RL benchmarks that includes a series of long-horizon SAR tasks compatible with spec-guided and traditional RL methods. We trained unconstrained, constrained, and spec-guided RL models in our multi-agent environments. Empirical results find that spec-guided RL model outperforms the unconstrained and constrained traditional models in the SAR environments! +
Read More +
+
+
+
+ GIF of my team completing a cycle at the FIRST in Texas FRC State Championship +
+

FIRST Robotics Competition: 2026 Season

+
+ The 2026 Season of FRC, REBUILT, consisted of three robots on one alliance scoring FUEL into a HUB during their respective shifts. During this season, my team had (in my opinion) the most impressive year in our history, ending as the Winner of both district events we competed in, Impact Award Winner of our second district event, Winner of the Texas State Championship, Semi-Finalist of World Championship Newton Division playoffs, and Division Engineering Inspiration Award winner! As Technical Advisor, I oversaw our software development on the robot. I guided other software members through creating and refining our subsystems while developing more complex functions including pose estimation, auto-align, and autonomous routines. By the end of the season, we (statistically) reached 19th in the world rankings and 4th most improved team since last year! +
Read More +
+
+
+
+ Picture of the OralVision team with me holding the device in the center. +
+

OralVision: Federated Machine Learning Intraoral Screening System

+
+ Oral cavity cancers are highly treatable when caught early, but almost 70% of cases are diagnosed too late due to clinical uncertainty and a lack of accessible screening tools, leading to over 170,000 deaths annually. OralVision is an intraoral, deep-learning-based diagnostic device designed to change this unfortunate reality. By integrating noninvasive imaging with advanced artificial intelligence, OralVision could provide physicians with highly accurate diagnostic insights, allowing for earlier clinical referrals and therapeutic intervention. Moreover, with its use of inexpensive yet powerful components, we can mass produce and distribute OralVision at a much lower marginal cost than existing solutions, contributing to improved 5-year survival rates, especially in marginalized low-income communities. +
Read More +
+
+
+
+ Picture of me at the RISE Poster Symposium, with my poster present on the left. +
+

Mantik: A FIRST Robotics-Centric Java Programming Curriculum

+
+ After completing the 2025 REEFSCAPE season as the only programmer on my team, I wanted to make a resource to institutionalize the knowledge I gained during my time in FRC and help build a deeper bench of programmers to prevent burnout in future seasons. Therefore, I created Mantik, a website that trains students in FIRST® Robotics programming concepts ranging from basic motor to advanced command-based libraries and control theory. By combining the documentation of a variety of sources, from the official WPILib documentation to each vendor's specific APIs, I was able to create accurate, concise tutorials for these complex concepts, which I published to my team as well as others. In addition, I created a series of video tutorials aimed at guiding students through these difficult concepts. +
Read More +
+
diff --git a/_pages/personal/mantik.md b/_pages/personal/mantik.md index 8a787d4..b4be80b 100644 --- a/_pages/personal/mantik.md +++ b/_pages/personal/mantik.md @@ -1,11 +1,42 @@ --- title: "Mantik - FIRST Robotics Programming Curriculum" -description: "Mantik by Abdullah Khaled (akhaled247): Free video and written tutorials for FIRST Robotics programming—WPILib, command-based programming, PID, and motion profiling." -permalink: /personal/mantik/ +description: "Mantik by Abdullah Khaled (akhaled247): Free video and written tutorials for FIRST Robotics programming: WPILib, command-based programming, PID, and motion profiling." +permalink: /mantik/ author_profile: false project_schema: true project_type: SoftwareSourceCode +carousels: + - images: + - image: /assets/images/personal/mantik/itkannewstitle.png + - image: /assets/images/personal/mantik/countriesimpacted.png + - image: /assets/images/personal/mantik/homepage.png + - image: /assets/images/personal/mantik/resourcespage.png + - image: /assets/images/personal/mantik/pidsimulation.png --- -{% include video id="guKZn1h-oeI?si=jYLIrwyS2MBDTL1Y" provider="youtube" width="48vw" height="27vw" float="left" margin="10px"%} +{% include carousel.html width="48" height="27" unit="%" duration="10" number="1" float="left"%} +{% include video id="JXoCSk-9al4" provider="youtube" width="48%" height="27%" float="right" margin="5px"%} +{% include videotextbreak %} +

Motivation

+In my second season as an FRC programmer ([2025](/first/reefscape/)), I was the only active programmer on my FRC team. While htis definitely spurred me to learn at a much quicker rate than I likely would have otherwise, it also made me highly susceptible to burnout. By the end of the season, I could feel my interest in robotics waning, yet I was still driven by the original reason I fell in love with FIRST: the feeling you get when your code finally works and everything comes together. -Mantik is a website I created that trains students in FIRST® Robotics programming concepts, ranging from basic motor to advanced command-based libraries and control theory. By combining the documentation of a variety of sources, from the official WPILib documentation to each vendor's specific APIs, I was able to leverage AI to create accurate, concise tutorials for these complex concepts, which I published to my team as well as others. In addition, I created a series of video tutorials aimed at guiding students through these difficult concepts. The video tutorials are accompanied by pages on the Mantik website ([https://mantik.netlify.app/](https://mantik.netlify.app/)) so students have options. I also created a series of videos where students can simulate real robotics mechanisms and learn how to tune PID and Motion Profiles by following my tutorials, improving their skills while introducing them to complex features simultaneously. \ No newline at end of file +During the offseason, we ran summer training sessions for students learning CAD and programming. I was in charge of teaching a subset of the students with prior programming experience the ins and outs of FRC programming. As a mentor, I was frustrated by the scattered knowledge base, in particular between WPILib (the main library we use) and vendor-specific libraries (i.e. for the motors, other hardware we used). + +Therefore, I made [Mantik](https://mantik.netlify.app/), a website that trains students in Java programming with robotics as a core tenet of its teaching curriculum. Working with my mentor, we created the Java section of the website. Once he got busy with teaching the newer students Java with the website, however, I was in charge of developing the FIRST-specific sections of the site (FTC and FRC). + +Since I was already teaching the students based on how I learned to program in [2024](/first/crescendo), I had a loose framework in mind when making the website. I then took that idea and expanded on it to include individual lessons the students could refer back to when programming the robot. Lessons include setting up WPILib, coding a motor, understanding the coding structure we use, control theory, and more advanced features I was testing during the offseason. I used Mantik as a supplement to my in-person training, which allowed my students to learn both on- and off-robot. I believe this allowed them to feel that learning is continuous in robotics and encouraged them to explore Mantik and its references to build a more holistic understanding of FRC programming as a whole. + +

Expansion: Control Theory

+Yet when I began disseminating the platform beyond Itkan's walls, I knew that many teams did not have access to a robot during the offseason, especially schools teams since their facilities closed during summer or robots were dismantled to save costs. As such, I created a series of [YouTube videos](https://www.youtube.com/playlist?list=PLXZmTommNXyVIK9u44SjCFfDdXBWcj-Cy) that walk students through learning control theory through hand-on simulations. The videos walk through set up and attempt to build an intuitive understanding of how to tune a PID system in FRC based on my own experiences and the wealth of knowledge available online. + +Completing these trainings, though, led me to explore other ways to decrease the knowledge barrier in terms of PID tuning. So, I added a PID Simulation to the website based on the WPILib online simulations. It allows users to choose the mechanism and control stack they're using (i.e. different vendors) and learn how to program in those frameworks via a simplified IDE. The sim also walks through the code and how to tune the mechanism's movement as we would in season. + +

Results

+Since Mantik's inception, we have received over 10,000 impressions between ChiefDelphi and Google's SEO! We also had our new Software Director join Mantik and contribute using his knowledge of competitive programming, which has added another dimension to Mantik. In addition, Mantik has seen two years' worth of budding programmming students stress test the website through our summer training sessions. I think the cooolest outcome of the project, though, happened this past summer at Itkan. Since I was in [Boston](/rise/) for most of the summer, I could not commit to teaching this year. Instead, the students I had taught last year became the teachers, mentoring this year's students in a strikingly similar fashion to how I did when I first made the website. Thus, I believe that Mantik's true value comes from the institutionalization of ideas that comes with making a website, allowing our team to preserve our programming knowledge even when we graduate. + +{% include videotextbreak %} +

Quick Links

+[Mantik Website](https://mantik.netlify.app/){: .btn .btn--danger .btn--large} +[Itkan News Article](https://www.itkan.one/news/mantik-4500-users){: .btn .btn--primary .btn--large} +[ChiefDelphi Post](https://www.chiefdelphi.com/t/resource-mantik-the-15th-competing-standard/522085){: .btn .btn--warning .btn--large} +[GitHub Source Code](https://github.com/itkan-robotics/mantik/ +){: .btn .btn--purple .btn--large} \ No newline at end of file diff --git a/_pages/personal/oarobotics.md b/_pages/personal/oarobotics.md index 18191ae..a8c5da5 100644 --- a/_pages/personal/oarobotics.md +++ b/_pages/personal/oarobotics.md @@ -1,7 +1,7 @@ --- title: "OARobotics - Accessible Robotics Education" description: "OARobotics by Abdullah Khaled (akhaled247): Open-source FIRST LEGO League curriculum for refugee students and learners with disabilities." -permalink: /personal/oarobotics/ +permalink: /oarobotics/ author_profile: false project_schema: true diff --git a/_pages/personal/oralvision.md b/_pages/personal/oralvision.md index 4a1c6be..692df61 100644 --- a/_pages/personal/oralvision.md +++ b/_pages/personal/oralvision.md @@ -1,7 +1,7 @@ --- title: "OralVision - Conrad Challenge Entry" description: "OralVision by Abdullah Khaled (akhaled247): A low-cost oral disease detection device using federated learning and ESP32, achieving 87% accuracy in the Conrad Challenge." -permalink: /personal/oralvision/ +permalink: /oralvision/ author_profile: false project_schema: true header: @@ -19,26 +19,50 @@ media: image_path: /assets/images/personal/oralvision/specifics.png alt: "Design Details" title: "Notated drawing of OralVision's handheld device." +carousels: + - images: + - image: /assets/images/personal/oralvision/txhsic-poster-talk.jpg + - image: /assets/images/personal/oralvision/txhsic-poster-topdown.jpg + - image: /assets/images/personal/oralvision/txhsic-presentation-room.jpg + - image: /assets/images/personal/oralvision/specifics.png + - image: /assets/images/personal/oralvision/irlprototype.jpg --- -{% include video id="lzHXL2q3vNI" provider="youtube" width="20.25vw" height="36vw" float="left" margin="10px 10px 10px 15vw"%} +{% include carousel.html width="44" height="33" unit="%" duration="10" number="1" float="left"%} +{% include video id="lzHXL2q3vNI" provider="youtube" width="18vw" height="32vw" margin="0px"%} +{% include videotextbreak %} +

The Problem

+OralVision began when we witnessed a jarring reality firsthand: while we live in a hub of economic prosperity and innovation, our neighbors in underprivileged areas like South Dallas were dying from preventable, late-stage oral cancers. + +We realized that for millions worldwide, the barrier to survival isn't a lack of a cure, but a lack of proper diagnostics to lead to that cure. We developed OralVision to bridge this diagnostic gap, motivated by the challenge of integrating cutting-edge technologies such as federated learning and 3D printing to dismantle systemic healthcare inequities. -
- CAD Drawing of OralVision's Imaging Device -
CAD drawing of OralVision's imaging device.
-
+Seeing the struggle of low-income families in our community transformed our technical curiosity into a mission: to ensure that everybody, no matter their age, gender, socioeconomic status, or income, has an equal chance of surviving cancer. In the end, our goal isn’t just to build a device, but to democratize early detection for the millions currently left behind. +

Architecture

+{% include figure popup=true image_path="/assets/images/personal/oralvision/architecture.png" alt="Architecture Overview of OralVision" caption="Architecture Overview of OralVision." width="100%" %} {% include videotextbreak %} -Oral cavity cancers are highly treatable when detected early, yet nearly 70% of cases are diagnosed too late due to clinical uncertainty and the lack of accessible screening tools. As a result, over 170,000 people die each year from a largely preventable disease. OralVision is an intraoral, deep-learning–powered diagnostic device designed to make early screening affordable, reliable, and widely accessible. +OralVision is a potential intraoral diagnostic system made up of two main components: an imaging device and an image processing unit. -At the core of OralVision’s imaging system is a XIAO ESP32-C6 microcontroller, chosen for its low cost and strong processing capabilities. Images are captured using a 5-megapixel OV5642 camera, which supports high-bandwidth data transfer for clear intraoral imaging. To ensure reliable operation in the moist oral environment, the camera lens is protected with an anti-fog nano-coating, and the entire system is enclosed in a sterilization wrap to prevent bacterial contamination. The device is operated using a single medical-grade push button, reducing user error and simplifying the screening process. +The control center for OralVision’s imaging device would be a XIAO-ESP32-C6 microcontroller, a cheap, yet powerful solution to reduce production costs while maintaining the technical capabilities of larger, more expensive controllers. The image would be taken using an OV5642 5MP image sensor with SPI compatibility for high-bandwidth data transfer to the microcontroller. In addition, an anti-fog nano coating would be applied to the camera lens to prevent moisture in the mouth from harming the internal components. To minimize user error, the entire system would use a single medical-grade momentary push button to control image streaming and capturing. -OralVision is designed for use in low-resource settings. Power is regulated through a 5V voltage regulator that supports multiple input methods, including USB-C, AA batteries, and solar power. Rechargeable nickel-metal hydride batteries are included to improve safety during transportation. The housing uses a snap-fit design, allowing easy access for battery replacement and software updates. +The power would be regulated using a 5V voltage regulator that accepts multiple power sources, including USB-C (with a port for easy charging access), AA batteries, and solar power (for extremely low-income areas with minimal electrical infrastructure). The device would also ship with rechargeable nickel-metal hydride batteries to prevent thermal runaway during transportation. -{% include gallery id="media" caption="Various media related to the development of OralVision's imaging device." %} +The entire imaging system would ultimately be encased in a clinical sterilization wrap to prevent bacteria and microbes from entering the device, with the prototype’s housing being held together using a snap-fit mechanism for easy access to the electronics for battery replacements and software updates. -Captured images are transmitted wirelessly to the machine-learning interface using Wi-Fi, while SPI communication enables fast, low-latency image transfer within the device. Images are processed by a federated learning model, which generates diagnostic results displayed on a Raspberry Pi–based human-machine interface. Each device contributes to improving the global model by updating neural parameters locally, allowing users to periodically download improved versions without sharing sensitive patient data. +For communication protocols between the imaging device and the machine learning interface, we plan to use SPI and Wi-Fi (see Figure 3). We chose SPI over UART and I2C because of its ability to transmit high-resolution intraoral images continuously with minimal latency. -In testing, OralVision significantly outperformed existing market solutions. Our model achieved an overall accuracy of 87.15%, with a ROC-AUC score of 0.9417 and an F1 score of 0.8655. By comparison, VELscope, a widely used competing technology, has demonstrated accuracy rates near 53% in experimental trials. -{% include figure popup=true image_path="/assets/images/personal/oralvision/architecture.png" alt="Architecture Overview of OralVision" caption="Architecture Overview of OralVision." width="100%" %} +The device transfers images to our ML interface wirelessly via Wi-Fi 5, where our decentralized federated learning model processes the images through computer vision and transmits diagnostic results and Bayesian inferences to the screen on our Raspberry Pi 5 human-machine interface (HMI). When a device processes an image, it systematically alters neural parameters to prevent overfitting and improve the accuracy of our main model, which clients will be able to download from our website periodically for software updates. +

Evaluation

+Due to financial limitations and strict Institutional Review Board (IRB) regulations, it is currently not feasible to validate the OralVision prototype in a clinical trial with oral cavity cancer patients. However, our team was able to validate accuracy and other important reliability benchmarks for OralVision's federated neural network model through an in-silico experimental trial, finding that it outscored major competitors in many important metrics. + +For instance, our federated learning model was able to achieve an identification accuracy of 87.15%, a ROC-AUC Score of 0.9417, and an F1 score of 0.865. Meanwhile, VELScope, our main competitor, was only able to manage an accuracy of 53% in a separate experimental trial. Since we are one of the first companies in the intraoral cancer diagnostics market to implement AI, industry standard ROC-AUC and F1 scores aren’t publicly available, but both of the scores we found for OralVision are considered above average for a high-precision medical device. + +In addition, we are in the process of obtaining a patent for our device. Currently, we have transitioned from the provisional stage into the non-provisional patent. {% include videotextbreak %} +

Quick Links

[Website](https://oral-vision.github.io/){: .btn .btn--info .btn--large} -[Conrad Challenge Video](https://www.youtube.com/watch?v=MfCu4gWxRUY){: .btn .btn--danger .btn--large} \ No newline at end of file +[YouTube Channel](http://www.youtube.com/@Oral-Vision){: .btn .btn--danger .btn--large} + +{% include videotextbreak %} +

Pitch Videos

+{% include video id="MfCu4gWxRUY" provider="youtube" width="32%" height="18%" float="left" margin="5px"%} +{% include video id="-GlsvQLBDAg" provider="youtube" width="32%" height="18%" float="left" margin="5px"%} +{% include video id="y4hZeqwWo9g" provider="youtube" width="32%" height="18%" float="left" margin="5px"%} \ No newline at end of file diff --git a/_pages/personal/photolab.md b/_pages/personal/photolab.md deleted file mode 100644 index 1215000..0000000 --- a/_pages/personal/photolab.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Photo Lab - Retro Collage Creator" -description: "Photo Lab by Abdullah Khaled (akhaled247): A minimalist web app for retro photo collages with 12 custom filters, at aakhaled.com/photo-lab/." -permalink: /personal/photo-lab/ -author_profile: false -project_schema: true -project_type: SoftwareSourceCode ---- -
-{% include figure popup=true image_path="assets/images/personal/photolabexample.jpg" alt="Photo Lab collage example with retro filters applied" caption="Example of generated collage using PhotoLab." %} -
-


PhotoLab is a minimalist collage creator that generates a collage of photos you input. I created it simply because I like how collages look, and thought it was a cool project to share with others! If you would like to try it out, you can go to [https://aakhaled.com/photo-lab/](https://www.aakhaled.com/photo-lab/) and add your images. The website works on mobile and desktop, and has 12 filters to choose from. \ No newline at end of file diff --git a/_pages/personal/rise.md b/_pages/personal/rise.md new file mode 100644 index 0000000..c9f3afe --- /dev/null +++ b/_pages/personal/rise.md @@ -0,0 +1,62 @@ +--- +title: "RISE - Benchmarking Reinforcement Learning Algorithms with Search and Rescue Tasks" +description: "Boston University electrical engineering research internship. Studied search and rescue, reinforcement learning, and specification-guided RL under Dr. Wenchao Li." +permalink: /rise/ +author_profile: false +project_schema: true +project_type: SoftwareSourceCode +carousels: + - images: + - image: /assets/images/rise/ak-symposium.jpg + - image: /assets/images/rise/ak-zg-symposium.jpg + - image: /assets/images/rise/ak-zg-jl-symposium.jpg + - image: /assets/images/rise/ak-zg-jl-mit.jpg + - images: + - image: /assets/images/rise/og-mockup.png + - image: /assets/images/rise/saec-walls.jpg + - image: /assets/images/rise/multigoalsar1.jpg + - images: + - image: /assets/images/rise/singlesuccess.png + - image: /assets/images/rise/multisuccessviolation.png +--- +{% include carousel.html width="48" height="36" unit="%" duration="5" number="1" float="left" %} +{% include pdf path="/assets/buriseweeklystatusreports.pdf" width="47%" height="34%" float="right" %} +{% include videotextbreak %} +> Specification-guided reinforcement learning (RL) is a growing field that attempts to improve the performance of traditional RL algorithms in long-horizon tasks, or tasks that require goals to be met in a certain order. Linear temporal logic (LTL) is one way to encode the specifications of these tasks, such as GenZ-LTL1. Search and rescue (SAR) is one such task, as agents often must complete rescues in a specified order (e.g. based on risk level). While there are existing benchmarks such as SpecRLBench2 that provide environments for evaluation, there currently are no environments that correlate to potential real-world applications of specification-guided RL. In this work, we propose an extension to SpecRLBench that includes a series of long-horizon SAR tasks compatible with specification-guided and traditional RL methods as well as single-agent and multi-agent environments. There are two casualty categories: surface, which are directly visible by the agent, and entrapped, which are hidden inside buildings. The tasks increase in complexity, with each level adding more obstacles (i.e. walls) and casualties. Our environment supports arbitrary task specification (i.e. the order the agents must rescue the casualties in). We trained unconstrained, constrained, and specification-guided RL (PPO3, PPO-Lagrangian4 and GenZ-LTL respectively) in our multi-agent environments. Empirical results find that specification-guided RL method outperforms the unconstrained and constrained traditional RL methods in the SAR environments with respect to episode success rates and minimizes cost violations from incorrect rescue sequences and environment border collisions.
(1) Guo, Z.; Işık, İ.; Ahmad, H. M.; Li, W. One Subgoal at a Time: Zero-Shot Generalization to Arbitrary Linear Temporal Logic Requirements in Multi-Task Reinforcement Learning. Advances in Neural Information Processing Systems 2026, 38, 77500–77529.
(2) Guo, Z.; Işık, İ.; Ahmad, H. M.; Li, W. SpecRLBench: A Benchmark for Generalization in Specification-Guided Reinforcement Learning. arXiv preprint 2026.
(3) Schulman, J.; Wolski, F.; Dhariwal, P.; Radford, A.; Klimov, O. Proximal Policy Optimization Algorithms. arXiv preprint 2017.
(4) Ray, A.; Achiam, J.; Amodei, D. Benchmarking Safe Exploration in Deep Reinforcement Learning. arXiv preprint arXiv:1910.01708 2019 + +At Boston University's Research In Science and Engineering (RISE) program, I was one of 2 members of the [Dependable Computing Lab](https://sites.bu.edu/depend/) under [Dr. Wenchao Li](https://www.bu.edu/eng/profile/wenchao-li-ph-d/). The lab's stated goal is to "develop *computational proof methods* (a.k.a. formal methods) and *machine learning* techniques to aid the construction of safe, reliable and secure systems." Under the direct guidance of [Zijian Guo](https://www.bu.edu/hic/profile/zijian-guo/), we proposed an extension to [SpecRLBench](https://arxiv.org/abs/2604.24729), a specification-guided reinforcement learning benchmark. + +The existing environments in SpecRLBench, though successful at benchmarking various specification-guided RL models, are not rooted in real-world robotics applications. Therefore, I wanted to use a scenario that reflects the long-horizon tasks (i.e. ones that have multiple subgoals in it) that SpecRL thrives on. Therefore, I chose to use search and rescue (SAR) tasks. I also chose SAR environments since I personally am incredibly invested in trying to improve autonomous robotics for use in SAR applications and because Dr. Li told me himself that he believed this would align closely with my own interests. + +{% include carousel.html width="36" height="36" unit="%" duration="10" number="2" float="left" %} +
+The first problem I had to solve was the environment itself. After reading up on existing literature surrounding unmanned ground vehicles (UGVs), autonomous robotics in SAR environments, and existing benchmarks and environments for RL agents, I came up with the mock-up in the carousel on the left. The key identifying features (taken from my poster) are as follows: +- **Agent**: What the model is controlling. The model controls the forward/backward movement and rotation of the agent. +- **Border**: A box around the environment so the agent cannot leave the bounds. The episode terminates if an agent hits the border. +- **Surface casualties (SC)**: Goals agent can detect with lidar or vision unless an object occludes it (e.g. other agents, buildings, walls, etc.). +- **Entrapped casualties (EC)**: Another goal that cannot be seen by lidar or vision unless the agent enters a building and an entrapped casualty is in that building. +- **Buildings**: An object that is globally visible by lidar and vision; i.e. the agent can always see buildings. +- **Walls**: Objects that obstruct the agent’s vision/lidar and terminate the episode if contacted. + +Once all casualties are rescued (surface and entrapped), the episode ends prematurely. If the episode times out, the episode truncates. I decided not to make the environment too complex (i.e. add the human operator depicted in the mock-up) due to time constraints and difficulties faced when training the models initially. Once I had this down, I began the process of creating the environment. I started with the walls, then the buildings, then the casualties. In order to test the environment, I built of of the existing keyboard movement in Safety-Gym and adapted it to SpecRLBench's set up so I could manually control the agent. At this point, I began realizing the difficulty of the environment firsthand, and after trying to train models on the more complicated environment, I simplified it significantly. In the end, I created two sets of levels: `SingleGoalSAR` tasks only had one type of casualty (surface/entrapped) in the environment, while `MultiGoalSAR` tasks had both types. + +{% include carousel.html width="36" height="36" unit="%" duration="10" number="3" float="right" %} +After I had set up all of the environments, I began testing different models: first, on the `SingleGoalSAR` tasks, I tested two types of algorithms: +- **Unconstrained (PPO, TRPO)**: These types of RL models only try to maximize reward (i.e. casualties rescued) and do not consider costs from collisions with the border or interior walls. PPO is the successor to TRPO (both of which were created by OpenAI). I originally tested these using Stable-Baselines3, but switched over to Safe Policy Optimization after realizing that SB3 does not have constrained algorithms natively built into its library (see below). +- **Constrained (PPO Lagrangian, TRPO Lagrangian)**: These types of models try to maximize reward and minimize cost (max-min optimization) using a penalty coefficient λ. + +*Note: I also tested off-policy models (SAC), but they were too slow to effectively be used in the environment and the results that came from them were inadequate, so I did not pursue increases in its effectiveness.* + +Once I solidified the effectiveness of these algorithms in simpler tasks, I transitioned to `MultiGoalSAR` tasks. Now that the tasks were actually long-horizon (before they were not since the agent always had the same goal, either entrapped or surface casaulties), I started to incorporated specification-guided RL in the form of GenZ-LTL, the model created by Zijian. Moreover, I chose not to include TRPO and TRPO-Lagrangian in my `MultiGoalSAR` comparison as GenZ-LTL itself is built on a modified PPO with Hamilton-Jacobi reachability constraints, so I wanted a more similar model as comparison. + +{% include video id="IkegtaiXWZY" provider="youtube" width="30vh" height="30vh" float="left" margin="10px"%} + +After evaluation, I found that GenZ-LTL significantly outperforms traditional models in both environments, though all models struggle in Level 1. GenZ-LTL also had higher successful mean episode length than PPO and, although GenZ-LTL has lower violation rate on Level 0, it had the highest violation rate on Level 1. I concluded that violation rate and mean episode success length are likely skewed for Level 1 due to highly infrequent successful episodes (especially from PPO and PPO Lagrangian). + +Overall, although in the end the results were somewhat disappointing at higher complexities, I am incredibly pleased with all that I learned at RISE. The incredible guidance from Dr. Li and Zijian allowed me to accomplish so much during the past six weeks, and I am excited to continue expanding upon my research and transferring my newly acqiured deep RL knowledge to other autonomous robotics frameworks. In the future, I wish that I may one day use what I've gained here to help benefit others through my engineering skillset (hopefully sooner than I think)! +{% include videotextbreak %} +

Quick Links

+[GitHub Repository](https://github.com/akhaled247/RISE-2026){: .btn .btn--purple .btn--large} +{% include videotextbreak %} +

Final Poster

+{% include pdf path="/assets/images/rise/KHALED_Internship_Poster.pdf" width="36%" height="48%" float="left" %} diff --git a/_pages/personal/watchfall.md b/_pages/personal/watchfall.md index fa920c1..689757e 100644 --- a/_pages/personal/watchfall.md +++ b/_pages/personal/watchfall.md @@ -1,7 +1,7 @@ --- title: "WatchFall - Samsung Solve for Tomorrow" description: "WatchFall by Abdullah Khaled (akhaled247): An affordable fall-detection camera using TensorFlow for senior monitoring, designed for Samsung Solve for Tomorrow." -permalink: /personal/watchfall/ +permalink: /watchfall/ author_profile: false project_schema: true --- diff --git a/_pages/pltw_engineering/rng.md b/_pages/pltw_engineering/rng.md index 06a8c2a..f118629 100644 --- a/_pages/pltw_engineering/rng.md +++ b/_pages/pltw_engineering/rng.md @@ -9,7 +9,7 @@ After learning about sequential and combinational logic, we were challenged to m Throughout this process, I learned a lot about the different components used in the circuit. For example, I learned how capacitors and capacitance worked, how 555 timers used resistors to vary their oscillation period, and how frequency dividers could serve as binary counters. I also gained knowledge on circuit design software (CDS) and utilized this knowledge to design the schematic in NI Multisim and make it easily followable at first glance. -One of the most memorable parts of this project was figuring out how the counter worked with my friend, Ibrahim. At the beginning of the project, we did not know how DFFs worked—however, by painstakingly tracing the wires, we determined how the counter functioned and improved our understanding of the circuit as a whole. +One of the most memorable parts of this project was figuring out how the counter worked with my friend, Ibrahim. At the beginning of the project, we did not know how DFFs worked. However, by painstakingly tracing the wires, we determined how the counter functioned and improved our understanding of the circuit as a whole.
{% include pdf path="/assets/images/PLTW/rng/rngreport.pdf" width="500px" height="500px"%} diff --git a/_pages/projects.md b/_pages/projects.md index 544e6b7..3b4cfce 100644 --- a/_pages/projects.md +++ b/_pages/projects.md @@ -1,62 +1,31 @@ --- title: "Engineering Projects" -description: "Browse Abdullah Khaled (akhaled247) engineering projects—FRC robotics, FTC, competition entries, PLTW coursework, and personal software." +description: "Browse Abdullah Khaled (akhaled247) engineering projects: FRC robotics, FTC, competition entries, PLTW coursework, and personal software." permalink: /projects/ author_profile: false feature_row_projects: - - - image_path: /assets/images/personal/oralvision/main.png - title: "OralVision" - excerpt: "For the Conrad Challenge, my team and I designed a low-cost oral disease detector that used federated learning to create HIPAA-compliant data sets." - url: "/personal/oralvision/" - btn_label: "Read More" - btn_class: "btn--inverse" - tags: - - Competition - - Electrical - - - image_path: /assets/images/personal/solvefortomorrow.png + - image_path: /assets/images/personal/watchfall/capstone-demo-video.gif title: "WatchFall" excerpt: "For the Samsung Solve for Tomorrow competition, my team and I designed a small, low-cost camera device to detect seniors falling and alert caretakers audially." - url: "/personal/watchfall/" + url: "/watchfall/" btn_label: "Read More" btn_class: "btn--inverse" tags: - Competition - - image_path: /assets/images/personal/photolab.png - title: "Photo Lab" - excerpt: "I created a website where users can create retro collages with custom filters." - url: "/personal/photo-lab/" - btn_label: "Read More" - btn_class: "btn--inverse" - tags: - - Personal - - - image_path: /assets/images/personal/oarobotics/Bots_Top.png + - image_path: /assets/images/personal/oarobotics/maze-traversal.gif title: "OARobotics Curriculum" excerpt: "I designed a robotics curriculum for students with limited English proficiency." - url: "/personal/oarobotics/" - btn_label: "Read More" - btn_class: "btn--inverse" - tags: - - Personal - - Software - - - image_path: /assets/images/personal/mantik.png - title: "Mantik" - excerpt: "I created an extensive written and video curricula for training students in Java, FTC, and FRC programming." - url: "/personal/mantik/" + url: "/oarobotics/" btn_label: "Read More" btn_class: "btn--inverse" tags: - - Personal - - Software + - Robotics - - image_path: /assets/images/first/26357_2526.jpg + - image_path: /assets/images/first/33791-cycle.gif title: "DECODE - 2025-2026 FTC" - excerpt: "The 2025-26 FTC Season, during which I competed with teams 26357 and 28391 at ITKAN of ICF." + excerpt: "The 2025-26 FTC Season, during which I competed with team 33791 Wolverine Robotics." url: "/first/decode/" btn_label: "Read More" btn_class: "btn--inverse" @@ -64,7 +33,7 @@ feature_row_projects: - Robotics - Competition - - image_path: /assets/images/first/9128_2025.jpg + - image_path: /assets/images/first/9128-2025-cycle.gif title: "REEFSCAPE - 2025 FRC" excerpt: "The 2025 FRC Season, during which I competed with team 9128 ITKAN Robotics." url: "/first/reefscape/" @@ -74,23 +43,25 @@ feature_row_projects: - Robotics - Competition - - image_path: /assets/images/first/21330_2425.png + - image_path: /assets/images/first/21330-2025-cycle.gif title: "INTO THE DEEP - 2024-2025 FTC" excerpt: "The 2024-25 FTC Season, during which I competed with team 21330 ITKAN of Tomorrow." url: "/first/into-the-deep/" btn_label: "Read More" btn_class: "btn--inverse" tags: - - FIRST + - Robotics + - Competition - - image_path: /assets/images/first/9128_2024.jpg + - image_path: /assets/images/first/9752-2024-cycle.gif title: "CRESCENDO - 2024 FRC" excerpt: "The 2024 FRC Season, during which I competed with team 9752 ITKAN Robotics Jr." url: "/first/crescendo/" btn_label: "Read More" btn_class: "btn--inverse" tags: - - FIRST + - Robotics + - Competition - image_path: /assets/images/PLTW/homepage/mvnand.png title: "Majority Vote" @@ -99,20 +70,10 @@ feature_row_projects: btn_label: "Read More" btn_class: "btn--inverse" tags: - - Coursework - Electrical + - PLTW - - image_path: /assets/images/PLTW/homepage/elevatorIso.png - title: "Machine Control Project" - excerpt: "I worked with my team to CAD and program a full elevator prototype using feedback control systems." - url: "/pltw-engineering/machine-control/" - btn_label: "Read More" - btn_class: "btn--inverse" - tags: - - Coursework - - Robotics - - - image_path: /assets/images/PLTW/homepage/rng.png + - image_path: /assets/images/PLTW/rng-demo.gif title: "Random Number Generator" excerpt: "I created a working number generator using capacitors, timers, and combinational logic design." url: "/pltw-engineering/rng/" @@ -121,8 +82,17 @@ feature_row_projects: tags: - PLTW - Electrical + + - image_path: /assets/images/PLTW/elevator-demo.gif + title: "Machine Control Project" + excerpt: "I worked with my team to CAD and program a full elevator prototype using feedback control systems." + url: "/pltw-engineering/machine-control/" + btn_label: "Read More" + btn_class: "btn--inverse" + tags: + - PLTW - - image_path: /assets/images/PLTW/homepage/compoundMachineIso.png + - image_path: /assets/images/PLTW/cmdp-demo.gif title: "Compound Machine" excerpt: "I worked with my team to CAD a design using Onshape to elegantly meet the required mechanical advantage constraints." url: "/pltw-engineering/compound-machine/" @@ -131,7 +101,7 @@ feature_row_projects: tags: - PLTW - - image_path: /assets/images/PLTW/homepage/motorCarIso.jpg + - image_path: /assets/images/PLTW/motor-car-demo.gif alt: "image of motor car" title: "Motor Car" excerpt: "I worked with a partner to create a unique three-wheel solution to create a reliable motor car, while looking stylish at the same time!" @@ -140,8 +110,9 @@ feature_row_projects: btn_class: "btn--inverse" tags: - PLTW + - Competition - - image_path: /assets/images/PLTW/homepage/automataKobeIso.png + - image_path: /assets/images/PLTW/automata-demo.gif alt: "automata" title: "Automata" excerpt: "Using Fusion360, I designed an animated automata and customized it based on a Kobe Bryant theme." diff --git a/_pages/rant.md b/_pages/rant.md new file mode 100644 index 0000000..28dc5a6 --- /dev/null +++ b/_pages/rant.md @@ -0,0 +1,8 @@ +--- +title: "" +permalink: /rant/ +author_profile: false +--- +I started exploring the world of STEM when I went to a LEGO camp in my town, but I was first introduced to software when I attended a Scratch camp at my YMCA. I spent many years making [platformers](https://scratch.mit.edu/projects/388377869/), [AMVs](https://scratch.mit.edu/projects/467152240/), [math tools](https://scratch.mit.edu/projects/413434253/), and...[recreating flash games](https://scratch.mit.edu/projects/434726723/)? +All of this, though, inspired me to make games more seriously, so I took some courses on video game development, where I learned C++ and Java. At the same time, a friend of mine and I were learning Python just for fun (though our code wasn't the best quality). This exposure taught me just how much more there was to coding, and I was completely hooked. But, after COVID, I stopped being as interested in video game development (obviously, in 6th grade, I'd matured), and since I was good at math, I thought I'd have fun doing engineering. +So, I took the Engineering class at my middle school in 7th grade, and I loved the class and my teacher, Mrs. Longnecker. I was especially fascinated with the LEGO EV3's we used to complete these Mars missions on a huge table (full circle moment!). But when I wanted to continue doing engineering through robotics, my school didn't offer any more classes and finding a team was quite difficult. It wasn't until 2024 that I finally found a FIRST Robotics team that would take me in. Initially, I wanted to do CAD, but my background in software helped me fill a niche that was present in the team, so I stuck with it. I continued working on design, but I fell in love again with software, with an insatiable hunger to make sure my code worked on the robot as much as possible. That drive helped me learn so much that summer, and made me capable to lead my team's software efforts in 2025. diff --git a/_pages/rise/devlog.md b/_pages/rise/devlog.md deleted file mode 100644 index 7451578..0000000 --- a/_pages/rise/devlog.md +++ /dev/null @@ -1,169 +0,0 @@ -#rise-dcl-log - -## Sources -[ROS Ubuntu Installation](https://wiki.ros.org/noetic/Installation/Ubuntu) -[Information Slideshow](https://docs.google.com/presentation/d/1C7Mwcdt3m7QfknjxOcZXIfugGhLVEKumrAQWOlkqRtM/edit?pli=1&slide=id.p#slide=id.p) -[tf tutorials](https://wiki.ros.org/tf/Tutorials) -[geometry msgs wiki](https://docs.ros.org/en/noetic/api/geometry_msgs/html/index-msg.html) -[pubsub with python](https://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(python)) -[frames](/_pages/rise/frames.pdf) -[SpecRLBench](https://github.com/BU-DEPEND-Lab/SpecRLBench) -[RISE Python Training](https://github.com/akhaled247/rise_python_training/tree/main) -[Gymnasium Documentation](https://gymnasium.farama.org/tutorials) -# 06.29.2026 - -### Old command - -```Shell -docker create \ - --name workspace \ - --gpus all \ - --net=host \ - -e DISPLAY=$DISPLAY \ - -v /tmp/.X11-unix:/tmp/.X11-unix \ - -v /home/akhaled/workspace:/home/akhaled/workspace \ - -w /home/akhaled/workspace \ - ubuntu:20.04 \ - tail -f /dev/null -``` - -### New command - -``` -docker run -it \ - --name=ros_noetic \ - --net=host \ - --gpus all \ - -e DISPLAY=$DISPLAY \ - -e NVIDIA_DRIVER_CAPABILITIES=all \ - -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ - osrf/ros:noetic-desktop-full - -docker exec -it ros_noetic bash -``` - - -*start from step 1.5* - - -``` -apt update -apt-get install git-core python3-wstool python3-vcstools python3-rosdep ros-noetic-control-msgs ros-noetic-joystick-drivers ros-noetic-xacro ros-noetic-tf2-ros ros-noetic-rviz ros-noetic-cv-bridge ros-noetic-actionlib ros-noetic-actionlib-msgs ros-noetic-dynamic-reconfigure ros-noetic-trajectory-msgs ros-noetic-rospy-message-converter - -apt install python3 python3-pip python3-venv - -pip install argparse - -mkdir ros_ws -cd ros_ws -mkdir src - -wstool init . - -apt install git -cd src -git clone https://github.com/RethinkRobotics/sawyer_robot.git -wstool merge sawyer_robot/sawyer_robot.rosinstall -wstool update -source /opt/ros/noetic/setup.bash -catkin_make - -apt-get install gazebo11 ros-noetic-gazebo-ros ros-noetic-gazebo-ros-control -ros-noetic-gazebo-ros-pkgs ros-noetic-ros-control ros-noetic-control-toolbox ros-noetic-realtime-tools -apt-get install gazebo11 ros-noetic-gazebo-ros ros-noetic-gazebo-ros-control ros-noetic-gazebo-ros-pkgs ros-noetic-ros-control ros-noetic-control-toolbox ros-noetic-realtime-tools ros-noetic-ros-controllers ros-noetic-xacro python3-wstool ros-noetic-tf-conversions ros-noetic-kdl-parser - -cd src - -git clone https://github.com/RethinkRobotics/sawyer_simulator.git -b noetic_devel -git clone https://github.com/RethinkRobotics-opensource/sns_ik.git -b melodic-devel - -rm .rosinstall -wstool init . -wstool merge sawyer_simulator/sawyer_simulator.rosinstall -wstool update - -cd .. -source /opt/ros/noetic/setup.bash -catkin_make - -cd src/sawyer_simulator/sawyer_gazebo/src -apt install nano -nano head_interface.cpp - -cd /ros_ws/src/sawyer_simulator/sawyer_gazebo/src/head_interface.cpp line 71: - cv_ptr->image = cv::imread(img_path, cv::IMREAD_UNCHANGED); - - catkin_make - - cd ros_ws - . devel/setup.bash - roslaunch sawyer_sim_examples sawyer_pick_and_place_demo.launch -``` - -# 06.30.2026 - -we are now trying to see the simulator in the remote desktop via nomachine -make sure you ssh out of the device before connecting with remote desktop connection @ 10.210.22.197 -``` -pkill -u $USER -f Xorg -``` - -## errors - -Python 3 errors: `ln -s /usr/bin/python3 /usr/bin/python` -Syntax error in `/root/ros_ws/src/sawyer_simulator/sawyer_sim_examples/scripts/ik_pick_and_place_demo.py` -- have to write `as e` instead `of , e` (three exceptions) - -###issues & solutions -- we had an issue where the interpolation for the robotic arm to come down onto the block (_servo_to_pose) was linear, which didn't work for quaternions due to unit vector math that meant that linear interpolation would make the length of the vector !=1 - - solution: we reduced the step size to 1 so that we did not have to worry about intermediate steps. since we are only working with cartesian movements, this wasn't a huge worry -- initial block pose was incorrect - - we found out how to find the block pose using the gazebo sim -- the block pose was not dynamic (i.e. if the block got moved, the robot didn't know where to go) - a. learned how rostopic works and found the topic that published information about the coordinates of the scene objects - i. rostopic list - b. learned how to subscribe to the topic in the CLI and found the type of the message that was being published - i. rostopic info /gazebo/model_states >> ModelStates - c. learned about pub/sub in python (!= CLI) and how to parse the data - d. learned about what tf does and began to implement using CLI first - e. then learned how to use it in code using tutorials above. also what a frame was and how to perform type manipulation (i.e. Point <==> Vector3) - f. Had to offset the position due to unknown reasons (likely because model is somewhat inaccurate), though it might also be because of something with the simplified orientation calculations we did - -personal learning -* learned more about the CLI, especially became comfortable with nano in Linux -* understood try except finally blocks and how to handle exceptions gracefully -* learned Python class structure (DataSubscriber) - -# 07.01.26 -I talked with Zijian about his project and received confirmation from Dr. Li to work with Zijian on [SpecRLBench](https://github.com/BU-DEPEND-Lab/SpecRLBench), with the following instructions: -- try out the current SpecRLBench, getting familiar with the Gym setup -- come up with real-world scenario-inspired examples for the multi-agent setting, -- create the corresponding environments or modify existing environments for the examples, -- formalize the requirements in our multi-agent spec language -- train and evaluate agents that use vision as inputs - -towards these goals, I started learning the foundational skills and frameworks that SpecRLBench is using, which I am tracking in [RISE Python Training](https://github.com/akhaled247/rise_python_training/tree/main) -as part of this training, I have learned -- Python syntax for control systems, classes, and overall how code is structured in Python -- Gymnasium: Basic setup, hyperparameters, Q-Learning, REINFORCE algorithm with Mudoco -*Note: There is more to the training, but at this point, I received the email from Dr. Li regarding what I should focus on, so I pivoted to directly working on the SpecRLBench stuff* - -## Setting up SpecRLBench -Unlike in the tutorial, I didn't have to run `cd specbench` since the install file was in the main folder -I also had to run these commands -```bash -pip install -e . -pip install -e specbench/envs/panda-gym -pip install -e specbench/envs/zones/safety-gymnasium -``` -instead of `./install.bash` because a) the script was `install.sh` and b) I would get this error: -```bash -(specbench) C:\GitHub\rise_project\SpecRLBench>./install.sh - '.' is not recognized as an internal or external command, - operable program or batch file. -``` -TODO: Learn how to make custom environments in gymnasium -Create custom environment -Lit review of current search-and-rescue operation environment definitions - -I then started exploring more into the `safety-gymnasium` and its environments, and found the [Building Button](https://safety-gymnasium.readthedocs.io/en/latest/environments/safe_vision/building_button.html) environment, which seems to be similar to the search-and-rescue operations I am interested in. This env also incorporates vision (optional), which is something I can look into. diff --git a/_pages/section_homepages/first.md b/_pages/section_homepages/first.md index 49d417e..d553ec8 100644 --- a/_pages/section_homepages/first.md +++ b/_pages/section_homepages/first.md @@ -1,6 +1,6 @@ --- title: "FIRST Robotics Projects | FRC & FTC" -description: "FIRST Robotics projects by Abdullah Khaled (akhaled247)—FRC Team 9128 ITKAN and FTC teams 21330, 26357, 28391. REEFSCAPE, DECODE, CRESCENDO, INTO THE DEEP." +description: "FIRST Robotics projects by Abdullah Khaled (akhaled247): FRC Team 9128 ITKAN and FTC teams 21330, 26357, 28391. REEFSCAPE, DECODE, CRESCENDO, INTO THE DEEP." permalink: /first/ author_profile: false diff --git a/_pages/section_homepages/personal.md b/_pages/section_homepages/personal.md index 89418e3..b188ad3 100644 --- a/_pages/section_homepages/personal.md +++ b/_pages/section_homepages/personal.md @@ -1,18 +1,11 @@ --- -title: "Personal Projects" -description: "Personal engineering projects by Abdullah Khaled (akhaled247)—OralVision, WatchFall, Photo Lab, Mantik, and OARobotics." -permalink: /personal/ +title: "Additional Projects" +description: "Additional engineering projects by Abdullah Khaled (akhaled247): OralVision, WatchFall, Mantik, and OARobotics." +permalink: /additional/ author_profile: false #Feature Row of Engineering Projects feature_row_projects: - - image_path: /assets/images/personal/photolab.png - title: "Photo Lab" - excerpt: "I created a website where users can create retro collages with custom filters." - url: "/personal/photo-lab/" - btn_label: "Read More" - btn_class: "btn--inverse" - - image_path: /assets/images/personal/oralvision/main.png title: "OralVision" excerpt: "For the Conrad Challenge, my team and I designed a low-cost oral disease detector that used federated learning to create HIPAA-compliant data sets." diff --git a/_pages/section_homepages/pltw.md b/_pages/section_homepages/pltw.md index d1b98d8..5f40085 100644 --- a/_pages/section_homepages/pltw.md +++ b/_pages/section_homepages/pltw.md @@ -1,6 +1,6 @@ --- title: "PLTW Engineering Coursework" -description: "PLTW Engineering coursework by Abdullah Khaled (akhaled247)—circuit design, CAD, VEX robotics, and control systems." +description: "PLTW Engineering coursework by Abdullah Khaled (akhaled247): circuit design, CAD, VEX robotics, and control systems." permalink: /pltw-engineering/ author_profile: false diff --git a/_sass/_design-tokens.scss b/_sass/_design-tokens.scss index aaac6b1..88a6634 100644 --- a/_sass/_design-tokens.scss +++ b/_sass/_design-tokens.scss @@ -1,4 +1,4 @@ -// Resume-aligned tokens — keep in sync with Abdullah_Khaled_CV_Public.yaml design.colors +// Resume-aligned tokens. Keep in sync with Abdullah_Khaled_CV_Public.yaml design.colors $cv-body: #313131; $cv-muted: #616161; $cv-section: #04416d; diff --git a/_sass/minimal-mistakes/_footer.scss b/_sass/minimal-mistakes/_footer.scss index a9c48e2..3fbabb6 100644 --- a/_sass/minimal-mistakes/_footer.scss +++ b/_sass/minimal-mistakes/_footer.scss @@ -14,6 +14,8 @@ -webkit-animation-delay: 0.45s; animation-delay: 0.45s; background-color: $footer-background-color; + box-shadow: 0 0 0 100vmax $footer-background-color; + clip-path: inset(0 -100vmax); margin-inline: auto; max-width: 100%; padding: 0.5em 2em; diff --git a/_sass/minimal-mistakes/_masthead.scss b/_sass/minimal-mistakes/_masthead.scss index 80b0ed5..a11b47c 100644 --- a/_sass/minimal-mistakes/_masthead.scss +++ b/_sass/minimal-mistakes/_masthead.scss @@ -3,18 +3,25 @@ ========================================================================== */ .masthead { - position: relative; + position: -webkit-sticky; /* For Safari compatibility */ + position: sticky; + top: 0; + background-color: $background-color; border-bottom: 1px solid $border-color; -webkit-animation: $intro-transition; animation: $intro-transition; -webkit-animation-delay: 0.15s; animation-delay: 0.15s; + transition: 0.2s ease-in-out; z-index: 20; + &.is-hidden { + transform: translateY(-100%); + } &__inner-wrap { @include clearfix; margin-inline: auto; - padding: 1em; + padding: 0.5em; max-width: 100%; display: -webkit-box; display: -ms-flexbox; @@ -40,6 +47,7 @@ .site-logo img { max-height: 2rem; + max-width: 2rem; } .site-title { diff --git a/_sass/minimal-mistakes/_variables.scss b/_sass/minimal-mistakes/_variables.scss index 25f8ecf..cbeef8f 100644 --- a/_sass/minimal-mistakes/_variables.scss +++ b/_sass/minimal-mistakes/_variables.scss @@ -6,7 +6,7 @@ Typography ========================================================================== */ -$doc-font-size: 16px !default; +$doc-font-size: 12px !default; $doc-font-size-medium: $doc-font-size * 1.125 !default; $doc-font-size-large: $doc-font-size * 1.25 !default; $doc-font-size-x-large: $doc-font-size * 1.375 !default; @@ -80,11 +80,11 @@ $type-size-7: 0.6875em !default; // ~11px $type-size-8: 0.625em !default; // ~10px /* headline scale */ -$h-size-1: 1.563em !default; // ~25.008px -$h-size-2: 1.25em !default; // ~20px -$h-size-3: 1.125em !default; // ~18px -$h-size-4: 1.0625em !default; // ~17px -$h-size-5: 1.03125em !default; // ~16.5px +$h-size-1: 2em !default; // ~25.008px +$h-size-2: 1.75em !default; // ~20px +$h-size-3: 1.5em !default; // ~18px +$h-size-4: 1.25em !default; // ~17px +$h-size-5: 1.0625em !default; // ~16.5px $h-size-6: 1em !default; // ~16px /* diff --git a/assets/buriseweeklystatusreports.pdf b/assets/buriseweeklystatusreports.pdf new file mode 100644 index 0000000..a82a01a Binary files /dev/null and b/assets/buriseweeklystatusreports.pdf differ diff --git a/assets/css/main.scss b/assets/css/main.scss index e78e940..2dc6a54 100644 --- a/assets/css/main.scss +++ b/assets/css/main.scss @@ -49,9 +49,9 @@ $header-font-family: $serif; color: $cv-section; border-bottom: 0.5px solid $cv-section; padding-bottom: 0.3em; - margin-top: 1.5em; + margin-top: 0em; } - + a:not(.btn) { color: $cv-link; text-decoration: underline; @@ -68,7 +68,7 @@ $header-font-family: $serif; color: $cv-section; border-bottom: 0.5px solid $cv-section; padding-bottom: 0.3em; - margin-top: 1.5em; + margin-top: 0.5em; } .page__title { @@ -153,16 +153,16 @@ $header-font-family: $serif; margin-left: -50vw; margin-right: -50vw; margin-top: -67px; - background: url("/assets/images/AbdullahKhaled_Bkg_Img.jpg"); + background: url("/assets/images/bkg-img-v2.jpg"); background-size: cover; - background-position: top; - height: 400px; + background-position: 0px -75px; + height: 250px; overflow: hidden; color: #eee; } .layout--home .hero { - margin-top: 0; + margin-top: -1em; } .hero .overlay { @@ -171,7 +171,7 @@ $header-font-family: $serif; left: 0; width: 100%; height: 100%; - background: rgba($cv-section, 0.55); + background: rgba($cv-accent, 0.50); z-index: 1; } diff --git a/assets/images/PLTW/automata-demo.gif b/assets/images/PLTW/automata-demo.gif new file mode 100644 index 0000000..9fdb15a Binary files /dev/null and b/assets/images/PLTW/automata-demo.gif differ diff --git a/assets/images/PLTW/cmdp-demo.gif b/assets/images/PLTW/cmdp-demo.gif new file mode 100644 index 0000000..02dbd1e Binary files /dev/null and b/assets/images/PLTW/cmdp-demo.gif differ diff --git a/assets/images/PLTW/elevator-demo.gif b/assets/images/PLTW/elevator-demo.gif new file mode 100644 index 0000000..a4f8509 Binary files /dev/null and b/assets/images/PLTW/elevator-demo.gif differ diff --git a/assets/images/PLTW/motor-car-demo.gif b/assets/images/PLTW/motor-car-demo.gif new file mode 100644 index 0000000..e9575ed Binary files /dev/null and b/assets/images/PLTW/motor-car-demo.gif differ diff --git a/assets/images/PLTW/rng-demo.gif b/assets/images/PLTW/rng-demo.gif new file mode 100644 index 0000000..3603d8b Binary files /dev/null and b/assets/images/PLTW/rng-demo.gif differ diff --git a/assets/images/about/smootstdpic.jpg b/assets/images/about/smootstdpic.jpg new file mode 100644 index 0000000..4c72a9c Binary files /dev/null and b/assets/images/about/smootstdpic.jpg differ diff --git a/assets/images/bkg-img-v2.jpg b/assets/images/bkg-img-v2.jpg new file mode 100644 index 0000000..a16a4b1 Binary files /dev/null and b/assets/images/bkg-img-v2.jpg differ diff --git a/assets/images/first/21330-2025-cycle.gif b/assets/images/first/21330-2025-cycle.gif new file mode 100644 index 0000000..546c002 Binary files /dev/null and b/assets/images/first/21330-2025-cycle.gif differ diff --git a/assets/images/first/33791-cycle.gif b/assets/images/first/33791-cycle.gif new file mode 100644 index 0000000..8767fd2 Binary files /dev/null and b/assets/images/first/33791-cycle.gif differ diff --git a/assets/images/first/9128-2025-cycle.gif b/assets/images/first/9128-2025-cycle.gif new file mode 100644 index 0000000..94a05eb Binary files /dev/null and b/assets/images/first/9128-2025-cycle.gif differ diff --git a/assets/images/first/9128-2026-auto-pp.png b/assets/images/first/9128-2026-auto-pp.png new file mode 100644 index 0000000..4c07759 Binary files /dev/null and b/assets/images/first/9128-2026-auto-pp.png differ diff --git a/assets/images/first/9128-2026-auto.gif b/assets/images/first/9128-2026-auto.gif new file mode 100644 index 0000000..9b5b60d Binary files /dev/null and b/assets/images/first/9128-2026-auto.gif differ diff --git a/assets/images/first/9128-2026-autoalign.gif b/assets/images/first/9128-2026-autoalign.gif new file mode 100644 index 0000000..4ff90f0 Binary files /dev/null and b/assets/images/first/9128-2026-autoalign.gif differ diff --git a/assets/images/first/9128-2026-banners.png b/assets/images/first/9128-2026-banners.png new file mode 100644 index 0000000..29076e1 Binary files /dev/null and b/assets/images/first/9128-2026-banners.png differ diff --git a/assets/images/first/9128-2026-btb.jpg b/assets/images/first/9128-2026-btb.jpg new file mode 100644 index 0000000..f66f94e Binary files /dev/null and b/assets/images/first/9128-2026-btb.jpg differ diff --git a/assets/images/first/9128-2026-ei.png b/assets/images/first/9128-2026-ei.png new file mode 100644 index 0000000..58a3cd0 Binary files /dev/null and b/assets/images/first/9128-2026-ei.png differ diff --git a/assets/images/first/9128-2026-farmersville.png b/assets/images/first/9128-2026-farmersville.png new file mode 100644 index 0000000..1c266b5 Binary files /dev/null and b/assets/images/first/9128-2026-farmersville.png differ diff --git a/assets/images/first/9128-2026-field.jpg b/assets/images/first/9128-2026-field.jpg new file mode 100644 index 0000000..339776f Binary files /dev/null and b/assets/images/first/9128-2026-field.jpg differ diff --git a/assets/images/first/9128-2026-impact.jpg b/assets/images/first/9128-2026-impact.jpg new file mode 100644 index 0000000..5eb0559 Binary files /dev/null and b/assets/images/first/9128-2026-impact.jpg differ diff --git a/assets/images/first/9128-2026-queue.jpg b/assets/images/first/9128-2026-queue.jpg new file mode 100644 index 0000000..4b8164d Binary files /dev/null and b/assets/images/first/9128-2026-queue.jpg differ diff --git a/assets/images/first/9128-2026-robot-banners.png b/assets/images/first/9128-2026-robot-banners.png new file mode 100644 index 0000000..a661760 Binary files /dev/null and b/assets/images/first/9128-2026-robot-banners.png differ diff --git a/assets/images/first/9128-2026-sotm.gif b/assets/images/first/9128-2026-sotm.gif new file mode 100644 index 0000000..a19ebf9 Binary files /dev/null and b/assets/images/first/9128-2026-sotm.gif differ diff --git a/assets/images/first/9128-2026-space-city-1.jpg b/assets/images/first/9128-2026-space-city-1.jpg new file mode 100644 index 0000000..2662435 Binary files /dev/null and b/assets/images/first/9128-2026-space-city-1.jpg differ diff --git a/assets/images/first/9128-2026-states.jpg b/assets/images/first/9128-2026-states.jpg new file mode 100644 index 0000000..4267fdd Binary files /dev/null and b/assets/images/first/9128-2026-states.jpg differ diff --git a/assets/images/first/9752-2024-cycle.gif b/assets/images/first/9752-2024-cycle.gif new file mode 100644 index 0000000..d6acda6 Binary files /dev/null and b/assets/images/first/9752-2024-cycle.gif differ diff --git a/assets/images/first/frc-2026-rebuilt.jpg b/assets/images/first/frc-2026-rebuilt.jpg new file mode 100644 index 0000000..9fab5ae Binary files /dev/null and b/assets/images/first/frc-2026-rebuilt.jpg differ diff --git a/assets/images/first/itkan-frc-9128-cycle-4-3-crop.gif b/assets/images/first/itkan-frc-9128-cycle-4-3-crop.gif new file mode 100644 index 0000000..456e8cf Binary files /dev/null and b/assets/images/first/itkan-frc-9128-cycle-4-3-crop.gif differ diff --git a/assets/images/first/rebuilt-en-worlds.pdf b/assets/images/first/rebuilt-en-worlds.pdf new file mode 100644 index 0000000..65df554 Binary files /dev/null and b/assets/images/first/rebuilt-en-worlds.pdf differ diff --git a/assets/images/personal/mantik/countriesimpacted.png b/assets/images/personal/mantik/countriesimpacted.png new file mode 100644 index 0000000..458d3a1 Binary files /dev/null and b/assets/images/personal/mantik/countriesimpacted.png differ diff --git a/assets/images/personal/mantik/homepage.png b/assets/images/personal/mantik/homepage.png new file mode 100644 index 0000000..c215c74 Binary files /dev/null and b/assets/images/personal/mantik/homepage.png differ diff --git a/assets/images/personal/mantik/itkannewstitle.png b/assets/images/personal/mantik/itkannewstitle.png new file mode 100644 index 0000000..15db5bb Binary files /dev/null and b/assets/images/personal/mantik/itkannewstitle.png differ diff --git a/assets/images/personal/mantik/lessonpage.png b/assets/images/personal/mantik/lessonpage.png new file mode 100644 index 0000000..3f170a8 Binary files /dev/null and b/assets/images/personal/mantik/lessonpage.png differ diff --git a/assets/images/personal/mantik/pid-sim.gif b/assets/images/personal/mantik/pid-sim.gif new file mode 100644 index 0000000..16a63d1 Binary files /dev/null and b/assets/images/personal/mantik/pid-sim.gif differ diff --git a/assets/images/personal/mantik/pidsimulation.png b/assets/images/personal/mantik/pidsimulation.png new file mode 100644 index 0000000..9632357 Binary files /dev/null and b/assets/images/personal/mantik/pidsimulation.png differ diff --git a/assets/images/personal/mantik/resourcespage.png b/assets/images/personal/mantik/resourcespage.png new file mode 100644 index 0000000..7e84783 Binary files /dev/null and b/assets/images/personal/mantik/resourcespage.png differ diff --git a/assets/images/personal/oarobotics/maze-traversal.gif b/assets/images/personal/oarobotics/maze-traversal.gif new file mode 100644 index 0000000..11c3004 Binary files /dev/null and b/assets/images/personal/oarobotics/maze-traversal.gif differ diff --git a/assets/images/personal/oralvision/diamondchallenge.pdf b/assets/images/personal/oralvision/diamondchallenge.pdf new file mode 100644 index 0000000..ab23457 Binary files /dev/null and b/assets/images/personal/oralvision/diamondchallenge.pdf differ diff --git a/assets/images/personal/oralvision/team-pic.png b/assets/images/personal/oralvision/team-pic.png new file mode 100644 index 0000000..a0e6f52 Binary files /dev/null and b/assets/images/personal/oralvision/team-pic.png differ diff --git a/assets/images/personal/oralvision/txhsic-poster-talk.jpg b/assets/images/personal/oralvision/txhsic-poster-talk.jpg new file mode 100644 index 0000000..cac5f4b Binary files /dev/null and b/assets/images/personal/oralvision/txhsic-poster-talk.jpg differ diff --git a/assets/images/personal/oralvision/txhsic-poster-topdown.jpg b/assets/images/personal/oralvision/txhsic-poster-topdown.jpg new file mode 100644 index 0000000..08b2b5f Binary files /dev/null and b/assets/images/personal/oralvision/txhsic-poster-topdown.jpg differ diff --git a/assets/images/personal/oralvision/txhsic-presentation-room.jpg b/assets/images/personal/oralvision/txhsic-presentation-room.jpg new file mode 100644 index 0000000..81a809a Binary files /dev/null and b/assets/images/personal/oralvision/txhsic-presentation-room.jpg differ diff --git a/assets/images/personal/solvefortomorrow.png b/assets/images/personal/solvefortomorrow.png deleted file mode 100644 index ebdbf6e..0000000 Binary files a/assets/images/personal/solvefortomorrow.png and /dev/null differ diff --git a/assets/images/personal/watchfall/capstone-demo-video.gif b/assets/images/personal/watchfall/capstone-demo-video.gif new file mode 100644 index 0000000..4667a2d Binary files /dev/null and b/assets/images/personal/watchfall/capstone-demo-video.gif differ diff --git a/assets/images/personal/watchfall/irl-design.png b/assets/images/personal/watchfall/irl-design.png new file mode 100644 index 0000000..9b9756f Binary files /dev/null and b/assets/images/personal/watchfall/irl-design.png differ diff --git a/assets/images/rise/KHALED_Internship_Poster.pdf b/assets/images/rise/KHALED_Internship_Poster.pdf new file mode 100644 index 0000000..1a34937 Binary files /dev/null and b/assets/images/rise/KHALED_Internship_Poster.pdf differ diff --git a/assets/images/rise/ak-symposium.jpg b/assets/images/rise/ak-symposium.jpg new file mode 100644 index 0000000..3bdc40b Binary files /dev/null and b/assets/images/rise/ak-symposium.jpg differ diff --git a/assets/images/rise/ak-zg-jl-mit.jpg b/assets/images/rise/ak-zg-jl-mit.jpg new file mode 100644 index 0000000..ee293de Binary files /dev/null and b/assets/images/rise/ak-zg-jl-mit.jpg differ diff --git a/assets/images/rise/ak-zg-jl-symposium.jpg b/assets/images/rise/ak-zg-jl-symposium.jpg new file mode 100644 index 0000000..5b7c09d Binary files /dev/null and b/assets/images/rise/ak-zg-jl-symposium.jpg differ diff --git a/assets/images/rise/ak-zg-symposium.jpg b/assets/images/rise/ak-zg-symposium.jpg new file mode 100644 index 0000000..920c0fb Binary files /dev/null and b/assets/images/rise/ak-zg-symposium.jpg differ diff --git a/assets/images/rise/multigoalsar1.jpg b/assets/images/rise/multigoalsar1.jpg new file mode 100644 index 0000000..2d5a305 Binary files /dev/null and b/assets/images/rise/multigoalsar1.jpg differ diff --git a/assets/images/rise/multisuccessviolation.png b/assets/images/rise/multisuccessviolation.png new file mode 100644 index 0000000..42c8d5d Binary files /dev/null and b/assets/images/rise/multisuccessviolation.png differ diff --git a/assets/images/rise/og-mockup.png b/assets/images/rise/og-mockup.png new file mode 100644 index 0000000..470980e Binary files /dev/null and b/assets/images/rise/og-mockup.png differ diff --git a/assets/images/rise/saec-walls.jpg b/assets/images/rise/saec-walls.jpg new file mode 100644 index 0000000..3ab81ca Binary files /dev/null and b/assets/images/rise/saec-walls.jpg differ diff --git a/assets/images/rise/singlesuccess.png b/assets/images/rise/singlesuccess.png new file mode 100644 index 0000000..c141056 Binary files /dev/null and b/assets/images/rise/singlesuccess.png differ diff --git a/docs/rewrite-priority-list.md b/docs/rewrite-priority-list.md index ee912e9..810bbd6 100644 --- a/docs/rewrite-priority-list.md +++ b/docs/rewrite-priority-list.md @@ -42,6 +42,6 @@ Treat as the **template**, not an urgent rewrite—only minor edits or consisten --- -**Practical order:** do **DECODE → WatchFall → Photo Lab → Majority Vote** first (visibility + gap vs REEFSCAPE + quick credibility fixes). Then batch **past robotics (INTO THE DEEP, CRESCENDO)** and **thin PLTW (machine control)** to match whatever template you settle on from REEFSCAPE/DECODE. +**Practical order:** do **DECODE → WatchFall → Majority Vote** first (visibility + gap vs REEFSCAPE + quick credibility fixes). Then batch **past robotics (INTO THE DEEP, CRESCENDO)** and **thin PLTW (machine control)** to match whatever template you settle on from REEFSCAPE/DECODE. If you say whether your main audience is **college apps**, **internships**, or **both**, the order can shift (e.g. OralVision and Mantik move up for certain programs). \ No newline at end of file diff --git a/index.html b/index.html index 16da0ed..ff226c9 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,6 @@ --- layout: home author_profile: false -# Exclude from sitemap so only _pages/index.md (permalink: /) is listed—avoids duplicate homepage URL for Googlebot +# Exclude from sitemap so only _pages/index.md (permalink: /) is listed. Avoids duplicate homepage URL for Googlebot sitemap: false ---