Projeto extra da cadeira de Introdução à Programação do CIn-UFPE utilizando o simulador de robôs CoppeliaSim.
O projeto consiste em desenvolver um programa na linguagem C++ que seja capaz de ler um arquivo de texto, que contém um número arbitrário de votos, e simular uma votação na urna eletrônica com o braço robótico Niryo One.
- Conexão com o simulador
- Leitura do arquivo de texto
- Movimentação do braço
Para realizar a conexão com o simulador usamos uma API remota que já está disponível dentro do próprio CoppeliaSim.
Através dos headers <stdio.h> e <stdlib.h> lemos o arquivo "votos.txt" e armazenamos os votos lidos em um vetor dinâmico de strings.
Usamos cinemática inversa para determinar uma possível combinação de ângulos de junta que possibilita que a extremidade do braço robótico atinja o ponto
$$ \tag{1.1} \Large tg(\beta) = \frac{x_t - x_b}{y_t - y_b} \implies \beta = arctg(\frac{x_t - x_b}{y_t - y_b}) $$
Seja
$$ \tag{1.2} \Large tg(\phi) = \frac{z_t - z_b}{\sqrt{(x_t - x_b)^2 + (y_t - y_b})^2} \implies \phi = arctg(\frac{z_t - z_b}{\sqrt{(x_t - x_b)^2 + (y_t - y_b})^2}) $$
$$ \tag{1.3} \Large (l_2)^2 = d^2 + (l_1)^2 - 2dl_1cos(\theta) \implies \theta = arccos(\frac{d^2 + (l_1)^2 - (l_2)^2}{2dl_1}) $$
$$ \tag{1.4} \Large (l_1)^2 = d^2 + (l_2)^2 - 2dl_2cos(\gamma) \implies \gamma = arccos(\frac{d^2 + (l_2)^2 - (l_1)^2}{2dl_2}) $$
Por fim, para determinar
$$ \tag{1.5} \Large \alpha_1 + \theta + \phi = \frac{\pi}{2} \implies \alpha_1 = \frac{\pi}{2} - (\theta + \phi) $$
$$ \tag{1.6} \Large (\frac{\pi}{2} + \alpha_2) + \theta + \gamma = \pi \implies \alpha_2 = \frac{\pi}{2} - (\theta + \gamma) $$