В этом уроке мы узнаем, сколько нужно ехать до требуемой точки, в какую сторону нужно ехать, сделаем плавное ускорение и плавное замедление. Также построим графики для наглядного представления результата работы. Разберем это на конкретном примере.
Глоссарий
Для успешного освоения материала рекомендуем вам изучить следующие понятия:
Formula Node
Блок в LabVIEW для написания простых формул в строчном виде
In range and coerce
Блок в LabVIEW для ограничения выходного значения по
верхней и нижней границе
Waveform chart
Блок в LabVIEW для отображения данных в виде графика за определенное количество выполненных циклов
Видеолекция
Конспект

Задача
Роботу необходимо переместиться из точки X0 в точку X1, затем в точку X2 и в точку X3. Это будут три различных пути: S1, S2 и S3, где S1 — разница между X1 и X0; S2 — разница между X2 и X1; S3 — разница между X3 и X2.
Расчет будет производиться следующим образом: путь, который должен будет пройти робот — это разница между требуемой точкой, в которую мы хотим приехать, и текущей.
Написание программы
Воспользуемся полученной формулой в LabVIEW.

1. Cоздадим VI и в ней напишем формулу.
Важно
Подобную формулу можно написать с помощью Formula Node или арифметических блоков. Мы сделаем это с помощью Formula Node
2. Выделяем ту область на блок-диаграмме, где будет находиться Formula Node.

3. Пишем нашу формулу, где S равняется 1 минус X0. И обязательно необходимо ставить точку с запятой.
Ошибки
1. Ошибки могут быть связаны с отсутствием входных данных для элементов X1, X0 и S.

Исправление
Чтобы их добавить, нажимаем правой кнопкой мыши по Formula Node, затем Add Input дважды — один раз для X1, другой для X0, и Add output для S. И называем их соответственно. Теперь необходимо подключить к ним данные. К примеру, указываем: X0 — это наша текущая позиция — Current position; X1 — Requirement position. S — это путь (Way). Назовем All way.
2. VI может находиться под устройством myRIO, и вычислительные мощности используются именно устройством myRIO. Так как у нас его нет, он не может подключиться, и наш прогресс не продолжается.

Исправление
Чтобы выполнить данную VI, перенесем ее на компьютер.
Вариант 1 — мы можем вручную перетащить ее под компьютер и открыть через компьютер.
Вариант 2 — можем слева внизу на фронт панели на блок-диаграмме указать, нажав правую кнопку мыши, где выполняется эта VI. Например, My computer.
Арифметические блоки
Вариант с помощью арифметических блоков будет выглядеть следующим образом. В Numeric мы берем Subtract, это довольно простая формула. И с этого Subtract создаем еще один индикатор.
Добавление скорости
Воспользуемся уже готовым вычислением Way, которая и будет на данный момент нашей скоростью.

Однако в начале движения разница равна 1000. И этому же равна скорость, что не совсем корректно. Чтобы это исправить, воспользуемся ограничителями. Блоком In range and coerce. Возьмем из окна Quick drop, которое вызывается комбинацией клавиш Ctrl + Space. Введем название блока — In range and coerce.

Данный блок имеет 3 входа, где верхний — верхнее ограничение, то есть, число на выходе не может быть больше, чем данный ограничитель. Вход посередине — это наше значение, которое мы будем ограничивать. Нижний вход — ограничение снизу, то есть, наше число на выходе не будет меньше, чем ограничитель.

У блока два выхода: верхний Coerced X — ограниченное значение, которое мы обрабатываем, а нижний In range говорит о том, входит ли наше значение в тот диапазон, который мы указали. Воспользуемся этим блоком, чтобы не давать скорость больше, чем, условно, 100 единиц.
Создание Waveform chart
1. Нажимаем правой кнопкой мыши по передней панели.

2. В палитре Graph находим Waveform chart.

3. Задаем временной диапазон отображения значений от 0 по иксу до 1023. Затем амплитуду значений от –100 до 100.

4. Уберем на шкале While функцию Autoscale.

5. Поместим все это в цикл и поставим задержку в 10 мс.

6. Создадим условия остановки для нашего цикла и подключим на Waveform выход к Coerced X.
Анализ графика
Current Position 0, Requirement position тоже 0. Установим необходимую позицию в 1000. Соответственно, 1000 — 0 у нас равняется 1000, и скорость у нас сейчас равняется 100, потому что мы ее ограничили по верхнему лимиту. Во время приближения к итоговой точке, при достижении 100, Waveform chart будет изменяться.
Ускорение и замедление
Теперь нужно, чтобы наша скорость плавно разгонялась, а не сразу со скорости 100, т.к. это будет некорректно. Для этого мы воспользуемся таймером.

1. Создаем нашу программу.

2. Таймер находится в палитре Timing — Elapsed time.

3. Создадим контроль на Reset и индикатор на Elapsed time.
Тестирование
1. Elapsed time считает время со старта или с нажатия предыдущего Reset.

2. Сделаем линейное ускорение — умножим нашу скорость на время до 1 секунды. То есть за время от 0 до 1 наш условный робот будет разгоняться.

3. Чтобы не дать Elapsed time стать больше 1, поместим его в In range requires и ограничим в единицу. То есть, коэффициент умножения в единицу. Lower limit оставим 0.

4. Перемножим график скорости на Coerced с таймером. Multiply.

5. Подключим результат умножения на наш график.

6. Укажем необходимое расстояние, которого хотим достичь в Requirement position — 1000, и запустим нашу программу.
Итак, мы узнали, сколько нужно ехать до требуемой точки, в какую сторону нужно ехать. Также мы сделали плавное замедление и плавное ускорение, построили графики для наглядного представления результатов работы. Самое время проверить себя, выполнив несколько заданий.
Интерактивное задание
Тест
Для закрепления полученных знаний пройдите тест
Стартуем!
В графике Waveform Chart что находится снизу?
Дальше
Проверить
Узнать результат
Что нужно обязательно ставить после написании формулы в Formula Node?
Дальше
Проверить
Узнать результат
Линейное ускорение выполнено в зависимости от:
Дальше
Проверить
Узнать результат
К сожалению, вы ответили неправильно
Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Неплохо!
Но можно лучше. Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Отлично!
Вы отлично справились. Теперь можете ознакомиться с другими компетенциями
Пройти еще раз