Este veículo de tele presença tem como objetivo possibilitar uma pessoa se locomover e interagir virtualmente com algum ambiente via áudio e vídeo. O veículo utiliza uma Raspberry Pi 4 Model B como um cliente de vídeo conferência pelo próprio navegador nativo da Raspbian(Sistema Operacional da Raspberry Pi), bastando digitar uma URL como por exemplo: https://meet.jit.si/ e controlar o veículo por um aplicativo deste repositório.
- Ligue a chave geral na base do veículo e aguarde carregar o sistema, assim que aparecer a interface gráfica no display 7", conectar em uma rede WiFi, abrir o navegador e entrar a URL de algum servidor de vídeo conferência, que no caso foi utilizado o Jitsi.
- Neste ponto o veículo já pegou o IP e automaticamente já atualiza no no-ip.com o IP corrente recebido. Obs.: No caso do IP recebido for privado, é atualizado também o DDNS mas neste caso o veículo só é controlado na rede local ou através de uma VPN.
- Rodar o telecontrol.py no micro qual ira controlar o veículo e pronto! Agora pode se locomover com o veículode tele-presença e sair conversando com as pessoas que estão no ambiente.
- Pode usar a tela da aplicação de controle com o mouse ou usar um Joystick PS2 comum.
- Obs.: No diretório ./Dist deste respositório tem a aplicação já compilada, é só colocar em um diretório em sua máquina Windows juntamente com os arquivos control.ico e config.ini, o arquivo config.ini somente tem duas linhas com o parâmetro ip=auto ou ip=xxx.xxx.xxx.xxx e host=caso_ip_igual_a_auto_colocar_nome_do_host_que_escolheu_no_no-ip.com, a aplicação ira pegar o IP do veículo no site no-ip.com ou caso coloque o IP, será utilizado o especificado.
- 1 - Display 7" 1024x600 touch
- 1 - Raspberry PI 4 B
- 1 - WebCam Logitech C920
- 1 - Caixa de som
- 1 - Bateria 12V 7Ah chumbo ácido
- 1 - Adaptador USB TP-Link WiFi com antena de 4dB, não foi utilizado o WiFi da própria Raspberry em função do baixo ganho de recepção.
- 1 - Carregador de baterias
- 1 - Conversor DC-DC
- 1 - Display O'Led I2C 128x64
- 1 - Cartão Micro-SD 8GB Classe 10
- 1 - Teclado sem fio
- 1 - Joystick PS2
Utilizado imagem - (2020-02-13-raspbian-buster) e gravar em um Micro-SD
Utizado um Adaptador USB WiFi com antena externa de 4dB, aumentado o ganho com relação a On-bord da Raspberry PI 4 B qual foi desativada e configurarada a externa como a seguir:
sudo apt-get update
sudo apt-get upgrade
/// Instala biblioteca de comunicação RS232
sudo pip install pyserial
sudo vi /boot/config.txt
dtoverlay=pi3-disable-wifi
sudo vi /etc/modprobe.d/raspi-blacklist.conf
#wifi
blacklist brcmfmac
blacklist brcmutil
sudo vi interfaces
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
iface eth0 inet manual
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
sudo raspi-config
Opção 5 - Interfacing Options / P2 SSH - Enable / P5 I2C - Enable / P6 Serial - Disable Shell and Enable Serial
/// Dando permissão ao usuário "pi" para acessar a serial built-in
sudo usermod -a -G dialout $(whoami)
sudo chmod ug+rw /dev/ttyS0
/// Para testes use a linha abaixo
minicom -b 9600 -o -D /dev/serial0
Esta aplicação é pra ser executada na máquina que irá controlar o Veículo de tele-presença, recebe comandos do mouse clicando diretamente na tela da aplicação ou usando um controle PS2, como da foto acima, e envia para o Veículo via protocolo UDP.
Utiizando o Pyinstaller:
pip install pywin32
pyinstaller --noconsole --onefile --icon=control.ico telecontrol.py
Este já roda diretamente na Raspberry como serviço, primeiramente coloque o teleserver.py no /home/pi e veja procedimento abaixo para coloca-lo como serviço:
cd /etc/systemd/system
$sudo vi teleserver.service
[Unit]
Description=Recebe comandos UDP do client telecontrol.py
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/python /home/pi/teleserver.py
Restart=always
# Linha abaixo determina 5 segundos para o serviço reiniciar novamente caso ele seja interrompido.
RestartSec=5s
[Install]
WantedBy=multi-user.target
$sudo chmod ugo+x teleserver.service
$sudo systemctl daemon-reload
$sudo systemctl enable teleserver.service
$sudo systemctl start teleserver
$sudo systemctl status teleserver
Mais detalhes sobre o systemd.service: https://www.freedesktop.org/software/systemd/man/systemd.service.html
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
cd Adafruit_Python_SSD1306
sudo python setup.py install
pip install RPi.GPIO
pip install Adafruit-BBIO
Conversor de nível, utilizado para compatibilizar o nível lógico da Raspberry Pi de 3.3V vs Arduino que utiliza 5V
Adicionar no arquivo /etc/rc.local a linha abaixo, para executar o /home/pi/monitor.py que é responsável para mostrar alguns dados no display.
sudo vi /etc/rc.local
sleep 10 && sudo -H -u pi python /home/pi/monitor.py & &
Obs.: Esta linha fica acima da última linha do arquivo /etc/rc.local que tem o comando "exit 0"
Utilize o site abaixo e faça o seu cadastro:
www.no-ip.com
Adicione o host abaixo:
telepresenca.zapto.org (Obs.: Use outro nome, este é só um exemplo e estou utilizando, rs)
Instale o cliente que atualiza o IP no no-ip.com com os passos deste link
https://www.noip.com/support/knowledgebase/install-ip-duc-onto-raspberry-pi/
Resumo dos passos caso não queira utilizar o link acima:
mkdir /home/pi/noip
cd /home/pi/noip
wget https://www.noip.com/client/linux/noip-duc-linux.tar.gz
tar vzxf noip-duc-linux.tar.gz
cd noip-2.1.9-1 (ou versão atualizada)
sudo make
sudo make install
Adicionar atualização de 5 em 5 minutos
crontab -e
*/5 * * * * sudo noip2 -i `hostname -I | cut -d' ' -f1`
Adicionar no /etc/rc.local:
noip2 -i `hostname -I | cut -d' ' -f1`