Skip to content

Commit

Permalink
Обновить pxt.json, main.ts, turns.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
THEb0nny committed Apr 16, 2024
1 parent 0645d0c commit 9fb3575
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 15 deletions.
4 changes: 0 additions & 4 deletions main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ let CHECK_COLOR_CS = sensors.color4; // Ссылка на объект датч
let WHEELS_D = 62.4; // Диаметр колёс в мм
let WHEELS_W = 180; // Расстояние между центрами колёс в мм

let ENC_SMART_TURN_MAX_ERR_DIFFERENCE = 10; // Пороговое значения ошибки для регулятора умного поворота, что поворот выполнен
let ENC_SMART_TURN_MAX_REG_DIFFERENCE = 10; // Пороговое значение регулятора для определения умного поворота
let ENC_SMART_TURN_TIME_DEREG = 150; // Время дорегулирования в умном повороте

function RgbToHsvlToColorConvert(debug: boolean = false) {
let prevTime = 0; // Переменная предыдущего времения для цикла регулирования
while (true) {
Expand Down
2 changes: 1 addition & 1 deletion pxt.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "Promrobo21",
"version": "0.23.0",
"version": "0.23.1",
"description": "Methods (blocks) for working with ev3 to participate in competitions.",
"dependencies": {
"ev3": "*",
Expand Down
36 changes: 26 additions & 10 deletions turns.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
namespace chassis {

export let encSmartSpinTurnTimeOut = 800; // Максимальное время умного поворота относительно центра в мм
export let encSmartPivotTurnTimeOut = 1000; // Максимальное время умного поворота относительно колеса в мм
export let smartSpinTurnTimeOut = 800; // Максимальное время умного поворота относительно центра в мм
export let smartPivotTurnTimeOut = 1000; // Максимальное время умного поворота относительно колеса в мм
export let smartTurnDeregTimeOut = 150; // Время дорегулирования в умном повороте

export let smartTurnConditionErrDifference = 10; // Пороговое значения ошибки для регулятора умного поворота, что поворот выполнен
export let smartTurnConditionRegDifference = 10; // Пороговое значение регулятора (мощности регулятора) умного поворота для определения выполненного поворота

export let smartSpinTurnSpeed = 50; // Переменная для хранения скорости при повороте относительно центра оси
export let smartSpinTurnKp = 0.25; // Переменная для хранения коэффицента пропорционального регулятора при повороте относительно центра оси
Expand All @@ -15,12 +19,24 @@ namespace chassis {
export let smartPivotTurnKd = 2; // Переменная для хранения коэффицента дифференциального регулятора при повороте относительно колеса
export let smartPivotTurnN = 0; // Переменная для хранения коэффицента фильтра дифференциального регулятора при повороте относительно колеса

export function SetSmartSpinTurnTimeOut(time: number) {
encSmartSpinTurnTimeOut = time;
export function SetSmartSpinTurnTimeOut(timeOut: number) {
smartSpinTurnTimeOut = timeOut;
}

export function SetSmartPivotTurnTimeOut(timeOut: number) {
smartPivotTurnTimeOut = timeOut;
}

export function SetSmartTurnDeregTimeOut(timeOut: number) {
smartTurnDeregTimeOut = timeOut;
}

export function SetSmartTurnConditionErrDifference(maxErr: number) {
smartTurnConditionErrDifference = maxErr;
}

export function SetSmartPivotTurnTimeOut(time: number) {
encSmartPivotTurnTimeOut = time;
export function SetSmartTurnConditionRegDifference(maxU: number) {
smartTurnConditionRegDifference = maxU;
}

/**
Expand Down Expand Up @@ -71,12 +87,12 @@ namespace chassis {
automation.pid2.setPoint(error); // Передаём ошибку регулятору
let u = automation.pid2.compute(dt, 0); // Вычисляем и записываем значение с регулятора
u = Math.constrain(u, -smartSpinTurnSpeed, smartSpinTurnSpeed); // Ограничение скорости
if (!isTurned && Math.abs(error) <= ENC_SMART_TURN_MAX_ERR_DIFFERENCE && Math.abs(u) <= ENC_SMART_TURN_MAX_REG_DIFFERENCE) { // Если почти повернулись до конца при маленькой ошибке и маленькой мощности регулятора
if (!isTurned && Math.abs(error) <= smartTurnConditionErrDifference && Math.abs(u) <= smartTurnConditionRegDifference) { // Если почти повернулись до конца при маленькой ошибке и маленькой мощности регулятора
isTurned = true; // Повернулись до нужного градуса
deregStartTime = control.millis(); // Время старта таймер времени для дорегулирования
music.playToneInBackground(587, 50); // Сигнал начале дорегулирования
}
if (isTurned && currTime - deregStartTime >= ENC_SMART_TURN_TIME_DEREG || currTime - startTime >= encSmartSpinTurnTimeOut) break; // Дорегулируемся
if (isTurned && currTime - deregStartTime >= smartTurnDeregTimeOut || currTime - startTime >= smartSpinTurnTimeOut) break; // Дорегулируемся
CHASSIS_L_MOTOR.run(u); CHASSIS_R_MOTOR.run(-u); // Передаём управляющее воздействие на моторы
if (debug) { // Отладка
brick.clearScreen();
Expand Down Expand Up @@ -149,11 +165,11 @@ namespace chassis {
if (wheelPivot == WheelPivot.LeftWheel) motEnc = CHASSIS_L_MOTOR.angle() - motEncPrev; // Значение левого энкодера мотора в текущий момент
else if (wheelPivot == WheelPivot.RightWheel) motEnc = CHASSIS_R_MOTOR.angle() - motEncPrev; // Значение правого энкодера мотора в текущий момент
let error = calcMotRot - motEnc; // Ошибка регулирования
if (isTurned && currTime - deregStartTime >= ENC_SMART_TURN_TIME_DEREG || currTime - startTime >= encSmartPivotTurnTimeOut) break; // Дорегулируемся
if (isTurned && currTime - deregStartTime >= smartTurnDeregTimeOut || currTime - startTime >= smartPivotTurnTimeOut) break; // Дорегулируемся
automation.pid2.setPoint(error); // Передаём ошибку регулятору
let U = automation.pid2.compute(dt, 0); // Записываем в переменную управляющее воздействие регулятора
U = Math.constrain(U, -smartPivotTurnSpeed, smartPivotTurnSpeed); // Ограничить скорость по входному параметру
if (!isTurned && Math.abs(error) <= ENC_SMART_TURN_MAX_ERR_DIFFERENCE && Math.abs(U) <= ENC_SMART_TURN_MAX_REG_DIFFERENCE) { // Если почти повернулись до конца
if (!isTurned && Math.abs(error) <= smartTurnConditionErrDifference && Math.abs(U) <= smartTurnConditionRegDifference) { // Если почти повернулись до конца
isTurned = true; // Повернулись до нужного градуса
deregStartTime = control.millis(); // Время старта таймер времени для дорегулирования
music.playToneInBackground(587, 50); // Сигнал начале дорегулирования
Expand Down

0 comments on commit 9fb3575

Please sign in to comment.