πŸ€– ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°: Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ нСсколькими сСрвомоторами

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ многоосСвыС Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ

🎯 БСгодня: Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ Ρ€ΠΎΠ±ΠΎΡ‚Π° с нСсколькими сСрвомоторами
⭐ ЦСль: ΠΠ°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слоТныС двиТСния

πŸ‘¨β€πŸ« Π£Ρ‡ΠΈΡ‚Π΅Π»ΡŒ: АхмСтов Рустам
🏫 Π¨ΠΊΠΎΠ»Π°: Π“Π‘ΠžΠ£ β„– 1362
πŸ“… Π”Π°Ρ‚Π°: 2025-06-14
⏰ ВрСмя: 90 ΠΌΠΈΠ½ΡƒΡ‚

🎯 Наша Π·Π°Π΄Π°Ρ‡Π° сСгодня

πŸ› οΈ Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ А: Π ΠΎΠ±ΠΎΡ‚-манипулятор 🦾

  • 3 сСрвомотора (ΠΏΠ»Π΅Ρ‡ΠΎ, ΠΏΡ€Π΅Π΄ΠΏΠ»Π΅Ρ‡ΡŒΠ΅, Π·Π°Ρ…Π²Π°Ρ‚)
  • Π—Π°Π΄Π°Ρ‡Π°: Π²Π·ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΈ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠΈΡ‚ΡŒ
  • Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: срСдняя

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π‘: Π¨Π°Π³Π°ΡŽΡ‰ΠΈΠΉ Ρ€ΠΎΠ±ΠΎΡ‚ 🚢

  • 4 сСрвомотора (2 Π½ΠΎΠ³ΠΈ Γ— 2 сустава)
  • Π—Π°Π΄Π°Ρ‡Π°: ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎ прямой Π»ΠΈΠ½ΠΈΠΈ
  • Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: высокая

πŸ“‹ План Ρ€Π°Π±ΠΎΡ‚Ρ‹

  1. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (15 ΠΌΠΈΠ½) - собираСм ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ
  2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (10 ΠΌΠΈΠ½) - присоСдиняСм ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ
  3. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (15 ΠΌΠΈΠ½) - создаСм ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ
  4. ВСстированиС (10 ΠΌΠΈΠ½) - провСряСм Ρ€Π°Π±ΠΎΡ‚Ρƒ
  5. ДСмонстрация (10 ΠΌΠΈΠ½) - ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

🧠 ВспоминаСм основы

πŸ”§ Π§Ρ‚ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΎ сСрвомоторах?

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ понятия:

  • Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ поворачиваСтся Π½Π° Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»
  • УправляСтся ШИМ-сигналом
  • Π˜ΠΌΠ΅Π΅Ρ‚ 3 ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°: ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅, зСмля, сигнал
  • ΠœΠΎΠΆΠ΅Ρ‚ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

πŸ€” Новая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: нСсколько сСрвомоторов

Вопросы для Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ:

  • Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ 3-4 сСрвомотора ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ?
  • Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ двигались ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ?
  • Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ “согласованноС Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅”?
  • Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ столкновСний частСй Ρ€ΠΎΠ±ΠΎΡ‚Π°?

βš™οΈ ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ сСрвомоторов

πŸ”Œ ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСрвомоторов

Π‘Ρ…Π΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

Arduino Uno:
πŸ“ PIN 3  β†’ Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 1 (Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚)
πŸ“ PIN 5  β†’ Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 2 (ΠΏΠ»Π΅Ρ‡ΠΎ)
πŸ“ PIN 6  β†’ Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 3 (ΠΏΡ€Π΅Π΄ΠΏΠ»Π΅Ρ‡ΡŒΠ΅)
πŸ“ PIN 9  β†’ Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 4 (Π·Π°Ρ…Π²Π°Ρ‚)

πŸ”΄ 5V    β†’ ВсС красныС ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°
⚫ GND   β†’ ВсС Ρ‡Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ:

  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ сСрвомотор ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ PWM-ΠΏΠΈΠ½Ρƒ
  • ВсС сСрвомоторы ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ источника
  • ΠŸΡ€ΠΈ большом количСствС сСрвомоторов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ внСшнСС ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅

πŸ“‘ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ мноТСствСнных сСрвомоторов

Базовая структура ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

#include <Servo.h>

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСрвомотора
Servo servo1;  // Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚
Servo servo2;  // ΠΏΠ»Π΅Ρ‡ΠΎ
Servo servo3;  // ΠΏΡ€Π΅Π΄ΠΏΠ»Π΅Ρ‡ΡŒΠ΅
Servo servo4;  // Π·Π°Ρ…Π²Π°Ρ‚

void setup() {
  // ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ сСрвомоторы ΠΊ ΠΏΠΈΠ½Π°ΠΌ
  servo1.attach(3);
  servo2.attach(5);
  servo3.attach(6);
  servo4.attach(9);
  
  // УстанавливаСм Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ полоТСния
  moveToHome();
}

void moveToHome() {
  servo1.write(90);  // Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
  servo2.write(90);
  servo3.write(90);
  servo4.write(90);
  delay(1000);
}

⭐ Для Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…: ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ

Бинхронизация Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ:

Π§Ρ‚ΠΎΠ±Ρ‹ нСсколько сСрвомоторов двигались ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π»ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎ врСмя, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ скорости:

\[t_{max} = \max\left(\frac{|\theta_{1,ΠΊΠΎΠ½Π΅Ρ†} - \theta_{1,старт}|}{\omega_1}, \frac{|\theta_{2,ΠΊΠΎΠ½Π΅Ρ†} - \theta_{2,старт}|}{\omega_2}, ...\right)\]

Π³Π΄Π΅ $\omega_i$ - максимальная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ i-Π³ΠΎ сСрвомотора

Алгоритм ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ двиТСния:

void smoothMove(int angle1, int angle2, int angle3, int totalTime) {
  int currentAngle1 = servo1.read();
  int currentAngle2 = servo2.read();
  int currentAngle3 = servo3.read();
  
  int steps = totalTime / 20;  // 20 мс на шаг
  
  for (int i = 0; i <= steps; i++) {
    float progress = (float)i / steps;
    
    int newAngle1 = currentAngle1 + (angle1 - currentAngle1) * progress;
    int newAngle2 = currentAngle2 + (angle2 - currentAngle2) * progress;
    int newAngle3 = currentAngle3 + (angle3 - currentAngle3) * progress;
    
    servo1.write(newAngle1);
    servo2.write(newAngle2);
    servo3.write(newAngle3);
    
    delay(20);
  }
}

ΠšΠΈΠ½Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° манипулятора:

ΠŸΡ€ΡΠΌΠ°Ρ ΠΊΠΈΠ½Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° (ΠΎΡ‚ ΡƒΠ³Π»ΠΎΠ² ΠΊ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ):

\[\begin{cases} x = L_1 \cos(\theta_1) + L_2 \cos(\theta_1 + \theta_2) \\ y = L_1 \sin(\theta_1) + L_2 \sin(\theta_1 + \theta_2) \end{cases}\]

ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ ΠΊΠΈΠ½Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° (ΠΎΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊ ΡƒΠ³Π»Π°ΠΌ):

\[\theta_2 = \pm \arccos\left(\frac{x^2 + y^2 - L_1^2 - L_2^2}{2L_1L_2}\right)\] \[\theta_1 = \arctan2(y, x) - \arctan2(L_2\sin(\theta_2), L_1 + L_2\cos(\theta_2))\]

πŸ› οΈ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ А: Π ΠΎΠ±ΠΎΡ‚-манипулятор

πŸ—οΈ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ манипулятора

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • ОснованиС: Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 1 (ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° 360Β°)
  • ΠŸΠ»Π΅Ρ‡ΠΎ: Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 2 (подъСм/опусканиС)
  • ΠŸΡ€Π΅Π΄ΠΏΠ»Π΅Ρ‡ΡŒΠ΅: Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 3 (сгибаниС Π² Π»ΠΎΠΊΡ‚Π΅)
  • Π—Π°Ρ…Π²Π°Ρ‚: Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 4 (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅/Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅)

Π‘Ρ…Π΅ΠΌΠ° сборки:

    [Π—Π°Ρ…Π²Π°Ρ‚] ← Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 4
         ↑
    [ΠŸΡ€Π΅Π΄ΠΏΠ»Π΅Ρ‡ΡŒΠ΅] ← Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 3
         ↑
      [ΠŸΠ»Π΅Ρ‡ΠΎ] ← Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 2
         ↑
    [ОснованиС] ← Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 1

🎯 Π—Π°Π΄Π°Π½ΠΈΠ΅ для манипулятора

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий:

  1. Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ - всС сСрвомоторы Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅
  2. ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ - ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ основаниС
  3. ΠžΠΏΡƒΡΠΊΠ°Π½ΠΈΠ΅ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ - сгибаСм ΠΏΠ»Π΅Ρ‡ΠΎ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠ»Π΅Ρ‡ΡŒΠ΅
  4. Π—Π°Ρ…Π²Π°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° - Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π·Π°Ρ…Π²Π°Ρ‚
  5. ПодъСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° - ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ ΠΏΠ»Π΅Ρ‡ΠΎ
  6. ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΊ Ρ†Π΅Π»ΠΈ - ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ основаниС Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ сторону
  7. ΠžΠΏΡƒΡΠΊΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° - опускаСм ΠΊ мСсту назначСния
  8. ΠžΡ‚ΠΏΡƒΡΠΊΠ°Π½ΠΈΠ΅ - ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π·Π°Ρ…Π²Π°Ρ‚
  9. Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π΄ΠΎΠΌΠΎΠΉ - возвращаСмся Π² исходноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

πŸ’» ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ для манипулятора

#include <Servo.h>

Servo baseServo;     // основаниС
Servo shoulderServo; // ΠΏΠ»Π΅Ρ‡ΠΎ
Servo elbowServo;    // ΠΏΡ€Π΅Π΄ΠΏΠ»Π΅Ρ‡ΡŒΠ΅
Servo gripperServo;  // Π·Π°Ρ…Π²Π°Ρ‚

void setup() {
  baseServo.attach(3);
  shoulderServo.attach(5);
  elbowServo.attach(6);
  gripperServo.attach(9);
  
  homePosition();
  delay(2000);
  
  // ВыполняСм Π·Π°Π΄Π°Π½ΠΈΠ΅
  pickAndPlace();
}

void homePosition() {
  baseServo.write(90);      // Ρ†Π΅Π½Ρ‚Ρ€
  shoulderServo.write(90);  // Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ
  elbowServo.write(90);     // прямо
  gripperServo.write(90);   // ΠΏΠΎΠ»ΡƒΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚
}

void pickAndPlace() {
  // 1. ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ
  smoothMove(45, 90, 90, 90, 1000);
  
  // 2. ΠžΠΏΡƒΡΠΊΠ°Π½ΠΈΠ΅ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ
  smoothMove(45, 120, 60, 90, 1500);
  
  // 3. Π—Π°Ρ…Π²Π°Ρ‚
  smoothMove(45, 120, 60, 180, 800);
  
  // 4. ПодъСм
  smoothMove(45, 90, 90, 180, 1500);
  
  // 5. ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΊ Ρ†Π΅Π»ΠΈ
  smoothMove(135, 90, 90, 180, 1000);
  
  // 6. ΠžΠΏΡƒΡΠΊΠ°Π½ΠΈΠ΅
  smoothMove(135, 120, 60, 180, 1500);
  
  // 7. ΠžΡ‚ΠΏΡƒΡΠΊΠ°Π½ΠΈΠ΅
  smoothMove(135, 120, 60, 90, 800);
  
  // 8. Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π΄ΠΎΠΌΠΎΠΉ
  smoothMove(90, 90, 90, 90, 2000);
}

void smoothMove(int baseAngle, int shoulderAngle, 
                int elbowAngle, int gripperAngle, int duration) {
  int startBase = baseServo.read();
  int startShoulder = shoulderServo.read();
  int startElbow = elbowServo.read();
  int startGripper = gripperServo.read();
  
  int steps = duration / 20;
  
  for (int i = 0; i <= steps; i++) {
    float progress = (float)i / steps;
    
    baseServo.write(startBase + (baseAngle - startBase) * progress);
    shoulderServo.write(startShoulder + (shoulderAngle - startShoulder) * progress);
    elbowServo.write(startElbow + (elbowAngle - startElbow) * progress);
    gripperServo.write(startGripper + (gripperAngle - startGripper) * progress);
    
    delay(20);
  }
}

⭐ Для Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…: РасчСт Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ достиТимых Ρ‚ΠΎΡ‡Π΅ΠΊ:

Для 2-Π·Π²Π΅Π½Π½ΠΎΠ³ΠΎ манипулятора Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ:

\[|L_1 - L_2| \leq \sqrt{x^2 + y^2} \leq L_1 + L_2\]

ΠžΡΠΎΠ±Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:

  • Π‘ΠΈΠ½Π³ΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ: $\theta_2 = 0Β°$ ΠΈΠ»ΠΈ $\theta_2 = 180Β°$
  • Π“Ρ€Π°Π½ΠΈΡ†Ρ‹: максимальноС ΠΈ минимальноС вытягиваниС

Алгоритм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ достиТимости:

bool isReachable(float x, float y, float L1, float L2) {
  float distance = sqrt(x*x + y*y);
  return (distance >= abs(L1 - L2)) && (distance <= L1 + L2);
}

🚢 ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π‘: Π¨Π°Π³Π°ΡŽΡ‰ΠΈΠΉ Ρ€ΠΎΠ±ΠΎΡ‚

πŸ—οΈ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΡˆΠ°Π³Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π°

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • ЛСвая Π½ΠΎΠ³Π°:
    • Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 1 (Ρ‚Π°Π·ΠΎΠ±Π΅Π΄Ρ€Π΅Π½Π½Ρ‹ΠΉ сустав - Π²ΠΏΠ΅Ρ€Π΅Π΄/Π½Π°Π·Π°Π΄)
    • Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 2 (ΠΊΠΎΠ»Π΅Π½Π½Ρ‹ΠΉ сустав - сгибаниС)
  • ΠŸΡ€Π°Π²Π°Ρ Π½ΠΎΠ³Π°:
    • Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 3 (Ρ‚Π°Π·ΠΎΠ±Π΅Π΄Ρ€Π΅Π½Π½Ρ‹ΠΉ сустав - Π²ΠΏΠ΅Ρ€Π΅Π΄/Π½Π°Π·Π°Π΄)
    • Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 4 (ΠΊΠΎΠ»Π΅Π½Π½Ρ‹ΠΉ сустав - сгибаниС)

Π‘Ρ…Π΅ΠΌΠ° ΠΊΠΈΠ½Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ:

    [ΠšΠΎΡ€ΠΏΡƒΡ]
    /        \
[Π‘Π΅Π΄Ρ€ΠΎ_Π›]  [Π‘Π΅Π΄Ρ€ΠΎ_П] ← Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€Ρ‹ 1,3 (Ρ‚Π°Π·ΠΎΠ±Π΅Π΄Ρ€Π΅Π½Π½Ρ‹Π΅)
   |          |
[Π“ΠΎΠ»Π΅Π½ΡŒ_Π›] [Π“ΠΎΠ»Π΅Π½ΡŒ_П] ← Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€Ρ‹ 2,4 (ΠΊΠΎΠ»Π΅Π½Π½Ρ‹Π΅)
   |          |
[Π‘Ρ‚ΠΎΠΏΠ°_Π›]  [Π‘Ρ‚ΠΎΠΏΠ°_П]

🚢 Π¦ΠΈΠΊΠ» Ρ…ΠΎΠ΄ΡŒΠ±Ρ‹

Π€Π°Π·Ρ‹ шага:

  1. ΠžΠΏΠΎΡ€Π° Π½Π° Π»Π΅Π²ΡƒΡŽ Π½ΠΎΠ³Ρƒ - правая Π½ΠΎΠ³Π° поднимаСтся
  2. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ ΠΏΡ€Π°Π²ΠΎΠΉ Π½ΠΎΠ³ΠΈ - Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Π΅Π΄
  3. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΏΡ€Π°Π²ΠΎΠΉ Π½ΠΎΠ³ΠΈ - касаниС Π·Π΅ΠΌΠ»ΠΈ
  4. ΠžΠΏΠΎΡ€Π° Π½Π° ΠΏΡ€Π°Π²ΡƒΡŽ Π½ΠΎΠ³Ρƒ - лСвая Π½ΠΎΠ³Π° поднимаСтся
  5. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ Π»Π΅Π²ΠΎΠΉ Π½ΠΎΠ³ΠΈ - Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Π΅Π΄
  6. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π»Π΅Π²ΠΎΠΉ Π½ΠΎΠ³ΠΈ - касаниС Π·Π΅ΠΌΠ»ΠΈ

πŸ’» ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΡˆΠ°Π³Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π°

#include <Servo.h>

Servo leftHip;    // Π»Π΅Π²Ρ‹ΠΉ Ρ‚Π°Π·ΠΎΠ±Π΅Π΄Ρ€Π΅Π½Π½Ρ‹ΠΉ
Servo leftKnee;   // Π»Π΅Π²ΠΎΠ΅ ΠΊΠΎΠ»Π΅Π½ΠΎ
Servo rightHip;   // ΠΏΡ€Π°Π²Ρ‹ΠΉ Ρ‚Π°Π·ΠΎΠ±Π΅Π΄Ρ€Π΅Π½Π½Ρ‹ΠΉ  
Servo rightKnee;  // ΠΏΡ€Π°Π²ΠΎΠ΅ ΠΊΠΎΠ»Π΅Π½ΠΎ

// Π£Π³Π»Ρ‹ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ
int hipCenter = 90;     // Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π΄Ρ€Π°
int hipForward = 120;   // Π±Π΅Π΄Ρ€ΠΎ Π²ΠΏΠ΅Ρ€Π΅Π΄
int hipBackward = 60;   // Π±Π΅Π΄Ρ€ΠΎ Π½Π°Π·Π°Π΄
int kneeDown = 90;      // Π½ΠΎΠ³Π° Π½Π° Π·Π΅ΠΌΠ»Π΅
int kneeUp = 45;        // Π½ΠΎΠ³Π° поднята

void setup() {
  leftHip.attach(3);
  leftKnee.attach(5);
  rightHip.attach(6);
  rightKnee.attach(9);
  
  standingPosition();
  delay(2000);
  
  // НачинаСм Ρ…ΠΎΠ΄ΡŒΠ±Ρƒ
  for(int i = 0; i < 4; i++) {
    walkCycle();
  }
  
  standingPosition();
}

void standingPosition() {
  leftHip.write(hipCenter);
  leftKnee.write(kneeDown);
  rightHip.write(hipCenter);
  rightKnee.write(kneeDown);
  delay(500);
}

void walkCycle() {
  // Π¨Π°Π³ ΠΏΡ€Π°Π²ΠΎΠΉ Π½ΠΎΠ³ΠΎΠΉ
  stepRight();
  delay(200);
  
  // Π¨Π°Π³ Π»Π΅Π²ΠΎΠΉ Π½ΠΎΠ³ΠΎΠΉ
  stepLeft();
  delay(200);
}

void stepRight() {
  // 1. ПоднимаСм ΠΏΡ€Π°Π²ΡƒΡŽ Π½ΠΎΠ³Ρƒ
  rightKnee.write(kneeUp);
  delay(300);
  
  // 2. Π”Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡ€Π°Π²ΡƒΡŽ Π½ΠΎΠ³Ρƒ Π²ΠΏΠ΅Ρ€Π΅Π΄
  rightHip.write(hipForward);
  delay(400);
  
  // 3. ΠžΠΏΡƒΡΠΊΠ°Π΅ΠΌ ΠΏΡ€Π°Π²ΡƒΡŽ Π½ΠΎΠ³Ρƒ
  rightKnee.write(kneeDown);
  delay(300);
  
  // 4. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌ вСс - отталкиваСмся Π»Π΅Π²ΠΎΠΉ Π½ΠΎΠ³ΠΎΠΉ
  leftHip.write(hipBackward);
  rightHip.write(hipCenter);
  delay(400);
}

void stepLeft() {
  // 1. ПоднимаСм Π»Π΅Π²ΡƒΡŽ Π½ΠΎΠ³Ρƒ
  leftKnee.write(kneeUp);
  delay(300);
  
  // 2. Π”Π²ΠΈΠ³Π°Π΅ΠΌ Π»Π΅Π²ΡƒΡŽ Π½ΠΎΠ³Ρƒ Π²ΠΏΠ΅Ρ€Π΅Π΄
  leftHip.write(hipForward);
  delay(400);
  
  // 3. ΠžΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π»Π΅Π²ΡƒΡŽ Π½ΠΎΠ³Ρƒ
  leftKnee.write(kneeDown);
  delay(300);
  
  // 4. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌ вСс - отталкиваСмся ΠΏΡ€Π°Π²ΠΎΠΉ Π½ΠΎΠ³ΠΎΠΉ
  rightHip.write(hipBackward);
  leftHip.write(hipCenter);
  delay(400);
}

⭐ Для Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…: Π”ΠΈΠ½Π°ΠΌΠΈΠΊΠ° Ρ…ΠΎΠ΄ΡŒΠ±Ρ‹

Π¦Π΅Π½Ρ‚Ρ€ масс ΠΈ равновСсиС:

Для устойчивой Ρ…ΠΎΠ΄ΡŒΠ±Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€ масс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π°Π΄ ΠΎΠΏΠΎΡ€Π½ΠΎΠΉ Π½ΠΎΠ³ΠΎΠΉ:

\[x_{ЦМ} = \frac{m_{корпус} \cdot x_{корпус} + m_{Π½ΠΎΠ³Π°} \cdot x_{Π½ΠΎΠ³Π°}}{m_{общая}}\]

УсловиС статичСской устойчивости:

\[|x_{ЦМ} - x_{ΠΎΠΏΠΎΡ€Π°}| < \frac{L_{стопа}}{2}\]

ВраСктория двиТСния стопы:

ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Π°Ρ траСктория стопы ΠΏΡ€ΠΈ шагС:

\[\begin{cases} x(t) = x_0 + v \cdot t \\ y(t) = h \cdot \sin\left(\frac{\pi t}{T}\right) \end{cases}\]

Π³Π΄Π΅ h - высота подъСма Π½ΠΎΠ³ΠΈ, T - врСмя шага

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:

void smoothStep(float stepLength, float stepHeight, int duration) {
  int steps = duration / 20;
  
  for(int i = 0; i <= steps; i++) {
    float t = (float)i / steps;
    
    // ΠŸΠ°Ρ€Π°Π±ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΠ°Ρ траСктория подъСма Π½ΠΎΠ³ΠΈ
    float height = stepHeight * sin(PI * t);
    
    // Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Π΅Π΄
    float forward = stepLength * t;
    
    // ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ Π² ΡƒΠ³Π»Ρ‹ сСрвомоторов
    int hipAngle = calculateHipAngle(forward);
    int kneeAngle = calculateKneeAngle(height);
    
    rightHip.write(hipAngle);
    rightKnee.write(kneeAngle);
    
    delay(20);
  }
}

πŸ”§ ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ настройка

πŸ“‘ Π‘Ρ…Π΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Для манипулятора:

Arduino β†’ Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€Ρ‹
PIN 3   β†’ ОснованиС (base)
PIN 5   β†’ ΠŸΠ»Π΅Ρ‡ΠΎ (shoulder)  
PIN 6   β†’ ΠŸΡ€Π΅Π΄ΠΏΠ»Π΅Ρ‡ΡŒΠ΅ (elbow)
PIN 9   β†’ Π—Π°Ρ…Π²Π°Ρ‚ (gripper)
5V      β†’ ВсС красныС ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°
GND     β†’ ВсС Ρ‡Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°

Для ΡˆΠ°Π³Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π°:

Arduino β†’ Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€Ρ‹
PIN 3   β†’ Π›Π΅Π²Ρ‹ΠΉ Ρ‚Π°Π·ΠΎΠ±Π΅Π΄Ρ€Π΅Π½Π½Ρ‹ΠΉ
PIN 5   β†’ Π›Π΅Π²ΠΎΠ΅ ΠΊΠΎΠ»Π΅Π½ΠΎ
PIN 6   β†’ ΠŸΡ€Π°Π²Ρ‹ΠΉ Ρ‚Π°Π·ΠΎΠ±Π΅Π΄Ρ€Π΅Π½Π½Ρ‹ΠΉ
PIN 9   β†’ ΠŸΡ€Π°Π²ΠΎΠ΅ ΠΊΠΎΠ»Π΅Π½ΠΎ

⚠️ Π’Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹

ΠŸΠΈΡ‚Π°Π½ΠΈΠ΅:

  • ΠŸΡ€ΠΈ 3-4 сСрвомоторах ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ° ΠΎΡ‚ USB
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ внСшний источник питания 6-7.4Π’
  • ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΎΠ±Ρ‰ΡƒΡŽ зСмлю (GND)

ΠœΠ΅Ρ…Π°Π½ΠΈΠΊΠ°:

  • ЗакрСпляйтС сСрвомоторы Π½Π°Π΄Π΅ΠΆΠ½ΠΎ
  • Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ сСрвомоторов
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ ΡƒΠ³Π»ΠΎΠ² ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°

πŸ§ͺ ВСстированиС ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°

πŸ” Пошаговая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°

Π­Ρ‚Π°ΠΏ 1: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

void testAllServos() {
  Serial.println("ВСстируСм сСрвомоторы...");
  
  servo1.write(0);   delay(1000);
  servo1.write(180); delay(1000);
  servo1.write(90);  delay(1000);
  Serial.println("Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ 1 - OK");
  
  // Аналогично для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… сСрвомоторов
}

Π­Ρ‚Π°ΠΏ 2: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ²

  • Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ сСрвомоторы Π½Π΅ ΡƒΠΏΠΈΡ€Π°ΡŽΡ‚ΡΡ Π² мСханичСскиС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΠΈ
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ всС ΡƒΠ³Π»Ρ‹ достиТимы
  • НастройтС ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ³Π»Ρ‹

Π­Ρ‚Π°ΠΏ 3: ВСстированиС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

  • ЗапуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ шагам
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ
  • Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² плавности ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ²

πŸ› Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Π Π΅ΡˆΠ΅Π½ΠΈΠ΅
Π‘Π΅Ρ€Π²ΠΎΠΌΠΎΡ‚ΠΎΡ€ дСргаСтсяНСдостаток ΠΏΠΈΡ‚Π°Π½ΠΈΡΠ’Π½Π΅ΡˆΠ½Π΅Π΅ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅
ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π°Π΅Π΄Π°Π΅Ρ‚ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ°Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ
НСточныС ΡƒΠ³Π»Ρ‹ΠŸΠ»ΠΎΡ…Π°Ρ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠ°ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡƒΠ³Π»Ρ‹
Π ΠΎΠ±ΠΎΡ‚ ΠΏΠ°Π΄Π°Π΅Ρ‚ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Π±Π°Π»Π°Π½ΡΠ°Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

🎀 ДСмонстрация Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²

πŸ“Š ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ успСха

Для манипулятора:

  • βœ… ΠŸΠ»Π°Π²Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ двиТСния всСх сСрвомоторов
  • βœ… Π£ΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ Π·Π°Ρ…Π²Π°Ρ‚ ΠΈ пСрСнос ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
  • βœ… Π’ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
  • βœ… Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π² исходноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Для ΡˆΠ°Π³Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π°:

  • βœ… УстойчивоС равновСсиС Π²ΠΎ врСмя двиТСния
  • βœ… ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ Π½ΠΎΠ³
  • βœ… Плавная ΠΏΠΎΡ…ΠΎΠ΄ΠΊΠ°
  • βœ… Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ прямой Π»ΠΈΠ½ΠΈΠΈ

πŸ† Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ достиТСния

БонусныС возмоТности:

  • 🌟 Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ сСнсоров (расстояния, касания)
  • 🌟 ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ слоТных Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ
  • 🌟 АвтономноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡
  • 🌟 Адаптация ΠΊ прСпятствиям

πŸ“Ή Π€ΠΎΡ€ΠΌΠ°Ρ‚ дСмонстрации

План выступлСния (2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ):

  1. ΠŸΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (30 сСк) - Ρ‡Ρ‚ΠΎ создали
  2. ДСмонстрация Ρ€Π°Π±ΠΎΡ‚Ρ‹ (60 сСк) - ΠΏΠΎΠΊΠ°Π· Π² дСйствии
  3. ОбъяснСниС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² (30 сСк) - ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

πŸ€” РСфлСксия ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρ‹

🎯 Π§Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ

ВСхничСскиС Π½Π°Π²Ρ‹ΠΊΠΈ:

  • βœ… ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ мноТСствСнных сСрвомоторов
  • βœ… ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ
  • βœ… Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ слоТных мСханичСских систСм
  • βœ… ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Ρ… систСм

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠΈ:

  • 🧠 ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ Π² многоосСвых систСмах
  • βš™οΈ Бинхронизация ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… устройств
  • 🎯 ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ двиТСния
  • πŸ”„ ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ связь Π² систСмах управлСния

πŸ” Анализ слоТностСй

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹:

  1. Бинхронизация - всС сСрвомоторы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ согласованно
  2. ΠœΠ΅Ρ…Π°Π½ΠΈΠΊΠ° - конструкция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ
  3. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ - слоТная Π»ΠΎΠ³ΠΈΠΊΠ° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ
  4. ΠžΡ‚Π»Π°Π΄ΠΊΠ° - ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² = ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ

πŸš€ ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅

Π“Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ систСмы:

  • 🏭 ΠŸΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Π΅ Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹-манипуляторы
  • πŸ₯ Π₯ирургичСскиС Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹
  • 🎬 АниматронныС систСмы
  • πŸš€ ΠšΠΎΡΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ манипуляторы
  • πŸ€– Π§Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹

🏠 Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅

πŸ“‹ Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ (для всСх)

1. ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΎ практичСской Ρ€Π°Π±ΠΎΡ‚Π΅ Π‘ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚ (2-3 страницы), Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ:

  • ОписаниС созданного ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°
  • Π‘Ρ…Π΅ΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сСрвомоторов
  • ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ

2. Анализ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ вашСго Ρ€ΠΎΠ±ΠΎΡ‚Π° ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ такая координация Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°.

🎯 ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ (ΠΏΠΎ ТСланию)

3. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π”ΠΎΡ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π΄ΠΎΠ±Π°Π²ΠΈΠ²:

  • ΠŸΠ»Π°Π²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ двиТСниями
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° ошибки
  • Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

4. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Π° Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Ρ€ΠΎΠ±ΠΎΡ‚Π° с 5-6 сСрвомоторами:

  • НазначСниС ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ
  • ΠšΠΈΠ½Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ схСма
  • Алгоритм управлСния

⭐ Для ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹Ρ… аспирантов

5. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ модСль:

  • ΠšΠΈΠ½Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ вашСго Ρ€ΠΎΠ±ΠΎΡ‚Π°
  • ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ двиТСния
  • РаспрСдСлСния Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ

6. Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ исслСдуйтС ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ‚Π΅ΠΌ:

  • Алгоритмы планирования Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ
  • БистСмы тСхничСского зрСния для Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠ²
  • АдаптивноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π²Π΅Π½Π½Ρ‹ΠΌΠΈ систСмами

πŸŽ‰ Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

πŸ† Наши достиТСния

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

  • πŸ€– Π‘ΠΎΠ·Π΄Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ многоосСвого Ρ€ΠΎΠ±ΠΎΡ‚Π°
  • πŸ’» Освоили ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ
  • πŸ”§ ΠΠ°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ слоТныС систСмы
  • 🎯 Поняли ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ синхронизации

НовыС знания:

  • 🧠 ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΡ Π² робототСхничСских систСмах
  • βš™οΈ ΠœΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ²
  • πŸ“ ΠšΠΈΠ½Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° мСханичСских систСм
  • πŸ”„ ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ

🌟 Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅

“Π ΠΎΠ±ΠΎΡ‚ - это Π½Π΅ просто Π½Π°Π±ΠΎΡ€ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Π­Ρ‚ΠΎ систСма, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² согласии с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ для достиТСния ΠΎΠ±Ρ‰Π΅ΠΉ Ρ†Π΅Π»ΠΈ!”

πŸš€ Π§Ρ‚ΠΎ дальшС?

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡƒΡ€ΠΎΠΊΠ°Ρ…:

  • Π”Π°Ρ‚Ρ‡ΠΈΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи
  • БистСмы тСхничСского зрСния
  • Π˜ΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ Π² Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ΅
  • АвтономныС робототСхничСскиС систСмы

🎯 БСгодня Π²Ρ‹ создали Π½Π°ΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму!

πŸ“š Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы

πŸ”— ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки

ДокумСнтация ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

πŸ“– РСкомСндуСмая Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

Для школьников:

  • “ΠœΠ½ΠΎΠ³ΠΎΠΎΡΠ΅Π²Ρ‹Π΅ Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹” - Π .М. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΠΎΠ²
  • “ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ Π² Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ΅” - И.К. ΠœΠ΅Ρ…Π°Π½ΠΈΠΊΠΎΠ²
  • “ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠ²-манипуляторов” - А.П. ΠšΠΎΠ΄Π΅Ρ€ΠΎΠ²

⭐ Для ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Π½ΠΎΠ³ΠΎ изучСния:

  • “Robotics: Modelling, Planning and Control” - Siciliano
  • “Introduction to Robotics Mechanics and Control” - Craig
  • “Robot Motion Planning” - Latombe

πŸ› οΈ Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹

ИдСи для развития:

  • Π ΠΎΠ±ΠΎΡ‚-Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊ (рисуСт ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹)
  • Π ΠΎΠ±ΠΎΡ‚-сортировщик (сортируСт ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΏΠΎ Ρ†Π²Π΅Ρ‚Ρƒ)
  • Π ΠΎΠ±ΠΎΡ‚-ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ (ΠΏΠΎΠ΄Π°Π΅Ρ‚ Π½Π°ΠΏΠΈΡ‚ΠΊΠΈ)
  • Π ΠΎΠ±ΠΎΡ‚-ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π½Ρ‚ (ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π½Π° ксилофонС)

УспСхов Π² создании многоосСвых Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠ²! πŸ€–βš™οΈβœ¨