Управление роботом-манипулятором

Материал из Поле цифровой дидактики
Версия от 21:47, 22 декабря 2022; Madara (обсуждение | вклад) (Новая страница: «Удаленное управление включает в себя два режима работы: <br> 1) сервер (компьютер, подключенный к управляющему устройству); <br> 2) при нажатии на кнопку «Сервер» программа переходит в режим прослушивания порта для ожидания подключения. <br> Клиент (удаленн...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

Удаленное управление включает в себя два режима работы:
1) сервер (компьютер, подключенный к управляющему устройству);
2) при нажатии на кнопку «Сервер» программа переходит в режим прослушивания порта для ожидания подключения.


Клиент (удаленный компьютер) Для подключения в режиме клиента в текстовое поле вводится адрес сервера. При отсутствии удаленного подключения на форме отображается надпись «Локальное управление» без выделения, при удаленном – «Подключен в режиме Сервер» и «Подключен в режиме Клиент» соответственно. На других формах также будет отображаться текущее состояние.


При подключении в режиме сервера управляющие кнопки будут неактивными для исключения возможности вмешательства в процесс. Наблюдение за движением робота происходит с помощью USB-камеры, что позволяет очень точно позиционировать схват манипулятора.

Загрузка видео с камеры состоит из двух частей.
1 Установка параметров изображения

Public Touchless As New TouchlessLib.TouchlessMgr
Public WebkaAs TouchlessLib.Camera = Touchless.Cameras.Item(0) 
Dim command As String
Delegate Sub SetTextCallback(ByVal [text] AsString) 
Private Sub Form1_Load(sender AsSystem.Object, e AsSystem.EventArgs) 
Handles MyBase.Load 
If Touchless.Cameras.Count <> 0 Then
 Webka = Touchless.Cameras.Item(0) 
 Touchless.CurrentCamera = Webka 
 Touchless.CurrentCamera.CaptureHeight = 480 
 Touchless.CurrentCamera.CaptureWidth = 640 
End If


2 Получение изображения

Private Sub Timer1_Tick(sender AsObject, e AsEventArgs) Handles Timer1.Tick 
PictureBox1.Image = Touchless.CurrentCamera.GetCurrentImage

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

Ниже приведены ключевые слова, используемые при формировании управляющей программы: "BEGIN" – начало программы "FINISH"– конец программы "DO:" – начало подпрограммы "END_DO"– конец подпрограммы Приведен пример программного кода, осуществляющий автоматическое управление:

Dim q As String 
Dim i, b, k, r, t, m As Integer 
b = RichTextBox2.GetLineFromCharIndex(RichTextBox2.Find("BEGIN")) 
k = RichTextBox2.GetLineFromCharIndex(RichTextBox2.Find("FINISH")) 
Fori = b + 1 To k - 1 
'начало
If (Microsoft.VisualBasic.Left(RichTextBox2.Lines(i), 3) = "DO:") Then 
r = CInt(Microsoft.VisualBasic.Right(RichTextBox2.Lines(i), 
Len(RichTextBox2.Lines(i)) - 3)) 
For t = 0 To r - 1 
m = 0 
DoWhileRichTextBox2.Lines(i + m) <>"END_DO"
m += 1 
IfRichTextBox2.Lines(i + m) <>"END_DO"Then 
q = RichTextBox2.Lines(i + m) 
SerialPort1.Write(q &vbCr) 
SleepVB(20) 
EndIf 
Loop 
Next 
i += m + 1

Цикловое управление требует задержки на выполнение команды (в программе задержка установлена в размере 20 с). Задержка осуществлена отдельной функцией. Для сокращения времени ожидания в функции паузы осуществляется проверка конца операции. После окончания выполнения каждой операции в специальное текстовое поле выводится текст, содержащий ответ порта (положение манипулятора и т. д.). Ключевое слово, определяющее завершение операции

"READYR:", используется для окончания функции паузы: 
SubSleepVB(Seconds) 
Dim Start AsDouble
Start = Microsoft.VisualBasic.DateAndTime.Timer 
DoWhileMicrosoft.VisualBasic.DateAndTime.Timer< 
Start + Seconds 
Application.DoEvents() 
IfRichTextBox1.Text.ToLower.Contains("READYR:") 
Then
 RichTextBox1.Text = ""
Exit Do
EndIf
Loop
EndSub
Пример кода управляющей программы: 
«BEGIN ' начало программы 
HOME  переход в начальное положение
M10  схват разжать 
DO:3 ' начало цикла. повторить 3 раза
G01X00000Y00000Z00500F00000 
G01X00000Y00000Z00000F00000 
END_DO 'Конец цикла повторов
M11  схват сжать
FINISH ' конец программы»