Документация Engee
Notebook

Отладка робота-манипулятора по COM

В этом примере рассматривается отладка усовершенствованного робота-манипулятора ЛАРТ из Engee по COM-порту. Engee формирует сигналы - углы поворота сервоприводов манипулятора, а блок управления робота обрабатывает получаемые сигналы и контролирует положение сервоприводов. Связь с низкоуровневыми интерфейсами из Engee и возможность изменения параметров модели "на лету" позволяет определить в ходе моделирования границы регулирования и начальные положения сервоприводов.

Введение

Цель примера: отладить робота-манипулятор, а именно - отрегулировать и оптимизировать механическую и электрическую части, подготовить скетч для обработки сигналов из Engee, а также при помощи модели Engee и связи с внешним оборудованием определить начальные положения сервоприводов, а также границы регулирования их углов поворота.

Объект управления - трёхосевой робот-манипулятор ЛАРТ с блоком управления ЛАРТ R-5M, оснащён четырьмя сервоприводами: поворота коризны, наклона и выноса руки, захвата. Микроконтроллер - MEGA328P на плате Arduino Nano.

image.png

Для управления манипулятором удобно воспользоваться поддержкой внешнего оборудования в Engee, например, передачей данных по COM. Таким образом, Arduino достаточно обработать полученные из модели данные для формирования углов поворота осей.

Робот-манипулятор

Особенности сборки

При сборке механической части манипулятора были отрегулированы усилия шарниров, сервопривода sg90 были заменены на mg90s - при том же типоразмере и напряжении питания они обеспечивают больший крутящий момент. Для обеспечения стабильно питания сервоприводов гальванические элементы заменены на стабилизированный источник питания 5В. Питание микроконтроллера в примере осуществляется по USB от компьютера.

Сервопривода подключены к пинам блока управления и, соответственно, Arduino Nano следующим образом:

  • Поворот корзины - D3;

  • Наклон руки - D5;

  • Вынос руки - D6;

  • Захват - D9.

Скетч Arduino

Скетч, загружаемый в Arduino для работы с манипулятором - roboarm.ino. В нём подключается библиотека Servo, необходимая для удобной работы с сервоприводами, инициализируются привода и COM-порт, в цикле происходит получение данных по COM и установка положений сервоприводов. Ниже можно прочитать содержимое файла:

In [ ]:
имя_файла = ""roboarm/roboarm.ino" # @param {type:"string",placeholder:"roboarm/roboarm.ino"}
println(read(open(joinpath(@__DIR__, имя_файла)), String))
/*
Код для управления манипулятором.
Блок управления получает сигналы
по COM из Engee.
Сервоприводы подключенs к пинам
блока управления D3, D5, D6, D9 
 */

#include <Servo.h>
Servo srvio[4];

const int servpin[4] = { 3 , 5 , 6 , 9 };       // пины подключения сервоприводов
const int initpos[4] = { 70 , 90 , 160 , 80 };  // курс, наклон, вынос, захват

void setup() {
  Serial.begin(115200); // Устанавливаем сокрость обмена данными (дролжно совпадать со скоростью в модели Engee)

  for( int i = 0 ; i < 4 ; i++ ) // Инициализируем сервопривода
  {
    srvio[i].attach(servpin[i]);
    srvio[i].write(initpos[i]);
  }
}

void loop() // В цикле записываем положение сервоприводов по полученным из миодеи Engee значениям
{
  if (Serial.available()) {
      srvio[0].write(Serial.read());
        delayMicroseconds(100);
      srvio[1].write(Serial.read());
        delayMicroseconds(100);
      srvio[2].write(Serial.read());
        delayMicroseconds(100);
      srvio[3].write(Serial.read());
        delayMicroseconds(100);
  }

}

После сборки, подключения манипулятора, а также сборки и компиляции в контроллер скетча, можно перейти к работе с моделью Engee.

Модель примера Engee

В модели генерируются тестовые сигналы на управление углами сервоприводов по формуле:

$ Signal = Amp \cdot \sin \left( 2\pi\cdot Freq \cdot RTcorrection \cdot t \right) + Off, $

где $RTcorrection$ - коэффициент корректировки частоты сигнала, определяется эмпирически в процессе отладки.

Вектора амплитуд, частот и смещений в соответствующих блоках - параметры тестовых сигналов, которые могут быть изменены в процессе моделирования. Вектора максимальных и минимальных значений тестовых сигналов, их требуется определить эмпирически в процессе отладки. Кроме того, вектор смещений - это значения начальных условий.

Получаемые сигналы передаются по COM порту из Engee при помощи блока COM TX. На первый вход передаётся размер массива, вычисляемый блоком Width. На второй вход передаётся сам массив данных в формате UInt8. Подключение по COM устанавливается при помощи блока COM Setup. Скорость передачи данных - 115200 бод, как это определено и в скетче Arduino.

image.png

После этого можно перейти к подключению Engee к COM-порту. Процесс подключения подробно описан в примере.

Работа модели

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

com_roboarm_test_cropped_speed_ezgif_com_video_to_gif_converter.gif

В записи при помощи кодовой ячейки с маской и программного управления моделью параметры изменяются "на лету". Графический интерфейс для управления частотой изменения сигналов угла сервоприводов:

In [ ]:
    # @markdown **Частота поворота корзины:**  
f_1 = 0.2 # @param {type:"slider",min:0.00,max:1.0,step:0.01}
    # @markdown **Частота изменения наклона руки:**  
f_2 = 0.2 # @param {type:"slider",min:0.00,max:1.0,step:0.01}
    # @markdown **Частота изменения выноса руки:**  
f_3 = 0.2 # @param {type:"slider",min:0.00,max:1.0,step:0.01}
    # @markdown **Частота изменения захвата:**  
f_4 = 0.2 # @param {type:"slider",min:0.00,max:1.0,step:0.01}

engee.set_param!("roboarm_test/Частоты", "Value"=>"[$Float64(f_1),$Float64(f_2),$Float64(f_3),$Float64(f_4)]")
engee.save(engee.gcm(), joinpath(@__DIR__, "roboarm_test.engee"); force = true);

Процесс отладки

В ходе отладки необходимо определить:

  • максимальные и минимальные величины углов поворота сервоприводов,

  • начальные значений углов сервоприводов.

Для этого необходимо:

  1. Вектор значений частот тестовых сигналов определить значением [0.0, 0.0, 0.0, 0.0].

  2. Постепенно менять значения каждого элемента вектора смещений тестовых сигналов для отлаживаемой оси вращения.

  3. Зафиксировать вектора максимальных и минимальных значений углов поворота по механическим ограничениям манипулятора.

  4. Зафиксировать вектор смещений, установив желаемое начальное положение сочленений манипулятора.

Заключение

В этом примере мы отладили модель Engee для управления роботом-манипулятором ЛАРТ, при помощи связи с внешним оборудованием.

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

Блоки, использованные в примере