Программирование роботов, осень 2014: Робот-манипулятор
DESCRIPTION
Параллельное управление мотором. Двухстепенной манипулятор. Перемещение объектов. Точное позиционирование. Контроль захвата. Коллективное взаимодействие. Конвейер.TRANSCRIPT
![Page 1: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/1.jpg)
Манипулятор.Ханойские башни
Сергей Александрович Филиппов Санкт-Петербургский Физико-математический лицей №239
![Page 2: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/2.jpg)
План занятия
Что такое манипулятор? Точное управление положением
двигателя. П-регулятор. Захват Два двигателя одновременно Три двигателя одновременно Устойчивость манипулятора Калибровка положений Управление скоростью движения
![Page 3: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/3.jpg)
Манипулятор
это управляемое устройство, предназначенное для выполнения сложных действий, аналогичных движениям руки человека,
это механизм для управления положением предметов,
применяется при работе в трудных, опасных условиях,
применяется для замены человека при выполнении однообразных повторяющихся операций.
![Page 4: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/4.jpg)
Управление положением двигателя Пропорциональный
регулятор: Уставка alpha Текущее положение e1 Невязка err=alpha-e1 Усиливающий
коэффициент k Управляющее
воздействие k*(alpha-e1) Из параллельной задачи
изменяется уставка alpha
Задание 1. Добавьте изменение положения в отрицательную сторону
Задание 2*. Замените время на ожидание нажатия датчика касания
![Page 5: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/5.jpg)
Управление положением двигателя Пропорциональный
регулятор: Уставка alpha Текущее положение en1 –
показания энкодера Невязка e=alpha-en1 Усиливающий
коэффициент k Управляющее
воздействие u=k*e Из основной задачи
изменяется уставка alpha
Задание 1. Добавьте изменение положения в отрицательную сторону
Задание 2*. Замените время на ожидание нажатия датчика касания
int alpha=0, e, k=2, u;task motor1(){ while(true) { e=alpha-nMotorEncoder[motorA]; u=e*k; motor[motorA]=u; wait1Msec(1); }}task main(){ nMotorEncoder[motorA]=0; StartTask(motor1); while(true) { wait1Msec(2000); alpha=45; wait1Msec(2000); alpha=0; }}
![Page 6: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/6.jpg)
Интегральный регулятор
Интегральный регулятор: Накапливает ошибки i=i+k*e*t Физический смысл —
длительность ошибки Постоянная t убирается в
коэффициент ki=k*t Для наблюдения за
работой интегральной составляющей обнуляется пропорциональный коэффициент kp
Накопление ошибки приводит к перерегулированию
int alpha=0;float i=0, kp=0, ki=0.01, p, e;task motor1(){ while(true) { e=alpha-nMotorEncoder[motorA]; p=kp*e; i=i+ki*e; u=p+i; motor[motorA]=u; wait1Msec(1); }}
![Page 7: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/7.jpg)
Интегральный регулятор с ограничением Интегральный регулятор:
Накапливает ошибки i=i+k*e*t Физический смысл —
длительность ошибки Постоянная t убирается в
коэффициент ki=k*t Для наблюдения за
работой интегральной составляющей обнуляется пропорциональный коэффициент kp
Ограничение интегральной составляющей действует на небольших отклонениях
int alpha=0;float i=0, kp=0, ki=0.01, p, e;task motor1(){ while(true) { e=alpha-nMotorEncoder[motorA]; p=kp*e; if (abs(i)>maxi) i=sgn(i)*maxi; i=i+ki*e; u=p+i; motor[motorA]=u; wait1Msec(1); }}
![Page 8: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/8.jpg)
Захват
Постройте захват на основе второго мотора
Примените к нему аналогичный алгоритм
На концах изогнутых балок зафиксируйте небольшие резиновые детали (колесики)
![Page 9: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/9.jpg)
Два двигателя одновременно Установите захват на первый
двигатель При необходимости
используйте балку, удлиняющую плечо
Примените алгоритм управления двумя двигателями
Перед запуском установите захват в раскрытое положение
Подготовьте стаканчик для перемещения
Задание 1. Добавьте команды возврата и раскрытия захвата
Задание 2. Составьте алгоритм управления манипулятором двумя датчиками касания
Задание 3. Составьте алгоритм с использованием одного датчика расстояния: как только появляется новый стаканчик, робот хватает и перемещает его
![Page 10: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/10.jpg)
Два двигателя одновременно Установите захват на первый
двигатель При необходимости
используйте балку, удлиняющую плечо
Примените алгоритм управления двумя двигателями
Перед запуском установите захват в раскрытое положение
Подготовьте стаканчик для перемещения
Задание 1. Добавьте команды возврата и раскрытия захвата
Задание 2. Составьте алгоритм управления манипулятором двумя датчиками касания
Задание 3. Составьте алгоритм с использованием одного датчика расстояния: как только появляется новый стаканчик, робот хватает и перемещает его
int alpha=0, beta=0;task motor1(){ while(true) { int e1=nMotorEncoder[motorA]; int e2=nMotorEncoder[motorB]; motor[motorA]=2*(alpha-e1); motor[motorB]=2*(beta-e2); wait1Msec(1); }}task main(){ nMotorEncoder[motorA]=0; nMotorEncoder[motorB]=0; StartTask(motor1); while(true) { wait1Msec(2000); alpha=90; wait1Msec(2000); beta=90; }}
![Page 11: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/11.jpg)
Ожидание появления объектаwhile(true) {
wait1Msec(2000);
alpha=90; // направо
wait1Msec(2000);
while(SensorValue[S1]>15)
wait1Msec(10); // объект
wait1Msec(2000);
beta=90; // захват
...
}
Ожидание появления объекта перед захватом манипулятора с помощью датчика расстояния
![Page 12: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/12.jpg)
Плавное перемещение с виртуальной целью В качестве промежуточной уставки вводится переменная (a и b),
значение которой равномерно изменяется в сторону главной уставки (alpha и beta)a=a+sgn(alpha-a)*dab=b+sgn(beta-b)*db
Коэффициенты da и db и задержка (10 мс) регулируют скорость моторов (по умолчанию 100º/с) task motor1(){ int a=0, b=0, ka=1, kb=1, da=1, db=1; while(true) { int e1=nMotorEncoder[motorA]; int e2=nMotorEncoder[motorB]; a=a+sgn(alpha-a)*da; b=b+sgn(beta-b)*db; motor[motorA]=ka*(a-e1); motor[motorB]=kb*(b-e2); wait1Msec(10); }}
![Page 13: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/13.jpg)
Управление тремя моторами Снимите захват Закрепите третий мотор
как показано на рисунке Укрепите конструкцию
лучевыми балками Переключите моторы в
порядке следования Примените алгоритм для
управления тремя моторами
Перед запуском установите моторы в исходное положение
![Page 14: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/14.jpg)
Управление тремя моторами Задайте команды для перемещения стаканчика: вверх,
вправо, вниз, отпустить. На лучевых балках установите пирамидки для надевания
стаканчиков на них При необходимости отрегулируйте усиливающие
коэффициенты
![Page 15: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/15.jpg)
Система обезвешивания Второй (центральный) мотор испытывает максимальную
нагрузку при подъеме Система обезвешивания (резинка) уравновешивает
нагрузку на подъем и опускание
![Page 16: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/16.jpg)
Калибровка положений
После инициализации энкодеров вводится блок калибровки
Робот просит установить мотор в соответствующее положение и нажать кнопку
Положение запоминается в переменную
bFloatDuringInactiveMotorPWM=true;
// Левое положение
NxtDisplayBigTextLine(1,”A1-left”);
while(nNxtButtonPressed!=3);
while(nNxtButtonPressed==3);
A1 = nMotorEncoder[motorA];
PlaySound(soundBeepBeep);
// Центральное положение
NxtDisplayBigTextLine(1,”A2-center”);
...
![Page 17: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/17.jpg)
Манипулятор с редуктором Усиление второго мотора с
помощью механической передачи
Требуется рычажок для позиционирования мотора
В программе необходимо установить реверс мотора
![Page 18: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/18.jpg)
Захват с подъемником
Две степени свободы в одном механизме
Замыкание передачи на подъем при захвате объекта
Контроль давления: сила захвата зависит от веса объекта
![Page 19: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/19.jpg)
Захват с подъемником - 2
![Page 20: Программирование роботов, осень 2014: Робот-манипулятор](https://reader036.vdocuments.mx/reader036/viewer/2022062319/557f039cd8b42ac46e8b4a61/html5/thumbnails/20.jpg)
Благодарю за внимание!
Сергей Александрович Филиппов Физико-Математический лицей № 239
Санкт-Петербург[email protected]