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

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:
# Criando o ambiente virtualpython -m venv venv# Ativando o ambiente virtual - aqui comando para Windows\venv\Scripts\activate# Instalando o pydobotpip install pydobot# Para construirmos nossa CLI com mais interatividadepip install inquirer# Criando um arquivo com os requisitospip freeze > requirements.txtLegal, agora estamos com nossa aplicação pronta para conectar ao robô!
# Traz a ferramenta serial para apresentar quais portas estão disponíveisfrom serial.tools import list_portsimport inquirerimport pydobot
# Listas as portas seriais disponíveisavailable_ports = list_ports.comports()
# Pede para o usuário escolher uma das portas disponíveisporta_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.
# Traz a ferramenta serial para apresentar quais portas estão disponíveisfrom serial.tools import list_portsimport inquirerimport pydobot
# Listas as portas seriais disponíveisavailable_ports = list_ports.comports()
# Pede para o usuário escolher uma das portas disponíveisporta_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.
# Traz a ferramenta serial para apresentar quais portas estão disponíveisfrom serial.tools import list_portsimport inquirerimport pydobot
# Listas as portas seriais disponíveisavailable_ports = list_ports.comports()
# Pede para o usuário escolher uma das portas disponíveisporta_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.
# Traz a ferramenta serial para apresentar quais portas estão disponíveisfrom serial.tools import list_portsimport inquirerimport pydobot
# Listas as portas seriais disponíveisavailable_ports = list_ports.comports()
# Pede para o usuário escolher uma das portas disponíveisporta_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.
# Traz a ferramenta serial para apresentar quais portas estão disponíveisfrom serial.tools import list_portsimport inquirerimport pydobot
# Listas as portas seriais disponíveisavailable_ports = list_ports.comports()
# Pede para o usuário escolher uma das portas disponíveisporta_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çãorobo.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çãorobo.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 ✌️🦾🤖.