Engee 文档
Notebook

通过COM调试机器人手臂

此示例讨论通过COM端口从Engee调试高级LART机器人手臂。 Engee产生信号-机械手伺服系统的旋转角度,机器人的控制单元处理接收到的信号并控制伺服系统的位置。 与来自Engee的低级接口的通信以及动态更改模型参数的能力允许您在建模过程中确定伺服系统的控制边界和初始位置。

导言

本例的目的是对机械臂进行调试,即调整和优化机械和电气部件,编写处理工程师信号的草图,并利用工程师模型和与外部设备的通信来确定伺服系统的初始位置以及调整其旋转角度的限制。

控制对象是带有LART R-5m控制单元的三轴LART机器人手臂,配备四个伺服系统:转动表冠,倾斜和抬起手臂以及抓取。 微控制器是Arduino Nano板上的MEGA328P。

image.png

为了控制机械手,在Engee中使用外部设备的支持很方便,例如,通过COM进行数据传输。 因此,Arduino处理从模型获得的数据以形成轴的旋转角度就足够了。

机器人手臂

装配特征

在组装机械手的机械部分时,调整了铰链力,sg90伺服系统被mg90s取代-具有相同的尺寸和电源电压,它们提供更多的扭矩。 为了确保伺服系统的电源稳定,galvan电池已被稳定的5v电源取代。 在示例中,微控制器通过计算机的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模型。

工程师示例模型

模型根据公式生成用于控制舵机角度的测试信号:

哪里 -信号频率的校正因子在调试过程中凭经验确定。

相应块中的振幅、频率和偏移量的向量是在仿真期间可以改变的测试信号的参数。 测试信号的最大值和最小值的矢量必须在调试过程中凭经验确定。 另外,位移矢量是初始条件的值。

接收到的信号通过Com端口从Engee使用[COM TX]块(https://engee.com/helpcenter/stable/ru-en/hardware-com/com-tx.html )。 宽度块计算的数组的大小传递给第一个输入。 数据阵列本身以格式传输到第二输入 UInt8. COM连接是使用[COM Setup]块建立的(https://engee.com/helpcenter/stable/ru-en/hardware-com/com-setup.html )。 数据传输速率为115200波特,如Arduino草图中所定义。

image.png

之后,您可以将Engee连接到COM端口。 激活过程详细描述于примере.

模型的工作

让我们打开并运行示例模型。 机械手必须连接到计算机和电压源,草图必须上传到控制器。 因此,我们应该观察其关节位置的变化。 机械手控制如下面的记录所示。

COM_roboarm_test_cropped_speed-ezgif.com-video-to-gif-converter.gif

在使用带有掩码和[程序控制]的代码单元进行记录时(https://engee.com/helpcenter/stable/ru-en/modeling/programmatic-modeling-example.html )参数由模型在飞行中改变。 用于控制伺服角度信号变化频率的图形界面:

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模型,通过与外部设备通信来控制LART机器人手臂。

在工作过程中,可以确定伺服系统旋转角度的最大值和最小值以及它们的初始值。 接下来,您可以继续开发控制算法,该算法实现了操纵器的自定义操作场景。