Научиться использовать ОСРВ nxtOSEK для управления автономным движущимся устройством (роботом). Целью работы также является сравнения результов различных математических алгоритмов для одной и той же задачи.
Для выполнения данной лабороторной работы потребуются инструменты, установка которых была проведена в предыдущей лабораторной.
Решим следующую задачу: имея автономное движущееся устройство с ультрозвуковым сенсором, написать программу для его движения вдоль стенки. За основу будующей программы возьмем пример, использованный в самостоятельной работе предыдущей лабораторной работы - sonartest.
Откройте c-файл, который находится в ../cygwin/nxtOSEK/samples_C/sonartest. Все изменения необходимо делать в блоке
TASK(Task1)
{
}
Для начала сделаем движение вдоль стены, используя релейный регулятор, псевдокод которого выглядет так:
Если S1 < L // L - заданное расстояние
// S1 - значение с датчика
{
R_MOTOR = 0;
L_MOTOR = Speed;
}
Иначе
{
R_MOTOR = Speed;
L_MOTOR = 0;
}
Для реализации данной программы потребуются знание только двух функций ecrobot_get_sonar_sensor(номер_порта_датчика) и ecrobot_set_motor_speed(номер_порта_мотора, скорость).
В верхней части программы уже прописано определение порта для датчика (при желании можно заменить на собственный S1-S4).
#define PORT_IN_USE NXT_PORT_S4
Добавим сюда еще определение портов для моторов:
#define L_MOTOR NXT_PORT_A #define R_MOTOR NXT_PORT_C
Теперь напишем само тело задачи:
if (ecrobot_get_sonar_sensor(PORT_IN_USE) < 50)
{
ecrobot_set_motor_speed(R_MOTOR,0);
ecrobot_set_motor_speed(R_MOTOR,100);
}
else
{
ecrobot_set_motor_speed(R_MOTOR,0);
ecrobot_set_motor_speed(R_MOTOR,100);
}
Теперь собираем и заливаем программу на устройство. Датчик на устройстве должен быть подключен к порту 4 и устанавлен на левом боку (причем не под прямым углом, а где-то 45 градусов). Моторы должны быть подключены к портам A и С, левый и правый соответствено. После запуска программы, робот должен двигаться вдоль стены.
Недостатки данного алгоритма заметны уже после первого запуска: робот дергается, а иногда вовсе уходит от стенки.
На замену предложенному выше алгоритму приходит П-регулятор, псевдокод которого:
U = K*(S1 - L) // регулятор
// L - заданное расстояние
// S1 - считанное значение с // датчика расстояния
// K - пропорциональный коэффициент
R_MOTOR = Speed - U;
L_MOTOR = Speed + U;
Давайте вернемся с небес на землю - датчики не точны. Перед конечным запуском требуется каллибровка. Коэффициент K может принимать значения от 2 до 20 включительно.
Используя предложенный алгоритм, напишите и запустите программу для автономного движущегося устройства.
Напишите и протестируйте программу, используя ПД регулятор:
U = K1*(S1 - L) + K2*(S1-SensorOld) // SensorOld - предыдущее значение датчик
Сравните полученные алгоритмы.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.