Skip to content

Dobot

Pessoal esse material traz um pouco da utilização do Robô Magician Dobot Lite com sua interface em Python. Não necessariamente sua interface, pois utilizamos aqui uma biblioteca de terceiros, mas com o mesmo princípio 🤖!

Demanda do Robô para Continuar a Desenvolver

Atenção para necessidade do robô

Pessoal a partir daqui os códigos pode ser escritos, mas façam a validação deles utilizando o robô.

A partir deste momento vamos avaliar algumas formas de realizar a comunicação com o robô. É possível realizar a comunicação com o robô utilizando o software DobotStudio, mas também é possível realizar a comunicação com o robô utilizando a biblioteca pydobot. Vamos avaliar como podemos realizar a comunicação com o robô utilizando a biblioteca pydobot.

Primeiro vamos adicionar a biblioteca pydobot no nosso ambiente virtual e depois vamos atualizar as dependências do nosso projeto. Para isso, vamos executar o seguinte comando:

Terminal window
# Criando o ambiente virtual
python -m venv venv
# Ativando o ambiente virtual - aqui comando para Windows
\venv\Scripts\activate
# Instalando o pydobot
pip install pydobot
# Para construirmos nossa CLI com mais interatividade
pip install inquirer
# Criando um arquivo com os requisitos
pip freeze > requirements.txt

Legal, agora estamos com nossa aplicação pronta para conectar ao robô!

robo.py
# Traz a ferramenta serial para apresentar quais portas estão disponíveis
from serial.tools import list_ports
import inquirer
import pydobot
# Listas as portas seriais disponíveis
available_ports = list_ports.comports()
# Pede para o usuário escolher uma das portas disponíveis
porta_escolhida = inquirer.prompt([
inquirer.List("porta", message="Escolha a porta serial", choices=[x.device for x in available_ports])
])["porta"]
print('Porta escolhida:', porta_escolhida)

O que aconteceu neste código? Nós utilizamos o PySerial, dependência do pyDobot - já vem junto dele quando instalamos a biblioteca para listas as portas seriais disponíveis no nosso sistema. Aqui o inquirer é utilizado para trazer uma interface mais amigável com as opções do terminal. Vamos efetivamente colocar nosso robô se comunicando com o programa.

ATENÇÃO: Acho importante lembrar, é necessário que o robô esteja ligado e conectado ao computador aqui.

robo.py
# Traz a ferramenta serial para apresentar quais portas estão disponíveis
from serial.tools import list_ports
import inquirer
import pydobot
# Listas as portas seriais disponíveis
available_ports = list_ports.comports()
# Pede para o usuário escolher uma das portas disponíveis
porta_escolhida = inquirer.prompt([
inquirer.List("porta", message="Escolha a porta serial", choices=[x.device for x in available_ports])
])["porta"]
# Cria uma instância do robô
robo = pydobot.Dobot(port=porta_escolhida, verbose=False)
# Vamos adicionar nossa lógica aqui!
# Fecha a conexão com o robô
robo.close()

O que aconteceu aqui foi utilizar a porta escolhida para realizar a comunicação com o robô. O programa até o momento não faz nenhuma ação diferente de abrir e fechar a conexão com o robô. Mas isso é importante para que possamos saber que a comunicação com o robô está funcionando. O parâmetro verbose é utilizado para que possamos ver as mensagens que estão sendo trocadas entre o programa e o robô. Isso é importante para que possamos saber se a comunicação com o robô está funcionando.

Agora vamos pegar a posição atual do robô. Vamos alterar o arquivo robo.py.

robo.py
# Traz a ferramenta serial para apresentar quais portas estão disponíveis
from serial.tools import list_ports
import inquirer
import pydobot
# Listas as portas seriais disponíveis
available_ports = list_ports.comports()
# Pede para o usuário escolher uma das portas disponíveis
porta_escolhida = inquirer.prompt([
inquirer.List("porta", message="Escolha a porta serial", choices=[x.device for x in available_ports])
])["porta"]
# Cria uma instância do robô
robo = pydobot.Dobot(port=porta_escolhida, verbose=False)
# Pega a posição atual do robô
posicao_atual = robo.pose()
print(f"Posição atual: {posicao_atual}")
# Fecha a conexão com o robô
robo.close()

A posição atual do robô é uma tupla com as informações de:

  • x: posição em x em relação a base do robô;
  • y: posição em y em relação a base do robô;
  • z: posição em z em relação a base do robô;
  • r: rotação da ferramenta do robô;
  • j1: rotação da junta j1 do robô;
  • j2: rotação da junta j2 do robô;
  • j3: rotação da junta j3 do robô;
  • j4: rotação da junta j4 do robô.

Agora vamos trabalhar na movimentação do robô. Sem definirmos aceleração e velocidade, o robô vai se mover com os parâmetros previamente configurados. Vamos alterar o arquivo robo.py.

robo.py
# Traz a ferramenta serial para apresentar quais portas estão disponíveis
from serial.tools import list_ports
import inquirer
import pydobot
# Listas as portas seriais disponíveis
available_ports = list_ports.comports()
# Pede para o usuário escolher uma das portas disponíveis
porta_escolhida = inquirer.prompt([
inquirer.List("porta", message="Escolha a porta serial", choices=[x.device for x in available_ports])
])["porta"]
# Cria uma instância do robô
robo = pydobot.Dobot(port=porta_escolhida, verbose=False)
# Define a velocidade e a aceleracao do robô
robo.speed(30, 30)
# Move o robô para a posição (200, 0, 0)
robo.move_to(200, 0, 0, 0, wait=True)
# Move o robô para a posição (200, 200, 0)
robo.move_to(200, 200, 0, 0, wait=True)
# Move o robô para a posição (0, 200, 0)
robo.move_to(0, 200, 0, 0, wait=True)
# Pega a posição atual do robô
posicao_atual = robo.pose()
print(f"Posição atual: {posicao_atual}")
# Fecha a conexão com o robô
robo.close()

O método move_to move o robô para a posição desejada. O parâmetro wait é utilizado para que o programa espere o robô chegar na posição desejada antes de continuar a execução. Isso é importante para que possamos saber que o robô chegou na posição desejada antes de continuar a execução do programa.

Agora vamos adicionar a funcionalidade de pegar e soltar objetos. Vamos alterar o arquivo robo.py.

robo.py
# Traz a ferramenta serial para apresentar quais portas estão disponíveis
from serial.tools import list_ports
import inquirer
import pydobot
# Listas as portas seriais disponíveis
available_ports = list_ports.comports()
# Pede para o usuário escolher uma das portas disponíveis
porta_escolhida = inquirer.prompt([
inquirer.List("porta", message="Escolha a porta serial", choices=[x.device for x in available_ports])
])["porta"]
# Cria uma instância do robô
robo = pydobot.Dobot(port=porta_escolhida, verbose=False)
# Define a velocidade e a aceleracao do robô
robo.speed(30, 30)
# Move o robô para a posição (200, 0, 0)
robo.move_to(200, 0, 0, 0, wait=True)
# Inicializa o efetuador do robô
robo.suck(True)
# Adiciona um delay para o robô efetuar a operação
robo.wait(200)
# Move o robô para a posição (200, 200, 0)
robo.move_to(200, 200, 0, 0, wait=True)
# Move o robô para a posição (0, 200, 0)
robo.move_to(0, 200, 0, 0, wait=True)
# Inicializa o efetuador do robô
robo.suck(False)
# Adiciona um delay para o robô efetuar a operação
robo.wait(200)
# Pega a posição atual do robô
posicao_atual = robo.pose()
print(f"Posição atual: {posicao_atual}")
# Fecha a conexão com o robô
robo.close()

Agora estamos com os elementos principais para construir nossa CLI e comunicar com o robô. Sugiro fortemente continuar implementando mais funcionalidades para o sistema, como carregar lista de pontos, gravar pontos atuais e o que mais sua imaginação trouxer ✌️🦾🤖.