diff --git a/blog/2024-10-19-first-blog-post.md b/blog/2024-10-19-first-blog-post.md deleted file mode 100644 index 36c76fa..0000000 --- a/blog/2024-10-19-first-blog-post.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -slug: first-blog-post -title: First Blog Post -authors: [saksonov] -tags: [Facebook] ---- - - Скоро буде білше. - - - -Ми працюємо над контентом diff --git a/blog/authors.yml b/blog/authors.yml deleted file mode 100644 index d23c4d2..0000000 --- a/blog/authors.yml +++ /dev/null @@ -1,8 +0,0 @@ -saksonov: - name: Сергій Аксьонов - title: Ментор - url: https://github.com/AksonovSergei - image_url: https://media.licdn.com/dms/image/v2/D5603AQHUlXxhSJvGxQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1701709296717?e=1734566400&v=beta&t=odYBlC9ToLu3xdEEQcLPqNGLn_RwVXdrTJEhQztjpGU - page: true - socials: - linkedin: sergiiaksonov diff --git a/blog/tags.yml b/blog/tags.yml deleted file mode 100644 index 15fc40a..0000000 --- a/blog/tags.yml +++ /dev/null @@ -1,5 +0,0 @@ -facebook: - label: Facebook - permalink: /facebook - description: Facebook tag description - diff --git a/docs/Students.mdx b/docs/Students.mdx new file mode 100644 index 0000000..b3055cf --- /dev/null +++ b/docs/Students.mdx @@ -0,0 +1,115 @@ +--- +title: Our Team +--- + +import React from 'react'; + +export const students = [ + { + id: '1', + name: 'Ivan Petrov', + linkedin: 'https://linkedin.com/in/ivanpetrov', + photo: '/img/student1.jpg', + years: '2023-present', + }, + { + id: '2', + name: 'Olena Shevchenko', + linkedin: 'https://linkedin.com/in/olenashevchenko', + photo: '/img/student2.jpg', + years: '2024', + }, + { + id: '3', + name: 'Mykola Kovalenko', + linkedin: 'https://linkedin.com/in/mykolakovalenko', + photo: '/img/student1.jpg', + years: '2024-present', + }, + { + id: '4', + name: 'Iryna Petrenko', + linkedin: 'https://linkedin.com/in/irynapetrenko', + photo: '/img/student2.jpg', + years: '2021-2024', + }, +]; + +export default function Students() { + const sortedStudents = [...students].sort((a, b) => { + if (a.years.includes('present') && !b.years.includes('present')) return -1; + if (!a.years.includes('present') && b.years.includes('present')) return 1; + return b.years.localeCompare(a.years); + }); + + return ( +
+

+ Our Team +

+ +
+ {sortedStudents.map(({ id, name, linkedin, photo, years }) => ( +
+ {name} +
+ + LinkedIn + {name} + +
+
{years}
+
+ ))} +
+
+ ); +} diff --git a/docs/platform/overview/overview.md b/docs/platform/overview/overview.md deleted file mode 100644 index da6b85e..0000000 --- a/docs/platform/overview/overview.md +++ /dev/null @@ -1,17 +0,0 @@ -# Функціональна схема - -![Function Diagram](./img/FunctionalDiagram.png) - -## Основні компоненти -### Двигуни -![Motor](./img/motor.png) - -Оскільки нам не потрібна велика швидкість і нам не потрібно перевозити велику вагу, нам цілком підходять мотори JGB37-520-256PRM. -Це мотори постійного струму на напругу 6В зі вбудованим редуктором та енкодером. Максимальна частота обертання коліс — 256 обертів за хвилину. При діаметрі колеса 87 мм максимальна швидкість робота може становити 4 км/год. -Ці мотори продаються в комплекті з колесами та зручним кріпленням моторів до шасі. Максимальний споживаний струм — 0.33А. - -### Модуль керування мотором (H-Bridge) -![H-Bridge](./img/hbridge.png) - -Модуль керування двигунами Dual H Bridge L298N дозволяє керувати двома двигунами постійного струму або одним кроковим двигуном. Він підтримує напругу від 5В до 35В і максимальний струм до 2А на канал. Модуль оснащений захистом від перегріву та має можливість керування напрямком і швидкістю обертання двигунів за допомогою широтно-імпульсної модуляції (ШІМ). - diff --git a/docs/platform/overview/overview.mdx b/docs/platform/overview/overview.mdx new file mode 100644 index 0000000..be3130a --- /dev/null +++ b/docs/platform/overview/overview.mdx @@ -0,0 +1,24 @@ +--- +title: Functional Scheme +sidebar_label: Functional Scheme & Components +--- + + +
+ ![Function Diagram](./img/FunctionalDiagram.png) +
+ + +## Main components + +### Motors +![Motor](./img/motor.png) + +Since we don't require high speed or the ability to carry a heavy load, the JGB37-520-256RPM motors are perfectly suitable for us. +These are 6V DC motors with a built-in gearbox and encoder. The maximum wheel rotation speed is 256 revolutions per minute. With a wheel diameter of 87 mm, the robot’s maximum speed can reach up to 4 km/h. +These motors are sold as a set with wheels and convenient motor mounts for attaching to the chassis. The maximum current consumption is 0.33 A. + +### Motor control module (H-Bridge) +![H-Bridge](./img/hbridge.png) + +The Dual H-Bridge L298N motor driver module allows control of two DC motors or one stepper motor. It supports a voltage range from 5V to 35V and a maximum current of up to 2A per channel. The module is equipped with overheat protection and allows control of motor direction and speed using Pulse Width Modulation (PWM). diff --git a/docs/platform/rpi_power_hat/overview.md b/docs/platform/rpi_power_hat/overview.md index 5a8e576..739ba3b 100644 --- a/docs/platform/rpi_power_hat/overview.md +++ b/docs/platform/rpi_power_hat/overview.md @@ -1,4 +1,3 @@ -# Overview # Overview diff --git a/docs/project/join.md b/docs/project/join.md index 151551d..a75ad48 100644 --- a/docs/project/join.md +++ b/docs/project/join.md @@ -1,2 +1,2 @@ -# Як приєднатись до команди -**Якщо ви бажаєте взяти участь у проєкті, напишіть нам за посиланням:** [**Link**](https://github.com/orgs/KPI-Rover/discussions/11#discussion-7336225). \ No newline at end of file +# How to join the team +**If you want to join the team, please contact us via this** [**link**](https://github.com/orgs/KPI-Rover/discussions/11#discussion-7336225). \ No newline at end of file diff --git a/docs/project/tasks.md b/docs/project/tasks.md index 4ebe75c..bdc1810 100644 --- a/docs/project/tasks.md +++ b/docs/project/tasks.md @@ -7,38 +7,6 @@ import YouTubeVideo from '@site/src/components/youtube'; # Tasks Here you can find a list of tasks that you can choose for yourself. -## Electronics development - -We are looking for students who are willing to participate in development of printed circuit boards. -For development these boards we use [**KiCAD**](https://www.kicad.org/) - -### Raspberry Pi power board -Raspberry PI power from the battery needs to have stable and quite powerful DC-DC converter. - -We have already developed the first prorotype: - -![RPI HAT](../platform/rpi_power_hat/img/rpihat_v1.png) - -But as expected mistakes were made and wishes were expressed for an improvement. - -### Chassis controller - -A chassis controller is required to control the robot's motors. Currently, we're using [BeagleBone Blue](https://www.beagleboard.org/boards/beaglebone-blue). But it's too expensive and impossible to buy lately. That's why we want to develop our own controller on STM32 base. - -**Main features:** -* Control of four DC motors -* Reading motor encoder readings -* Accelerometer reading and calibration -* Compass reading and calibration -* GPS module data reading -* PID wheel speed regulator -* Ethernet interface for receiving control commands -* PWM outputs for servomotor control. - -Functional diagram: [Архітектура системи](../platform/overview/overview.md). - -At the first stage, since there is a risk of making plenty of mistakes, we're planning to develop the board as a STM32-Discovery expansion board. Then, when we have gained experience, we're going to develop a full-fledged board with STM32 microcontroller installed on it. - ## Embedded software development The chassis controller requires a STM32 software. We're looking for a students team, who will participate in it's development. @@ -56,18 +24,6 @@ Here's an example of a good open source project: -## DevOps and Dev Process +## ROS2 Software Development +The robotic arm requires ROS2-based software. We are looking for a student team to participate in its development and configuration. See the robotic arm task description for the basic functionality. -The number of project participants is growing. The amount of source code and it's complexity is also increasing. Therefore, to simplify the development process and prevent changes from software breaking, we need to: -1. **Describe the development process:** - * How to join the project. - * How to create a task? - * How to create a working branch? - * How to create a PR? - * Commit requirements - * Code style requirements - * Unit tests coverage requirements - * Static code analysis requirements - * etc. -2. **Configure CI using GitHub Actions** -3. **Configure Release process using GitHub Packages** diff --git a/docusaurus.config.js b/docusaurus.config.js index d5842b1..e066fb4 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -9,7 +9,7 @@ import {themes as prismThemes} from 'prism-react-renderer'; /** @type {import('@docusaurus/types').Config} */ const config = { title: 'KPI Rover', - tagline: 'Розробка роботізованої платформи', + tagline: 'Robotic platform development', favicon: 'img/logo.ico', // Set the production url of your site here @@ -54,8 +54,9 @@ const config = { onUntruncatedBlogPosts: 'warn', }, theme: { - customCss: './src/css/custom.css', - }, + customCss: require.resolve('./src/css/custom.css'), +}, + }), ], ], @@ -84,7 +85,7 @@ const config = { position: 'left', label: 'Platform', }, - {to: '/blog', label: 'Blog', position: 'left'}, + { href: 'https://github.com/KPI-Rover', label: 'GitHub', @@ -103,7 +104,7 @@ const config = { href: 'https://github.com/KPI-Rover', }, { - label: 'Приєднатись до проєкту', + label: 'Join the project', href: 'https://github.com/orgs/KPI-Rover/discussions/11#discussion-7336225', }, ], diff --git a/src/css/custom.css b/src/css/custom.css index 2bc6a4c..5afba1c 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -5,6 +5,8 @@ */ /* You can override the default Infima variables here. */ +@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap'); + :root { --ifm-color-primary: #2e8555; --ifm-color-primary-dark: #29784c; @@ -28,3 +30,90 @@ --ifm-color-primary-lightest: #4fddbf; --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); } +.hero__title, .hero__subtitle { + color: black; +} + +.navbar { + background-color: #2e8555; +} + + +.navbar__item, .navbar__title { + color: white !important; +} + +h2 { + font-family: 'Open Sans', sans-serif; + margin-bottom: 1rem; + text-align: left; + font-weight: 700; + font-size: 36px; +} + +/* For .md files*/ +.markdown h1 { + font-size: 2.5rem; + margin-top: 3rem; + margin-bottom: 1.5rem; + font-weight: 800; + color: var(--ifm-color-primary); +} + +.markdown h2 { + font-size: 2rem; + margin-top: 2.5rem; + margin-bottom: 1rem; + font-weight: 700; + border-bottom: 2px solid var(--ifm-color-primary); + padding-bottom: 0.5rem; +} + +.markdown h3 { + font-size: 1.5rem; + margin-top: 2rem; + margin-bottom: 0.75rem; + font-weight: 600; + color: var(--ifm-color-primary-light); +} + +.markdown p { + font-size: 1.05rem; + line-height: 1.7; + margin-bottom: 1.25rem; +} + +.markdown img { + display: block; + margin: 1.5rem auto; + max-width: 600px; + width: auto; + height: 450px; + border-radius: 10px; + border: 1.5px solid #205d3b; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); +} + + +.markdown h3 { + position: relative; + padding: 1rem 1rem 0 1rem; +} + +@media (max-width: 768px) { + .markdown h1 { + font-size: 2rem; + } + + .markdown h2 { + font-size: 1.6rem; + } + + .markdown h3 { + font-size: 1.3rem; + } + + .markdown img { + max-width: 100%; + } +} diff --git a/src/pages/ProjectSection.js b/src/pages/ProjectSection.js new file mode 100644 index 0000000..0877304 --- /dev/null +++ b/src/pages/ProjectSection.js @@ -0,0 +1,24 @@ +import React from 'react'; +import styles from './ProjectSection.module.css'; + +export default function ProjectSection() { + return ( +
+
+
+

About the project

+

+ The goal of this project is to create a robot platform that can be easily repeated and assembled independently. + Having a ready-made platform should lower the threshold for entering the exciting world of robotics.
The complexity of the first steps can scare off many interested parties, + but if a person has a platform that can work in just a few days, it will definitely attract more interested parties.
+ Imagine: in a few days you assemble a robot that, like a robot vacuum cleaner, can map your house and move around it from point A to point B, avoiding obstacles.
+ Interesting, right? +

+
+
+ Про проєкт +
+
+
+ ); +} diff --git a/src/pages/ProjectSection.module.css b/src/pages/ProjectSection.module.css new file mode 100644 index 0000000..0cfd245 --- /dev/null +++ b/src/pages/ProjectSection.module.css @@ -0,0 +1,58 @@ +.projectSection { + background-color: white; + height: 500px; + display: flex; + align-items: center; /* вертикальне центрування */ + flex-direction: column; + justify-content: center; +} + +.container { + display: flex; + width: 100%; + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; + gap: 40px; + +} + +.textBlock { + flex: 1; /* займає половину */ + display: flex; + flex-direction: column; + justify-content: center; +} + + + +.textBlock p { + font-family: 'Open Sans', sans-serif; + font-weight: 400; + font-size: 18px; + color: #555; + line-height: 1.6; +} + +p br { + display: block; + content: ""; + margin-top: 1rem; /* або 16px, або 1.5rem — як тобі зручно */ +} + + +.imageBlock { + flex: 1; + max-width: 600px; + display: flex; + justify-content: flex-end; + align-items: center; +} + +.imageBlock img { + max-height: 400px; /* обмежуємо висоту */ + width: auto; + max-width: 100%; /* щоб не виходило за межі контейнера */ + border-radius: 12px; + object-fit: cover; +} diff --git a/src/pages/VacanciesSection.js b/src/pages/VacanciesSection.js new file mode 100644 index 0000000..e5a17cd --- /dev/null +++ b/src/pages/VacanciesSection.js @@ -0,0 +1,58 @@ +import React from 'react'; +import styles from './VacanciesSection.module.css'; + +export default function VacanciesSection() { + return ( +
+
+

Vacancies

+
+
+
+ Vacancy 1 +
Frontend
+
+ + Apply + +
+ +
+
+ Vacancy 2 +
UI/UX Designer
+
+ + Apply + +
+ +
+
+ Vacancy 3 +
Project Manager
+
+ + Apply + +
+
+
+
+ ); +} diff --git a/src/pages/VacanciesSection.module.css b/src/pages/VacanciesSection.module.css new file mode 100644 index 0000000..63b0bd9 --- /dev/null +++ b/src/pages/VacanciesSection.module.css @@ -0,0 +1,76 @@ +.vacanciesSection { + background-color: #2e8555; + padding: 40px 0; + color: white; + height: 600px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.container { + padding: 0 20px; + max-width: 1200px; + margin: 0 auto; +} + +.title { + text-align: center; + margin-bottom: 25px; +} + +.cardContainer { + display: flex; + gap: 32px; + flex-wrap: wrap; + justify-content: center; +} + +.card { + background-color: #d3d3d3; + border-radius: 12px; + width: 320px; + height: 320px; + position: relative; + overflow: hidden; +} + +.cardImage { + width: 100%; + height: 100%; + object-fit: cover; + border-radius: 12px; + display: block; +} + +.applyButton { + position: absolute; + bottom: 10px; + right: 10px; + padding: 6px 14px; + border: none; + background-color: white; + color: black; + border-radius: 12px; + cursor: pointer; + font-weight: bold; + font-size: 14px; +} + +.imageWrapper { + position: relative; +} + +.overlayTitle { + position: absolute; + top: 20px; + left: 50%; + transform: translateX(-50%); + color: white; + font-weight: bold; + background: rgba(32, 93, 59, 0.7); + padding: 5px 10px; + border-radius: 5px; + font-size: 16px; +} diff --git a/src/pages/index.js b/src/pages/index.js index d42469c..1264c1b 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -1,3 +1,4 @@ +import React from 'react'; import clsx from 'clsx'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; @@ -6,6 +7,9 @@ import HomepageFeatures from '@site/src/components/HomepageFeatures'; import Heading from '@theme/Heading'; import styles from './index.module.css'; +import VacanciesSection from './VacanciesSection'; +import ProjectSection from './ProjectSection'; +import Students from '../../docs/Students.mdx'; function HomepageHeader() { const {siteConfig} = useDocusaurusContext(); @@ -16,12 +20,10 @@ function HomepageHeader() { {siteConfig.title}

{siteConfig.tagline}

-
- - Приєднатись до проєкту - +
+ Left + Right +
@@ -35,6 +37,9 @@ export default function Home() { title={`Hello from ${siteConfig.title}`} description="Description will go into a meta tag in "> + + +
diff --git a/src/pages/index.module.css b/src/pages/index.module.css index 9f71a5d..7483c5a 100644 --- a/src/pages/index.module.css +++ b/src/pages/index.module.css @@ -4,20 +4,31 @@ */ .heroBanner { - padding: 4rem 0; text-align: center; - position: relative; - overflow: hidden; + padding: 4rem 0; + background-color: #fff; + height: 700px; } +.imageRow { + display: flex; + justify-content: center; + gap: 2rem; + margin-top: 2rem; + flex-wrap: wrap; +} + +.heroImage { + width: 600px; + height: 350px; + border-radius: 8px; + background-color: #ddd; + object-fit: cover; +} + + @media screen and (max-width: 996px) { .heroBanner { padding: 2rem; } } - -.buttons { - display: flex; - align-items: center; - justify-content: center; -} diff --git a/src/pages/platform.js b/src/pages/platform.js new file mode 100644 index 0000000..c5d4b20 --- /dev/null +++ b/src/pages/platform.js @@ -0,0 +1,34 @@ +import React from 'react'; +import clsx from 'clsx'; +import Layout from '@theme/Layout'; +import styles from './index.module.css'; + +export default function PlatformPage() { + return ( + +
+
+

System Overview

+

Functional Scheme

+ Functional Scheme +
+
+ +
+

Main Components

+
+
+

Motors

+

+ The robot chassis is equipped with four DC motors, each connected to an encoder for precise wheel rotation measurement. + The motor controller is built on STM32 and communicates with the main system via a serial interface, allowing accurate speed control and movement coordination. +

+
+
+ Motors +
+
+
+
+ ); +} diff --git a/static/img/left-image.jpg b/static/img/left-image.jpg new file mode 100644 index 0000000..c1b582c Binary files /dev/null and b/static/img/left-image.jpg differ diff --git a/static/img/linkedin-icon.png b/static/img/linkedin-icon.png new file mode 100644 index 0000000..eca6050 Binary files /dev/null and b/static/img/linkedin-icon.png differ diff --git a/static/img/project.jpg b/static/img/project.jpg new file mode 100644 index 0000000..8700806 Binary files /dev/null and b/static/img/project.jpg differ diff --git a/static/img/right-image.jpg b/static/img/right-image.jpg new file mode 100644 index 0000000..91cf0bc Binary files /dev/null and b/static/img/right-image.jpg differ diff --git a/static/img/student1.jpg b/static/img/student1.jpg new file mode 100644 index 0000000..451de0a Binary files /dev/null and b/static/img/student1.jpg differ diff --git a/static/img/student2.jpg b/static/img/student2.jpg new file mode 100644 index 0000000..19d2768 Binary files /dev/null and b/static/img/student2.jpg differ diff --git a/static/img/vacancy1.jpg b/static/img/vacancy1.jpg new file mode 100644 index 0000000..19db363 Binary files /dev/null and b/static/img/vacancy1.jpg differ diff --git a/static/img/vacancy2.jpg b/static/img/vacancy2.jpg new file mode 100644 index 0000000..c060df6 Binary files /dev/null and b/static/img/vacancy2.jpg differ diff --git a/static/img/vacancy3.jpg b/static/img/vacancy3.jpg new file mode 100644 index 0000000..203df56 Binary files /dev/null and b/static/img/vacancy3.jpg differ