🔧 Funções da CLI
🔍 Introdução
O código contém diversas funções auxiliares que garantem o funcionamento correto da coleta de medicamentos. Essas funções controlam desde a movimentação do robô até o acionamento da sucção para pegar e entregar os medicamentos corretamente. Neste documento, detalharemos cada uma dessas funções e seu papel no sistema.
⚙️ check_suction()
📌 O que é?
Esta função verifica se a sucção deve ser ativada ou desativada com base nos dados da posição.
🛠️ Como funciona?
A função recebe como argumento um objeto Position e verifica se a chave suction está ativada. Se estiver ativada, a ferramenta de sucção do robô é ligada; caso contrário, ela é desligada.
💻 Código-fonte:
def check_suction(
position: Annotated[Position, typer.Argument(help="Position data to check if suction should be enabled or disabled.")]
):
if (position.get("suction")):
dobot.enable_tool(100)
else:
dobot.disable_tool(100)
⚙️ execute_movement()
📌 O que é?
A função responsável por mover o robô para uma posição específica.
🛠️ Como funciona?
A função recebe um objeto Position e um valor opcional de altura adicional. Ela carrega os dados da posição, ajusta a coordenada z caso necessário e executa o movimento do robô. Dependendo do tipo de movimento indicado na posição (move_l ou move_j), o robô usa um movimento linear ou de junta.
💻 Código-fonte:
def execute_movement(
position: Annotated[Position, typer.Argument(help="Position data to determine and execute the appropriate movement.")],
add_height: Annotated[int, typer.Argument(help="Additional height to be added to Z if it is the last position of the delivery.")] = 0
):
spinner = yaspin(text=f"Moving to {position}...")
current_position = Position()
current_position.load_from_dict(position)
current_position.z += add_height
if position.get("move") == "move_l":
dobot.move_l_to(current_position, wait=True)
else:
dobot.move_j_to(current_position, wait=True)
spinner.stop()
⚙️ deliver()
📌 O que é?
A função responsável por entregar os medicamentos coletados.
🛠️ Como funciona?
A entrega segue um ciclo de posições pré-configuradas, identificadas como delivery_1, delivery_2, etc. A função percorre essas posições, ajustando a altura da entrega a cada seis medicamentos para evitar colisões.
💻 Código-fonte:
def deliver():
global deliver_value
global add_height
if deliver_value > 6:
deliver_value = 1
add_height += 20
for index, position in enumerate(data[f"delivery_{deliver_value}"]):
check_suction(position)
if index != 1:
execute_movement(position)
else:
execute_movement(position, add_height)
deliver_value += 1
⚙️ take_medicine()
📌 O que é?
A função responsável por coletar medicamentos de um bin específico.
🛠️ Como funciona?
A função recebe o nome do bin como argumento e percorre as posições associadas a ele no arquivo de configuração, ativando a sucção e movendo o robô conforme necessário.