Laboratory of Statistical Signal Processing & Inverse Problems

Blog

[Tutorial] Lendo orientação espacial do celular (Android)

O tutorial a seguir ensina a fazer isso:

Basicamente, trata-se de acessar as informações de orientação espacial do celular a partir do computador. Para tanto, utilizamos um emulador de terminal Linux para Android chamado Termux, e rodamos um pequeno script Python através dele. Esse script acessa o sensor inercial do celular usando o Termux API, e disponibiliza a orientação espacial atualizada através de um mini servidor web implementado com o pacote Flask. Do lado do PC, fizemos como exemplo um script que fica continuamente acessando a informação do celular por HTTP, e posiciona um objeto 3D feito com o visualizador 3D VPython. O diagrama abaixo ilustra a arquitetura da nossa implementação.

Siga os passos a seguir e nos avise caso algum passo não esteja funcionando bem.

Instalar o emulador de terminal Termux

  1. Instale o f-droid através da apk disponível no site https://f-droid.org/en/
  2. Use o f-droid para instalar o Termux
  3. Use o f-droid para instalar o Termux API 
  4. Abra o termux e rode o comando
    pkg install termux-api
  5. Ainda no termux, verifique se o acesso aos dados de rotação está funcionando, rodando o comando
    termux-sensor -s “Rotation Vector” -n 30 -d 10
  6. Atualize o Termux com o comando
    pkg upgrade

Habilitar o acesso por SSH no Termux

Esta etapa é opcional, mas permite acesso ao terminal do Termux através de um PC, o que facilita muito as coisas. Adaptado de https://wiki.termux.com/wiki/Remote_Access

  1. Instale o OpenSSH, rodando o comando
    pkg install openssh
  2. Inicie o servidor SSH rodando o comando
    sshd
  3. Certifique-se de que o Termux está atualizando, rodando o comando
    pkg upgrade
  4. Crie um password (senão, não funciona), rodando o comando
    passwd

Instalar o cliente OpenSSH no Windows 

Esta etapa é opcional, mas permite acesso ao terminal do Termux através de um PC, o que facilita muito as coisas.

  1. Clique com o botão direito do mouse no botão Windows (Iniciar)
  2. Clique em Apps e Recursos
  3. Clique em Recursos Opcionais
  4. Verifique se, entre os recursos instalados, encontra-se o Cliente OpenSSH
  5. Se o Cliente OpenSSH não estiver instalado:
    1. Clique em + Adicionar um Recurso
    2. Procure pelo recurso Cliente OpenSSH, selecione-o e intale-o

Autenticar o acesso SSH a partir do Windows

Esta etapa é opcional, mas permite acesso ao terminal do Termux através de um PC, o que facilita muito as coisas. Adaptado de https://www.chrisjhart.com/Windows-10-ssh-copy-id/

  1. Certifique -se de que o servidor SSHe esteja ativo no Termux, simplesmente rodando o comando sshd 
  2. Certifique-se que o PC e o celular estejam na mesma rede Wi-Fi
  3. Verifique qual é o IP do celular, rodando no Termux o comando
    ifconfig
  4. Abra o Windows PowerShell
  5. No Windows PowerShell, crie uma chave SSH rodando o comando
    ssh-keygen
    1. Será solicitado o nome do arquivo. Apenas tecle Enter.
  6. Ainda no Windows PowerShell, envie para o celular a chave criada, rodando o comando
    type $env:USERPROFILE\.ssh\id_rsa.pub | ssh -p 8022 IP_DO_SEU_CELULAR “cat >> .ssh/authorized_keys”
    1. Substitua IP_DO_SEU_CELULAR pelo IP encontrado através do ifconfig
  7. Teste o acesso remoto por SSH rodando no PowerShell o comando
    ssh -p 8022 IP_DO_SEU_CELULAR
    1. Nas próximas vezes, para fazer o acesso remoto, você executará somente esta última etapa. Caso receba a mensagem “connection refused”, execute novamente o comando sshd no Termux para ligar o servidor SSH
  8. Agora você pode executar todos os próximos passos a partir de um PC

Instalar o python no Termux

  • Abra o termux
  • Rode o comando pkg install python

Instalar os pacotes python necessários no Termux

Instale o flask (servidor web):

  1. Rode os seguintes comandos:
    python3 -m pip install –upgrade pip
    pip install flask

Instalar o ftpd (servidor FTP) no Termux

O acesso FTP serve para enviar os arquivos python para o celular e para acessar os dados gerados pelos programas. Adaptado de https://wiki.termux.com/wiki/Remote_Access

  1. Instale o termux-services, rodando o comando
    pkg install busybox termux-services
  2. Rode o comando
    source $PREFIX/etc/profile.d/start-services.sh
  3. Reinicialize a sessão
    1. Saia do Termux, rodando o comando
      exit
    2. Abra novamente o Termux
  4. Habilite o ftpd, rodando os seguintes comandos:
    sv-enable ftpd
    sv up ftpd

Instalar o FileZilla (cliente FTP) no Windows

  1. Instale o FileZilla: https://filezilla-project.org/
  2. No FileZilla, conecte ao IP do seu celular pela porta 8021
  3. Envie algum script python para o celular e rode a partir do Termux

Exemplo: disponibilizando quaternion via servidor web

O exemplo a seguir realiza a disponibilização em tempo real do quaternion de orientação do celular através do servidor web Flask.

  1. Envie o script quaternion_server.py para o celular através de FTP
  2. Deixe o Termux ativo na tela do celular. Isso é necessário para que o script consiga acessar os sensores através do Termux API. Você pode acessar o console por SSH, mas uma instância do console deve estar aberta na tela do celular, e a tela deve estar desbloqueada.
  3. Rode o script, executando seguinte comando
    python quaternion_server.py 
  4. A partir de um navegador web, acesse o endereço
    http://IP_DO_SEU_CELULAR:5000/vector
    e veja o valor atual do quaternion no navegador
  5. Rode no PC o script quaternion_client.py que usa requisições HTTP para acessar os quaternions
  6. Se você tem o vpython instalado no PC, outro exemplo interessante de de cliente é o quaternionVpython.py

Update: um estudante me enviou este misterioso vídeo:

Leave a Reply

Your email address will not be published. Required fields are marked *