23
3.2. Eixo Motorizado
Casa do Código
Figura 3.2: Visão do Kinect
As informações ligadas ao eixo motorizado são disponibilizadas no SDK de
forma bastante simples.
Existem três propriedades na classe KinectSensor:
ElevationAngle,
MaxElevationAngle e MinElevationAngle. As duas últimas citadas possuem
o valor fixo de 27 e -27 respectivamente. A propriedade ElevationAngle possui
o valor igual ao valor da altura do ângulo de elevação do eixo motorizado. Nós já a utilizamos nos exercícios anteriores e você viu o quanto é simples alterar ou obter este valor.
problema com o ElevationAngle
Caso uma segunda alteração na propriedade ElevationAngle seja feita
sem que a primeira tenha sido finalizada é lançada uma exceção na apli-
cação.
24
Casa do Código
Capítulo
3. Acelerômetro e Eixo Motorizado
Aplicação
Construiremos outra aplicação WPF, então você deve fazer os passos já conhe-
cidos para a criação do projeto, incluindo a inclusão e chamada para a inicialização do sensor descrita em 2.1. Nesta aplicação iremos construir um componente que
nos permitirá alterar o valor do ângulo de elevação do eixo motorizado pela própria interface!
Como na aplicação anterior também utilizaremos o componente de layout
Grid, dessa vez precisamos apenas de duas colunas, sendo que a segunda irá ocupar o dobro de espaço da primeira. Para fazer isso, utilize o caractere de proporção ( * ).
Na primeira coluna da janela inserimos um componente Slider, que irá se encar-
regar de alterar a propriedade ElevationAngle e na outra coluna vamos inserir
um componente Label para mostrar o valor do ângulo de elevação do Kinect.
É importante lembrar que precisamos inserir como valor máximo e mínimo
do Slider 27 e -27 respectivamente, pois este é o valor limite do ângulo de ele-vação. Por opção irei inicializar a propriedade Value do Slider com o valor 0,
ou seja, com o Kinect centralizado. Através do XAML, também podemos interpre-
tar os eventos dos componentes: como teremos que atualizar o valor da propriedade ElevationAngle toda vez que o Slider tiver seu valor alterado, temos que interpretar o evento Thumb.DragCompleted, que será chamado toda vez que o usuário
interagir com o componente.
Também precisamos preencher a propriedade Name dos dois componentes, pois
iremos utilizá-los no código C# da janela. Após as configurações de layout feitas o código da janela deve estar semelhante ao código a seguir.
<Window x:Class="EixoMotorizado.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="230" Width="180">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Slider Name="slider" Margin="10,0" Height="150"
HorizontalAlignment="Left" VerticalAlignment="Center"
Orientation="Vertical" Minimum="-27" Maximum="27"
25
3.2. Eixo Motorizado
Casa do Código
Value="0" Grid.Column="0"
Thumb.DragCompleted="slider_DragCompleted"/>
<Label Name="label" FontSize="64"
FontFamily="Segoe UI Light"
HorizontalAlignment="Center" VerticalAlignment="Center"
Content="0" Grid.Column="1" />
</Grid>
</Window>
Tendo a janela pronta, podemos partir para a implementação em C# desta apli-
cação. Criaremos um método dentro da nossa janela para atualizar os valores da
propriedade ElevationAngle do sensor e do texto exibido no label. Chamare-
mos este método de AtualizarValores e seu código deve ficar similar ao código
a seguir.
private void AtualizarValores()
{
kinect.ElevationAngle = Convert.ToInt32(slider.Value);
label.Content = kinect.ElevationAngle;
}
Simples, não é mesmo? Agora basta criar uma chamada para este método dentro
do método slider_DragCompleted e tudo já irá funcionar!
Figura 3.3: Aplicação EixoMotorizado
26
Capítulo 4
Fluxo de Cores
Nos três capítulos seguintes serão apresentadas as funcionalidades e processamentos que geram os fluxos (streams) que fazem parte da classe KinectSensor. Eles são: fluxo de cores ( ColorStream), fluxo de profundidade ( DepthStream) e fluxo de
esqueleto de usuário( SkeletonStream). Todos possuem algumas características
em comum e estão ligados a um ou mais sensores que envolvem seu processamento.
Ambos precisam ser ligados para que o Kinect comece a processá-los e possuem dois caminhos para se obter um quadro, ou utilizando um método para solicitar o último quadro já processado, ou através de um evento que é disparado cada vez que um novo quadro deste fluxo está pronto, ou seja, já completou sua etapa de processamento.
Além disso, podem ser acessados através do evento AllFramesReady, que possui
informações destes três tipos de fluxos.
O fluxograma de funcionamento de todos os fluxos supracitados é ilustrado pela
figura 4.1.
4.1. Formatos
Casa
do Código
Figura 4.1: Fluxograma de processamento
Neste capítulo vamos entender como funciona a câmera de cores do Kinect,
como utilizá-la para capturar fotos e vídeos, como tratar as imagens bit por bit e como aplicar estas funcionalidades em uma aplicação real.