Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions blog/2024-10-19-first-blog-post.md

This file was deleted.

8 changes: 0 additions & 8 deletions blog/authors.yml

This file was deleted.

5 changes: 0 additions & 5 deletions blog/tags.yml

This file was deleted.

115 changes: 115 additions & 0 deletions docs/Students.mdx
Original file line number Diff line number Diff line change
@@ -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 (
<section style={{ padding: '0 5vw' }}>
<h2
style={{
textAlign: 'center',
marginBottom: '3rem', // збільшений відступ після заголовка
fontWeight: '700',
fontSize: '36px',
fontFamily: "'Open Sans', sans-serif",
}}
>
Our Team
</h2>

<div
style={{
display: 'flex',
flexWrap: 'wrap',
justifyContent: 'space-between',
rowGap: '1.5rem',
columnGap: '1rem',
}}
>
{sortedStudents.map(({ id, name, linkedin, photo, years }) => (
<div
key={id}
style={{
flex: '0 1 calc(25% - 1rem)',
textAlign: 'center',
}}
>
<img
src={photo}
alt={name}
style={{
width: 160,
height: 160,
borderRadius: '50%',
objectFit: 'cover',
marginBottom: 8,
border: '2px solid var(--ifm-color-primary)',
}}
/>
<div style={{ fontWeight: 'bold', fontSize: '1.2rem' }}>
<a
href={linkedin}
target="_blank"
rel="noopener noreferrer"
style={{
display: 'inline-flex',
alignItems: 'center',
gap: '6px',
textDecoration: 'none',
color: 'var(--ifm-link-color)',
}}
>
<img
src="/img/linkedin-icon.png"
alt="LinkedIn"
style={{ width: 18, height: 18 }}
/>
{name}
</a>
</div>
<div style={{ color: 'gray' }}>{years}</div>
</div>
))}
</div>
</section>
);
}
17 changes: 0 additions & 17 deletions docs/platform/overview/overview.md

This file was deleted.

24 changes: 24 additions & 0 deletions docs/platform/overview/overview.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
title: Functional Scheme
sidebar_label: Functional Scheme & Components
---


<div style={{ backgroundColor: '#e6e6e6', padding: '2rem', borderRadius: '8px', marginBottom: '2rem' }}>
![Function Diagram](./img/FunctionalDiagram.png)
</div>


## 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).
1 change: 0 additions & 1 deletion docs/platform/rpi_power_hat/overview.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# Overview

# Overview

Expand Down
4 changes: 2 additions & 2 deletions docs/project/join.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# Як приєднатись до команди
**Якщо ви бажаєте взяти участь у проєкті, напишіть нам за посиланням:** [**Link**](https://github.com/orgs/KPI-Rover/discussions/11#discussion-7336225).
# 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).
48 changes: 2 additions & 46 deletions docs/project/tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -56,18 +24,6 @@ Here's an example of a good open source project:

<YouTubeVideo videoId="90HxqwZaWRA" />

## 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**
11 changes: 6 additions & 5 deletions docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -54,8 +54,9 @@ const config = {
onUntruncatedBlogPosts: 'warn',
},
theme: {
customCss: './src/css/custom.css',
},
customCss: require.resolve('./src/css/custom.css'),
},

}),
],
],
Expand Down Expand Up @@ -84,7 +85,7 @@ const config = {
position: 'left',
label: 'Platform',
},
{to: '/blog', label: 'Blog', position: 'left'},

{
href: 'https://github.com/KPI-Rover',
label: 'GitHub',
Expand All @@ -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',
},
],
Expand Down
89 changes: 89 additions & 0 deletions src/css/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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%;
}
}
Loading