quarta-feira, 22 de março de 2017

Missão primária: Detetar a presença de tripulação no módulo Columbus

No desafio Astro Pi, são propostas duas missões: uma primária, sugerida pela ESA, e uma secundária, proposta pela própria equipa.

A missão primária para o Astro Pi Challenge 2017 foi encontrar uma forma de detetar a presença de tripulação no módulo Columbus. As equipas foram ainda informadas que:
  • O recurso à matriz de LED era obrigatório;
  • Os dados teriam de ser guardados em ficheiro para posterior análise na Terra;
  • O código teria de ser escrito em Python 3.4 ou 2.7;
  • O tempo de execução de ambas as missões (primária e secundária) não podia exceder as 3 horas;
  • Não seria possível a interação entre os astronautas e o Astro Pi  (através do joystick, por exemplo):
  • O recurso às câmaras disponibilizadas no kit Astro Pi não seria permitido;
  • O Astro Pi não podia ser movido dentro da ISS.

E pronto...com tanto constrangimento, a questão complicou-se.

Não sabemos se foi intenção da ESA, mas esta foi uma missão, do nosso ponto de vista, bastante difícil de resolver. Ainda mais se as câmaras não podiam ser usadas. Tirando as câmaras da equação, restam-nos os sensores que temos no Astro Pi para resolver este problema. Analisando o documento Astro Pi flight data analysis, torna-se evidente que os melhores indicadores para detetar a presença de tripulantes no módulo Columbus são o aumento de temperatura (porque os corpos irradiam calor), e de humidade (devido à respiração e transpiração).

Os primeiros ensaios com o sense HAT demonstraram que a monitorização da temperatura seria pouco eficiente uma vez que o calor emitido pelo processador é detetado pelos sensores do sense HAT, não permitindo uma medida correta nem da temperatura ambiente, nem de uma eventual pequena alteração desse valor.

Concentrámo-nos por isso na medida da humidade relativa. O documento referido atrás, faz uma breve análise da variação da humidade ao longo de 24h, indicando, nesse intervalo de tempo, três episódios de entrada/saída de tripulação:

A análise parece-nos pouca. O que aconteceu às 18h30? E porque é que a humidade começa a aumentar a partir das 23h? Mas enfim, é o que temos...

A ESA disponibiliza ainda um ficheiro com a temperatura registada das referidas 24h. Apesar de ser possível verificar maior flutuação nas temperaturas enquanto há tripulação a trabalhar na Columbus, essas flutuações são inferiores a 1ºC. É a própria ESA que considera que a temperatura é uma variável menos fiável que a humidade para detetar presença de tripulação no módulo Columbus.


Passámos então à análise do ficheiro csv disponibilizado pela Fundação Raspberry Pi com duas semana de leituras realizadas no módulo Columbus e que pode ser descarregado a partir do documento supra citado. A evolução da humidade ao longo dessas duas semanas pode ser representada graficamente:


E o que podemos concluir? Sem termos a indicação concreta de entrada e saída de tripulantes, muito pouco...ainda assim, e porque temos de seguir uma estratégia, podemos avançar para a hipótese de que um aumento sustentado da humidade significa a presença de tripulação no módulo Columbus, e que uma diminuição sustentada da humidade significa que a Columbus está sem tripulação.

O termo "sustentada" usado no parágrafo anterior é crucial para o coração do programa e foi a razão pela seleção do nosso programa para correr a bordo da ISS.

Na verdade, chegados a este ponto, percebemos que as flutuações da humidade são tantas que seria impossível decidir a entrada / saída de tripulação a partir da comparação de pontos próximos ou através de simples médias aritméticas e chegámos a um verdadeiro impasse no trabalho...pelo que tivemos de pedir ajuda!

No início do nosso projeto, cientes que a nossa maior fragilidade era a programação, pedimos ao Eng. Nuno Nunes, programador na Densare Lda., que apadrinhasse a nossa equipa. Para nos ajudar na programação, esteve presente numa sessão inicial do desafio Astro Pi e criou um fórum para esclarecer dúvidas que nos surgissem. Quando a questão sobre como, a partir dos dados da humidade, interpretar um "aumento sustentado" e uma "diminuição sustentada" dos valores surgiu, justificou-se nova reunião presencial. A solução passava por usar médias móveis exponenciais, uma ferramenta vulgarmente usada em aplicações financeiras, para decidir a compra ou a venda de ações. A média móvel exponencial difere da média aritmética na medida em que os resultados mais recentes possuem um maior peso que os resultados mais antigos. Possui também a vantagem de apenas necessitarmos do resultado anterior e não de todos os resultados de todos os períodos.

O Eng. Nuno Nunes a explicar-nos o conceito de "média móvel exponencial"

Tentando explicar de forma simples: A ideia é comparar uma média de valores em que o peso do últimos valores é maior (rápida) com outra em que os valores mais antigos são mais levados em conta (lenta). Quando a média rápida ultrapassa a lenta por determinado valor (usámos 1%), assumimos que existe tripulação no módulo - e aparece a indicação "I" (In) a verde na matriz de LED; quando a média rápida fica abaixo da média lenta, assumimos que não existem tripulantes no módulo - e surge a indicação "O" (Out) na matriz de LED.

Matematicamente:Vm = Vma + A * ( Vr – Vma )

Vm - Valor médio actual
Vma - Valor médio anterior (do último período)
A -Índice calculado por meio da fórmula A = 2 / (NPeriodos + 1)
Vr - Último valor real obtido
NPeriodos- Número de períodos para fazer a média

A expressão apresentada serve para o cálculo da média lenta para o cálculo da média rápida. A diferença entre as duas está na constante NPeriodo. Quanto maior for esse valor, menor será o valor A e maior será a influência dos valores anteriores (média lenta); por outro lado, valores baixos de Nperiodos resultarão em valores elevados de A e os valores mais recentes terão mais peso (média rápida). O que fizemos foi experimentar vários valores de NPeriodo e aplicar a fórmula aos valores da humidade de duas semanas fornecidos pela ESA e perceber quais os que melhor se adequavam ao algoritmo que tínhamos criado - quais os que resultavam em indicações de entrada e saída com mais lógica. No nosso programa em concreto usámos como valor de NPeriodos 5 e 250 para a média rápida e para a média lenta, respetivamente.

A nossa pesquisa alertou-nos para o facto de, com um intervalo de cerca de 6 semanas, ser necessário substituir uma peça do permutador de calor da ISS, responsável por manter a temperatura no seu interior. Quando tal substituição é realizada, a temperatura diminui o suficiente para que tal variação seja detetável pelo Astro Pi. Como a humidade relativa está relacionada com a temperatura ambiente, esta diminuição de temperatura resultará num aumento de humidade relativa. No documento sobre análise de dados do Astro Pi, esse acontecimento é ilustrado graficamente:



Ora em situação normal, o nosso programa interpretaria uma subida tão significativa da humidade como a entrada de tripulação. Para evitarmos esse bug, a par com a humidade, medidos a temperatura. Recorremos também à média móvel exponencial. Caso a média rápida da temperatura fosse inferior a 2ºC à média lenta, assumimos que o permutador de calor da ISS estava a ser sujeito a manutenção, indicando esse facto com um "M" (Maintenance) amarelo na matriz de LED.



quinta-feira, 16 de março de 2017

O nosso código a caminho do espaço!

Foi ontem, já ao final da tarde, que recebemos um email super simpático da secção de educação da ESA a informar-nos que...a nossa missão primária foi selecionada para ser implementada a bordo da ISS!!!

Ter o nosso código analisado e escolhido por uma equipa da ESA e da Fundação Raspberry Pi é uma vitória gigantesca para nós. Este é um projeto extremamente rico - a programação em Python é uma ferramenta importante, mas a oportunidade que nos é dada de lidar com dados recolhidos no espaço, de organizar informação, de estabelecer relações entre variáveis físicas, de pensar "out the box" (i.e., fora do planeta Terra)...essa oportunidade é que é inestimável para pensar Ciência e desenvolver a capacidade de resolução de problemas.

Aqui no blog estamos a tentar encontrar algum tempo de qualidade para descrever a nossa estratégia de resolução da missão primária e da missão secundária a que nos propusemos. Pode tardar um pouco, mas contamos fazê-lo!

Os dados recolhidos na ISS serão disponibilizados a partir de 15 de maio. 

Parabéns, equipa!


segunda-feira, 13 de março de 2017

Tornando o Astro Pi autónomo

No desenvolvimento do desafio Astro Pi nunca foi necessário usar o Astro Pi de forma autónoma. O desafio Astro Pi, no entanto, não se esgota em si mesmo. O material que nos foi fornecido pode e deve continuar a ser explorado em atividades de sala de aula e de outros projetos em que a escola esteja envolvida.

O facto de tornarmos o Astro Pi autónomo e portátil, alimentado por um power bank, permite-nos usá-lo em qualquer ambiente. Podemos querer averiguar os valores de um ou mais sensores em tempo real, fazendo aparecer esses valores na matriz de LED, ou podemos criar um ficheiro csv que analisaremos mais tarde.

Foi na ação de formação promovida pela Ciência Viva ASTRO PI - Aprender a programar um raspberry pi que aprendemos a tornar autónomo um raspberry pi. A ação, para professores, foi ministrada pelo colega César Marques que nos explicou os passos a seguir para que um Astro Pi inicie um programa específico ao ser ligado a um power bank (ou outra fonte de alimentação, claro).

O objetivo é alterar o ficheiro rc.local que se encontra na diretoria /etc do raspberry pi. Por defeito este ficheiro está apenas a escrever o IP do computador no ecrã, ao iniciar; no entanto, é possível alterá-lo para que, no momento em que inicia, o raspberry execute determinado programa ou função.

Para proceder à alteração deste ficheiro, há que:


Depois disto, é aberta uma janela com o ficheiro rc.local que é possível editar. O último comando do ficheiro é "exit 0" e não podemos introduzir novos comando a seguir a esse.

Assim, para que o raspberry pi execute a aplicação que pretendemos no momento em que é ligado, devemos acrescentar, antes da linha "exit 0" os comandos seguintes:

             cd /home/pi         # Muda para o diretório onde se encontra a aplicação (este exemplo assume que o programa está em                                                       #/home/pi)

             su pi -c “python3 NomeDoFicheiro.py” &     # o “&” faz com que o programa não bloqueie   a inicialização normal do
                                                                                    # raspberry pi 

E pronto! Agora podemos levar o Astro Pi para onde quisermos e fazer correr os programas que tenhamos criado. Podemos colocá-lo num carrinho e medir a aceleração durante uma descida, podemos deixá-lo à noite no exterior e verificar a variação da temperatura, podemos levá-lo connosco numa caminhada pela serra e verificar a variação da pressão...ideias não faltam!

Caso se pretenda que a inicialização do raspberry pi volte a ser a vulgar, aquela que acontece por defeito, há que voltar a aceder ao ficheiro rc.local da forma indicada anteriormente e apagar ou comentar os comando inseridos.

O Astro Pi a funcionar de forma autónoma

segunda-feira, 27 de fevereiro de 2017

Análise de dados do módulo Columbus

Uma das dificuldades do desafio Astro Pi é o facto de não podermos testar os programas na Terra, por ser impossível o recriar das condições da ISS.

Em alternativa, a Fundação Raspberry Pi disponibiliza um documento de análise de dados recolhidos na ISS de leitura "obrigatória" para as equipas que concorrem ao Astro PI: Astro Pi Flight Analysis.

Neste documento são analisados e interpretados dados reais, recolhidos pelos Astro Pi que estão na ISS, o que é fundamental para perceber que tipo de resultados podemos esperar e para conhecer vários fenómenos que ocorrem na ISS e que podem ser reconhecidos através dos valores medidos pelos sensores do sense HAT. Portanto, é um documento para ler do início ao final sem falta.

A partir do referido documento, é possível descarregar três ficheiros csv com dados obtidos pelos sensores do sense HAT, dois de duas semanas - um com dados recolhidos no módulo Columbus e outro no Node 2 da ISS - e um de 4 semanas recolhido no módulo Columbus.

Aquele que usámos para estudar os dados obtidos foi o de duas semanas recolhido no módulo Columbus ( e duas semanas de dados recolhidos de 10 em 10 segundos, são mesmo muitos dados...). A vantagem dos ficheiros csv é que podem ser convertidos para uma folha de cálculo, como o Excel, por exemplo, ferramenta que a maioria dos alunos domina.

E o que encontramos quando consultamos os dados numa folha de cálculo?...


...encontramos 65535 linhas com a medida da temperatura do CPU, a temperatura medida a partir do sensor de humidade, a temperatura medida a partir do sensor de pressão (parece-me que estes dois valores estão trocados...), o valor da humidade, pressão, os ângulos pitch, roll e yaw medidos pelo giroscópio, o campo magnético segundo os eixos x, y, z medido pelo magnetómetro, o valor da aceleração em três eixos recolhido pelo acelerómetro, o valor medido pelo giroscópio apresentado segundo os três eixos e ainda a data e hora da medida...ufa! Tudo o que o sense HAT pode medir, em suma.

A análise destes dados permite-nos ter uma ideia sobre o que esperar das medidas dos sensores disponíveis e dá-nos pistas importantes sobre o que será possível medir e inferir a partir delas.

Temperatura

Façamos o gráfico da temperatura do CPU e a temperatura medida pelos dois sensores disponíveis (todos os valores em ºC):

O que concluímos?

  1. Como seria de esperar a temperatura do processador vai influenciar a leitura da temperatura nos dois sensores disponíveis no sense HAT, sendo a sua influência mais significativa no sensor mais próximo do processador - e aqui a informação de qual o sensor mais próximo é contraditória com a nossa pesquisa anterior;
  2. As oscilações da medição da temperatura, em qualquer um dos dois sensores, estão contidas entre valores máximos e mínimos que distam entre si de 2ºC;
  3. Aparentemente, as oscilações medidas acompanham as oscilações da temperatura do CPU - seria preciso uma acentuada alteração da temperatura ambiente para que fosse detetada pelo sense HAT.
Humidade

O valor da humidade, que é a humidade relativa do ar em %, apresenta-se com a seguinte distribuição:

Evidências:
  1. As oscilações da humidade entre valores consecutivos são tais que não é possível criar tendência com comparações de valores muito próximos;
  2. Como a humidade relativa depende da temperatura, variações da temperatura vão resultar em variações da humidade (o que é até possível observar se cruzarmos os dois gráficos).
Pressão

O valor da pressão, medido em milibar (mbar) é descrito pelo gráfico seguinte:

Por razão nenhuma em especial, ao longo deste trabalho a equipa Labutes Pi não investigou a pressão a bordo da ISS. Talvez porque não a tenha incluído nas suas missões. A análise deste gráfico, no entanto, poderia ser interessante. A que se deverão as subidas de pressão indicadas? A análise de dados feita pela Fundação Raspberry Pi refere a existência de re-pressurização de O2 que deve acontecer no espaço de poucos meses. Esta re-pressurização deve durar uma ou duas horas, terá como consequência um aumento de pressão. Não sabemos se um fenómeno dessa natureza poderá justificar os evidentes aumentos de pressão observados. Esperamos que outra equipa se tenha debruçado sobre o problema e tenha mais informação para partilhar...

Valores registados pelo IMU:

Giroscópio

Os dados obtidos pelo giroscópio foram a inspiração para a nossa missão secundária. Refletiremos sobre eles quando explicarmos a nossa missão secundária.

Magnetómetro



...UAU! Ainda bem que não nos metemos por esse caminho!!! Só para reforçar a ideia: os valores indicados no gráfico vêm em microTesla - na superfície terrestre, os valores do campo magnético situam-se entre os 30 e os 60 microTesla, como se compreendem valores de perto de 80 microTesla na ISS? Quando estudámos o magnetómetro apercebemo-nos da necessidade de calibrar o Astro Pi, estará o Astro Pi da ISS calibrado? Investigação possível: o facto dos valores do campo magnético serem periódicos poderá estar relacionado com o movimento da ISS em torno da Terra? O aumento registado no eixo dos y terá algum significado físico? 

Acelerómetro

Tínhamos já estudado o acelerómetro e os dados não nos surpreenderam. Fizemos o módulo do vetor aceleração:

O acelerómetro, que mede a aceleração em g, sendo 1g aproximadamente igual a 9,8 m/s^2, mede a aceleração própria, isto é, a aceleração do corpo relativamente a um corpo em queda livre. Como a ISS está de facto em queda livre, o valor da aceleração registada aproxima-se de zero ao longo das duas semanas:


Um gráfico tão certinho que tivemos que incluir a aceleração na nossa missão secundária (de que falaremos em post posterior...).

Analisar dados obtidos a 350 km da superfície terrestre...isto é que é Ciência para todos!


terça-feira, 31 de janeiro de 2017

Sense HAT - O magnetómetro

Um magnetómetro é um sensor usado para medir a a força e a direção de um campo magnético. É vulgarmente usado para determinar o norte geográfico (como uma bússola). O valor do campo magnético da Terra depende de local para local, sendo que os valores típicos à superfície terrestre se situam entre os 30µT e os 60µTÉ possível também usar um magnetómetro para detetar perturbações do campo magnético da Terra causadas pela presença de corpos magnéticos e metálicos (os scanners dos aeroportos usam-nos para detetar peças metálicas, por exemplo).

Tal como já tínhamos referido em posts anteriores, o Sense HAT tem um magnetómetro instalado no seu sensor de movimento, o IMU. Os dados que podemos recolher deste magnetómetro podem ser:
  1. O ângulo relativamente ao eixo yaw (ver post sobre giroscópio) que indica a direção do norte magnético;
  2. A intensidade e a direção do campo magnético segundo os eixos X, Y e Z em microteslas (µT).

De acordo com a documentação da API do Sense HAT, são estes os comandos que temos disponíveis para tirar partido do magnetómetro:

get_compass: Desativa o giroscópio e o acelerómetro e devolve a direção do norte geográfico em graus

from sense_hat import SenseHat

sense = SenseHat()
north = sense.get_compass()
print("North: %s" % north)

# alternatives
print(sense.compass)


get_compass_raw: Devolve a direção do campo magnético segundo os eixos X, Y e Z, assim como a intensidade do campo magnético em microteslas (µT)

from sense_hat import SenseHat

sense = SenseHat()
raw = sense.get_compass_raw()
print("x: {x}, y: {y}, z: {z}".format(**raw))

# alternatives
print(sense.compass_raw)
Recorrendo de novo à data sheet do IMU do Astro Pi, são os seguintes os eixos definidos para o magnetómetro:
Se atentarmos à posição do IMU no Sense HAT, podemos indicar os eixos relativamente à placa:
Para testar o magnetómetro, fizemos o seguinte programa..

...e os valores obtidos foram desastrosos!!! Campo magnético orientado na vertical, valores perto de 10µT...

Tornou-se clara a necessidade de calibração do magnetómetro. 

De acordo com o artigo Simple and Effective Magnetometer Calibration , a maioria dos magnetómetros raramente vem calibrada na altura da compra. Há razões para isso - mesmo que calibrados de fábrica, o processo de soldadura dos magnetómetros na placa de circuito impresso pode resultar facilmente na descalibração do aparelho; o processo de calibração na pós-montagem da placa elevaria os custos de venda.

O processo de calibração do Sense HAT está bem documentado no site do Raspberry Pi e basta seguir as instruções passo-a-passo. Falta saber se o Astro Pi que se encontra na ISS foi ele próprio sujeito a uma calibração prévia.

Depois de termos calibrado o nosso magnetómetro, os valores passaram a fazer muito mais sentido, com o campo magnético a ser detetado maioritariamente no plano (X-Y) - o Astro Pi estava em repouso sobre uma mesa - e a adquirir valores próximos dos 45µT. Por compreender ficou o valor obtido pela função get_compass que devolve um ângulo aproximadamente constante e que pouco varia quando rodamos a placa - esse ângulo está a ser medido relativamente a que referência? 

Uma observação evidente foi que qualquer pequeno íman perturba o campo magnético local, sendo que o magnetómetro é sensível à aproximação do monitor do computador, por exemplo. Sabendo que a Columbus está repleta de equipamento eletrónico, fica a questão sobre se será possível adquirir, através de um Astro Pi instalado na ISS, o valor do campo magnético terrestre com algum rigor. 


segunda-feira, 30 de janeiro de 2017

Sense HAT - O acelerómetro

Tal como indicámos em artigo anterior, o Sense HAT tem incluído um IMU que comporta um acelerómetro.

Há que compreender o que é medido pelo acelerómetro. Em primeiro lugar, o acelerómetro do Astro Pi  é um acelerómetro 3D, isto é, apresenta o valor da aceleração relativamente a 3 eixos: X, Y e Z. De acordo com a data sheet do IMU LSM9DS1, o que encontramos no Sense HAT, a direção de cada um dos eixos é a seguinte:

Se atentarmos à posição do IMU no Sense HAT, podemos indicar os eixos relativamente à placa:

Nem sempre é fácil interpretar os valores obtidos a partir de um acelerómetro. Isto porque um acelerómetro mede aceleração própria, isto é, a aceleração é medida em relação a outro sistema em queda livre. Matematicamente, isto é o mesmo que dizer que o acelerómetro mede não o valor da aceleração, a, mas outra grandeza, a', dada por:


Por isso, caso deixemos o acelerómetro em repouso numa mesa, com a face superior virada para cima, ele medirá:


Como o eixo Z do IMU usado tem o sentido de baixo para cima, contrário à direção da aceleração gravítica, o valor medido será positivo e igual ao valor da aceleração gravítica.

Caso o corpo se encontre em queda livre, sem rotação, o valor registado pelo acelerómetro será:


Mais sobre este assunto pode ser encontrado nos seguintes artigos: Experimentos com Acelerômetro de Tablets e Smartphones e Um passeio sobre a noção de aceleração.

Quanto à unidade da aceleração, no Sistema Internacional, é m/s2. No entanto, é possível também usar a unidade g que corresponde à aceleração devida à força gravítica da Terra sobre os corpos na superfície terrestre. 1 g corresponde ao valor 9,806 m/s2. Será esta a unidade de medida do acelerómetro do Sense HAT.

De acordo com a documentação da API do Sense HAT, são estes os comandos que temos disponíveis para tirar partido do acelerómetro:

get_accelerometer: Desativa o magentómetro e o giroscópio e obtém a orientação apenas através do acelerómetro. Os calores obtidos corresponderão a ângulos de orientação relativamente aos eixos pitch, roll e yaw.

from sense_hat import SenseHat

sense = SenseHat()
accel_only = sense.get_accelerometer()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**accel_only))

# alternatives
print(sense.accel)
print(sense.accelerometer)


get_accelerometer_raw: Devolve o valor da aceleração (em g) segundo os eixos X, Y e Z.

from sense_hat import SenseHat

sense = SenseHat()
raw = sense.get_accelerometer_raw()
print("x: {x}, y: {y}, z: {z}".format(**raw))

# alternatives
print(sense.accel_raw)
print(sense.accelerometer_raw)

Façamos um programa muito simples:


Observando os valores obtidos e, de acordo com o que estudámos, podemos já responder às seguintes questões:
  1. Porque é que, em repouso sobre uma mesa, o valor da aceleração segundo o eixo Z indicado pelo acelerómetro é positivo (indicando para cima) e não negativo (indicando para baixo)?
  2. Porque é que, em repouso na ISS, o acelerómetro indica geralmente valores próximo de zero em todos os eixos?
Apesar do valor lido pelo acelerómetro num Astro Pi em repouso na ISS ser geralmente próximo de zero, há uma situação em que tal não acontece. Na verdade, mesmo nas altitudes a que a ISS gravita existe sempre alguma atmosfera, responsável por uma pequena mas contínua perda de altura. Por isso, uma ou duas vezes por mês, a ISS está sujeita a um "reboost", uma correção de órbita. Esta alteração do movimento deve ser possível de identificar com o acelerómetro do Astro Pi. Este assunto está bastante bem explicado no documento Astro Pi Worksheet

Ainda sobre a aceleração na ISS, vale a pena ver o vídeo realizado pelo Comandante Jeff Williams:



Sense HAT - O giroscópio

O giroscópio é um sensor que usa a força gravítica para indicar qual a posição de um objeto  no espaço. É o sensor que permite identificar se rodamos um smartphone sobre o seu eixo para apresentar a imagem na vertical ou na horizontal, por exemplo.

O Astro Pi tem um giroscópio inserido num sensor de movimento: o IMU (Inertial Measurement Unit) ST LSM9DS1 (ver data sheet). Neste sensor estão contidos 3 sensores diferentes:
  • Um acelerómetro 3D que pode ser usado para detetar  se a ISS foi sujeita a um impulso para retificar a sua órbita;
  • Um giroscópio 3D, que devolve a orientação do Astro Pi (e, consequentemente, da própria ISS);
  • Um magnetómetro 3D que pode ser usado como uma bússola e encontrar a direção do Norte.


Antes de mais, há que representar a orientação de um objeto. Tal é feito através de 3 eixos em torno dos quais o objeto pode rodar. Se soubermos qual o grau de rotação relativamente a cada um desses eixos, podemos saber para onde está esse objeto a apontar.

Os eixos usados para determinar a orientação são, usando a nomenclatura inglesa, os seguintes:

  • Pitch (o ângulo que um avião faz relativamente ao chão quando descola);
  •  Roll (o movimento de um parafuso a enroscar numa parede vertical);

  • Yaw (o movimento de um peão num chão).

Este vídeo ilustra a variação destes três eixos tomando como exemplo um avião.

Apliquemos agora o que aprendemos à placa do Sense HAT:
O guia que estamos a explorar disponibiliza uma aplicação para melhor compreender o conceito de orientação. Para a usar, precisamos de ter o nosso Raspeberry Pi ligado à internet, de forma a poder fazer o download do software. Depois, há que inserir na janela Terminal os seguintes comandos:
sudo apt-get install python3-pip
sudo pip-3.2 install pi3d
git clone git://github.com/astro-pi/apollo-soyuz
cd apollo-soyuz
sudo ./soyuz.py
E...UAU!!! Eis que no monitor aparece a imagem 3D do módulo Apollo Soyuz  (usado nos anos 70 para transportar astronautas até à superfície da lua) cuja orientação definimos através da orientação do nosso próprio Astro Pi, que alteramos com a mão a nosso bel-prazer! Muito parecida com a experiência de controlarmos a posição de um objeto no ecrã da televisão através do comando de uma consola de jogos! Para sair da aplicação, basta usar a tecla ESC do teclado.
De acordo com a documentação da API do Sense HAT, são estes os comandos que temos disponíveis para tirar partido do giroscópio:
set_imu_config: Ativa e desativa o giroscópio, acelerómtero e/ou magnetómetro
from sense_hat import SenseHat

sense = SenseHat()
sense.set_imu_config(False, True, False)  # gyroscope only


get_gyroscope: Chama a função set_imu_config para desativar o magnetómetro e o acelerómetro


from sense_hat import SenseHat

sense = SenseHat()
gyro_only = sense.get_gyroscope()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**gyro_only))

# alternatives
print(sense.gyro)
print(sense.gyroscope)

get_orientation_radians: Devolve a orientação em radianos de acordo com os eixos pitch, roll e yaw.

from sense_hat import SenseHat

sense = SenseHat()
orientation_rad = sense.get_orientation_radians()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation_rad))

# alternatives
print(sense.orientation_radians)

get_orientation_degrees: Devolve a orientação em radianos de acordo com os eixos pitch, roll e yaw.

from sense_hat import SenseHat

sense = SenseHat()
orientation = sense.get_orientation_degrees()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))

get_orientation: Chama a função get_orientation_degrees

from sense_hat import SenseHat

sense = SenseHat()
orientation = sense.get_orientation()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))

# alternatives
print(sense.orientation)


get_gyroscope_raw: Devolve a os valores x, y e z que representam a intensidade da rotação em radianos por segundo.

from sense_hat import SenseHat

sense = SenseHat()
raw = sense.get_gyroscope_raw()
print("x: {x}, y: {y}, z: {z}".format(**raw))

# alternatives
print(sense.gyro_raw)
print(sense.gyroscope_raw)
Vamos então experimentar...
Comecemos por fazer o seguinte pequeno programa:
No monitor, o programa devolve os seguintes dados:
É geralmente interessante poder trabalhar com cada um dos eixos separadamente; o número de
casas decimais também pode ser ajustado de forma a tornar a leitura mais clara:
Finalmente, é altura de fazer uma medida contínua da orientação do Astro Pi à medida que o
orientamos no espaço com a nossa mão:
Faz vários movimentos com o Astro Pi e observa os valores dos ângulos para cada um dos eixos.
Como esperas que variem cada um desses ângulos quando o Astro Pi estiver em repouso
relativamente à ISS que orbita a Terra?