Uncategorized

Работа с двигателями в симуляторе LabVIEW Robotics

В данной статье мы продолжим изучать симулятор роботов в LabVIEW и рассмотрим подробнее работу двигателей постоянного тока и инфракрасных датчиков расстояния.

Статья дополняется…
— Убрал точку останова из примера
— Пересохранил в LV18
— Упростил и добавил комментарии в User Code.vi
— Добавил схему пользовательской программы
— Добавил раздел про шаблон Конечный автомат

В качестве физического движка (англ. physics engine) в LabVIEW Robotics используется Open Dynamics Engine (ODE). На момент разработки компанией NI в 2011-2012 годах это был хороший выбор исходя из того, что он бесплатный, изначально разработывался для симуляции в режиме онлайн и имеет встроенную обработку столкновений объектов. ODE подтвердил свою работу в таких приложениях, как симуляция наземных машин, шагающих роботов и движушихся объектов в виртуальной реальности.

Установка примера

Для того, чтобы установить пример, скачайте и распакуйте архив во временную папку.

Примечание. Убедитесь, что пример был распакован так, чтобы в пути были только английские символы. Если папка с проектом содержит в пути символы отличные от англоязычных, то пример запустится с ошибкой или LabVIEW просто не откроет указанный вами проект.

Скопируйте и замените файлы в instr.lib, чтобы добавить существующую возможность считывать положение вала двигателя. Для этого скопируйте и замените файлы, содержащиеся в папке instr.lib_LV_19 по пути C:\Program Files (x86)\National Instruments\LabVIEW 2019\instr.lib, где C:\Program Files (x86)\National Instruments\LabVIEW 2019 — путь, по которому у вас установлена среда разработки LabVIEW.

Запуск примера

Откройте файл проекта Simulation Example 2.lvproj, который находится по пути The Simulation Example 2\Example 2.

В окне проекта вы увидите Simulated Robot Example 2.vi, Simulation SubVI.lvlib и User Code.vi. Simulated Robot Example 2.vi — это главная VI, которая запускает симулятор и выполняет программу пользователя в симуляторе. Simulation SubVI.lvlib — библиотека, разработанная специально для данной серии статей, которая позволяет взаимодействовать с двигателями и датчиками виртуального робота. User Code.vi — VI, в которой пользователь определяет поведение робота. Только данную VI необходимо изменять для выполнения задания. Изменение других VI не рекомендуется ввиду того, что могут внести неисправность в корректную работу симулятора.

Структура проекта примера

Откройте и запустите Simulated Robot Example 2.vi.

Содержимое блок-диаграммы Simulated Robot Example 2.vi

В Simulated Robot Example 2.vi выполняется главный код примера: запускается симуляция и выполняется пользовательская программа для виртуального робота. В ней выполняется следующее:

  1. Запускается симуляция
  2. Инициализируется программный интерфейс для взаимодействия с виртуальным роботом
  3. Считывается ссылка на индикатор сцены (будет использоваться в следующих примерах)
  4. Инициализируется программный интерфейс для работы с камерой
  5. Пользовательская программа, которая выполняется на виртуальном роботе
  6. Рассчитывается следующее состояние виртуального мира через 100 мс
  7. Закрывается интерфейс работы с виртуальным роботом
  8. Останавливается работа симулятора

Для того, чтобы изменить вид сцены в окне LabVIEW Robotics Environment Simulator возможно поворачивать угол обзора, приближать/отдалять или перемещать положение обзора следующим способом:

  • ЛКМ (левая клавиша мыши) — поворот обзора
  • Shift+ЛКМ — приближение/отдаление обзора
  • Ctrl+ЛКМ — пермещение точки обзора

При запуске Simulated Robot Example 2.vi симуляция запустится и появится окно симулятора с роботом, в котором на базе простейшей программы мобильный робот повернется примерно на 180 градусов.

Пользовательская программа User Code.vi

Для задания требуемого поведения робота необходимо изменять содержимое User Code.vi. В левой части программы считываются значения с датчиков: положение левого и правого двигателя. В центральной части программы обрабатываются полученные от датчиков данные и принимается решение о дальнейших действиях робота. В правой части программы выдаются управляющие команды на исполнительные устройства виртуального робота.

Общая структура пользовательской программы (внизу) и пример VI (вверху)

В части Получение информации необходимо опросить все датчики, преобразовать и провести предварительную обработку. Опрос датчика может включать в себя измерение напряжения в вольтах, которое выдает датчик. В процессе преобразование происходит конвертация из значения измеренной величины напряжения в вольтах в физическую величину расстояния в сантиметрах. Предварительная обработка может включать в себя применение фильтра низких частот, чтобы сгладить шумы в измерениях.

В рамках Принятие решения в одном из возможных состояний определяются управляющие команды, проверяется условие перехода в другое состояние и задается следующее состояние.

В процессе выполнения исполнения команд выполняется проверка поданных к выполнению команд, потому что может быть подана некорректная команда и её необходимо исправить или проигнорировать. Далее выполняется преобразование из управляющей команды, например, вращение по часовой стрелке с 50% мощностью в широтно-импульсный сигнал с 50% скважностью, который впоследствии будет выдан на цифровой выход в выдача команд.

Содержимое User Code.vi из примера статьи во время поворота (вверху) и остановки (внизу)

SubVI User Code.vi изначально написана так, чтобы робот развернулся примерно на 180 градусов. Это достигается тем, что двигателям подается команда для поворота робота до тех пор, пока один из двигатель не повернется более чем на угол 2 pi в радианах.

В примере User Code.vi при выполнении поворота робота содержится некоторая ошибка. Вы можете попробовать найти её и исправить.

Библиотека Simulation SubVIs.lvlib

Из библиотеки Simulation SubVIs.lvlib использовались следующие SubVIs:

  • Motor Left Read
  • Motor Right Read
  • Motor Left Write
  • Motor Right Write
Reset сбрасывает показания текущего положения
left motor ccw position (rad) — выдает текущее положение левого двигателя в радианах по направлению против часовой стрелки
Reset сбрасывает показания текущего положения
right motor ccw position (rad) — выдает текущее положение правого двигателя в радианах по направлению против часовой стрелки
left motor ccw velocity (rad/s) — задает желаемую скорость вращения левого двигателя в рад/с по направлению против часовой стрелки
right motor ccw velocity (rad/s) — задает желаемую скорость вращения правого двигателя в рад/с по направлению против часовой стрелки

Повернуться и доехать до стены

Попробуйте написать программу так, чтобы роботом повернулся на 180 градусов, затем проехал вперед и остановился в некотором расстоянии от стены, используя двигатели, датчики угла и инфракрасные датчики расстояния. Для этого вам понадобится понимание такой распространенной структуры программы, как конечный автомат и SubVI для работы с инфракрасными датчиками расстояния.

ForwardLeft Distance (m) — выдает значение, которое измерил инфракрасный датчик расстояния перед роботом со смещением налево
ForwardRight Distance (m) — выдает значение, которое измерил инфракрасный датчик расстояния перед роботом со смещением направо

Конечный автомат

Конечный автомат (state machine) — это общепринятая структура организации программы, которая позволит обеспечить необходимую модульность, предсказуемость и масштабируемость будущей программы.

Начало программы указывается окружностью и исходящей из неё стрелки. Каждый прямоугольный блок символизирует состояние, в котором может пребывать программа. Например, Движение вперед до препятствия. Стрелка обозначает переход из одного состояния в другое, а надпись над стрелкой означает условие, при котором переход между состояниями будет сделан. Пример, условия может быть Расстояние до препятствия < 30см. Конец программы обозначается окружностью с подходящей к нему стрелкой.

Пример машины состояний

Статья дополняется. Добавляются новые задания, следите за обновлениями.

Приложение

Ответы

  1. Проблема при запуске примера:
    Скачал пример, распаковал по адресу: D:\The Simulation Example 2
    Копирую папку из D:\The Simulation Example 2\The Simulation Example 2\instr.lib_LV_19 (Там одна папка с названием DC Motor Controller, её и беру)
    Закидываю её по адресу: D:\prog\Program Files (x86)\National Instruments\LabVIEW 2019\user.lib (В моей случае на диске С крутится только операционная система)
    Запускаю файл: D:\The Simulation Example 2\The Simulation Example 2\Example 2_LV_19\Simulation Example 2
    Наблюдаю вот это:

  2. Нужно в папку instr.lib скопировать DC Motor Controller, а не в папку user.lib.

  3. УПС!!! В-Внимательность! Спасибо!

  4. Добрый день, Кирилл!
    А как вы редактируете (добавляете) стены в симулятор?

Обсудите на talk.roboticsclub.ru

10 Далее Ответы

Участники обсуждения